diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y index 0951572f..5a58bf2e 100644 --- a/proto/ospf/config.Y +++ b/proto/ospf/config.Y @@ -1,7 +1,7 @@ /* * BIRD -- OSPF Configuration * - * (c) 1999 Ondrej Filip + * (c) 1999-2000 Ondrej Filip * * Can be freely distributed and used under the terms of the GNU GPL. */ @@ -10,10 +10,14 @@ CF_HDR #include "proto/ospf/ospf.h" +CF_DEFINES + +#define OSPF_CFG ((struct ospf_config *) this_proto) + CF_DECLS CF_KEYWORDS(OSPF, AREA, OSPF_METRIC1, OSPF_METRIC2, OSPF_TAG) -CF_KEYWORDS(NEIGHBORS) +CF_KEYWORDS(NEIGHBORS, RFC1583COMPAT) %type opttext @@ -29,8 +33,9 @@ ospf_proto_start: proto_start OSPF { ospf_proto: ospf_proto_start proto_name '{' - | ospf_proto proto_item ';' + | ospf_proto proto_item ';' | ospf_proto ospf_area ';' + | ospf_proto RFC1583COMPAT bool ';' { OSPF_CFG->rfc1583 = $3; } ; ospf_area: AREA idval { diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c index bd66434e..62bab70f 100644 --- a/proto/ospf/ospf.c +++ b/proto/ospf/ospf.c @@ -61,6 +61,7 @@ ospf_init(struct proto_config *c) { struct proto *p = proto_new(c, sizeof(struct proto_ospf)); struct proto_ospf *po=(struct proto_ospf *)p; + struct ospf_config *oc=(struct ospf_config *)c; debug("OSPF: Init requested.\n"); p->import_control = ospf_import_control; @@ -71,6 +72,8 @@ ospf_init(struct proto_config *c) p->rte_better = ospf_rte_better; p->rte_same = ospf_rte_same; + po->rfc1583=oc->rfc1583; + return p; } diff --git a/proto/ospf/ospf.h b/proto/ospf/ospf.h index 52c56e95..4627af1b 100644 --- a/proto/ospf/ospf.h +++ b/proto/ospf/ospf.h @@ -47,6 +47,7 @@ struct ospf_config { struct proto_config c; + int rfc1583; u32 area; /* FIXME: Area ID !!! This is wrong !!! * Should respect interface */ }; @@ -345,6 +346,7 @@ struct proto_ospf { list area_list; int areano; /* Number of area I belong to */ struct fib efib; /* FIB for external routes */ + int rfc1583; }; static int ospf_start(struct proto *p);