]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Merge branch 'backport' into thread-next
authorMaria Matejka <mq@ucw.cz>
Fri, 5 Aug 2022 09:14:33 +0000 (11:14 +0200)
committerMaria Matejka <mq@ucw.cz>
Fri, 5 Aug 2022 09:14:33 +0000 (11:14 +0200)
1  2 
proto/rip/rip.c

diff --cc proto/rip/rip.c
index ab0e3f4b3909348b76c03d09b985bfbb5b91fcbb,b0b5b8a16917aaa507d093f3336e1cf1d8f27cdb..183fc265dc298e520cf7a29afc9439d16158a1e3
@@@ -1112,33 -1101,18 +1112,27 @@@ rip_reload_routes(struct channel *C
    rip_kick_timer(p);
  }
  
- static int
- rip_rte_better(struct rte *new, struct rte *old)
- {
-   ASSERT_DIE(new->src == old->src);
-   struct rip_proto *p = rip_rte_proto(new);
-   u32 new_metric = ea_get_int(new->attrs, &ea_rip_metric, p->infinity);
-   u32 old_metric = ea_get_int(old->attrs, &ea_rip_metric, p->infinity);
-   return new_metric < old_metric;
- }
 +static struct rte_owner_class rip_rte_owner_class;
 +
 +static inline struct rip_proto *
 +rip_rte_proto(struct rte *rte)
 +{
 +  return (rte->src->owner->class == &rip_rte_owner_class) ?
 +    SKIP_BACK(struct rip_proto, p.sources, rte->src->owner) : NULL;
 +}
 +
  static u32
 -rip_rte_igp_metric(struct rte *rt)
 +rip_rte_igp_metric(const rte *rt)
  {
 -  return ea_get_int(rt->attrs->eattrs, EA_RIP_METRIC, IGP_METRIC_UNKNOWN);
 +  return ea_get_int(rt->attrs, &ea_rip_metric, IGP_METRIC_UNKNOWN);
  }
  
+ static int
+ rip_rte_better(struct rte *new, struct rte *old)
+ {
+   return rip_rte_igp_metric(new) < rip_rte_igp_metric(old);
+ }
  static void
  rip_postconfig(struct proto_config *CF)
  {