]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
BGP: Fix reconfiguration with import table
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 10 Oct 2019 21:33:40 +0000 (23:33 +0200)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Thu, 10 Oct 2019 21:33:40 +0000 (23:33 +0200)
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.

proto/bgp/bgp.c

index 68b716b2ffb433bd7b271f2a6b1b3bf572c45157..e33d53f521a0fabd1d7ce9fa065019078de89252 100644 (file)
@@ -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) ||