]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: reduce incoming netlink messages for dplane thread 10469/head
authorMark Stapp <mstapp@nvidia.com>
Tue, 1 Feb 2022 18:41:17 +0000 (13:41 -0500)
committerMark Stapp <mstapp@nvidia.com>
Tue, 1 Feb 2022 18:43:51 +0000 (13:43 -0500)
The dataplane pthread only processes a limited set of incoming
netlink notifications: only register for that set of events,
reducing duplicate incoming netlink messages.

Signed-off-by: Mark Stapp <mstapp@nvidia.com>
zebra/kernel_netlink.c

index d614aa26d0a8f6706d7e75d3a733ecff1df3d2af..e7ef28d0f7e0ef3f9a4b08495103ae7aa3a9427e 100644 (file)
@@ -1455,7 +1455,7 @@ void kernel_update_multi(struct dplane_ctx_q *ctx_list)
    netlink_socket (). */
 void kernel_init(struct zebra_ns *zns)
 {
-       uint32_t groups;
+       uint32_t groups, dplane_groups;
 #if defined SOL_NETLINK
        int one, ret;
 #endif
@@ -1480,6 +1480,10 @@ void kernel_init(struct zebra_ns *zns)
                ((uint32_t) 1 << (RTNLGRP_IPV6_RULE - 1)) |
                ((uint32_t) 1 << (RTNLGRP_NEXTHOP - 1));
 
+       dplane_groups = (RTMGRP_LINK            |
+                        RTMGRP_IPV4_IFADDR     |
+                        RTMGRP_IPV6_IFADDR);
+
        snprintf(zns->netlink.name, sizeof(zns->netlink.name),
                 "netlink-listen (NS %u)", zns->ns_id);
        zns->netlink.sock = -1;
@@ -1514,7 +1518,8 @@ void kernel_init(struct zebra_ns *zns)
                 sizeof(zns->netlink_dplane_in.name), "netlink-dp-in (NS %u)",
                 zns->ns_id);
        zns->netlink_dplane_in.sock = -1;
-       if (netlink_socket(&zns->netlink_dplane_in, groups, zns->ns_id) < 0) {
+       if (netlink_socket(&zns->netlink_dplane_in, dplane_groups,
+                          zns->ns_id) < 0) {
                zlog_err("Failure to create %s socket",
                         zns->netlink_dplane_in.name);
                exit(-1);