]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: export labels to pre-policy bmp
authorLouis Scalbert <louis.scalbert@6wind.com>
Tue, 27 Feb 2024 18:35:32 +0000 (19:35 +0100)
committerLouis Scalbert <louis.scalbert@6wind.com>
Thu, 3 Oct 2024 14:01:12 +0000 (16:01 +0200)
Export labels to pre-policy BMP

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
bgpd/bgp_bmp.c

index 556738a606dd7c7ac13b3a96976bb4a3a81ac436..9d99c2c7fda80882b5b81df13fa6786a6801e236 100644 (file)
@@ -1047,7 +1047,7 @@ static void bmp_monitor(struct bmp *bmp, struct peer *peer, uint8_t flags,
 
 static bool bmp_wrsync(struct bmp *bmp, struct pullwr *pullwr)
 {
-       uint8_t bpi_num_labels;
+       uint8_t bpi_num_labels, adjin_num_labels;
        afi_t afi;
        safi_t safi;
 
@@ -1241,11 +1241,12 @@ afibreak:
                            bpi_num_labels ? bpi->extra->labels->label : NULL,
                            bpi_num_labels);
 
-       if (adjin)
-               /* TODO: set label here when adjin supports labels */
-               bmp_monitor(bmp, adjin->peer, 0, BMP_PEER_TYPE_GLOBAL_INSTANCE,
-                           bn_p, prd, adjin->attr, afi, safi, adjin->uptime,
-                           NULL, 0);
+       if (adjin) {
+               adjin_num_labels = adjin->labels ? adjin->labels->num_labels : 0;
+               bmp_monitor(bmp, adjin->peer, 0, BMP_PEER_TYPE_GLOBAL_INSTANCE, bn_p, prd,
+                           adjin->attr, afi, safi, adjin->uptime,
+                           adjin_num_labels ? &adjin->labels->label[0] : NULL, adjin_num_labels);
+       }
 
        if (bn)
                bgp_dest_unlock_node(bn);
@@ -1382,7 +1383,7 @@ static bool bmp_wrqueue(struct bmp *bmp, struct pullwr *pullwr)
        struct peer *peer;
        struct bgp_dest *bn = NULL;
        bool written = false;
-       uint8_t bpi_num_labels;
+       uint8_t bpi_num_labels, adjin_num_labels;
 
        bqe = bmp_pull(bmp);
        if (!bqe)
@@ -1453,10 +1454,11 @@ static bool bmp_wrqueue(struct bmp *bmp, struct pullwr *pullwr)
                        if (adjin->peer == peer)
                                break;
                }
-               /* TODO: set label here when adjin supports labels */
-               bmp_monitor(bmp, peer, 0, BMP_PEER_TYPE_GLOBAL_INSTANCE,
-                           &bqe->p, prd, adjin ? adjin->attr : NULL, afi, safi,
-                           adjin ? adjin->uptime : monotime(NULL), NULL, 0);
+               adjin_num_labels = adjin && adjin->labels ? adjin->labels->num_labels : 0;
+               bmp_monitor(bmp, peer, 0, BMP_PEER_TYPE_GLOBAL_INSTANCE, &bqe->p, prd,
+                           adjin ? adjin->attr : NULL, afi, safi,
+                           adjin ? adjin->uptime : monotime(NULL),
+                           adjin_num_labels ? &adjin->labels->label[0] : NULL, adjin_num_labels);
                written = true;
        }