summaryrefslogtreecommitdiff
path: root/proto
diff options
context:
space:
mode:
Diffstat (limited to 'proto')
-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
4 files changed, 141 insertions, 0 deletions
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