Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

netfilter: nf_tables_offload: refactor the nft_flow_offload_rule function

Pass rule, chain and flow_rule object parameters to nft_flow_offload_rule
to reuse it.

Signed-off-by: wenxu <wenxu@ucloud.cn>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>

authored by

wenxu and committed by
Pablo Neira Ayuso
e211aab7 8fc618c5

+13 -7
+13 -7
net/netfilter/nf_tables_offload.c
··· 155 155 return 0; 156 156 } 157 157 158 - static int nft_flow_offload_rule(struct nft_trans *trans, 158 + static int nft_flow_offload_rule(struct nft_chain *chain, 159 + struct nft_rule *rule, 160 + struct nft_flow_rule *flow, 159 161 enum flow_cls_command command) 160 162 { 161 - struct nft_flow_rule *flow = nft_trans_flow_rule(trans); 162 - struct nft_rule *rule = nft_trans_rule(trans); 163 163 struct flow_cls_offload cls_flow = {}; 164 164 struct nft_base_chain *basechain; 165 165 struct netlink_ext_ack extack; 166 166 __be16 proto = ETH_P_ALL; 167 167 168 - if (!nft_is_base_chain(trans->ctx.chain)) 168 + if (!nft_is_base_chain(chain)) 169 169 return -EOPNOTSUPP; 170 170 171 - basechain = nft_base_chain(trans->ctx.chain); 171 + basechain = nft_base_chain(chain); 172 172 173 173 if (flow) 174 174 proto = flow->proto; ··· 357 357 !(trans->ctx.flags & NLM_F_APPEND)) 358 358 return -EOPNOTSUPP; 359 359 360 - err = nft_flow_offload_rule(trans, FLOW_CLS_REPLACE); 360 + err = nft_flow_offload_rule(trans->ctx.chain, 361 + nft_trans_rule(trans), 362 + nft_trans_flow_rule(trans), 363 + FLOW_CLS_REPLACE); 361 364 nft_flow_rule_destroy(nft_trans_flow_rule(trans)); 362 365 break; 363 366 case NFT_MSG_DELRULE: 364 367 if (!(trans->ctx.chain->flags & NFT_CHAIN_HW_OFFLOAD)) 365 368 continue; 366 369 367 - err = nft_flow_offload_rule(trans, FLOW_CLS_DESTROY); 370 + err = nft_flow_offload_rule(trans->ctx.chain, 371 + nft_trans_rule(trans), 372 + nft_trans_flow_rule(trans), 373 + FLOW_CLS_DESTROY); 368 374 break; 369 375 } 370 376