Skip to content

Commit 50f2db9

Browse files
committed
netfilter: nfnetlink: consolidate callback types
Add enum nfnl_callback_type to identify the callback type to provide one single callback. Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 7dab8ee commit 50f2db9

File tree

12 files changed

+271
-124
lines changed

12 files changed

+271
-124
lines changed

include/linux/netfilter/nfnetlink.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,19 @@ struct nfnl_info {
1414
struct netlink_ext_ack *extack;
1515
};
1616

17+
enum nfnl_callback_type {
18+
NFNL_CB_UNSPEC = 0,
19+
NFNL_CB_MUTEX,
20+
NFNL_CB_RCU,
21+
NFNL_CB_BATCH,
22+
};
23+
1724
struct nfnl_callback {
1825
int (*call)(struct sk_buff *skb, const struct nfnl_info *info,
1926
const struct nlattr * const cda[]);
20-
int (*call_rcu)(struct sk_buff *skb, const struct nfnl_info *info,
21-
const struct nlattr * const cda[]);
22-
int (*call_batch)(struct sk_buff *skb, const struct nfnl_info *info,
23-
const struct nlattr * const cda[]);
24-
const struct nla_policy *policy; /* netlink attribute policy */
25-
const u_int16_t attr_count; /* number of nlattr's */
27+
const struct nla_policy *policy;
28+
enum nfnl_callback_type type;
29+
__u16 attr_count;
2630
};
2731

