summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.in2
-rw-r--r--nest/proto.c3
-rw-r--r--nest/protocol.h1
-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
7 files changed, 141 insertions, 1 deletions
diff --git a/configure.in b/configure.in
index aa527a02..185c7e6f 100644
--- a/configure.in
+++ b/configure.in
@@ -8,7 +8,7 @@ AC_CONFIG_AUX_DIR(tools)
AC_ARG_ENABLE(debug,[ --enable-debug enable internal debugging routines (default: enabled)],,enable_debug=yes)
AC_ARG_WITH(sysconfig,[ --with-sysconfig=FILE use specified BIRD system configuration file])
-AC_ARG_WITH(protocols,[ --with-protocols=LIST include specified routing protocols (default: rip,static)],,[with_protocols="rip,static"])
+AC_ARG_WITH(protocols,[ --with-protocols=LIST include specified routing protocols (default: rip,static)],,[with_protocols="rip,static,ospf"])
if test "$srcdir" = . ; then
# Building in current directory => create obj directory holding all objects
diff --git a/nest/proto.c b/nest/proto.c
index 17155850..4df625ff 100644
--- a/nest/proto.c
+++ b/nest/proto.c
@@ -264,6 +264,9 @@ protos_build(void)
#ifdef CONFIG_STATIC
add_tail(&protocol_list, &proto_static.n);
#endif
+#ifdef CONFIG_OSPF
+ add_tail(&protocol_list, &proto_ospf.n);
+#endif
proto_pool = rp_new(&root_pool, "Protocols");
proto_flush_event = ev_new(proto_pool);
proto_flush_event->hook = proto_flush_all;
diff --git a/nest/protocol.h b/nest/protocol.h
index cb30754f..a1ee2b8b 100644
--- a/nest/protocol.h
+++ b/nest/protocol.h
@@ -58,6 +58,7 @@ extern list protocol_list;
extern struct protocol proto_device;
extern struct protocol proto_rip;
extern struct protocol proto_static;
+extern struct protocol proto_ospf;
/*
* Routing Protocol Instance
diff --git a/proto/ospf/Makefile b/proto/ospf/Makefile
new file mode 100644
index 00000000..0bd05d01
--- /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 00000000..3f416237
--- /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 00000000..25a0bea9
--- /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 00000000..4e165f82
--- /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_ */