summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TODO15
-rw-r--r--conf/conf.c4
-rw-r--r--conf/conf.h1
-rw-r--r--nest/iface.c13
-rw-r--r--nest/iface.h1
-rw-r--r--sysdep/unix/sync-if.c2
6 files changed, 15 insertions, 21 deletions
diff --git a/TODO b/TODO
index f681997..5efbdef 100644
--- a/TODO
+++ b/TODO
@@ -5,17 +5,14 @@ Core
* cleanup debugging calls
* logging and tracing; use appropriate log levels
* check log calls for trailing newlines
-
-* Fix router ID calculation
-* debug dump: dump router ID as well
+* replace all NUM's by expr's
- TOS not supported by kernel -> automatically drop routes with TOS<>0
+- config: executable config files
- fake multipath?
-- replace all NUM's by expr's
- config file: define ipaddr constants?
- counters (according to SNMP MIB?)
-- ifdef out some debugging code?
- better memory allocators
- default preferences of protocols: prefer BGP over OSPF/RIP external routes?
- secondary addresses -> subinterfaces
@@ -23,7 +20,6 @@ Core
- better default protocol names
- config: comments at end of line -> explicit ';' needed?
-- remove post-config hooks?
- command-line arguments: name of config file
- static: check validity of route destination?
@@ -32,13 +28,10 @@ Core
- device: configuration of interface patterns
- filter: logging of dropped routes (?)
-- limitation of memory consumption: per-process and total (?)
- adding of route: check whether all bits not covered by masklen are zero
-- switch: generate default route only if at least one BGP connection exists (?)
-
+- switch: generate default route only if at least one BGP connection exists (aggregate engine?)
- route recalculation timing + flap dampening (?)
-
-- "generate default route" switch for all IGP's
+- "generate default route" switch for all IGP's (via generic aggregate engine?)
- Check incoming packets and log errors!!
diff --git a/conf/conf.c b/conf/conf.c
index 06cd3d1..dd85735 100644
--- a/conf/conf.c
+++ b/conf/conf.c
@@ -50,10 +50,6 @@ config_parse(struct config *c)
cf_lex_init_tables();
protos_preconfig(c);
cf_parse();
-#if 0 /* FIXME: We don't have interface list yet :( */
- if (!c->router_id && !(c->router_id = auto_router_id()))
- cf_error("Cannot determine router ID (no suitable network interface found), please configure it manually");
-#endif
filters_postconfig(); /* FIXME: Do we really need this? */
protos_postconfig(c);
return 1;
diff --git a/conf/conf.h b/conf/conf.h
index 54f5d5e..69f4a02 100644
--- a/conf/conf.h
+++ b/conf/conf.h
@@ -18,7 +18,6 @@ struct config {
linpool *mem; /* Linear pool containing configuration data */
list protos; /* Configured protocol instances (struct proto_config) */
u32 router_id; /* Our Router ID */
- u16 this_as; /* Our Autonomous System Number */
char *err_msg; /* Parser error message */
int err_lino; /* Line containing error */
char *file_name; /* Name of configuration file */
diff --git a/nest/iface.c b/nest/iface.c
index a0d4fb3..a3dff4a 100644
--- a/nest/iface.c
+++ b/nest/iface.c
@@ -13,9 +13,12 @@
#include "nest/protocol.h"
#include "lib/resource.h"
#include "lib/string.h"
+#include "conf/conf.h"
static pool *if_pool;
+static void auto_router_id(void);
+
/*
* Neighbor Cache
*
@@ -197,6 +200,7 @@ if_dump_all(void)
debug("Known network interfaces:\n");
WALK_LIST(i, iface_list)
if_dump(i);
+ debug("Router ID: %08x\n", config->router_id);
}
static inline int
@@ -301,6 +305,9 @@ if_end_update(void)
{
struct iface *i, j;
+ if (!config->router_id)
+ auto_router_id();
+
WALK_LIST(i, iface_list)
if (i->flags & IF_UPDATED)
i->flags &= ~IF_UPDATED;
@@ -324,7 +331,7 @@ if_feed_baby(struct proto *p)
p->if_notify(p, IF_CHANGE_CREATE | ((i->flags & IF_UP) ? IF_CHANGE_UP : 0), NULL, i);
}
-u32
+static void
auto_router_id(void) /* FIXME: What if we run IPv6??? */
{
struct iface *i, *j;
@@ -336,9 +343,9 @@ auto_router_id(void) /* FIXME: What if we run IPv6??? */
(!j || ipa_to_u32(i->ip) < ipa_to_u32(j->ip)))
j = i;
if (!j)
- return 0;
+ die("Cannot determine router ID (no suitable network interface found), please configure it manually");
debug("Guessed router ID %I (%s)\n", j->ip, j->name);
- return ipa_to_u32(j->ip);
+ config->router_id = ipa_to_u32(j->ip);
}
void
diff --git a/nest/iface.h b/nest/iface.h
index fd72bf4..83cbdb0 100644
--- a/nest/iface.h
+++ b/nest/iface.h
@@ -54,7 +54,6 @@ void if_dump_all(void);
void if_update(struct iface *);
void if_end_update(void);
void if_feed_baby(struct proto *);
-u32 auto_router_id(void);
/*
* Neighbor Cache. We hold (direct neighbor, protocol) pairs we've seen
diff --git a/sysdep/unix/sync-if.c b/sysdep/unix/sync-if.c
index cec3e86..077cb94 100644
--- a/sysdep/unix/sync-if.c
+++ b/sysdep/unix/sync-if.c
@@ -40,7 +40,7 @@ scan_ifs(struct ifreq *r, int cnt)
for (cnt /= sizeof(struct ifreq); cnt; cnt--, r++)
{
bzero(&i, sizeof(i));
- debug("%s\n", r->ifr_ifrn.ifrn_name);
+ DBG("%s\n", r->ifr_ifrn.ifrn_name);
strncpy(i.name, r->ifr_ifrn.ifrn_name, sizeof(i.name) - 1);
i.name[sizeof(i.name) - 1] = 0;
get_sockaddr((struct sockaddr_in *) &r->ifr_addr, &i.ip, NULL);