]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
examples: nft-set-elem-add: add missing batch logic
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 30 Nov 2016 21:07:32 +0000 (22:07 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 30 Nov 2016 21:07:58 +0000 (22:07 +0100)
This example is broken since batch logic in missing. Update it to add
element of 2 bytes so this works with nft-set-add.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
examples/nft-set-elem-add.c

index 609b7bb8c926ffe33366a3a64736c7e94d1ea53c..d5d93d3cf94152ecd013bc6ef276928d0af6591c 100644 (file)
@@ -24,10 +24,12 @@ int main(int argc, char *argv[])
 {
        struct mnl_socket *nl;
        char buf[MNL_SOCKET_BUFFER_SIZE];
+       struct mnl_nlmsg_batch *batch;
        struct nlmsghdr *nlh;
-       uint32_t portid, seq, family, data;
+       uint32_t portid, seq, family;
        struct nftnl_set *s;
        struct nftnl_set_elem *e;
+       uint16_t data;
        int ret;
 
        if (argc != 4) {
@@ -78,10 +80,21 @@ int main(int argc, char *argv[])
        nftnl_set_elem_set(e, NFTNL_SET_ELEM_KEY, &data, sizeof(data));
        nftnl_set_elem_add(s, e);
 
-       nlh = nftnl_set_nlmsg_build_hdr(buf, NFT_MSG_NEWSETELEM, family,
-                                     NLM_F_CREATE|NLM_F_EXCL|NLM_F_ACK, seq);
+       batch = mnl_nlmsg_batch_start(buf, sizeof(buf));
+
+       nftnl_batch_begin(mnl_nlmsg_batch_current(batch), seq++);
+       mnl_nlmsg_batch_next(batch);
+
+       nlh = nftnl_nlmsg_build_hdr(mnl_nlmsg_batch_current(batch),
+                                   NFT_MSG_NEWSETELEM, family,
+                                   NLM_F_CREATE | NLM_F_EXCL | NLM_F_ACK,
+                                   seq++);
        nftnl_set_elems_nlmsg_build_payload(nlh, s);
        nftnl_set_free(s);
+       mnl_nlmsg_batch_next(batch);
+
+       nftnl_batch_end(mnl_nlmsg_batch_current(batch), seq++);
+       mnl_nlmsg_batch_next(batch);
 
        nl = mnl_socket_open(NETLINK_NETFILTER);
        if (nl == NULL) {
@@ -95,14 +108,17 @@ int main(int argc, char *argv[])
        }
        portid = mnl_socket_get_portid(nl);
 
-       if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
+       if (mnl_socket_sendto(nl, mnl_nlmsg_batch_head(batch),
+                             mnl_nlmsg_batch_size(batch)) < 0) {
                perror("mnl_socket_send");
                exit(EXIT_FAILURE);
        }
 
+       mnl_nlmsg_batch_stop(batch);
+
        ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));
        while (ret > 0) {
-               ret = mnl_cb_run(buf, ret, seq, portid, NULL, NULL);
+               ret = mnl_cb_run(buf, ret, 0, portid, NULL, NULL);
                if (ret <= 0)
                        break;
                ret = mnl_socket_recvfrom(nl, buf, sizeof(buf));