@@ -155,30 +155,41 @@ int nft_chain_offload_priority(struct nft_base_chain *basechain)
155
155
return 0 ;
156
156
}
157
157
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
+
158
180
static int nft_flow_offload_rule (struct nft_chain * chain ,
159
181
struct nft_rule * rule ,
160
182
struct nft_flow_rule * flow ,
161
183
enum flow_cls_command command )
162
184
{
163
- struct flow_cls_offload cls_flow = {} ;
185
+ struct flow_cls_offload cls_flow ;
164
186
struct nft_base_chain * basechain ;
165
- struct netlink_ext_ack extack ;
166
- __be16 proto = ETH_P_ALL ;
167
187
168
188
if (!nft_is_base_chain (chain ))
169
189
return - EOPNOTSUPP ;
170
190
171
191
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 );
182
193
183
194
return nft_setup_cb_call (TC_SETUP_CLSFLOWER , & cls_flow ,
184
195
& basechain -> flow_block .cb_list );
0 commit comments