diff options
Diffstat (limited to 'src/common.c')
-rw-r--r-- | src/common.c | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/src/common.c b/src/common.c index 8b001fe..0f23785 100644 --- a/src/common.c +++ b/src/common.c @@ -22,24 +22,33 @@ #include <errno.h> #include "internal.h" -struct nlmsghdr *nftnl_nlmsg_build_hdr(char *buf, uint16_t cmd, uint16_t family, - uint16_t type, uint32_t seq) +static struct nlmsghdr *__nftnl_nlmsg_build_hdr(char *buf, uint16_t type, + uint16_t family, + uint16_t flags, uint32_t seq, + uint16_t res_id) { struct nlmsghdr *nlh; struct nfgenmsg *nfh; nlh = mnl_nlmsg_put_header(buf); - nlh->nlmsg_type = (NFNL_SUBSYS_NFTABLES << 8) | cmd; - nlh->nlmsg_flags = NLM_F_REQUEST | type; + nlh->nlmsg_type = type; + nlh->nlmsg_flags = NLM_F_REQUEST | flags; nlh->nlmsg_seq = seq; nfh = mnl_nlmsg_put_extra_header(nlh, sizeof(struct nfgenmsg)); nfh->nfgen_family = family; nfh->version = NFNETLINK_V0; - nfh->res_id = 0; + nfh->res_id = res_id; return nlh; } + +struct nlmsghdr *nftnl_nlmsg_build_hdr(char *buf, uint16_t type, uint16_t family, + uint16_t flags, uint32_t seq) +{ + return __nftnl_nlmsg_build_hdr(buf, (NFNL_SUBSYS_NFTABLES << 8) | type, + family, flags, seq, 0); +} EXPORT_SYMBOL(nftnl_nlmsg_build_hdr); struct nftnl_parse_err *nftnl_parse_err_alloc(void) @@ -156,31 +165,17 @@ int nftnl_cmd_footer_fprintf(FILE *fp, uint32_t cmd, uint32_t type, nftnl_cmd_footer_fprintf_cb); } -static void nftnl_batch_build_hdr(char *buf, uint16_t type, uint32_t seq) -{ - struct nlmsghdr *nlh; - struct nfgenmsg *nfg; - - nlh = mnl_nlmsg_put_header(buf); - nlh->nlmsg_type = type; - nlh->nlmsg_flags = NLM_F_REQUEST; - nlh->nlmsg_seq = seq; - - nfg = mnl_nlmsg_put_extra_header(nlh, sizeof(*nfg)); - nfg->nfgen_family = AF_UNSPEC; - nfg->version = NFNETLINK_V0; - nfg->res_id = NFNL_SUBSYS_NFTABLES; -} - void nftnl_batch_begin(char *buf, uint32_t seq) { - nftnl_batch_build_hdr(buf, NFNL_MSG_BATCH_BEGIN, seq); + __nftnl_nlmsg_build_hdr(buf, NFNL_MSG_BATCH_BEGIN, AF_UNSPEC, 0, seq, + NFNL_SUBSYS_NFTABLES); } EXPORT_SYMBOL(nftnl_batch_begin); void nftnl_batch_end(char *buf, uint32_t seq) { - nftnl_batch_build_hdr(buf, NFNL_MSG_BATCH_END, seq); + __nftnl_nlmsg_build_hdr(buf, NFNL_MSG_BATCH_END, AF_UNSPEC, 0, seq, + NFNL_SUBSYS_NFTABLES); } EXPORT_SYMBOL(nftnl_batch_end); |