summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--TODO2
-rw-r--r--bird.conf4
-rw-r--r--nest/protocol.h1
-rw-r--r--proto/static/Makefile4
-rw-r--r--proto/static/config.Y34
-rw-r--r--proto/static/static.c73
-rw-r--r--proto/static/static.h30
8 files changed, 149 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index c7dd7025..b0fee621 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ OPT=-O2
DEBUG=-g#gdb
CFLAGS=$(OPT) $(DEBUG) -Wall -W -Wstrict-prototypes -Wno-unused -Wno-parentheses
-PROTOCOLS=rip
+PROTOCOLS=rip static
LIBDIRS=sysdep/linux sysdep/unix lib
BASEDIRS=nest $(addprefix proto/,$(PROTOCOLS))
STDDIRS=$(BASEDIRS) $(OBJDIR)/conf
diff --git a/TODO b/TODO
index 5dc5948b..10505823 100644
--- a/TODO
+++ b/TODO
@@ -16,6 +16,8 @@ Core
- default preferences of protocols: prefer BGP over OSPF/RIP external routes?
- secondary addresses -> subinterfaces
- check if all protocols set proper packet priorities and TTL's.
+- better default protocol names
+- config: comments at end of line -> explicit ';' needed?
- filter: logging of dropped routes (?)
- limitation of memory consumption: per-process and total (?)
diff --git a/bird.conf b/bird.conf
index 80c4f512..30c0ea27 100644
--- a/bird.conf
+++ b/bird.conf
@@ -23,3 +23,7 @@ protocol kernel {
learn; # Learn all routes from the kernel
scan time 10; # Scan kernel tables every 10 seconds
}
+
+protocol static {
+ disabled
+}
diff --git a/nest/protocol.h b/nest/protocol.h
index 59db4287..f516f0f2 100644
--- a/nest/protocol.h
+++ b/nest/protocol.h
@@ -47,6 +47,7 @@ extern list protocol_list;
extern struct protocol proto_device;
extern struct protocol proto_rip;
+extern struct protocol proto_static;
/*
* Routing Protocol Instance
diff --git a/proto/static/Makefile b/proto/static/Makefile
new file mode 100644
index 00000000..7771c2fd
--- /dev/null
+++ b/proto/static/Makefile
@@ -0,0 +1,4 @@
+THISDIR=proto/static
+OBJS=static.o
+
+include ../../Rules
diff --git a/proto/static/config.Y b/proto/static/config.Y
new file mode 100644
index 00000000..a9eaa872
--- /dev/null
+++ b/proto/static/config.Y
@@ -0,0 +1,34 @@
+/*
+ * BIRD -- Static Protocol Configuration
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+CF_HDR
+
+#include "proto/static/static.h"
+
+CF_DECLS
+
+CF_KEYWORDS(STATIC)
+
+CF_GRAMMAR
+
+CF_ADDTO(proto, static_proto '}')
+
+static_proto_start: proto_start STATIC {
+ this_proto = proto_new(&proto_static, sizeof(struct static_proto));
+ static_init_instance((struct static_proto *) this_proto);
+ }
+ ;
+
+static_proto:
+ static_proto_start proto_name '{'
+ | static_proto proto_item ';'
+ ;
+
+CF_CODE
+
+CF_END
diff --git a/proto/static/static.c b/proto/static/static.c
new file mode 100644
index 00000000..679ee6ee
--- /dev/null
+++ b/proto/static/static.c
@@ -0,0 +1,73 @@
+/*
+ * BIRD -- Static Route Generator
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#define LOCAL_DEBUG
+
+#include "nest/bird.h"
+#include "nest/iface.h"
+#include "nest/protocol.h"
+#include "nest/route.h"
+#include "conf/conf.h"
+
+#include "static.h"
+
+#define GET_DATA struct static_proto *p = (struct static_proto *) P
+
+static void
+static_start(struct proto *P)
+{
+ DBG("Static: take off!\n");
+}
+
+static void
+static_neigh_notify(struct neighbor *n)
+{
+ DBG("Static: neighbor notify got, don't know why.\n");
+}
+
+static void
+static_dump(struct proto *P)
+{
+ DBG("Static: no dumps available in demo version.\n");
+}
+
+void
+static_init_instance(struct static_proto *P)
+{
+ struct proto *p = &P->p;
+
+ p->preference = DEF_PREF_STATIC;
+ p->start = static_start;
+ p->neigh_notify = static_neigh_notify;
+ p->dump = static_dump;
+ /* FIXME: Should shutdown remove all routes? */
+}
+
+static void
+static_init(struct protocol *p)
+{
+}
+
+static void
+static_preconfig(struct protocol *x)
+{
+}
+
+static void
+static_postconfig(struct protocol *p)
+{
+}
+
+struct protocol proto_static = {
+ { NULL, NULL },
+ "Static",
+ 0,
+ static_init,
+ static_preconfig,
+ static_postconfig
+};
diff --git a/proto/static/static.h b/proto/static/static.h
new file mode 100644
index 00000000..df18c133
--- /dev/null
+++ b/proto/static/static.h
@@ -0,0 +1,30 @@
+/*
+ * BIRD -- Static Route Generator
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_STATIC_H_
+#define _BIRD_STATIC_H_
+
+struct static_proto {
+ struct proto p;
+ list routes;
+};
+
+void static_init_instance(struct static_proto *);
+
+struct static_route {
+ node n;
+ u32 net; /* Network we route */
+ int masklen; /* Mask length */
+ int dest; /* Destination type (RTD_*) */
+ u32 via; /* Destination router */
+ struct neighbor *neigh;
+ /* FIXME: Device routes, maybe via device patterns? */
+ /* FIXME: More route attributes, probably via filter syntax */
+};
+
+#endif