--- /dev/null
+/*
+ * BIRD -- Linux Routing Table Scanning
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <string.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 "lib/unix.h"
+#include "lib/krt.h"
+
+#define SCANOPT struct krt_scan_params *p = &x->scanopt
+
+static void
+krt_scan_fire(timer *t)
+{
+ DBG("Scanning kernel table...\n");
+}
+
+void
+krt_scan_preconfig(struct krt_proto *x)
+{
+ SCANOPT;
+
+ p->recurrence = 10; /* FIXME: use reasonable default value */
+}
+
+void
+krt_scan_start(struct krt_proto *x)
+{
+ SCANOPT;
+ timer *t = tm_new(x->p.pool);
+
+ p->timer = t;
+ t->hook = krt_scan_fire;
+ t->data = x;
+ t->recurrent = p->recurrence;
+ krt_scan_fire(t);
+ if (t->recurrent)
+ tm_start(t, t->recurrent);
+}
+
+void
+krt_scan_shutdown(struct krt_proto *x)
+{
+ SCANOPT;
+
+ tm_stop(p->timer);
+}
--- /dev/null
+/*
+ * BIRD -- Linux Kernel Route Syncer -- Scanning Parameters
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_KRT_SCAN_H_
+#define _BIRD_KRT_SCAN_H_
+
+struct krt_scan_params {
+ int recurrence; /* How often should we scan krt, 0=only on startup */
+ struct timer *timer;
+};
+
+#endif
unix.h
sync-if.c
sync-rt.c
+krt.h
+krt-set.c
+krt-set.h
--- /dev/null
+/*
+ * BIRD -- Unix Routing Table 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 "lib/unix.h"
+#include "lib/krt.h"
+
+void
+krt_set_notify(struct proto *x, net *net, rte *new, rte *old)
+{
+ DBG("krt_set_notify(%I/%d)\n", net->n.prefix, net->n.pxlen);
+}
+
+void
+krt_set_preconfig(struct krt_proto *x)
+{
+ x->p.rt_notify = krt_set_notify;
+}
--- /dev/null
+/*
+ * BIRD -- Unix Kernel Route Syncer -- Setting Parameters
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_KRT_SET_H_
+#define _BIRD_KRT_SET_H_
+
+struct krt_set_params {
+};
+
+#endif
--- /dev/null
+/*
+ * BIRD -- Unix Kernel Route Syncer
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_KRT_H_
+#define _BIRD_KRT_H_
+
+#include "lib/krt-scan.h"
+#include "lib/krt-set.h"
+
+/* sync-rt.c */
+
+extern struct protocol proto_unix_kernel;
+
+struct krt_proto {
+ struct proto p;
+ struct krt_set_params setopt;
+ struct krt_scan_params scanopt;
+};
+
+/* krt-scan.c */
+
+void krt_scan_preconfig(struct krt_proto *);
+void krt_scan_start(struct krt_proto *);
+void krt_scan_shutdown(struct krt_proto *);
+
+/* krt-set.c */
+
+void krt_set_preconfig(struct krt_proto *);
+
+#endif
#include "nest/confile.h"
#include "unix.h"
+#include "krt.h"
/*
* Debugging
#include "lib/timer.h"
#include "unix.h"
+#include "krt.h"
void
-uk_rt_notify(struct proto *p, net *net, rte *new, rte *old)
+krt_start(struct proto *P)
{
+ struct krt_proto *p = (struct krt_proto *) P;
+ krt_scan_start(p);
}
void
-uk_start(struct proto *p)
+krt_shutdown(struct proto *P, int time)
{
+ struct krt_proto *p = (struct krt_proto *) P;
+ krt_scan_shutdown(p);
}
void
-uk_init(struct protocol *x)
+krt_preconfig(struct protocol *x)
{
-}
-
-void
-uk_preconfig(struct protocol *x)
-{
- struct proto *p = proto_new(&proto_unix_kernel, sizeof(struct proto));
+ struct krt_proto *p = (struct krt_proto *) proto_new(&proto_unix_kernel, sizeof(struct krt_proto));
- p->preference = DEF_PREF_UKR;
- p->rt_notify = uk_rt_notify;
- p->start = uk_start;
-}
-
-void
-uk_postconfig(struct protocol *x)
-{
+ p->p.preference = DEF_PREF_UKR;
+ p->p.start = krt_start;
+ p->p.shutdown = krt_shutdown;
+ krt_scan_preconfig(p);
+ krt_set_preconfig(p);
}
struct protocol proto_unix_kernel = {
{ NULL, NULL },
"kernel",
0,
- uk_init,
- uk_preconfig,
- uk_postconfig
+ NULL, /* init */
+ krt_preconfig,
+ NULL /* postconfig */
};
void scan_if_init(void);
-/* sync-rt.c */
-
-extern struct protocol proto_unix_kernel;
-
#endif