From: Katerina Kubecova Date: Wed, 2 Jul 2025 08:45:07 +0000 (+0200) Subject: fixup! WIP: looks like ip 6 in bgp_decode_nlri_ip4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=db6caab9f6c7d7503e49aa250dfeae4500118e28;p=thirdparty%2Fbird.git fixup! WIP: looks like ip 6 in bgp_decode_nlri_ip4 --- diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c index 5e2637173..455e92508 100644 --- a/proto/bgp/packets.c +++ b/proto/bgp/packets.c @@ -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); diff --git a/proto/mrt/mrt_load.c b/proto/mrt/mrt_load.c index 69ee830ed..fbfea6f30 100644 --- a/proto/mrt/mrt_load.c +++ b/proto/mrt/mrt_load.c @@ -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