]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
KRT: Fix setting default preference
authorAlexander Zubkov <green@qrator.net>
Wed, 21 Sep 2022 15:07:11 +0000 (17:07 +0200)
committerMaria Matejka <mq@ucw.cz>
Tue, 27 Sep 2022 09:33:41 +0000 (11:33 +0200)
Changes in commit eb937358 broke setting of channel preference for alien
routes learned during scan. The preference was set only for async routes.
Move common attribute processing part of functions krt_learn_async() and
krt_learn_async() to a separate function to have only one place for such
changes.

sysdep/unix/krt.c

index c4a3a4a8c0f14419f82725836c61d81cbd04f45d..cb0f1d4fc5cf9be77bf9acad0c2e421438bf88d3 100644 (file)
@@ -318,6 +318,15 @@ krt_learn_announce_delete(struct krt_proto *p, net *n)
   rte_update(&p->p, n->n.addr, NULL);
 }
 
+static void
+krt_learn_alien_attr(struct channel *c, rte *e)
+{
+  ASSERT(!e->attrs->cached);
+  e->attrs->pref = c->preference;
+
+  e->attrs = rta_lookup(e->attrs);
+}
+
 /* Called when alien route is discovered during scan */
 static void
 krt_learn_scan(struct krt_proto *p, rte *e)
@@ -326,7 +335,7 @@ krt_learn_scan(struct krt_proto *p, rte *e)
   net *n = net_get(p->krt_table, n0->n.addr);
   rte *m, **mm;
 
-  e->attrs = rta_lookup(e->attrs);
+  krt_learn_alien_attr(p->p.main_channel, e);
 
   for(mm=&n->routes; m = *mm; mm=&m->next)
     if (krt_same_key(m, e))
@@ -438,10 +447,7 @@ krt_learn_async(struct krt_proto *p, rte *e, int new)
   net *n = net_get(p->krt_table, n0->n.addr);
   rte *g, **gg, *best, **bestp, *old_best;
 
-  ASSERT(!e->attrs->cached);
-  e->attrs->pref = p->p.main_channel->preference;
-
-  e->attrs = rta_lookup(e->attrs);
+  krt_learn_alien_attr(p->p.main_channel, e);
 
   old_best = n->routes;
   for(gg=&n->routes; g = *gg; gg = &g->next)