]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: fix label allocation should not be allocated at startup
authorPhilippe Guibert <philippe.guibert@6wind.com>
Fri, 1 Sep 2023 15:51:54 +0000 (17:51 +0200)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Wed, 18 Oct 2023 07:41:02 +0000 (09:41 +0200)
BGP always asks zebra for a chunk of MPLS label even if it doesn't need it.
Fix this by correcting the rounding up "labels_needed" formula.

Fixes: 80853c2ec7f8 ("bgpd: improve labelpool performance at scale")
Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
bgpd/bgp_labelpool.c
tests/topotests/bgp_lu_topo1/R2/labelpool.summ.json

index d33f14ac4192bb78de59f04f5c52ee4fd7a3013b..03987b6bbf54eb9ef3fd849b41d8638fc9b8be85 100644 (file)
@@ -642,7 +642,11 @@ void bgp_lp_event_zebra_up(void)
        }
 
        /* round up */
-       chunks_needed = (labels_needed / lp->next_chunksize) + 1;
+       if (((float)labels_needed / (float)lp->next_chunksize) >
+           (labels_needed / lp->next_chunksize))
+               chunks_needed = (labels_needed / lp->next_chunksize) + 1;
+       else
+               chunks_needed = (labels_needed / lp->next_chunksize);
        labels_needed = chunks_needed * lp->next_chunksize;
 
        /*
@@ -650,8 +654,8 @@ void bgp_lp_event_zebra_up(void)
         */
        list_delete_all_node(lp->chunks);
 
-       if (!bgp_zebra_request_label_range(MPLS_LABEL_BASE_ANY, labels_needed,
-                                          true))
+       if (labels_needed && !bgp_zebra_request_label_range(MPLS_LABEL_BASE_ANY,
+                                                           labels_needed, true))
                return;
 
        lp->pending_count = labels_needed;
index d35e4ef463041b646e2b9f55425d6e3be5e0fb7c..17b9accb4a50b168b10dd0b35921f3b76c51ce81 100644 (file)
@@ -2,5 +2,5 @@
   "ledger":0,
   "inUse":0,
   "requests":0,
-  "labelChunks":1
+  "labelChunks":0
 }