From: Ondrej Zajicek (work) Date: Thu, 10 Oct 2019 21:33:40 +0000 (+0200) Subject: BGP: Fix reconfiguration with import table X-Git-Tag: v2.0.7~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6c9cda6f924ec400e6e55ed009bfaf7a7fd9819d;p=thirdparty%2Fbird.git BGP: Fix reconfiguration with import table Change of some options requires route refresh, but when import table is active, channel reload is done from it instead of doing full route refresh. So in this case we request it internally. --- diff --git a/proto/bgp/bgp.c b/proto/bgp/bgp.c index 68b716b2f..e33d53f52 100644 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@ -2073,6 +2073,7 @@ bgp_reconfigure(struct proto *P, struct proto_config *CF) static int bgp_channel_reconfigure(struct channel *C, struct channel_config *CC, int *import_changed, int *export_changed) { + struct bgp_proto *p = (void *) C->proto; struct bgp_channel *c = (void *) C; struct bgp_channel_config *new = (void *) CC; struct bgp_channel_config *old = c->cf; @@ -2095,7 +2096,13 @@ bgp_channel_reconfigure(struct channel *C, struct channel_config *CC, int *impor if ((new->gw_mode != old->gw_mode) || (new->aigp != old->aigp) || (new->cost != old->cost)) + { + /* import_changed itself does not force ROUTE_REFRESH when import_table is active */ + if (c->c.in_table && (c->c.channel_state == CS_UP)) + bgp_schedule_packet(p->conn, c, PKT_ROUTE_REFRESH); + *import_changed = 1; + } if (!ipa_equal(new->next_hop_addr, old->next_hop_addr) || (new->next_hop_self != old->next_hop_self) ||