summaryrefslogtreecommitdiffstats
path: root/nest
diff options
context:
space:
mode:
Diffstat (limited to 'nest')
-rw-r--r--nest/config.Y37
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