summaryrefslogtreecommitdiffstats
path: root/proto/ospf/config.Y
diff options
context:
space:
mode:
authorOndrej Filip <feela@network.cz>2000-09-02 02:03:36 +0200
committerOndrej Filip <feela@network.cz>2000-09-02 02:03:36 +0200
commita190e7200bf37ba834c776a28583bf897b4377f5 (patch)
tree734b32f23912956e0cc9add2095a9ccdbba0aa85 /proto/ospf/config.Y
parent94e2bbcc72f69edbcb3ce66ffa52998f374243c5 (diff)
downloadbird-a190e7200bf37ba834c776a28583bf897b4377f5.tar
bird-a190e7200bf37ba834c776a28583bf897b4377f5.zip
Added hellos on NBMA networks. (I don't violate RFC now.)
Diffstat (limited to 'proto/ospf/config.Y')
-rw-r--r--proto/ospf/config.Y23
1 files changed, 21 insertions, 2 deletions
diff --git a/proto/ospf/config.Y b/proto/ospf/config.Y
index c780238..50ba371 100644
--- a/proto/ospf/config.Y
+++ b/proto/ospf/config.Y
@@ -23,7 +23,8 @@ CF_DECLS
CF_KEYWORDS(OSPF, AREA, OSPF_METRIC1, OSPF_METRIC2, OSPF_TAG)
CF_KEYWORDS(NEIGHBORS, RFC1583COMPAT, STUB, TICK, COST, RETRANSMIT)
CF_KEYWORDS(HELLO, TRANSMIT, PRIORITY, DEAD, NONBROADCAST, POINTOPOINT, TYPE)
-CF_KEYWORDS(NEIGHBORS, NONE, SIMPLE, AUTHENTICATION, PASSWORD)
+CF_KEYWORDS(NEIGHBORS, NONE, SIMPLE, AUTHENTICATION, PASSWORD, STRICT)
+CF_KEYWORDS(ELIGIBLE, POLL)
%type <t> opttext
@@ -77,6 +78,7 @@ ospf_area_item:
ospf_iface_item:
COST expr { OSPF_PATT->cost = $2 ; if($2<=0) cf_error("Cost must be greater than zero"); }
| HELLO expr { OSPF_PATT->helloint = $2 ; if($2<=0) cf_error("Hello int must be greater than zero"); }
+ | POLL expr { OSPF_PATT->pollint = $2 ; if($2<=0) cf_error("Poll int must be greater than zero"); }
| RETRANSMIT expr { OSPF_PATT->rxmtint = $2 ; if($2<=0) cf_error("Retransmit int must be greater than zero"); }
| TRANSMIT DELAY expr { OSPF_PATT->inftransdelay = $3 ; if($3<=0) cf_error("Transmit delay must be greater than zero"); }
| PRIORITY expr { OSPF_PATT->priority = $2 ; }
@@ -85,6 +87,7 @@ ospf_iface_item:
| TYPE BROADCAST { OSPF_PATT->type = OSPF_IT_BCAST ; }
| TYPE NONBROADCAST { OSPF_PATT->type = OSPF_IT_NBMA ; }
| TYPE POINTOPOINT { OSPF_PATT->type = OSPF_IT_PTP ; }
+ | STRICT NONBROADCAST bool { OSPF_PATT->strictnbma = $3 ; }
| NEIGHBORS '{' ipa_list '}'
| AUTHENTICATION NONE { OSPF_PATT->autype=AU_NONE ; }
| AUTHENTICATION SIMPLE { OSPF_PATT->autype=AU_SIMPLE ; }
@@ -96,12 +99,26 @@ ipa_list:
/* empty */
| ipa_list ipa_item
;
+
+ipa_item:
+ ipa_el;
+ | ipa_ne;
-ipa_item: IPA ';'
+ipa_el: IPA ';'
+ {
+ this_nbma = cfg_allocz(sizeof(struct nbma_node));
+ add_tail(&OSPF_PATT->nbma_list, NODE this_nbma);
+ this_nbma->ip=$1;
+ this_nbma->eligible=0;
+ }
+;
+
+ipa_ne: IPA ELIGIBLE ';'
{
this_nbma = cfg_allocz(sizeof(struct nbma_node));
add_tail(&OSPF_PATT->nbma_list, NODE this_nbma);
this_nbma->ip=$1;
+ this_nbma->eligible=1;
}
;
@@ -112,12 +129,14 @@ ospf_iface_start:
add_tail(&this_area->patt_list, NODE this_ipatt);
OSPF_PATT->cost = COST_D;
OSPF_PATT->helloint = HELLOINT_D;
+ OSPF_PATT->pollint = POLLINT_D;
OSPF_PATT->rxmtint = RXMTINT_D;
OSPF_PATT->inftransdelay = INFTRANSDELAY_D;
OSPF_PATT->priority = PRIORITY_D;
OSPF_PATT->waitint = WAIT_DMH*HELLOINT_D;
OSPF_PATT->deadc = DEADC_D;
OSPF_PATT->type = OSPF_IT_UNDEF;
+ OSPF_PATT->strictnbma = 0;
init_list(&OSPF_PATT->nbma_list);
OSPF_PATT->autype=AU_NONE;
}