summaryrefslogtreecommitdiffstats
path: root/proto/ospf/config.Y
diff options
context:
space:
mode:
Diffstat (limited to 'proto/ospf/config.Y')
-rw-r--r--proto/ospf/config.Y40
1 files changed, 39 insertions, 1 deletions
diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y
index 103d3b6..3e13eaf 100644
--- a/proto/ospf/config.Y
+++ b/proto/ospf/config.Y
@@ -14,11 +14,14 @@ CF_DEFINES
#define OSPF_CFG ((struct ospf_config *) this_proto)
static struct ospf_area_config *this_area;
+static struct iface_patt *this_ipatt;
+#define OSPF_PATT ((struct ospf_iface_patt *) this_ipatt)
CF_DECLS
CF_KEYWORDS(OSPF, AREA, OSPF_METRIC1, OSPF_METRIC2, OSPF_TAG)
-CF_KEYWORDS(NEIGHBORS, RFC1583COMPAT, STUB, TICK)
+CF_KEYWORDS(NEIGHBORS, RFC1583COMPAT, STUB, TICK, COST, RETRANSMIT)
+CF_KEYWORDS(HELLO)
%type <t> opttext
@@ -46,6 +49,7 @@ ospf_area_start: AREA idval '{' {
this_area->areaid = $2;
this_area->tick = DISPTICK;
this_area->stub = 0;
+ init_list(&this_area->patt_list);
}
;
@@ -56,8 +60,42 @@ ospf_area: ospf_area_start
ospf_area_item:
| STUB bool ';' { this_area->stub = $2 ; }
| TICK NUM ';' { this_area->tick = $2 ; }
+ | ospf_iface_list
+;
+
+ospf_iface_item:
+ | COST NUM { OSPF_PATT->cost = $2 ; }
+ | HELLO NUM { OSPF_PATT->helloint = $2 ; }
+ | RETRANSMIT NUM { OSPF_PATT->rxmtint = $2 ; }
;
+ospf_iface_opts:
+ '{'
+ | ospf_iface_opts ospf_iface_item ';'
+ ;
+
+ospf_iface_opt_list: /* EMPTY */ | ospf_iface_opts '}'
+;
+
+ospf_iface_start:
+ {
+ this_ipatt = cfg_allocz(sizeof(struct ospf_iface_patt));
+ add_tail(&this_area->patt_list, NODE this_ipatt);
+ OSPF_PATT->cost=10;
+ OSPF_PATT->helloint=10;
+ OSPF_PATT->rxmtint=5;
+ }
+;
+
+ospf_iface:
+ ospf_iface_start iface_patt ospf_iface_opt_list
+;
+
+ospf_iface_list:
+ INTERFACE ospf_iface
+ | ospf_iface_list ',' ospf_iface
+ ;
+
opttext:
TEXT
| /* empty */ { $$ = NULL; }