]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BGP: fixed MPLS label stack receiving bug
authorMaria Matejka <mq@ucw.cz>
Sun, 28 Jan 2024 12:14:58 +0000 (13:14 +0100)
committerMaria Matejka <mq@ucw.cz>
Sun, 28 Jan 2024 12:16:25 +0000 (13:16 +0100)
Introduced in 515df18da742442323047a13b04ecc2bd97b0855 while merging v2 to v3.

proto/bgp/bgp.h
proto/bgp/packets.c

index 075882b59adb135f820947573fc00b5b309db70d..b59b02d831e9c6d06ae3b118d1568d11ec7ec0a5 100644 (file)
@@ -505,8 +505,6 @@ struct bgp_parse_state {
   uint err_subcode;
   jmp_buf err_jmpbuf;
 
-  adata *mpls_labels;
-
   /* Cached state for bgp_rte_update() */
   u32 last_id;
   struct rte_src *last_src;
index b2228db75479cd375ff85e39fadb057206c23ca5..624cabc18902766aedaa05f3ca0f2e0dd565184b 100644 (file)
@@ -1077,6 +1077,8 @@ bgp_apply_next_hop(struct bgp_parse_state *s, ea_list **to, ip_addr gw, ip_addr
 static void
 bgp_apply_mpls_labels(struct bgp_parse_state *s, ea_list **to, u32 lnum, u32 labels[lnum])
 {
+  bgp_set_attr_data(to, BA_MPLS_LABEL_STACK, 0, labels, lnum * sizeof labels[0]);
+
   if (lnum > MPLS_MAX_LABEL_STACK)
   {
     REPORT("Too many MPLS labels ($u)", lnum);
@@ -1087,7 +1089,7 @@ bgp_apply_mpls_labels(struct bgp_parse_state *s, ea_list **to, u32 lnum, u32 lab
 
   /* Handle implicit NULL as empty MPLS stack */
   if ((lnum == 1) && (labels[0] == BGP_MPLS_NULL))
-    lnum = s->mpls_labels->length = 0;
+    lnum = 0;
 
   if (s->channel->cf->gw_mode == GW_DIRECT)
   {