]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
fixup! WIP: looks like ip 6 in bgp_decode_nlri_ip4
authorKaterina Kubecova <katerina.kubecova@nic.cz>
Wed, 2 Jul 2025 08:45:07 +0000 (10:45 +0200)
committerKaterina Kubecova <katerina.kubecova@nic.cz>
Wed, 2 Jul 2025 08:45:07 +0000 (10:45 +0200)
proto/bgp/packets.c
proto/mrt/mrt_load.c

index 5e263717388ac31ab037cca1568dd079bc4ffd11..455e925081f3b27dfad85d63ba06145ed6aa417f 100644 (file)
@@ -2870,10 +2870,27 @@ bgp_parse_update(struct bgp_parse_state *s, byte *pkt, uint len, ea_list **ea)
   else
     *ea = NULL;
 
+  if (s->is_mrt_parse)
+  {
+    /* filter afis which are not channel afi */
+    if (s->mp_reach_af)
+    {
+      if (s->mp_reach_af !=  s->desc->afi)
+        return;
+    }
+    else if (s->mp_unreach_af)
+    {
+      if (s->mp_unreach_af !=  s->desc->afi)
+        return;
+    }
+    else
+      if (s->desc->afi >> 16 != BGP_AFI_IPV4)
+        return;
+  }
+
   struct rte_ctx_adata *rcad = lp_allocz(s->pool, sizeof *rcad);
   rcad->ad.length = sizeof *rcad - sizeof rcad->ad;
   rcad->ctx = &s->proto_attrs->bgp_rte_ctx;
-  log("ctx %x, fc ptr %x (%s)", rcad->ctx, rcad->ctx->rte_recalculate, s->proto_name);
   ASSERT_DIE(s->proto_name);
   ea_set_attr_ptr(ea, s->pool, EA_ROUTE_CONTEXT, 0, EAF_TYPE_OPAQUE, &rcad->ad);
 
index 69ee830edab4de45e6a2a2bb4a328e7d7101ec80..fbfea6f30549e7aebf9169ab392174a23b1c8ba5 100644 (file)
@@ -166,9 +166,6 @@ mrt_parse_bgp4mp_message(FILE *fp, u64 *remains, bool as4, struct proto *P)
   struct mrtload_proto *p = (void *) P;
   struct mrtload_route_ctx *proto_attrs = mrt_parse_bgp_message(fp, remains, as4, p);
   log("addr fam %x", proto_attrs->addr_fam);
-  if (proto_attrs->addr_fam != p->addr_fam)
-    return;
-  log("continue");
 
   if (*remains < 19)
   {
@@ -203,6 +200,8 @@ mrt_parse_bgp4mp_message(FILE *fp, u64 *remains, bool as4, struct proto *P)
     .apply_mpls_labels = mrt_apply_mpls_labels,
     .is_mrt_parse = 1,
     .p = P,
+    .as4_session = as4,
+    .desc = p->channel->desc, // desc is set later in bgp, but we need afi to compare
   };
 
   s.proto_attrs = &proto_attrs->ctx;
@@ -286,7 +285,7 @@ mrtload(struct proto *P)
 
   /* Parsing mrt headers in loop. MRT_BGP4MP messages are loaded, the rest is skipped. */
   int temporary = 0; //TODO REMOVE!!! THIS IS FOR TESTING PURPOSES ONLY!
-  while (mrt_parse_general_header(fp, P)){if (temporary++>2000) break; log("%i temporary",temporary);}
+  while (mrt_parse_general_header(fp, P)){if (temporary++>400) break; log("%i temporary",temporary);}
 }
 
 void