diff options
Diffstat (limited to 'proto/ospf')
-rw-r--r-- | proto/ospf/Makefile | 6 | ||||
-rw-r--r-- | proto/ospf/config.Y | 39 | ||||
-rw-r--r-- | proto/ospf/ospf.c | 74 | ||||
-rw-r--r-- | proto/ospf/ospf.h | 17 |
4 files changed, 136 insertions, 0 deletions
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_ */ |