]> git.ipfire.org Git - thirdparty/wireguard-tools.git/commitdiff
netlink: don't pretend that sysconf isn't a function
authorJason A. Donenfeld <Jason@zx2c4.com>
Wed, 5 Feb 2020 22:59:55 +0000 (23:59 +0100)
committerJason A. Donenfeld <Jason@zx2c4.com>
Wed, 5 Feb 2020 22:59:55 +0000 (23:59 +0100)
We can cache the value of this instead of evaluating every time.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
src/ipc.c
src/netlink.h

index a0bf60773903e3de512ee05b0254d792d36730af..b9d25324c94b4ec6190c9087e46f7e817d37d899 100644 (file)
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -40,7 +40,7 @@
 #define SOCK_PATH RUNSTATEDIR "/wireguard/"
 #define SOCK_SUFFIX ".sock"
 #ifdef __linux__
-#define SOCKET_BUFFER_SIZE MNL_SOCKET_BUFFER_SIZE
+#define SOCKET_BUFFER_SIZE (mnl_ideal_socket_buffer_size())
 #else
 #define SOCKET_BUFFER_SIZE 8192
 #endif
index 2e36369f2ecc425c12bf2af7c523c34cbb77d59c..9d936c0480c04c0b49b4d34692df4836da3c7a4a 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/genetlink.h>
 
 #define MNL_SOCKET_AUTOPID 0
-#define MNL_SOCKET_BUFFER_SIZE (sysconf(_SC_PAGESIZE) < 8192L ? sysconf(_SC_PAGESIZE) : 8192L)
 #define MNL_ALIGNTO 4
 #define MNL_ALIGN(len) (((len)+MNL_ALIGNTO-1) & ~(MNL_ALIGNTO-1))
 #define MNL_NLMSG_HDRLEN MNL_ALIGN(sizeof(struct nlmsghdr))
@@ -68,6 +67,18 @@ typedef int (*mnl_cb_t)(const struct nlmsghdr *nlh, void *data);
 #define MNL_ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
 #endif
 
+static size_t mnl_ideal_socket_buffer_size(void)
+{
+       static size_t size = 0;
+
+       if (size)
+               return size;
+       size = (size_t)sysconf(_SC_PAGESIZE);
+       if (size > 8192)
+               size = 8192;
+       return size;
+}
+
 static size_t mnl_nlmsg_size(size_t len)
 {
        return len + MNL_NLMSG_HDRLEN;
@@ -680,7 +691,7 @@ static int mnlg_socket_recv_run(struct mnlg_socket *nlg, mnl_cb_t data_cb, void
 
        do {
                err = mnl_socket_recvfrom(nlg->nl, nlg->buf,
-                                         MNL_SOCKET_BUFFER_SIZE);
+                                         mnl_ideal_socket_buffer_size());
                if (err <= 0)
                        break;
                err = mnl_cb_run2(nlg->buf, err, nlg->seq, nlg->portid,
@@ -728,7 +739,7 @@ static struct mnlg_socket *mnlg_socket_open(const char *family_name, uint8_t ver
                return NULL;
 
        err = -ENOMEM;
-       nlg->buf = malloc(MNL_SOCKET_BUFFER_SIZE);
+       nlg->buf = malloc(mnl_ideal_socket_buffer_size());
        if (!nlg->buf)
                goto err_buf_alloc;