]> 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)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 6 Oct 2020 12:54:24 +0000 (15:54 +0300)
Signed-off-by: liuze <liuze@asterfusion.com>
zebra/zapi_msg.c

index 4b31b46bce430efde660d42617523109934febb8..66f535177f4f544e24f7ea00aacfcbe532e7302f 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. */