linux-cp: stop signaling read event on every notif 25/35525/4
authorAlexander Chernavin <achernavin@netgate.com>
Fri, 22 Oct 2021 10:46:39 +0000 (10:46 +0000)
committerMatthew Smith <mgsmith@netgate.com>
Fri, 4 Mar 2022 21:02:37 +0000 (21:02 +0000)
Type: improvement

Currently, read event signal is sent on every notification message
received and added in the queue.

With this change, signal read event only when all currently available
notification messages are received.

Signed-off-by: Alexander Chernavin <achernavin@netgate.com>
Change-Id: Ib86d189311ce01f50167e4e97feb99df0292ad96

src/plugins/linux-cp/lcp_nl.c

index 02954c3..43f5319 100644 (file)
@@ -701,13 +701,6 @@ nl_route_cb (struct nl_msg *msg, void *arg)
   msg_info->msg = msg;
   nlmsg_get (msg);
 
-  /* notify process node if netlink notification processing is active */
-  if (nm->nl_status == NL_STATUS_NOTIF_PROC)
-    {
-      vlib_process_signal_event (vlib_get_main (), nl_route_process_node.index,
-                                NL_EVENT_READ, 0);
-    }
-
   return 0;
 }
 
@@ -725,6 +718,15 @@ lcp_nl_drain_messages (void)
   if (err != -NLE_AGAIN)
     vlib_process_signal_event (vlib_get_main (), nl_route_process_node.index,
                               NL_EVENT_ERR, 0);
+  else
+    {
+      /* If netlink notification processing is active, signal process node
+       * there were notifications read
+       */
+      if (nm->nl_status == NL_STATUS_NOTIF_PROC)
+       vlib_process_signal_event (
+         vlib_get_main (), nl_route_process_node.index, NL_EVENT_READ, 0);
+    }
 
   return err;
 }