summaryrefslogtreecommitdiffstats
path: root/sysdep/linux/netlink/krt.c
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1999-03-01 21:17:46 +0100
committerMartin Mares <mj@ucw.cz>1999-03-01 21:17:46 +0100
commitbdb95a21a45bce1754bf54de3e7423cf8eebf9ee (patch)
tree32f66b3d3b611949606532eba92d542073b39df0 /sysdep/linux/netlink/krt.c
parentea3582a6f66223dfd2c0dd6c597dc40b48033fd5 (diff)
downloadbird-bdb95a21a45bce1754bf54de3e7423cf8eebf9ee.tar
bird-bdb95a21a45bce1754bf54de3e7423cf8eebf9ee.zip
Added skeletal version of Linux netlink interface. It doesn't work yet,
but the framework is there and I'll try finish it soon.
Diffstat (limited to 'sysdep/linux/netlink/krt.c')
-rw-r--r--sysdep/linux/netlink/krt.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/sysdep/linux/netlink/krt.c b/sysdep/linux/netlink/krt.c
new file mode 100644
index 0000000..aae8918
--- /dev/null
+++ b/sysdep/linux/netlink/krt.c
@@ -0,0 +1,87 @@
+/*
+ * BIRD -- Linux Netlink Interface
+ *
+ * (c) 1999 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/socket.h>
+
+#include "nest/bird.h"
+#include "nest/route.h"
+#include "nest/protocol.h"
+#include "nest/iface.h"
+#include "lib/timer.h"
+#include "lib/unix.h"
+#include "lib/krt.h"
+
+/*
+ * We need to work around namespace conflicts between us and the kernel,
+ * but I prefer this way to being forced to rename our configuration symbols.
+ * This will disappear as soon as netlink headers become part of the libc.
+ */
+
+#undef CONFIG_NETLINK
+#include <linux/config.h>
+#ifndef CONFIG_NETLINK
+#error "Kernel not configured to support netlink"
+#endif
+
+#include <asm/types.h>
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+
+#define LOCAL_DEBUG
+
+struct proto_config *cf_krt;
+
+static void
+krt_preconfig(struct protocol *x, struct config *c)
+{
+ struct krt_config *z = proto_config_new(&proto_unix_kernel, sizeof(struct krt_config));
+
+ cf_krt = &z->c;
+ z->c.preference = DEF_PREF_UKR;
+}
+
+static struct proto *
+krt_init(struct proto_config *c)
+{
+ struct krt_proto *p = proto_new(c, sizeof(struct krt_proto));
+
+ return &p->p;
+}
+
+static int
+krt_start(struct proto *p)
+{
+ /* FIXME: Filter kernel routing table etc. */
+
+ return PS_UP;
+}
+
+static int
+krt_shutdown(struct proto *p)
+{
+ /* FIXME: Remove all our routes from the kernel */
+
+ return PS_DOWN;
+}
+
+void
+scan_if_init(void)
+{
+ /* FIXME: What to do here? */
+}
+
+struct protocol proto_unix_kernel = {
+ name: "Kernel",
+ preconfig: krt_preconfig,
+ init: krt_init,
+ start: krt_start,
+ shutdown: krt_shutdown
+};