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 @@ -263,6 +263,9 @@ protos_build(void) #endif #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); 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 + * + * 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 + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#define LOCAL_DEBUG + +#include + +#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 + * + * 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_ */