From: Ondrej Zajicek Date: Tue, 10 Jun 2025 15:10:24 +0000 (+0200) Subject: Merge remote-tracking branch 'origin/master' into thread-next X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=863321ffaa9c2cdf5bc0ec85cfac53feb979a9a0;p=thirdparty%2Fbird.git Merge remote-tracking branch 'origin/master' into thread-next --- 863321ffaa9c2cdf5bc0ec85cfac53feb979a9a0 diff --cc proto/bgp/bgp.c index 7c75978c5,d38666fab..a21302b41 --- a/proto/bgp/bgp.c +++ b/proto/bgp/bgp.c @@@ -3214,24 -2830,25 +3214,25 @@@ bgp_channel_reconfigure(struct channel if ((new->gw_mode != old->gw_mode) || (new->next_hop_prefer != old->next_hop_prefer) || (new->aigp != old->aigp) || - (new->cost != old->cost)) + (new->cost != old->cost) || + (new->c.preference != old->c.preference)) { - /* Route refresh needed, these attributes are set by BGP itself - * and even if import table exists, we can't use it */ - - /* Route refresh impossible, restart is needed */ - if ((c->c.channel_state == CS_UP) && !p->route_refresh) - return 0; - - /* Force ROUTE_REFRESH with import table; otherwise - * it will be forced by import_changed set to 1 later */ - if (c->c.in_table && (c->c.channel_state == CS_UP)) - bgp_schedule_packet(p->conn, c, PKT_ROUTE_REFRESH); - - /* Note that preference is already handled in channel_reconfigure(), - but we need it handle again here for the ROUTE_REFRESH trigger */ + /* If import table is active we have to flush it */ + if ((c->c.in_keep & RIK_PREFILTER) == RIK_PREFILTER) + { + if (p->route_refresh) + { + if (c->c.channel_state == CS_UP) + bgp_schedule_packet(p->conn, c, PKT_ROUTE_REFRESH); + } + else + /* Route refresh not possible, restart needed */ + return 0; + } - *import_changed = 1; + /* Otherwise we just do complete reload */ + else + *import_changed = 1; } if (!ipa_equal(new->next_hop_addr, old->next_hop_addr) ||