From 7d8329078066b5682a0330b20dbdf74c7a01cbac Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 19 Oct 1998 18:13:36 +0000 Subject: Generate router_id automatically if possible (standard "smallest of local regular interface addresses" rule). Protocols should NOT rely on router_id existence -- when router ID is not available, the router_id variable is set to zero and protocols requiring valid router ID should just refuse to start, reporting such error to the log. --- nest/iface.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'nest/iface.c') diff --git a/nest/iface.c b/nest/iface.c index f6f33a9..5f356fd 100644 --- a/nest/iface.c +++ b/nest/iface.c @@ -15,6 +15,8 @@ static pool *if_pool; +u32 router_id; + /* * Neighbor Cache * @@ -196,7 +198,7 @@ if_dump_all(void) debug("Known network interfaces:\n"); WALK_LIST(i, iface_list) if_dump(i); - debug("\n"); + debug("\nRouter ID: %08x\n\n", router_id); } static inline int @@ -324,6 +326,25 @@ if_feed_baby(struct proto *p) p->if_notify(p, IF_CHANGE_CREATE | ((i->flags & IF_UP) ? IF_CHANGE_UP : 0), NULL, i); } +void +auto_router_id(void) /* FIXME: What if we run IPv6??? */ +{ + struct iface *i, *j; + + if (router_id) + return; + j = NULL; + WALK_LIST(i, iface_list) + if ((i->flags & IF_UP) && + !(i->flags & (IF_UNNUMBERED | IF_LOOPBACK | IF_IGNORE)) && + (!j || ipa_to_u32(i->ip) < ipa_to_u32(j->ip))) + j = i; + if (!j) /* FIXME: allow configuration or running without RID */ + die("Cannot determine router ID, please configure manually"); + router_id = ipa_to_u32(j->ip); + debug("Router ID set to %08x (%s)\n", router_id, j->name); +} + void if_init(void) { -- cgit v1.2.3