]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
examples: Remove the use of nftnl_mnl_batch_put()
authorElise Lennion <elise.lennion@gmail.com>
Thu, 12 Jan 2017 19:22:55 +0000 (17:22 -0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 16 Jan 2017 10:38:04 +0000 (11:38 +0100)
use nftnl_batch_begin() and nftnl_batch_end() instead, to keep examples
consistent and avoid code duplication.

Signed-off-by: Elise Lennion <elise.lennion@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
examples/nft-map-add.c
examples/nft-rule-add.c
examples/nft-rule-del.c
examples/nft-set-add.c

index 53244f5364a9fcf4bbc55c73c22c915226c7246f..a906d2dfeba9c4e3a6d42aea67040a668142aaef 100644 (file)
@@ -54,22 +54,6 @@ static struct nftnl_set *setup_set(uint8_t family, const char *table,
        return s;
 }
 
-static void nftnl_mnl_batch_put(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_INET;
-       nfg->version = NFNETLINK_V0;
-       nfg->res_id = NFNL_SUBSYS_NFTABLES;
-}
-
 int main(int argc, char *argv[])
 {
        struct mnl_socket *nl;
@@ -79,7 +63,7 @@ int main(int argc, char *argv[])
        uint8_t family;
        char buf[MNL_SOCKET_BUFFER_SIZE];
        uint32_t seq = time(NULL);
-       int ret;
+       int ret, batching;
 
        if (argc != 4) {
                fprintf(stderr, "Usage: %s <family> <table> <setname>\n", argv[0]);
@@ -112,11 +96,18 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
 
+       batching = nftnl_batch_is_supported();
+       if (batching < 0) {
+               perror("cannot talk to nfnetlink");
+               exit(EXIT_FAILURE);
+       }
+
        batch = mnl_nlmsg_batch_start(buf, sizeof(buf));
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch),
-                         NFNL_MSG_BATCH_BEGIN, seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_begin(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        nlh = nftnl_set_nlmsg_build_hdr(mnl_nlmsg_batch_current(batch),
                                      NFT_MSG_NEWSET, family,
@@ -126,9 +117,10 @@ int main(int argc, char *argv[])
        nftnl_set_free(s);
        mnl_nlmsg_batch_next(batch);
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch), NFNL_MSG_BATCH_END,
-                        seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_end(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        ret = mnl_socket_sendto(nl, mnl_nlmsg_batch_head(batch),
                                mnl_nlmsg_batch_size(batch));
index d27c6d7a6262d663c8ad58ef5d3c25d4fdac38b7..3aeb2e06ee425dd37d6c6b9c9a32aeac6d1d9cc1 100644 (file)
@@ -117,22 +117,6 @@ static struct nftnl_rule *setup_rule(uint8_t family, const char *table,
        return r;
 }
 
-static void nftnl_mnl_batch_put(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_INET;
-       nfg->version = NFNETLINK_V0;
-       nfg->res_id = NFNL_SUBSYS_NFTABLES;
-}
-
 int main(int argc, char *argv[])
 {
        struct mnl_socket *nl;
@@ -142,7 +126,7 @@ int main(int argc, char *argv[])
        uint8_t family;
        char buf[MNL_SOCKET_BUFFER_SIZE];
        uint32_t seq = time(NULL);
-       int ret;
+       int ret, batching;
 
        if (argc < 4 || argc > 5) {
                fprintf(stderr, "Usage: %s <family> <table> <chain>\n", argv[0]);
@@ -174,11 +158,18 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
 
+       batching = nftnl_batch_is_supported();
+       if (batching < 0) {
+               perror("cannot talk to nfnetlink");
+               exit(EXIT_FAILURE);
+       }
+
        batch = mnl_nlmsg_batch_start(buf, sizeof(buf));
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch),
-                         NFNL_MSG_BATCH_BEGIN, seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_begin(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        nlh = nftnl_rule_nlmsg_build_hdr(mnl_nlmsg_batch_current(batch),
                        NFT_MSG_NEWRULE,
@@ -189,9 +180,10 @@ int main(int argc, char *argv[])
        nftnl_rule_free(r);
        mnl_nlmsg_batch_next(batch);
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch), NFNL_MSG_BATCH_END,
-                        seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_end(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        ret = mnl_socket_sendto(nl, mnl_nlmsg_batch_head(batch),
                                mnl_nlmsg_batch_size(batch));
index 4bc972727ba7840eb3c4603faa7029ed5b74f5a6..5c68363e7a749165c278b61a1035f4a89ce13495 100644 (file)
 #include <libmnl/libmnl.h>
 #include <libnftnl/rule.h>
 
-static void nftnl_mnl_batch_put(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_INET;
-       nfg->version = NFNETLINK_V0;
-       nfg->res_id = NFNL_SUBSYS_NFTABLES;
-}
-
 int main(int argc, char *argv[])
 {
        struct mnl_socket *nl;
@@ -46,7 +30,7 @@ int main(int argc, char *argv[])
        struct mnl_nlmsg_batch *batch;
        uint32_t portid, seq;
        struct nftnl_rule *r = NULL;
-       int ret, family;
+       int ret, batching, family;
 
        if (argc < 4 || argc > 5) {
                fprintf(stderr, "Usage: %s <family> <table> <chain> [<handle>]\n",
@@ -81,11 +65,18 @@ int main(int argc, char *argv[])
        if (argc == 5)
                nftnl_rule_set_u64(r, NFTNL_RULE_HANDLE, atoi(argv[4]));
 
+       batching = nftnl_batch_is_supported();
+       if (batching < 0) {
+               perror("cannot talk to nfnetlink");
+               exit(EXIT_FAILURE);
+       }
+
        batch = mnl_nlmsg_batch_start(buf, sizeof(buf));
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch),
-                         NFNL_MSG_BATCH_BEGIN, seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_begin(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        nlh = nftnl_rule_nlmsg_build_hdr(mnl_nlmsg_batch_current(batch),
                                NFT_MSG_DELRULE,
@@ -96,9 +87,10 @@ int main(int argc, char *argv[])
        nftnl_rule_free(r);
        mnl_nlmsg_batch_next(batch);
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch), NFNL_MSG_BATCH_END,
-                         seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_end(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        nl = mnl_socket_open(NETLINK_NETFILTER);
        if (nl == NULL) {
index bae6e8e68540fc8a5c539df4e8724f7b56ba70bd..bdb93737a9e03d9f10e98dcdb13534048a7c67a5 100644 (file)
@@ -50,22 +50,6 @@ static struct nftnl_set *setup_set(uint8_t family, const char *table,
        return s;
 }
 
-static void nftnl_mnl_batch_put(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_INET;
-       nfg->version = NFNETLINK_V0;
-       nfg->res_id = NFNL_SUBSYS_NFTABLES;
-}
-
 int main(int argc, char *argv[])
 {
        struct mnl_socket *nl;
@@ -75,7 +59,7 @@ int main(int argc, char *argv[])
        uint8_t family;
        char buf[MNL_SOCKET_BUFFER_SIZE];
        uint32_t seq = time(NULL);
-       int ret;
+       int ret, batching;
 
        if (argc != 4) {
                fprintf(stderr, "Usage: %s <family> <table> <setname>\n", argv[0]);
@@ -108,11 +92,18 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
        }
 
+       batching = nftnl_batch_is_supported();
+       if (batching < 0) {
+               perror("cannot talk to nfnetlink");
+               exit(EXIT_FAILURE);
+       }
+
        batch = mnl_nlmsg_batch_start(buf, sizeof(buf));
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch),
-                         NFNL_MSG_BATCH_BEGIN, seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_begin(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        nlh = nftnl_set_nlmsg_build_hdr(mnl_nlmsg_batch_current(batch),
                                      NFT_MSG_NEWSET, family,
@@ -122,9 +113,10 @@ int main(int argc, char *argv[])
        nftnl_set_free(s);
        mnl_nlmsg_batch_next(batch);
 
-       nftnl_mnl_batch_put(mnl_nlmsg_batch_current(batch), NFNL_MSG_BATCH_END,
-                        seq++);
-       mnl_nlmsg_batch_next(batch);
+       if (batching) {
+               nftnl_batch_end(mnl_nlmsg_batch_current(batch), seq++);
+               mnl_nlmsg_batch_next(batch);
+       }
 
        ret = mnl_socket_sendto(nl, mnl_nlmsg_batch_head(batch),
                                mnl_nlmsg_batch_size(batch));