From: Maria Matejka Date: Fri, 5 Aug 2022 09:14:33 +0000 (+0200) Subject: Merge branch 'backport' into thread-next X-Git-Tag: v3.0-alpha1~160 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=95d970d7a0e7bd6cab03f3b8535eed031c43773c;p=thirdparty%2Fbird.git Merge branch 'backport' into thread-next --- 95d970d7a0e7bd6cab03f3b8535eed031c43773c diff --cc proto/rip/rip.c index ab0e3f4b3,b0b5b8a16..183fc265d --- a/proto/rip/rip.c +++ b/proto/rip/rip.c @@@ -1112,33 -1101,18 +1112,27 @@@ rip_reload_routes(struct channel *C rip_kick_timer(p); } +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 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 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) {