diff options
Diffstat (limited to 'nest/config.Y')
-rw-r--r-- | nest/config.Y | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/nest/config.Y b/nest/config.Y index f14331b..1de0446 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -8,18 +8,22 @@ CF_HDR +static struct proto *this_proto; + CF_DECLS -CF_KEYWORDS(ROUTER, ID) +CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE) %type <i> idval CF_GRAMMAR +/* Setting of router ID */ + CF_ADDTO(conf, rtrid) rtrid: ROUTER ID idval { router_id = $3; - } + } ; idval: @@ -27,6 +31,35 @@ idval: | IPA { $$ = ipa_to_u32($1); } ; +/* Definition of protocols */ + +CF_ADDTO(conf, proto) + +proto_start: PROTOCOL + +proto_name: + /* EMPTY */ { + struct symbol *s = cf_default_name(this_proto->proto->name); + s->class = SYM_PROTO; + s->def = this_proto; + this_proto->name = s->name; + } + | SYM { + if ($1->class) cf_error("Symbol already defined"); + $1->class = SYM_PROTO; + $1->def = this_proto; + this_proto->name = $1->name; + } + ; + +proto_item: + /* EMPTY */ + | PREFERENCE NUM { + if ($2 < 0 || $2 > 255) cf_error("Invalid preference"); + this_proto->preference = $2; + } + ; + CF_CODE CF_END |