summaryrefslogtreecommitdiff
path: root/net/sched/act_mpls.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2022-09-09 10:24:43 +0300
committerDavid S. Miller <davem@davemloft.net>2022-09-09 10:24:43 +0300
commit34df6a8a50aa72c4ac4fd65033a2798fc321adf8 (patch)
tree0d488fb3dfe110208028de199280cd09c9c91667 /net/sched/act_mpls.c
parentdd14043af7b86238a4dc3280acf635eb43ea9851 (diff)
parent6d13a65d2a674c1cf4e70863394c01e4d07372e8 (diff)
downloadlinux-34df6a8a50aa72c4ac4fd65033a2798fc321adf8.tar.xz
Merge branch 'tc_action_ops-refactor'
Zhengchao Shao says: ==================== net: refactor the walk and lookup hook functions in tc_action_ops The implementation logic of the walk/lookup hook function in each action module is the same. Therefore, the two functions can be reconstructed. When registering tc_action_ops of each action module, the corresponding net_id is saved to tc_action_ops. In this way, the net_id of the corresponding module can be directly obtained in act_api without executing the specific walk and lookup hook functions. Then, generic functions can be added to replace the walk and lookup hook functions of each action module. Last, modify each action module in alphabetical order. Reserve the walk and lookup interfaces and delete them when they are no longer used. This patchset has been tested by using TDC, and I will add selftest in other patchset. Last, thanks to Jamal Hadi Salim and Cong Wang for their advice. --- v3: remove hole from the structure tc_action_ops v2: save the net_id of each TC action module to the tc_action_ops structure ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sched/act_mpls.c')
-rw-r--r--net/sched/act_mpls.c28
1 files changed, 4 insertions, 24 deletions
diff --git a/net/sched/act_mpls.c b/net/sched/act_mpls.c
index adabeccb63e1..8ad25cc8ccd5 100644
--- a/net/sched/act_mpls.c
+++ b/net/sched/act_mpls.c
@@ -15,7 +15,6 @@
#include <net/pkt_cls.h>
#include <net/tc_act/tc_mpls.h>
-static unsigned int mpls_net_id;
static struct tc_action_ops act_mpls_ops;
#define ACT_MPLS_TTL_DEFAULT 255
@@ -155,7 +154,7 @@ static int tcf_mpls_init(struct net *net, struct nlattr *nla,
struct tcf_proto *tp, u32 flags,
struct netlink_ext_ack *extack)
{
- struct tc_action_net *tn = net_generic(net, mpls_net_id);
+ struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
bool bind = flags & TCA_ACT_FLAGS_BIND;
struct nlattr *tb[TCA_MPLS_MAX + 1];
struct tcf_chain *goto_ch = NULL;
@@ -367,23 +366,6 @@ nla_put_failure:
return -EMSGSIZE;
}
-static int tcf_mpls_walker(struct net *net, struct sk_buff *skb,
- struct netlink_callback *cb, int type,
- const struct tc_action_ops *ops,
- struct netlink_ext_ack *extack)
-{
- struct tc_action_net *tn = net_generic(net, mpls_net_id);
-
- return tcf_generic_walker(tn, skb, cb, type, ops, extack);
-}
-
-static int tcf_mpls_search(struct net *net, struct tc_action **a, u32 index)
-{
- struct tc_action_net *tn = net_generic(net, mpls_net_id);
-
- return tcf_idr_search(tn, a, index);
-}
-
static int tcf_mpls_offload_act_setup(struct tc_action *act, void *entry_data,
u32 *index_inc, bool bind,
struct netlink_ext_ack *extack)
@@ -451,28 +433,26 @@ static struct tc_action_ops act_mpls_ops = {
.dump = tcf_mpls_dump,
.init = tcf_mpls_init,
.cleanup = tcf_mpls_cleanup,
- .walk = tcf_mpls_walker,
- .lookup = tcf_mpls_search,
.offload_act_setup = tcf_mpls_offload_act_setup,
.size = sizeof(struct tcf_mpls),
};
static __net_init int mpls_init_net(struct net *net)
{
- struct tc_action_net *tn = net_generic(net, mpls_net_id);
+ struct tc_action_net *tn = net_generic(net, act_mpls_ops.net_id);
return tc_action_net_init(net, tn, &act_mpls_ops);
}
static void __net_exit mpls_exit_net(struct list_head *net_list)
{
- tc_action_net_exit(net_list, mpls_net_id);
+ tc_action_net_exit(net_list, act_mpls_ops.net_id);
}
static struct pernet_operations mpls_net_ops = {
.init = mpls_init_net,
.exit_batch = mpls_exit_net,
- .id = &mpls_net_id,
+ .id = &act_mpls_ops.net_id,
.size = sizeof(struct tc_action_net),
};