summaryrefslogtreecommitdiffstats
path: root/proto/ospf
diff options
context:
space:
mode:
Diffstat (limited to 'proto/ospf')
-rw-r--r--proto/ospf/Makefile6
-rw-r--r--proto/ospf/config.Y39
-rw-r--r--proto/ospf/ospf.c74
-rw-r--r--proto/ospf/ospf.h17
4 files changed, 136 insertions, 0 deletions
diff --git a/proto/ospf/Makefile b/proto/ospf/Makefile
new file mode 100644
index 0000000..0bd05d0
--- /dev/null
+++ b/proto/ospf/Makefile
@@ -0,0 +1,6 @@
+source=ospf.c
+root-rel=../../
+dir-name=proto/ospf
+
+include ../../Rules
+
diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y
new file mode 100644
index 0000000..3f41623
--- /dev/null
+++ b/proto/ospf/config.Y
@@ -0,0 +1,39 @@
+/*
+ * BIRD -- OSPF Configuration
+ *
+ * (c) 1999 Ondrej Filip <feela@network.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+CF_HDR
+
+#include "proto/ospf/ospf.h"
+
+CF_DECLS
+
+CF_KEYWORDS(OSPF, AREA)
+
+CF_GRAMMAR
+
+CF_ADDTO(proto, ospf_proto '}')
+
+ospf_proto_start: proto_start OSPF {
+ this_proto = proto_config_new(&proto_ospf, sizeof(struct ospf_config));
+ }
+ ;
+
+ospf_proto:
+ ospf_proto_start proto_name '{'
+ | ospf_proto proto_item ';'
+ | ospf_proto ospf_area ';'
+ ;
+
+ospf_area: AREA IPA {
+ ((struct ospf_config *)this_proto)->area = $2;
+ }
+ ;
+
+CF_CODE
+
+CF_END
diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c
new file mode 100644
index 0000000..25a0bea
--- /dev/null
+++ b/proto/ospf/ospf.c
@@ -0,0 +1,74 @@
+/*
+ * BIRD -- OSPF
+ *
+ * (c) 1999 Ondrej Filip <feela@network.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#define LOCAL_DEBUG
+
+#include <string.h>
+
+#include "nest/bird.h"
+#include "nest/iface.h"
+#include "nest/protocol.h"
+#include "nest/route.h"
+#include "conf/conf.h"
+
+#include "ospf.h"
+
+
+static int
+ospf_start(struct proto *p)
+{
+ struct ospf_config *c = (void *) p->cf;
+
+ DBG(" OSPF: Start\n");
+ return PS_UP;
+}
+
+static void
+ospf_dump(struct proto *p)
+{
+ char areastr[20];
+ struct ospf_config *c = (void *) p->cf;
+
+ DBG(" OSPF: Dump.\n");
+ debug(" -AreaID: %d\n", c->area );
+}
+
+static struct proto *
+ospf_init(struct proto_config *c)
+{
+ struct proto *p = proto_new(c, sizeof(struct proto));
+
+ DBG(" OSPF: Init.\n");
+ p->neigh_notify = NULL;
+ p->if_notify = NULL;
+ return p;
+}
+
+static void
+ospf_preconfig(struct protocol *x, struct config *c)
+{
+ DBG( " OSPF: preconfig\n" );
+}
+
+static void
+ospf_postconfig(struct proto_config *c)
+{
+ DBG( " OSPF: postconfig\n" );
+}
+
+
+struct protocol proto_ospf = {
+ name: "OSPF",
+ init: ospf_init,
+ dump: ospf_dump,
+ start: ospf_start,
+ preconfig: ospf_preconfig,
+ postconfig: ospf_postconfig,
+
+};
+
diff --git a/proto/ospf/ospf.h b/proto/ospf/ospf.h
new file mode 100644
index 0000000..4e165f8
--- /dev/null
+++ b/proto/ospf/ospf.h
@@ -0,0 +1,17 @@
+/*
+ * BIRD -- OSPF
+ *
+ * (c) 1999 Ondrej Filip <feela@network.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_OSPF_H_
+#define _BIRD_OSPF_H_
+
+struct ospf_config {
+ struct proto_config c;
+ ip_addr area; /* Area ID */
+};
+
+#endif /* _BIRD_OSPF_H_ */