mirror of
https://gitlab.labs.nic.cz/labs/bird.git
synced 2024-05-11 16:54:54 +00:00
version:
EXPORT <filter-spec> for outbound routes (i.e., those announced
by BIRD to the rest of the world).
IMPORT <filter-spec> for inbound routes (i.e., those imported
by BIRD from the rest of the world).
where <filter-spec> is one of:
ALL pass all routes
NONE drop all routes
FILTER <name> use named filter
FILTER { <filter> } use explicitly defined filter
For all protocols, the default is IMPORT ALL, EXPORT NONE. This includes
the kernel protocol, so that you need to add EXPORT ALL to get the previous
configuration of kernel syncer (as usually, see doc/bird.conf.example for
a bird.conf example :)).
124 lines
2.6 KiB
Plaintext
124 lines
2.6 KiB
Plaintext
/*
|
|
* BIRD -- Core Configuration
|
|
*
|
|
* (c) 1998--1999 Martin Mares <mj@ucw.cz>
|
|
*
|
|
* Can be freely distributed and used under the terms of the GNU GPL.
|
|
*/
|
|
|
|
CF_HDR
|
|
|
|
static struct proto_config *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, DIRECT)
|
|
CF_KEYWORDS(INTERFACE, IMPORT, EXPORT, FILTER, NONE)
|
|
|
|
%type <i> idval
|
|
%type <f> imexport
|
|
|
|
CF_GRAMMAR
|
|
|
|
/* Setting of router ID */
|
|
|
|
CF_ADDTO(conf, rtrid)
|
|
rtrid: ROUTER ID idval ';' {
|
|
new_config->router_id = $3;
|
|
}
|
|
;
|
|
|
|
idval:
|
|
NUM
|
|
| 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, &this_proto->proto->name_counter);
|
|
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 expr {
|
|
if ($2 < 0 || $2 > 255) cf_error("Invalid preference");
|
|
this_proto->preference = $2;
|
|
}
|
|
| DISABLED { this_proto->disabled = 1; }
|
|
| DEBUG expr { this_proto->debug = $2; }
|
|
| DEBUG ALL { this_proto->debug = ~0; }
|
|
| DEBUG OFF { this_proto->debug = 0; }
|
|
| IMPORT imexport { this_proto->in_filter = $2; }
|
|
| EXPORT imexport { this_proto->out_filter = $2; }
|
|
;
|
|
|
|
imexport:
|
|
FILTER filter { $$ = $2; }
|
|
| ALL { $$ = FILTER_ACCEPT; }
|
|
| NONE { $$ = FILTER_REJECT; }
|
|
;
|
|
|
|
/* Direct device route protocol */
|
|
|
|
CF_ADDTO(proto, dev_proto '}')
|
|
|
|
dev_proto_start: proto_start DIRECT {
|
|
struct rt_dev_config *p = proto_config_new(&proto_device, sizeof(struct rt_dev_config));
|
|
struct iface_patt *k = cfg_alloc(sizeof(struct iface_patt));
|
|
this_proto = &p->c;
|
|
p->c.preference = DEF_PREF_DIRECT;
|
|
init_list(&p->iface_list);
|
|
k->pattern = "*";
|
|
add_tail(&p->iface_list, &k->n);
|
|
}
|
|
;
|
|
|
|
dev_proto:
|
|
dev_proto_start proto_name '{'
|
|
| dev_proto proto_item ';'
|
|
| dev_proto dev_iface_list ';'
|
|
;
|
|
|
|
dev_iface_list:
|
|
INTERFACE TEXT {
|
|
/* FIXME: Beware of obscure semantics. */
|
|
init_list(&((struct rt_dev_config *) 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_config *p = (void *) this_proto;
|
|
struct iface_patt *k = cfg_alloc(sizeof(struct iface_patt));
|
|
|
|
k->pattern = cfg_strdup(n);
|
|
add_tail(&p->iface_list, &k->n);
|
|
}
|
|
|
|
CF_END
|