diff options
author | Martin Mares <mj@ucw.cz> | 1998-11-29 22:03:58 +0000 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1998-11-29 22:03:58 +0000 |
commit | 50d8424ad1f40f9979214c1d6cbf8e290ba9a5cb (patch) | |
tree | 59f58fdb5b3e37c00c9d4955ed671e4dcec9f814 /nest/config.Y | |
parent | 66efdf962a343c7cf5aef475f35f9e3864cb4fdd (diff) |
Added configuration of the device internal protocol. This is primarily
intended to serve as an example of interface pattern list use. As a side
effect, you can disable generating of device routes by disabling
this protocol.
Diffstat (limited to 'nest/config.Y')
-rw-r--r-- | nest/config.Y | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/nest/config.Y b/nest/config.Y index 9efebbe6..7b82ba72 100644 --- a/nest/config.Y +++ b/nest/config.Y @@ -10,9 +10,14 @@ CF_HDR static struct proto *this_proto; +#include "nest/rt-dev.h" + +void rt_dev_add_iface(char *); + CF_DECLS -CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF) +CF_KEYWORDS(ROUTER, ID, PROTOCOL, PREFERENCE, DISABLED, DEBUG, ALL, OFF, DEVICE) +CF_KEYWORDS(INTERFACE) %type <i> idval @@ -64,6 +69,40 @@ proto_item: | DEBUG OFF { this_proto->debug = 0; } ; +/* Device protocol */ + +CF_ADDTO(proto, dev_proto '}') + +dev_proto_start: proto_start DEVICE { + if (!(this_proto = cf_dev_proto)) cf_error("Device protocol already defined"); + cf_dev_proto = NULL; + } + ; + +dev_proto: + dev_proto_start '{' + | dev_proto proto_item ';' + | dev_proto dev_iface_list ';' + ; + +dev_iface_list: + INTERFACE TEXT { + init_list(&((struct rt_dev_proto *) this_proto)->iface_list); + rt_dev_add_iface($2); + } + | dev_iface_list ',' TEXT { rt_dev_add_iface($3); } + ; + CF_CODE +void +rt_dev_add_iface(char *n) +{ + struct rt_dev_proto *p = (void *) this_proto; + struct iface_patt *k = cfg_alloc(sizeof(struct iface_patt)); + + k->pattern = cfg_strcpy(n); + add_tail(&p->iface_list, &k->n); +} + CF_END |