From 5cc347c4b9b013940860d007264cf4d0eea0fdd5 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 29 May 2018 20:04:17 -0400 Subject: [PATCH 1/2] bgpd: Add null0 route back for aggregate-address route created. The aggregate-address command is not creating the null0 route. This got lost somewhere in the last year or so. Add this ability back for BGP route installs into zebra. We need this aggregate route installed into the rib because we are drawing this traffic to us irrelevant of the number of routes we do have for that prefix. Signed-off-by: Donald Sharp --- bgpd/bgp_zebra.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index 7a6b80f3a2..e4f4823e6f 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -1235,13 +1235,6 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p, tag = info->attr->tag; - /* - * When we create an aggregate route we must also install a - * Null0 route in the RIB - */ - if (info->sub_type == BGP_ROUTE_AGGREGATE) - zapi_route_set_blackhole(&api, BLACKHOLE_NULL); - /* If the route's source is EVPN, flag as such. */ is_evpn = is_route_parent_evpn(info); if (is_evpn) @@ -1381,7 +1374,14 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p, if (has_valid_label && !(CHECK_FLAG(api.flags, ZEBRA_FLAG_EVPN_ROUTE))) SET_FLAG(api.message, ZAPI_MESSAGE_LABEL); - if (info->sub_type != BGP_ROUTE_AGGREGATE) + /* + * When we create an aggregate route we must also + * install a Null0 route in the RIB, so overwrite + * what was written into api with a blackhole route + */ + if (info->sub_type == BGP_ROUTE_AGGREGATE) + zapi_route_set_blackhole(&api, BLACKHOLE_NULL); + else api.nexthop_num = valid_nh_count; SET_FLAG(api.message, ZAPI_MESSAGE_METRIC); From f220da9968741598ef224cdaf66a131026498a64 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 31 May 2018 09:37:34 -0400 Subject: [PATCH 2/2] bgpd: Fix SA issue with uninited ifindex value The rearrangement of where the decision point of filling in the aggregate information, must have allowed SA to find a path of code where we may use ifindex uninitialized. While I don't think this is possible to happen, make this issue go away. Signed-off-by: Donald Sharp --- bgpd/bgp_zebra.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c index e4f4823e6f..1cd51cb6f4 100644 --- a/bgpd/bgp_zebra.c +++ b/bgpd/bgp_zebra.c @@ -1316,7 +1316,7 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p, &mpinfo_cp->attr->nexthop, mpinfo_cp->attr, is_evpn, api_nh); } else { - ifindex_t ifindex; + ifindex_t ifindex = IFINDEX_INTERNAL; struct in6_addr *nexthop; if (bgp->table_map[afi][safi].name) {