]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Since almost every UNIX system requires different techniques for reading
authorMartin Mares <mj@ucw.cz>
Sun, 18 Oct 1998 12:50:43 +0000 (12:50 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 18 Oct 1998 12:50:43 +0000 (12:50 +0000)
the kernel routing table as opposed to modifying it which is approximately
the same on non-netlink systems, I've split the kernel routing table
routines to read and write parts. To be implemented later ;-)

sysdep/linux/Modules
sysdep/linux/krt-scan.c [new file with mode: 0644]
sysdep/linux/krt-scan.h [new file with mode: 0644]
sysdep/unix/Modules
sysdep/unix/krt-set.c [new file with mode: 0644]
sysdep/unix/krt-set.h [new file with mode: 0644]
sysdep/unix/krt.h [new file with mode: 0644]
sysdep/unix/main.c
sysdep/unix/sync-rt.c
sysdep/unix/unix.h

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5562ab217a667b48e0b88a1c6bede4744e6866a6 100644 (file)
@@ -0,0 +1,2 @@
+krt-scan.c
+krt-scan.h
diff --git a/sysdep/linux/krt-scan.c b/sysdep/linux/krt-scan.c
new file mode 100644 (file)
index 0000000..caae54d
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ *     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);
+}
diff --git a/sysdep/linux/krt-scan.h b/sysdep/linux/krt-scan.h
new file mode 100644 (file)
index 0000000..1ea1ca7
--- /dev/null
@@ -0,0 +1,17 @@
+/*
+ *     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
index f3e68e820e103bdf051fe9ae2fc852bab60eb069..70ed14549d041c6b9b7cf667214c3b31c7dd3b96 100644 (file)
@@ -5,3 +5,6 @@ io.c
 unix.h
 sync-if.c
 sync-rt.c
+krt.h
+krt-set.c
+krt-set.h
diff --git a/sysdep/unix/krt-set.c b/sysdep/unix/krt-set.c
new file mode 100644 (file)
index 0000000..9da836d
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *     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;
+}
diff --git a/sysdep/unix/krt-set.h b/sysdep/unix/krt-set.h
new file mode 100644 (file)
index 0000000..3b906ba
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ *     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
diff --git a/sysdep/unix/krt.h b/sysdep/unix/krt.h
new file mode 100644 (file)
index 0000000..e7b5597
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ *     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
index a6c47487696d289d739cff45e79a75be5b566c84..4c60ee62f7365324439edcc7ed42633dc860537f 100644 (file)
@@ -19,6 +19,7 @@
 #include "nest/confile.h"
 
 #include "unix.h"
+#include "krt.h"
 
 /*
  *     Debugging
index c1bf7f76bdcf55993c55b60152f0152972b4d302..69b2bde1a2eee84c889f1160a585e3577e75241f 100644 (file)
 #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 */
 };
index 7b0a921e5bf1519727fdde57fd5dcf9c8456d7a1..127101e7c1a3ad8603c9d5ce09bc7cdb878b86a7 100644 (file)
@@ -22,8 +22,4 @@ extern int if_scan_period;
 
 void scan_if_init(void);
 
-/* sync-rt.c */
-
-extern struct protocol proto_unix_kernel;
-
 #endif