]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Solve the problem of high CPU and memory usage when creating thousands of vrf
authorliuze <liuze@asterfusion.com>
Wed, 26 Aug 2020 09:41:29 +0000 (17:41 +0800)
committerliuze <liuze@asterfusion.com>
Wed, 26 Aug 2020 09:41:29 +0000 (17:41 +0800)
Signed-off-by: liuze <liuze@asterfusion.com>
zebra/zapi_msg.c

index 2bcb3502d509e64c901d83e57bb8ab5fc9e74e9d..5d14e0e6d6ddc583d4d0100841885ef13222adea 100644 (file)
@@ -1349,6 +1349,20 @@ static void zread_interface_add(ZAPI_HANDLER_ARGS)
        struct vrf *vrf;
        struct interface *ifp;
 
+       vrf_id_t vrf_id = zvrf_id(zvrf);
+       if (vrf_id != VRF_DEFAULT && vrf_id != VRF_UNKNOWN) {
+               FOR_ALL_INTERFACES (zvrf->vrf, ifp) {
+                       /* Skip pseudo interface. */
+                       if (!CHECK_FLAG(ifp->status, ZEBRA_INTERFACE_ACTIVE))
+                               continue;
+
+                       zsend_interface_add(client, ifp);
+                       zsend_interface_link_params(client, ifp);
+                       zsend_interface_addresses(client, ifp);
+               }
+               return;
+       }
+
        RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) {
                FOR_ALL_INTERFACES (vrf, ifp) {
                        /* Skip pseudo interface. */