]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
mnl: add mnl_set_rcvbuffer() and use it
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 29 May 2019 15:27:04 +0000 (17:27 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 31 May 2019 15:57:35 +0000 (17:57 +0200)
This new function allows us to set the netlink receiver buffer.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/mnl.c

index f6363560721c182e569f403e90f8d6ce341bea58..288a887df0977673ef62abe56b09f8a8454a0f3a 100644 (file)
--- a/src/mnl.c
+++ b/src/mnl.c
@@ -233,6 +233,23 @@ static void mnl_set_sndbuffer(const struct mnl_socket *nl,
        nlbuffsiz = newbuffsiz;
 }
 
+static int mnl_set_rcvbuffer(const struct mnl_socket *nl, size_t bufsiz)
+{
+       int ret;
+
+       ret = setsockopt(mnl_socket_get_fd(nl), SOL_SOCKET, SO_RCVBUFFORCE,
+                        &bufsiz, sizeof(socklen_t));
+       if (ret < 0) {
+               /* If this doesn't work, try to reach the system wide maximum
+                * (or whatever the user requested).
+                */
+               ret = setsockopt(mnl_socket_get_fd(nl), SOL_SOCKET, SO_RCVBUF,
+                                &bufsiz, sizeof(socklen_t));
+       }
+
+       return ret;
+}
+
 static ssize_t mnl_nft_socket_sendmsg(const struct netlink_ctx *ctx)
 {
        static const struct sockaddr_nl snl = {
@@ -1391,20 +1408,12 @@ int mnl_nft_event_listener(struct mnl_socket *nf_sock, unsigned int debug_mask,
        fd_set readfds;
        int ret;
 
-       ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUFFORCE, &bufsiz,
-                        sizeof(socklen_t));
-       if (ret < 0) {
-               /* If this doesn't work, try to reach the system wide maximum
-                * (or whatever the user requested).
-                */
-               ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &bufsiz,
-                                sizeof(socklen_t));
-               if (ret < 0)
-                       nft_print(octx, "# Cannot increase netlink socket buffer size, expect message loss\n");
-               else
-                       nft_print(octx, "# Cannot set up netlink socket buffer size to %u bytes, falling back to %u bytes\n",
-                                 NFTABLES_NLEVENT_BUFSIZ, bufsiz);
-       }
+       ret = mnl_set_rcvbuffer(nf_sock, bufsiz);
+       if (ret < 0)
+               nft_print(octx, "# Cannot increase netlink socket buffer size, expect message loss\n");
+       else
+               nft_print(octx, "# Cannot set up netlink socket buffer size to %u bytes, falling back to %u bytes\n",
+                         NFTABLES_NLEVENT_BUFSIZ, bufsiz);
 
        while (1) {
                FD_ZERO(&readfds);