Split protocol init to building of protocol list and real protocol init.
Added kernel route table syncer skeleton.
This commit is contained in:
parent
05e56feb57
commit
0432c0173b
8 changed files with 79 additions and 4 deletions
11
nest/proto.c
11
nest/proto.c
|
@ -106,15 +106,20 @@ protos_dump_all(void)
|
||||||
debug(" inactive %s\n", p->name);
|
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
|
void
|
||||||
protos_init(void)
|
protos_init(void)
|
||||||
{
|
{
|
||||||
struct protocol *p;
|
struct protocol *p;
|
||||||
|
|
||||||
debug("Initializing protocols\n");
|
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)
|
WALK_LIST(p, protocol_list)
|
||||||
p->init(p);
|
p->init(p);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ struct protocol {
|
||||||
void (*postconfig)(struct protocol *); /* After configuring */
|
void (*postconfig)(struct protocol *); /* After configuring */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void protos_build(void);
|
||||||
void protos_init(void);
|
void protos_init(void);
|
||||||
void protos_preconfig(void);
|
void protos_preconfig(void);
|
||||||
void protos_postconfig(void);
|
void protos_postconfig(void);
|
||||||
|
|
|
@ -248,6 +248,7 @@ void rta_dump_all(void);
|
||||||
#define DEF_PREF_BGP 100 /* BGP */
|
#define DEF_PREF_BGP 100 /* BGP */
|
||||||
#define DEF_PREF_OSPF_EXTERNAL 80 /* OSPF external routes */
|
#define DEF_PREF_OSPF_EXTERNAL 80 /* OSPF external routes */
|
||||||
#define DEF_PREF_RIP_EXTERNAL 70 /* RIP 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 */
|
#define DEF_PREF_SINK 10 /* Sink route */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4,3 +4,4 @@ timer.h
|
||||||
io.c
|
io.c
|
||||||
unix.h
|
unix.h
|
||||||
sync-if.c
|
sync-if.c
|
||||||
|
sync-rt.c
|
||||||
|
|
|
@ -76,6 +76,8 @@ main(void)
|
||||||
io_init();
|
io_init();
|
||||||
rt_init();
|
rt_init();
|
||||||
if_init();
|
if_init();
|
||||||
|
protos_build();
|
||||||
|
add_tail(&protocol_list, &proto_unix_kernel.n); /* FIXME: Must be _always_ the last one */
|
||||||
protos_init();
|
protos_init();
|
||||||
protos_preconfig();
|
protos_preconfig();
|
||||||
protos_postconfig();
|
protos_postconfig();
|
||||||
|
|
|
@ -180,4 +180,3 @@ scan_if_init(void)
|
||||||
if_scan_timer->recurrent = if_scan_period;
|
if_scan_timer->recurrent = if_scan_period;
|
||||||
tm_start(if_scan_timer, if_scan_period);
|
tm_start(if_scan_timer, if_scan_period);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
62
sysdep/unix/sync-rt.c
Normal file
62
sysdep/unix/sync-rt.c
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* BIRD -- Unix Routing Table Scanning and Syncing
|
||||||
|
*
|
||||||
|
* (c) 1998 Martin Mares <mj@ucw.cz>
|
||||||
|
*
|
||||||
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#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
|
||||||
|
};
|
|
@ -22,4 +22,8 @@ extern int if_scan_period;
|
||||||
|
|
||||||
void scan_if_init(void);
|
void scan_if_init(void);
|
||||||
|
|
||||||
|
/* sync-rt.c */
|
||||||
|
|
||||||
|
extern struct protocol proto_unix_kernel;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue