From 0432c0173bb4d234e8ba8e4afea0a8e708e119d8 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sun, 18 Oct 1998 11:53:21 +0000 Subject: [PATCH] Split protocol init to building of protocol list and real protocol init. Added kernel route table syncer skeleton. --- nest/proto.c | 11 +++++--- nest/protocol.h | 1 + nest/route.h | 1 + sysdep/unix/Modules | 1 + sysdep/unix/main.c | 2 ++ sysdep/unix/sync-if.c | 1 - sysdep/unix/sync-rt.c | 62 +++++++++++++++++++++++++++++++++++++++++++ sysdep/unix/unix.h | 4 +++ 8 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 sysdep/unix/sync-rt.c diff --git a/nest/proto.c b/nest/proto.c index 6db5a0ef..6c0843d8 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -106,15 +106,20 @@ protos_dump_all(void) debug(" inactive %s\n", p->name); } +void +protos_build(void) +{ + init_list(&protocol_list); + add_tail(&protocol_list, &proto_device.n); + add_tail(&protocol_list, &proto_rip.n); +} + void protos_init(void) { struct protocol *p; debug("Initializing protocols\n"); - init_list(&protocol_list); - add_tail(&protocol_list, &proto_device.n); - add_tail(&protocol_list, &proto_rip.n); /* HACK: We should really read this from config */ WALK_LIST(p, protocol_list) p->init(p); } diff --git a/nest/protocol.h b/nest/protocol.h index 6059f7c2..9a0ea98d 100644 --- a/nest/protocol.h +++ b/nest/protocol.h @@ -32,6 +32,7 @@ struct protocol { void (*postconfig)(struct protocol *); /* After configuring */ }; +void protos_build(void); void protos_init(void); void protos_preconfig(void); void protos_postconfig(void); diff --git a/nest/route.h b/nest/route.h index e50de07d..78f9446a 100644 --- a/nest/route.h +++ b/nest/route.h @@ -248,6 +248,7 @@ void rta_dump_all(void); #define DEF_PREF_BGP 100 /* BGP */ #define DEF_PREF_OSPF_EXTERNAL 80 /* OSPF external routes */ #define DEF_PREF_RIP_EXTERNAL 70 /* RIP external routes */ +#define DEF_PREF_UKR 50 /* Unidentified Kernel Route */ #define DEF_PREF_SINK 10 /* Sink route */ #endif diff --git a/sysdep/unix/Modules b/sysdep/unix/Modules index 0b5117a5..f3e68e82 100644 --- a/sysdep/unix/Modules +++ b/sysdep/unix/Modules @@ -4,3 +4,4 @@ timer.h io.c unix.h sync-if.c +sync-rt.c diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c index b57e94e5..a6c47487 100644 --- a/sysdep/unix/main.c +++ b/sysdep/unix/main.c @@ -76,6 +76,8 @@ main(void) io_init(); rt_init(); if_init(); + protos_build(); + add_tail(&protocol_list, &proto_unix_kernel.n); /* FIXME: Must be _always_ the last one */ protos_init(); protos_preconfig(); protos_postconfig(); diff --git a/sysdep/unix/sync-if.c b/sysdep/unix/sync-if.c index 4478c104..44392560 100644 --- a/sysdep/unix/sync-if.c +++ b/sysdep/unix/sync-if.c @@ -180,4 +180,3 @@ scan_if_init(void) if_scan_timer->recurrent = if_scan_period; tm_start(if_scan_timer, if_scan_period); } - diff --git a/sysdep/unix/sync-rt.c b/sysdep/unix/sync-rt.c new file mode 100644 index 00000000..c1bf7f76 --- /dev/null +++ b/sysdep/unix/sync-rt.c @@ -0,0 +1,62 @@ +/* + * BIRD -- Unix Routing Table Scanning and Syncing + * + * (c) 1998 Martin Mares + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#include +#include +#include +#include +#include + +#define LOCAL_DEBUG + +#include "nest/bird.h" +#include "nest/iface.h" +#include "nest/route.h" +#include "nest/protocol.h" +#include "lib/timer.h" + +#include "unix.h" + +void +uk_rt_notify(struct proto *p, net *net, rte *new, rte *old) +{ +} + +void +uk_start(struct proto *p) +{ +} + +void +uk_init(struct protocol *x) +{ +} + +void +uk_preconfig(struct protocol *x) +{ + struct proto *p = proto_new(&proto_unix_kernel, sizeof(struct proto)); + + p->preference = DEF_PREF_UKR; + p->rt_notify = uk_rt_notify; + p->start = uk_start; +} + +void +uk_postconfig(struct protocol *x) +{ +} + +struct protocol proto_unix_kernel = { + { NULL, NULL }, + "kernel", + 0, + uk_init, + uk_preconfig, + uk_postconfig +}; diff --git a/sysdep/unix/unix.h b/sysdep/unix/unix.h index 127101e7..7b0a921e 100644 --- a/sysdep/unix/unix.h +++ b/sysdep/unix/unix.h @@ -22,4 +22,8 @@ extern int if_scan_period; void scan_if_init(void); +/* sync-rt.c */ + +extern struct protocol proto_unix_kernel; + #endif