summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Machek <pavel@ucw.cz>2000-05-10 14:23:06 +0200
committerPavel Machek <pavel@ucw.cz>2000-05-10 14:23:06 +0200
commit14758d87c48e9d829f58ace0736b0c5b3c7dc6ae (patch)
tree2a217146a421fe2d457babd3f64e508efcb12fae
parent353f3261385267fd07b634284989a760fc37b79d (diff)
downloadbird-14758d87c48e9d829f58ace0736b0c5b3c7dc6ae.tar
bird-14758d87c48e9d829f58ace0736b0c5b3c7dc6ae.zip
Only announce change to main routing table if it is better than current.
-rw-r--r--proto/rip/rip.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/proto/rip/rip.c b/proto/rip/rip.c
index 39b38a6..52dce5d 100644
--- a/proto/rip/rip.c
+++ b/proto/rip/rip.c
@@ -235,6 +235,16 @@ find_interface(struct proto *p, struct iface *what)
* Input processing
*/
+static void
+rip_rte_update_if_better(rtable *tab, net *net, struct proto *p, rte *new)
+{
+ rte *old;
+
+ old = rte_find(net, p);
+ if (!old || rip_rte_better(new, old))
+ rte_update(tab, net, p, new);
+}
+
/* Let main routing table know about our new entry */
static void
advertise_entry( struct proto *p, struct rip_block *b, ip_addr whotoldme )
@@ -292,7 +302,7 @@ advertise_entry( struct proto *p, struct rip_block *b, ip_addr whotoldme )
r->u.rip.tag = ntohl(b->tag);
r->net = n;
r->pflags = 0; /* Here go my flags */
- rte_update( p->table, n, p, r );
+ rip_rte_update_if_better( p->table, n, p, r );
DBG( "done\n" );
}