]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Realign SOL_NETLINK to warn when FRR does not have it 11507/head
authorDonald Sharp <sharpd@nvidia.com>
Thu, 30 Jun 2022 12:03:02 +0000 (08:03 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Thu, 30 Jun 2022 12:03:02 +0000 (08:03 -0400)
There exists a possibility that an end operator has choosen
to compile FRR on an extremely old KERNEL that does not support
the SOL_NETLINK sockopt call.  If so let's note it for them
instead of stuff silently not working.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/kernel_netlink.c

index e372eaf6a2db87c2ca8075e3a4e5b016bc97af45..31d8294a0fb07d6fc92259fc2bc00ded2b9a5faa 100644 (file)
@@ -322,11 +322,11 @@ static int netlink_socket(struct nlsock *nl, unsigned long groups,
                snl.nl_family = AF_NETLINK;
                snl.nl_groups = groups;
 
-#if defined SOL_NETLINK
                if (ext_group_size) {
                        uint8_t i;
 
                        for (i = 0; i < ext_group_size; i++) {
+#if defined SOL_NETLINK
                                ret = setsockopt(sock, SOL_NETLINK,
                                                 NETLINK_ADD_MEMBERSHIP,
                                                 &ext_groups[i],
@@ -338,9 +338,14 @@ static int netlink_socket(struct nlsock *nl, unsigned long groups,
                                                ext_groups[i],
                                                safe_strerror(errno), errno);
                                }
+#else
+                               zlog_notice(
+                                       "Unable to use NETLINK_ADD_MEMBERSHIP via SOL_NETLINK for %s(%u) since the linux kernel does not support the socket option",
+                                       group2str(ext_groups[i]),
+                                       ext_groups[i]);
+#endif
                        }
                }
-#endif
 
                /* Bind the socket to the netlink structure for anything. */
                ret = bind(sock, (struct sockaddr *)&snl, sizeof(snl));