summaryrefslogtreecommitdiffstats
path: root/proto/ospf/config.Y
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2009-06-11 17:25:38 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2009-06-11 17:25:38 +0200
commit386752028143e78d0a617216d86f95af4024346d (patch)
tree374611e90ecc021013e4c78a88face13069f1a87 /proto/ospf/config.Y
parent3d15dcdb1cc91c694aa9319b86bb37510d7ed12b (diff)
downloadbird-386752028143e78d0a617216d86f95af4024346d.tar
bird-386752028143e78d0a617216d86f95af4024346d.zip
Implements an option that allows to change a set of stub networks.
Diffstat (limited to 'proto/ospf/config.Y')
-rw-r--r--proto/ospf/config.Y30
1 files changed, 29 insertions, 1 deletions
diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y
index 7f7d6a3..0f688a7 100644
--- a/proto/ospf/config.Y
+++ b/proto/ospf/config.Y
@@ -18,6 +18,7 @@ CF_DEFINES
static struct ospf_area_config *this_area;
static struct nbma_node *this_nbma;
static struct area_net_config *this_pref;
+static struct ospf_stubnet_config *this_stubnet;
static void
finish_iface_config(struct ospf_iface_patt *ip)
@@ -38,7 +39,7 @@ CF_KEYWORDS(NEIGHBORS, RFC1583COMPAT, STUB, TICK, COST, RETRANSMIT)
CF_KEYWORDS(HELLO, TRANSMIT, PRIORITY, DEAD, NONBROADCAST, POINTOPOINT, TYPE)
CF_KEYWORDS(NONE, SIMPLE, AUTHENTICATION, STRICT, CRYPTOGRAPHIC)
CF_KEYWORDS(ELIGIBLE, POLL, NETWORKS, HIDDEN, VIRTUAL, LINK)
-CF_KEYWORDS(RX, BUFFER, LARGE, NORMAL)
+CF_KEYWORDS(RX, BUFFER, LARGE, NORMAL, STUBNET, HIDDEN, SUMMARY)
%type <t> opttext
@@ -75,6 +76,7 @@ ospf_area_start: AREA idval '{' {
init_list(&this_area->patt_list);
init_list(&this_area->vlink_list);
init_list(&this_area->net_list);
+ init_list(&this_area->stubnet_list);
}
;
@@ -90,10 +92,36 @@ ospf_area_item:
STUB COST expr { this_area->stub = $3 ; if($3<=0) cf_error("Stub cost must be greater than zero"); }
| STUB bool {if($2) { if(!this_area->stub) this_area->stub=DEFAULT_STUB_COST;}else{ this_area->stub=0;}}
| NETWORKS '{' pref_list '}'
+ | STUBNET ospf_stubnet
| INTERFACE ospf_iface
| ospf_vlink
;
+ospf_stubnet:
+ ospf_stubnet_start '{' ospf_stubnet_opts '}'
+ | ospf_stubnet_start
+ ;
+
+ospf_stubnet_start:
+ prefix {
+ this_stubnet = cfg_allocz(sizeof(struct stubnet_config));
+ add_tail(&this_area->stubnet_list, NODE this_stubnet);
+ this_stubnet->px = $1;
+ this_stubnet->cost = COST_D;
+ }
+ ;
+
+ospf_stubnet_opts:
+ /* empty */
+ | ospf_stubnet_opts ospf_stubnet_item ';'
+ ;
+
+ospf_stubnet_item:
+ HIDDEN bool { this_stubnet->hidden = $2; }
+ | SUMMARY bool { this_stubnet->summary = $2; }
+ | COST expr { this_stubnet->cost = $2; }
+ ;
+
ospf_vlink:
ospf_vlink_start '{' ospf_vlink_opts '}' { finish_iface_config(OSPF_PATT); }
| ospf_vlink_start