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) ||