Add and use nfnl_msg_type() function to replace opencoded nfnetlink message type. I suggested this change, Arushi Singhal made an initial patch to address this but was missing several spots.
Unified · Split
| @@ -41,6 +41,11 @@ int nfnetlink_set_err(struct net *net, u32 portid, u32 group, int error); · 40 unmodified lines | |||
| 41 | int nfnetlink_unicast(struct sk_buff *skb, struct net *net, u32 portid, | 41 | int nfnetlink_unicast(struct sk_buff *skb, struct net *net, u32 portid, |
| 42 | int flags); | 42 | int flags); |
| 43 | 43 | ||
| 44 | static inline u16 nfnl_msg_type(u8 subsys, u8 msg_type) | ||
| 45 | { | ||
| 46 | return subsys << 8 | msg_type; | ||
| 47 | } | ||
| 48 | |||
| 44 | void nfnl_lock(__u8 subsys_id); | 49 | void nfnl_lock(__u8 subsys_id); |
| 45 | void nfnl_unlock(__u8 subsys_id); | 50 | void nfnl_unlock(__u8 subsys_id); |
| 46 | #ifdef CONFIG_PROVE_LOCKING | 51 | #ifdef CONFIG_PROVE_LOCKING |
| @@ -769,7 +769,7 @@ start_msg(struct sk_buff *skb, u32 portid, u32 seq, unsigned int flags, · 768 unmodified lines | |||
| 769 | struct nlmsghdr *nlh; | 769 | struct nlmsghdr *nlh; |
| 770 | struct nfgenmsg *nfmsg; | 770 | struct nfgenmsg *nfmsg; |
| 771 | 771 | ||
| 772 | nlh = nlmsg_put(skb, portid, seq, cmd | (NFNL_SUBSYS_IPSET << 8), | 772 | nlh = nlmsg_put(skb, portid, seq, nfnl_msg_type(NFNL_SUBSYS_IPSET, cmd), |
| 773 | sizeof(*nfmsg), flags); | 773 | sizeof(*nfmsg), flags); |
| 774 | if (!nlh) | 774 | if (!nlh) |
| 775 | return NULL; | 775 | return NULL; |
| @@ -467,7 +467,7 @@ ctnetlink_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, · 466 unmodified lines | |||
| 467 | struct nlattr *nest_parms; | 467 | struct nlattr *nest_parms; |
| 468 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; | 468 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; |
| 469 | 469 | ||
| 470 | event = (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW); | 470 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK, IPCTNL_MSG_CT_NEW); |
| 471 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 471 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 472 | if (nlh == NULL) | 472 | if (nlh == NULL) |
| 473 | goto nlmsg_failure; | 473 | goto nlmsg_failure; |
| @@ -652,7 +652,7 @@ ctnetlink_conntrack_event(unsigned int events, struct nf_ct_event *item) · 178 unmodified lines | |||
| 652 | if (skb == NULL) | 652 | if (skb == NULL) |
| 653 | goto errout; | 653 | goto errout; |
| 654 | 654 | ||
| 655 | type |= NFNL_SUBSYS_CTNETLINK << 8; | 655 | type = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK, type); |
| 656 | nlh = nlmsg_put(skb, item->portid, 0, type, sizeof(*nfmsg), flags); | 656 | nlh = nlmsg_put(skb, item->portid, 0, type, sizeof(*nfmsg), flags); |
| 657 | if (nlh == NULL) | 657 | if (nlh == NULL) |
| 658 | goto nlmsg_failure; | 658 | goto nlmsg_failure; |
| @@ -1983,7 +1983,8 @@ ctnetlink_ct_stat_cpu_fill_info(struct sk_buff *skb, u32 portid, u32 seq, · 1324 unmodified lines | |||
| 1983 | struct nfgenmsg *nfmsg; | 1983 | struct nfgenmsg *nfmsg; |
| 1984 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; | 1984 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; |
| 1985 | 1985 | ||
| 1986 | event = (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_GET_STATS_CPU); | 1986 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK, |
| 1987 | IPCTNL_MSG_CT_GET_STATS_CPU); | ||
| 1987 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 1988 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 1988 | if (nlh == NULL) | 1989 | if (nlh == NULL) |
| 1989 | goto nlmsg_failure; | 1990 | goto nlmsg_failure; |
| @@ -2066,7 +2067,7 @@ ctnetlink_stat_ct_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, · 76 unmodified lines | |||
| 2066 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; | 2067 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; |
| 2067 | unsigned int nr_conntracks = atomic_read(&net->ct.count); | 2068 | unsigned int nr_conntracks = atomic_read(&net->ct.count); |
| 2068 | 2069 | ||
| 2069 | event = (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_GET_STATS); | 2070 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK, IPCTNL_MSG_CT_GET_STATS); |
| 2070 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 2071 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 2071 | if (nlh == NULL) | 2072 | if (nlh == NULL) |
| 2072 | goto nlmsg_failure; | 2073 | goto nlmsg_failure; |
| @@ -2576,7 +2577,7 @@ ctnetlink_exp_fill_info(struct sk_buff *skb, u32 portid, u32 seq, · 503 unmodified lines | |||
| 2576 | struct nfgenmsg *nfmsg; | 2577 | struct nfgenmsg *nfmsg; |
| 2577 | unsigned int flags = portid ? NLM_F_MULTI : 0; | 2578 | unsigned int flags = portid ? NLM_F_MULTI : 0; |
| 2578 | 2579 | ||
| 2579 | event |= NFNL_SUBSYS_CTNETLINK_EXP << 8; | 2580 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK_EXP, event); |
| 2580 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 2581 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 2581 | if (nlh == NULL) | 2582 | if (nlh == NULL) |
| 2582 | goto nlmsg_failure; | 2583 | goto nlmsg_failure; |
| @@ -2627,7 +2628,7 @@ ctnetlink_expect_event(unsigned int events, struct nf_exp_event *item) · 44 unmodified lines | |||
| 2627 | if (skb == NULL) | 2628 | if (skb == NULL) |
| 2628 | goto errout; | 2629 | goto errout; |
| 2629 | 2630 | ||
| 2630 | type |= NFNL_SUBSYS_CTNETLINK_EXP << 8; | 2631 | type = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK_EXP, type); |
| 2631 | nlh = nlmsg_put(skb, item->portid, 0, type, sizeof(*nfmsg), flags); | 2632 | nlh = nlmsg_put(skb, item->portid, 0, type, sizeof(*nfmsg), flags); |
| 2632 | if (nlh == NULL) | 2633 | if (nlh == NULL) |
| 2633 | goto nlmsg_failure; | 2634 | goto nlmsg_failure; |
| @@ -3212,7 +3213,8 @@ ctnetlink_exp_stat_fill_info(struct sk_buff *skb, u32 portid, u32 seq, int cpu, · 578 unmodified lines | |||
| 3212 | struct nfgenmsg *nfmsg; | 3213 | struct nfgenmsg *nfmsg; |
| 3213 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; | 3214 | unsigned int flags = portid ? NLM_F_MULTI : 0, event; |
| 3214 | 3215 | ||
| 3215 | event = (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_EXP_GET_STATS_CPU); | 3216 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK, |
| 3217 | IPCTNL_MSG_EXP_GET_STATS_CPU); | ||
| 3216 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 3218 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 3217 | if (nlh == NULL) | 3219 | if (nlh == NULL) |
| 3218 | goto nlmsg_failure; | 3220 | goto nlmsg_failure; |
| @@ -438,7 +438,7 @@ static int nf_tables_fill_table_info(struct sk_buff *skb, struct net *net, · 437 unmodified lines | |||
| 438 | struct nlmsghdr *nlh; | 438 | struct nlmsghdr *nlh; |
| 439 | struct nfgenmsg *nfmsg; | 439 | struct nfgenmsg *nfmsg; |
| 440 | 440 | ||
| 441 | event |= NFNL_SUBSYS_NFTABLES << 8; | 441 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event); |
| 442 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), flags); | 442 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), flags); |
| 443 | if (nlh == NULL) | 443 | if (nlh == NULL) |
| 444 | goto nla_put_failure; | 444 | goto nla_put_failure; |
| @@ -989,7 +989,7 @@ static int nf_tables_fill_chain_info(struct sk_buff *skb, struct net *net, · 544 unmodified lines | |||
| 989 | struct nlmsghdr *nlh; | 989 | struct nlmsghdr *nlh; |
| 990 | struct nfgenmsg *nfmsg; | 990 | struct nfgenmsg *nfmsg; |
| 991 | 991 | ||
| 992 | event |= NFNL_SUBSYS_NFTABLES << 8; | 992 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event); |
| 993 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), flags); | 993 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), flags); |
| 994 | if (nlh == NULL) | 994 | if (nlh == NULL) |
| 995 | goto nla_put_failure; | 995 | goto nla_put_failure; |
| @@ -1885,10 +1885,9 @@ static int nf_tables_fill_rule_info(struct sk_buff *skb, struct net *net, · 889 unmodified lines | |||
| 1885 | const struct nft_expr *expr, *next; | 1885 | const struct nft_expr *expr, *next; |
| 1886 | struct nlattr *list; | 1886 | struct nlattr *list; |
| 1887 | const struct nft_rule *prule; | 1887 | const struct nft_rule *prule; |
| 1888 | int type = event | NFNL_SUBSYS_NFTABLES << 8; | 1888 | u16 type = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event); |
| 1889 | 1889 | ||
| 1890 | nlh = nlmsg_put(skb, portid, seq, type, sizeof(struct nfgenmsg), | 1890 | nlh = nlmsg_put(skb, portid, seq, type, sizeof(struct nfgenmsg), flags); |
| 1891 | flags); | ||
| 1892 | if (nlh == NULL) | 1891 | if (nlh == NULL) |
| 1893 | goto nla_put_failure; | 1892 | goto nla_put_failure; |
| 1894 | 1893 | ||
| @@ -2645,7 +2644,7 @@ static int nf_tables_fill_set(struct sk_buff *skb, const struct nft_ctx *ctx, · 750 unmodified lines | |||
| 2645 | u32 portid = ctx->portid; | 2644 | u32 portid = ctx->portid; |
| 2646 | u32 seq = ctx->seq; | 2645 | u32 seq = ctx->seq; |
| 2647 | 2646 | ||
| 2648 | event |= NFNL_SUBSYS_NFTABLES << 8; | 2647 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event); |
| 2649 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), | 2648 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), |
| 2650 | flags); | 2649 | flags); |
| 2651 | if (nlh == NULL) | 2650 | if (nlh == NULL) |
| @@ -3395,8 +3394,7 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb) · 743 unmodified lines | |||
| 3395 | if (IS_ERR(set)) | 3394 | if (IS_ERR(set)) |
| 3396 | return PTR_ERR(set); | 3395 | return PTR_ERR(set); |
| 3397 | 3396 | ||
| 3398 | event = NFT_MSG_NEWSETELEM; | 3397 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWSETELEM); |
| 3399 | event |= NFNL_SUBSYS_NFTABLES << 8; | ||
| 3400 | portid = NETLINK_CB(cb->skb).portid; | 3398 | portid = NETLINK_CB(cb->skb).portid; |
| 3401 | seq = cb->nlh->nlmsg_seq; | 3399 | seq = cb->nlh->nlmsg_seq; |
| 3402 | 3400 | ||
| @@ -3481,7 +3479,7 @@ static int nf_tables_fill_setelem_info(struct sk_buff *skb, · 78 unmodified lines | |||
| 3481 | struct nlattr *nest; | 3479 | struct nlattr *nest; |
| 3482 | int err; | 3480 | int err; |
| 3483 | 3481 | ||
| 3484 | event |= NFNL_SUBSYS_NFTABLES << 8; | 3482 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event); |
| 3485 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), | 3483 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), |
| 3486 | flags); | 3484 | flags); |
| 3487 | if (nlh == NULL) | 3485 | if (nlh == NULL) |
| @@ -4253,7 +4251,7 @@ static int nf_tables_fill_obj_info(struct sk_buff *skb, struct net *net, · 765 unmodified lines | |||
| 4253 | struct nfgenmsg *nfmsg; | 4251 | struct nfgenmsg *nfmsg; |
| 4254 | struct nlmsghdr *nlh; | 4252 | struct nlmsghdr *nlh; |
| 4255 | 4253 | ||
| 4256 | event |= NFNL_SUBSYS_NFTABLES << 8; | 4254 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, event); |
| 4257 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), flags); | 4255 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), flags); |
| 4258 | if (nlh == NULL) | 4256 | if (nlh == NULL) |
| 4259 | goto nla_put_failure; | 4257 | goto nla_put_failure; |
| @@ -4526,7 +4524,7 @@ static int nf_tables_fill_gen_info(struct sk_buff *skb, struct net *net, · 266 unmodified lines | |||
| 4526 | { | 4524 | { |
| 4527 | struct nlmsghdr *nlh; | 4525 | struct nlmsghdr *nlh; |
| 4528 | struct nfgenmsg *nfmsg; | 4526 | struct nfgenmsg *nfmsg; |
| 4529 | int event = (NFNL_SUBSYS_NFTABLES << 8) | NFT_MSG_NEWGEN; | 4527 | int event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, NFT_MSG_NEWGEN); |
| 4530 | 4528 | ||
| 4531 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), 0); | 4529 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(struct nfgenmsg), 0); |
| 4532 | if (nlh == NULL) | 4530 | if (nlh == NULL) |
| @@ -169,7 +169,7 @@ void nft_trace_notify(struct nft_traceinfo *info) · 168 unmodified lines | |||
| 169 | struct nlmsghdr *nlh; | 169 | struct nlmsghdr *nlh; |
| 170 | struct sk_buff *skb; | 170 | struct sk_buff *skb; |
| 171 | unsigned int size; | 171 | unsigned int size; |
| 172 | int event = (NFNL_SUBSYS_NFTABLES << 8) | NFT_MSG_TRACE; | 172 | u16 event; |
| 173 | 173 | ||
| 174 | if (!nfnetlink_has_listeners(nft_net(pkt), NFNLGRP_NFTRACE)) | 174 | if (!nfnetlink_has_listeners(nft_net(pkt), NFNLGRP_NFTRACE)) |
| 175 | return; | 175 | return; |
| @@ -198,6 +198,7 @@ void nft_trace_notify(struct nft_traceinfo *info) · 22 unmodified lines | |||
| 198 | if (!skb) | 198 | if (!skb) |
| 199 | return; | 199 | return; |
| 200 | 200 | ||
| 201 | event = nfnl_msg_type(NFNL_SUBSYS_NFTABLES, NFT_MSG_TRACE); | ||
| 201 | nlh = nlmsg_put(skb, 0, 0, event, sizeof(struct nfgenmsg), 0); | 202 | nlh = nlmsg_put(skb, 0, 0, event, sizeof(struct nfgenmsg), 0); |
| 202 | if (!nlh) | 203 | if (!nlh) |
| 203 | goto nla_put_failure; | 204 | goto nla_put_failure; |
| @@ -139,7 +139,7 @@ nfnl_acct_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, · 138 unmodified lines | |||
| 139 | u64 pkts, bytes; | 139 | u64 pkts, bytes; |
| 140 | u32 old_flags; | 140 | u32 old_flags; |
| 141 | 141 | ||
| 142 | event |= NFNL_SUBSYS_ACCT << 8; | 142 | event = nfnl_msg_type(NFNL_SUBSYS_ACCT, event); |
| 143 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 143 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 144 | if (nlh == NULL) | 144 | if (nlh == NULL) |
| 145 | goto nlmsg_failure; | 145 | goto nlmsg_failure; |
| @@ -507,7 +507,7 @@ nfnl_cthelper_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, · 506 unmodified lines | |||
| 507 | unsigned int flags = portid ? NLM_F_MULTI : 0; | 507 | unsigned int flags = portid ? NLM_F_MULTI : 0; |
| 508 | int status; | 508 | int status; |
| 509 | 509 | ||
| 510 | event |= NFNL_SUBSYS_CTHELPER << 8; | 510 | event = nfnl_msg_type(NFNL_SUBSYS_CTHELPER, event); |
| 511 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 511 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 512 | if (nlh == NULL) | 512 | if (nlh == NULL) |
| 513 | goto nlmsg_failure; | 513 | goto nlmsg_failure; |
| @@ -158,7 +158,7 @@ ctnl_timeout_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, · 157 unmodified lines | |||
| 158 | unsigned int flags = portid ? NLM_F_MULTI : 0; | 158 | unsigned int flags = portid ? NLM_F_MULTI : 0; |
| 159 | struct nf_conntrack_l4proto *l4proto = timeout->l4proto; | 159 | struct nf_conntrack_l4proto *l4proto = timeout->l4proto; |
| 160 | 160 | ||
| 161 | event |= NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8; | 161 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK_TIMEOUT, event); |
| 162 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 162 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 163 | if (nlh == NULL) | 163 | if (nlh == NULL) |
| 164 | goto nlmsg_failure; | 164 | goto nlmsg_failure; |
| @@ -431,7 +431,7 @@ cttimeout_default_fill_info(struct net *net, struct sk_buff *skb, u32 portid, · 266 unmodified lines | |||
| 431 | struct nfgenmsg *nfmsg; | 431 | struct nfgenmsg *nfmsg; |
| 432 | unsigned int flags = portid ? NLM_F_MULTI : 0; | 432 | unsigned int flags = portid ? NLM_F_MULTI : 0; |
| 433 | 433 | ||
| 434 | event |= NFNL_SUBSYS_CTNETLINK_TIMEOUT << 8; | 434 | event = nfnl_msg_type(NFNL_SUBSYS_CTNETLINK_TIMEOUT, event); |
| 435 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 435 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 436 | if (nlh == NULL) | 436 | if (nlh == NULL) |
| 437 | goto nlmsg_failure; | 437 | goto nlmsg_failure; |
| @@ -411,7 +411,7 @@ __build_packet_message(struct nfnl_log_net *log, · 410 unmodified lines | |||
| 411 | const unsigned char *hwhdrp; | 411 | const unsigned char *hwhdrp; |
| 412 | 412 | ||
| 413 | nlh = nlmsg_put(inst->skb, 0, 0, | 413 | nlh = nlmsg_put(inst->skb, 0, 0, |
| 414 | NFNL_SUBSYS_ULOG << 8 | NFULNL_MSG_PACKET, | 414 | nfnl_msg_type(NFNL_SUBSYS_ULOG, NFULNL_MSG_PACKET), |
| 415 | sizeof(struct nfgenmsg), 0); | 415 | sizeof(struct nfgenmsg), 0); |
| 416 | if (!nlh) | 416 | if (!nlh) |
| 417 | return -1; | 417 | return -1; |
| @@ -447,7 +447,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, · 446 unmodified lines | |||
| 447 | } | 447 | } |
| 448 | 448 | ||
| 449 | nlh = nlmsg_put(skb, 0, 0, | 449 | nlh = nlmsg_put(skb, 0, 0, |
| 450 | NFNL_SUBSYS_QUEUE << 8 | NFQNL_MSG_PACKET, | 450 | nfnl_msg_type(NFNL_SUBSYS_QUEUE, NFQNL_MSG_PACKET), |
| 451 | sizeof(struct nfgenmsg), 0); | 451 | sizeof(struct nfgenmsg), 0); |
| 452 | if (!nlh) { | 452 | if (!nlh) { |
| 453 | skb_tx_error(entskb); | 453 | skb_tx_error(entskb); |
| @@ -504,7 +504,7 @@ nfnl_compat_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type, · 503 unmodified lines | |||
| 504 | struct nfgenmsg *nfmsg; | 504 | struct nfgenmsg *nfmsg; |
| 505 | unsigned int flags = portid ? NLM_F_MULTI : 0; | 505 | unsigned int flags = portid ? NLM_F_MULTI : 0; |
| 506 | 506 | ||
| 507 | event |= NFNL_SUBSYS_NFT_COMPAT << 8; | 507 | event = nfnl_msg_type(NFNL_SUBSYS_NFT_COMPAT, event); |
| 508 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); | 508 | nlh = nlmsg_put(skb, portid, seq, event, sizeof(*nfmsg), flags); |
| 509 | if (nlh == NULL) | 509 | if (nlh == NULL) |
| 510 | goto nlmsg_failure; | 510 | goto nlmsg_failure; |