@@ -155,30 +155,41 @@ int nft_chain_offload_priority(struct nft_base_chain *basechain)
155155 return 0 ;
156156}
157157
158+ static void nft_flow_cls_offload_setup (struct flow_cls_offload * cls_flow ,
159+ const struct nft_base_chain * basechain ,
160+ const struct nft_rule * rule ,
161+ const struct nft_flow_rule * flow ,
162+ enum flow_cls_command command )
163+ {
164+ struct netlink_ext_ack extack ;
165+ __be16 proto = ETH_P_ALL ;
166+
167+ memset (cls_flow , 0 , sizeof (* cls_flow ));
168+
169+ if (flow )
170+ proto = flow -> proto ;
171+
172+ nft_flow_offload_common_init (& cls_flow -> common , proto ,
173+ basechain -> ops .priority , & extack );
174+ cls_flow -> command = command ;
175+ cls_flow -> cookie = (unsigned long ) rule ;
176+ if (flow )
177+ cls_flow -> rule = flow -> rule ;
178+ }
179+
158180static int nft_flow_offload_rule (struct nft_chain * chain ,
159181 struct nft_rule * rule ,
160182 struct nft_flow_rule * flow ,
161183 enum flow_cls_command command )
162184{
163- struct flow_cls_offload cls_flow = {} ;
185+ struct flow_cls_offload cls_flow ;
164186 struct nft_base_chain * basechain ;
165- struct netlink_ext_ack extack ;
166- __be16 proto = ETH_P_ALL ;
167187
168188 if (!nft_is_base_chain (chain ))
169189 return - EOPNOTSUPP ;
170190
171191 basechain = nft_base_chain (chain );
172-
173- if (flow )
174- proto = flow -> proto ;
175-
176- nft_flow_offload_common_init (& cls_flow .common , proto ,
177- basechain -> ops .priority , & extack );
178- cls_flow .command = command ;
179- cls_flow .cookie = (unsigned long ) rule ;
180- if (flow )
181- cls_flow .rule = flow -> rule ;
192+ nft_flow_cls_offload_setup (& cls_flow , basechain , rule , flow , command );
182193
183194 return nft_setup_cb_call (TC_SETUP_CLSFLOWER , & cls_flow ,
184195 & basechain -> flow_block .cb_list );
0 commit comments