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);
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)
{
.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;
/* 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