aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2023-09-30 23:18:04 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2023-10-04 13:12:05 +0200
commitd8130da86bda6244e1f5c06eb9b9033625b781e6 (patch)
tree419db3b2a127896dfc54251cb5017310c3d86036
parenta7a9df8639c701dd020cf61d19b205230742a17e (diff)
downloadbird-d8130da86bda6244e1f5c06eb9b9033625b781e6.tar.gz
BGP, L3VPN: Fix MPLS channel reload
When a MPLS channel is reloaded, it should reload all regular MPLS-aware channels. This causes re-evaluation of routes in FEC map and possibly reannouncement of MPLS routes.
-rw-r--r--proto/bgp/bgp.c10
-rw-r--r--proto/l3vpn/l3vpn.c3
2 files changed, 12 insertions, 1 deletions
diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c
index 4651b76a..f8146bdf 100644
--- a/proto/bgp/bgp.c
+++ b/proto/bgp/bgp.c
@@ -1414,6 +1414,16 @@ bgp_reload_routes(struct channel *C)
struct bgp_proto *p = (void *) C->proto;
struct bgp_channel *c = (void *) C;
+ /* For MPLS channel, reload all MPLS-aware channels */
+ if (C == p->p.mpls_channel)
+ {
+ BGP_WALK_CHANNELS(p, c)
+ if ((c->desc->mpls) && (p->route_refresh || c->c.in_table))
+ bgp_reload_routes(&c->c);
+
+ return;
+ }
+
/* Ignore non-BGP channels */
if (C->channel != &channel_bgp)
return;
diff --git a/proto/l3vpn/l3vpn.c b/proto/l3vpn/l3vpn.c
index 38441208..b7f60504 100644
--- a/proto/l3vpn/l3vpn.c
+++ b/proto/l3vpn/l3vpn.c
@@ -296,7 +296,8 @@ l3vpn_reload_routes(struct channel *C)
break;
case NET_MPLS:
- /* FIXME */
+ channel_request_feeding(p->ip4_channel);
+ channel_request_feeding(p->ip6_channel);
break;
}
}