2832
enum nfnl_abort_action {

net/netfilter/ipset/ip_set_core.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2108,80 +2108,96 @@ static int ip_set_byindex(struct sk_buff *skb, const struct nfnl_info *info,
21082108
static const struct nfnl_callback ip_set_netlink_subsys_cb[IPSET_MSG_MAX] = {
21092109
[IPSET_CMD_NONE] = {
21102110
.call = ip_set_none,
2111+
.type = NFNL_CB_MUTEX,
21112112
.attr_count = IPSET_ATTR_CMD_MAX,
21122113
},
21132114
[IPSET_CMD_CREATE] = {
21142115
.call = ip_set_create,
2116+
.type = NFNL_CB_MUTEX,
21152117
.attr_count = IPSET_ATTR_CMD_MAX,
21162118
.policy = ip_set_create_policy,
21172119
},
21182120
[IPSET_CMD_DESTROY] = {
21192121
.call = ip_set_destroy,
2122+
.type = NFNL_CB_MUTEX,
21202123
.attr_count = IPSET_ATTR_CMD_MAX,
21212124
.policy = ip_set_setname_policy,
21222125
},
21232126
[IPSET_CMD_FLUSH] = {
21242127
.call = ip_set_flush,
2128+
.type = NFNL_CB_MUTEX,
21252129
.attr_count = IPSET_ATTR_CMD_MAX,
21262130
.policy = ip_set_setname_policy,
21272131
},
21282132
[IPSET_CMD_RENAME] = {
21292133
.call = ip_set_rename,
2134+
.type = NFNL_CB_MUTEX,
21302135
.attr_count = IPSET_ATTR_CMD_MAX,
21312136
.policy = ip_set_setname2_policy,
21322137
},
21332138
[IPSET_CMD_SWAP] = {
21342139
.call = ip_set_swap,
2140+
.type = NFNL_CB_MUTEX,
21352141
.attr_count = IPSET_ATTR_CMD_MAX,
21362142
.policy = ip_set_setname2_policy,
21372143
},
21382144
[IPSET_CMD_LIST] = {
21392145
.call = ip_set_dump,
2146+
.type = NFNL_CB_MUTEX,
21402147
.attr_count = IPSET_ATTR_CMD_MAX,
21412148
.policy = ip_set_dump_policy,
21422149
},
21432150
[IPSET_CMD_SAVE] = {
21442151
.call = ip_set_dump,
2152+
.type = NFNL_CB_MUTEX,
21452153
.attr_count = IPSET_ATTR_CMD_MAX,
21462154
.policy = ip_set_setname_policy,
21472155
},
21482156
[IPSET_CMD_ADD] = {
21492157
.call = ip_set_uadd,
2158+
.type = NFNL_CB_MUTEX,
21502159
.attr_count = IPSET_ATTR_CMD_MAX,
21512160
.policy = ip_set_adt_policy,
21522161
},
21532162
[IPSET_CMD_DEL] = {
21542163
.call = ip_set_udel,
2164+
.type = NFNL_CB_MUTEX,
21552165
.attr_count = IPSET_ATTR_CMD_MAX,
21562166
.policy = ip_set_adt_policy,
21572167
},
21582168
[IPSET_CMD_TEST] = {
21592169
.call = ip_set_utest,
2170+
.type = NFNL_CB_MUTEX,
21602171
.attr_count = IPSET_ATTR_CMD_MAX,
21612172
.policy = ip_set_adt_policy,
21622173
},
21632174
[IPSET_CMD_HEADER] = {
21642175
.call = ip_set_header,
2176+
.type = NFNL_CB_MUTEX,
21652177
.attr_count = IPSET_ATTR_CMD_MAX,
21662178
.policy = ip_set_setname_policy,
21672179
},
21682180
[IPSET_CMD_TYPE] = {
21692181
.call = ip_set_type,
2182+
.type = NFNL_CB_MUTEX,
21702183
.attr_count = IPSET_ATTR_CMD_MAX,
21712184
.policy = ip_set_type_policy,
21722185
},
21732186
[IPSET_CMD_PROTOCOL] = {
21742187
.call = ip_set_protocol,
2188+
.type = NFNL_CB_MUTEX,
21752189
.attr_count = IPSET_ATTR_CMD_MAX,
21762190
.policy = ip_set_protocol_policy,
21772191
},
21782192
[IPSET_CMD_GET_BYNAME] = {
21792193
.call = ip_set_byname,
2194+
.type = NFNL_CB_MUTEX,
21802195
.attr_count = IPSET_ATTR_CMD_MAX,
21812196
.policy = ip_set_setname_policy,
21822197
},
21832198
[IPSET_CMD_GET_BYINDEX] = {
21842199
.call = ip_set_byindex,
2200+
.type = NFNL_CB_MUTEX,
21852201
.attr_count = IPSET_ATTR_CMD_MAX,
21862202
.policy = ip_set_index_policy,
21872203
},

net/netfilter/nf_conntrack_netlink.c

Lines changed: 62 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3751,35 +3751,71 @@ static struct nf_exp_event_notifier ctnl_notifier_exp = {
37513751
#endif
37523752

37533753
static const struct nfnl_callback ctnl_cb[IPCTNL_MSG_MAX] = {
3754-
[IPCTNL_MSG_CT_NEW] = { .call = ctnetlink_new_conntrack,
3755-
.attr_count = CTA_MAX,
3756-
.policy = ct_nla_policy },
3757-
[IPCTNL_MSG_CT_GET] = { .call = ctnetlink_get_conntrack,
3758-
.attr_count = CTA_MAX,
3759-
.policy = ct_nla_policy },
3760-
[IPCTNL_MSG_CT_DELETE] = { .call = ctnetlink_del_conntrack,
3761-
.attr_count = CTA_MAX,
3762-
.policy = ct_nla_policy },
3763-
[IPCTNL_MSG_CT_GET_CTRZERO] = { .call = ctnetlink_get_conntrack,
3764-
.attr_count = CTA_MAX,
3765-
.policy = ct_nla_policy },
3766-
[IPCTNL_MSG_CT_GET_STATS_CPU] = { .call = ctnetlink_stat_ct_cpu },
3767-
[IPCTNL_MSG_CT_GET_STATS] = { .call = ctnetlink_stat_ct },
3768-
[IPCTNL_MSG_CT_GET_DYING] = { .call = ctnetlink_get_ct_dying },
3769-
[IPCTNL_MSG_CT_GET_UNCONFIRMED] = { .call = ctnetlink_get_ct_unconfirmed },
3754+
[IPCTNL_MSG_CT_NEW] = {
3755+
.call = ctnetlink_new_conntrack,
3756+
.type = NFNL_CB_MUTEX,
3757+
.attr_count = CTA_MAX,
3758+
.policy = ct_nla_policy
3759+
},
3760+
[IPCTNL_MSG_CT_GET] = {
3761+
.call = ctnetlink_get_conntrack,
3762+
.type = NFNL_CB_MUTEX,
3763+
.attr_count = CTA_MAX,
3764+
.policy = ct_nla_policy
3765+
},
3766+
[IPCTNL_MSG_CT_DELETE] = {
3767+
.call = ctnetlink_del_conntrack,
3768+
.type = NFNL_CB_MUTEX,
3769+
.attr_count = CTA_MAX,
3770+
.policy = ct_nla_policy
3771+
},
3772+
[IPCTNL_MSG_CT_GET_CTRZERO] = {
3773+
.call = ctnetlink_get_conntrack,
3774+
.type = NFNL_CB_MUTEX,
3775+
.attr_count = CTA_MAX,
3776+
.policy = ct_nla_policy
3777+
},
3778+
[IPCTNL_MSG_CT_GET_STATS_CPU] = {
3779+
.call = ctnetlink_stat_ct_cpu,
3780+
.type = NFNL_CB_MUTEX,
3781+
},
3782+
[IPCTNL_MSG_CT_GET_STATS] = {
3783+
.call = ctnetlink_stat_ct,
3784+
.type = NFNL_CB_MUTEX,
3785+
},
3786+
[IPCTNL_MSG_CT_GET_DYING] = {
3787+
.call = ctnetlink_get_ct_dying,
3788+
.type = NFNL_CB_MUTEX,
3789+
},
3790+
[IPCTNL_MSG_CT_GET_UNCONFIRMED] = {
3791+
.call = ctnetlink_get_ct_unconfirmed,
3792+
.type = NFNL_CB_MUTEX,
3793+
},
37703794
};
37713795

37723796
static const struct nfnl_callback ctnl_exp_cb[IPCTNL_MSG_EXP_MAX] = {
3773-
[IPCTNL_MSG_EXP_GET] = { .call = ctnetlink_get_expect,
3774-
.attr_count = CTA_EXPECT_MAX,
3775-
.policy = exp_nla_policy },
3776-
[IPCTNL_MSG_EXP_NEW] = { .call = ctnetlink_new_expect,
3777-
.attr_count = CTA_EXPECT_MAX,
3778-
.policy = exp_nla_policy },
3779-
[IPCTNL_MSG_EXP_DELETE] = { .call = ctnetlink_del_expect,
3780-
.attr_count = CTA_EXPECT_MAX,
3781-
.policy = exp_nla_policy },
3782-
[IPCTNL_MSG_EXP_GET_STATS_CPU] = { .call = ctnetlink_stat_exp_cpu },
3797+
[IPCTNL_MSG_EXP_GET] = {
3798+
.call = ctnetlink_get_expect,
3799+
.type = NFNL_CB_MUTEX,
3800+
.attr_count = CTA_EXPECT_MAX,
3801+
.policy = exp_nla_policy
3802+
},
3803+
[IPCTNL_MSG_EXP_NEW] = {
3804+
.call = ctnetlink_new_expect,
3805+
.type = NFNL_CB_MUTEX,
3806+
.attr_count = CTA_EXPECT_MAX,
3807+
.policy = exp_nla_policy
3808+
},
3809+
[IPCTNL_MSG_EXP_DELETE] = {
3810+
.call = ctnetlink_del_expect,
3811+
.type = NFNL_CB_MUTEX,
3812+
.attr_count = CTA_EXPECT_MAX,
3813+
.policy = exp_nla_policy
3814+
},
3815+
[IPCTNL_MSG_EXP_GET_STATS_CPU] = {
3816+
.call = ctnetlink_stat_exp_cpu,
3817+
.type = NFNL_CB_MUTEX,
3818+
},
37833819
};
37843820

37853821
static const struct nfnetlink_subsystem ctnl_subsys = {

net/netfilter/nf_tables_api.c

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7554,115 +7554,138 @@ static int nf_tables_getgen(struct sk_buff *skb, const struct nfnl_info *info,
75547554

75557555
static const struct nfnl_callback nf_tables_cb[NFT_MSG_MAX] = {
75567556
[NFT_MSG_NEWTABLE] = {
7557-
.call_batch = nf_tables_newtable,
7557+
.call = nf_tables_newtable,
7558+
.type = NFNL_CB_BATCH,
75587559
.attr_count = NFTA_TABLE_MAX,
75597560
.policy = nft_table_policy,
75607561
},
75617562
[NFT_MSG_GETTABLE] = {
7562-
.call_rcu = nf_tables_gettable,
7563+
.call = nf_tables_gettable,
7564+
.type = NFNL_CB_RCU,
75637565
.attr_count = NFTA_TABLE_MAX,
75647566
.policy = nft_table_policy,
75657567
},
75667568
[NFT_MSG_DELTABLE] = {
7567-
.call_batch = nf_tables_deltable,
7569+
.call = nf_tables_deltable,
7570+
.type = NFNL_CB_BATCH,
75687571
.attr_count = NFTA_TABLE_MAX,
75697572
.policy = nft_table_policy,
75707573
},
75717574
[NFT_MSG_NEWCHAIN] = {
7572-
.call_batch = nf_tables_newchain,
7575+
.call = nf_tables_newchain,
7576+
.type = NFNL_CB_BATCH,
75737577
.attr_count = NFTA_CHAIN_MAX,
75747578
.policy = nft_chain_policy,
75757579
},
75767580
[NFT_MSG_GETCHAIN] = {
7577-
.call_rcu = nf_tables_getchain,
7581+
.call = nf_tables_getchain,
7582+
.type = NFNL_CB_RCU,
75787583
.attr_count = NFTA_CHAIN_MAX,
75797584
.policy = nft_chain_policy,
75807585
},
75817586
[NFT_MSG_DELCHAIN] = {
7582-
.call_batch = nf_tables_delchain,
7587+
.call = nf_tables_delchain,
7588+
.type = NFNL_CB_BATCH,
75837589
.attr_count = NFTA_CHAIN_MAX,
75847590
.policy = nft_chain_policy,
75857591
},
75867592
[NFT_MSG_NEWRULE] = {
7587-
.call_batch = nf_tables_newrule,
7593+
.call = nf_tables_newrule,
7594+
.type = NFNL_CB_BATCH,
75887595
.attr_count = NFTA_RULE_MAX,
75897596
.policy = nft_rule_policy,
75907597
},
75917598
[NFT_MSG_GETRULE] = {
7592-
.call_rcu = nf_tables_getrule,
7599+
.call = nf_tables_getrule,
7600+
.type = NFNL_CB_RCU,
75937601
.attr_count = NFTA_RULE_MAX,
75947602
.policy = nft_rule_policy,
75957603
},
75967604
[NFT_MSG_DELRULE] = {
7597-
.call_batch = nf_tables_delrule,
7605+
.call = nf_tables_delrule,
7606+
.type = NFNL_CB_BATCH,
75987607
.attr_count = NFTA_RULE_MAX,
75997608
.policy = nft_rule_policy,
76007609
},
76017610
[NFT_MSG_NEWSET] = {
7602-
.call_batch = nf_tables_newset,
7611+
.call = nf_tables_newset,
7612+
.type = NFNL_CB_BATCH,
76037613
.attr_count = NFTA_SET_MAX,
76047614
.policy = nft_set_policy,
76057615
},
76067616
[NFT_MSG_GETSET] = {
7607-
.call_rcu = nf_tables_getset,
7617+
.call = nf_tables_getset,
7618+
.type = NFNL_CB_RCU,
76087619
.attr_count = NFTA_SET_MAX,
76097620
.policy = nft_set_policy,
76107621
},
76117622
[NFT_MSG_DELSET] = {
7612-
.call_batch = nf_tables_delset,
7623+
.call = nf_tables_delset,
7624+
.type = NFNL_CB_BATCH,
76137625
.attr_count = NFTA_SET_MAX,
76147626
.policy = nft_set_policy,
76157627
},
76167628
[NFT_MSG_NEWSETELEM] = {
7617-
.call_batch = nf_tables_newsetelem,
7629+
.call = nf_tables_newsetelem,
7630+
.type = NFNL_CB_BATCH,
76187631
.attr_count = NFTA_SET_ELEM_LIST_MAX,
76197632
.policy = nft_set_elem_list_policy,
76207633
},
76217634
[NFT_MSG_GETSETELEM] = {
7622-
.call_rcu = nf_tables_getsetelem,
7635+
.call = nf_tables_getsetelem,
7636+
.type = NFNL_CB_RCU,
76237637
.attr_count = NFTA_SET_ELEM_LIST_MAX,
76247638
.policy = nft_set_elem_list_policy,
76257639
},
76267640
[NFT_MSG_DELSETELEM] = {
7627-
.call_batch = nf_tables_delsetelem,
7641+
.call = nf_tables_delsetelem,
7642+
.type = NFNL_CB_BATCH,
76287643
.attr_count = NFTA_SET_ELEM_LIST_MAX,
76297644
.policy = nft_set_elem_list_policy,
76307645
},
76317646
[NFT_MSG_GETGEN] = {
7632-
.call_rcu = nf_tables_getgen,
7647+
.call = nf_tables_getgen,
7648+
.type = NFNL_CB_RCU,
76337649
},
76347650
[NFT_MSG_NEWOBJ] = {
7635-
.call_batch = nf_tables_newobj,
7651+
.call = nf_tables_newobj,
7652+
.type = NFNL_CB_BATCH,
76367653
.attr_count = NFTA_OBJ_MAX,
76377654
.policy = nft_obj_policy,
76387655
},
76397656
[NFT_MSG_GETOBJ] = {
7640-
.call_rcu = nf_tables_getobj,
7657+
.call = nf_tables_getobj,
7658+
.type = NFNL_CB_RCU,
76417659
.attr_count = NFTA_OBJ_MAX,
76427660
.policy = nft_obj_policy,
76437661
},
76447662
[NFT_MSG_DELOBJ] = {
7645-
.call_batch = nf_tables_delobj,
7663+
.call = nf_tables_delobj,
7664+
.type = NFNL_CB_BATCH,
76467665
.attr_count = NFTA_OBJ_MAX,
76477666
.policy = nft_obj_policy,
76487667
},
76497668
[NFT_MSG_GETOBJ_RESET] = {
7650-
.call_rcu = nf_tables_getobj,
7669+
.call = nf_tables_getobj,
7670+
.type = NFNL_CB_RCU,
76517671
.attr_count = NFTA_OBJ_MAX,
76527672
.policy = nft_obj_policy,
76537673
},
76547674
[NFT_MSG_NEWFLOWTABLE] = {
7655-
.call_batch = nf_tables_newflowtable,
7675+
.call = nf_tables_newflowtable,
7676+
.type = NFNL_CB_BATCH,
76567677
.attr_count = NFTA_FLOWTABLE_MAX,
76577678
.policy = nft_flowtable_policy,
76587679
},
76597680
[NFT_MSG_GETFLOWTABLE] = {
7660-
.call_rcu = nf_tables_getflowtable,
7681+
.call = nf_tables_getflowtable,
7682+
.type = NFNL_CB_RCU,
76617683
.attr_count = NFTA_FLOWTABLE_MAX,
76627684
.policy = nft_flowtable_policy,
76637685
},
76647686
[NFT_MSG_DELFLOWTABLE] = {
7665-
.call_batch = nf_tables_delflowtable,
7687+
.call = nf_tables_delflowtable,
7688+
.type = NFNL_CB_BATCH,
76667689
.attr_count = NFTA_FLOWTABLE_MAX,
76677690
.policy = nft_flowtable_policy,
76687691
},

0 commit comments

Comments
 (0)