0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Implemented `show route where <condition>' command.

Pavel, please check my addition to filter/config.Y.
This commit is contained in:
Martin Mares 1999-12-02 14:04:44 +00:00
parent f2c6c80a24
commit 430da60fa2
3 changed files with 32 additions and 3 deletions

1
TODO
View File

@ -50,7 +50,6 @@ shutdown # order system shutdown
configure [<file>] configure [<file>]
debug <what> # dump debugging information to log debug <what> # dump debugging information to log
show <name> # show everything you know about symbol <name> show <name> # show everything you know about symbol <name>
route [<route>] [table <name>] [filter (<name> | { <inline> })] [where <condition>] [all] <-- WHERE
rip ??? [<name>] rip ??? [<name>]
ospf ??? [<name>] ospf ??? [<name>]
static ??? [<name>] static ??? [<name>]

View File

@ -34,13 +34,13 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, CONST, UNSET,
LEN, LEN,
DEFINED, DEFINED,
IMPOSSIBLE, IMPOSSIBLE,
FILTER) FILTER, WHERE)
%nonassoc THEN %nonassoc THEN
%nonassoc ELSE %nonassoc ELSE
%type <x> term block cmds cmd function_body constant print_one print_list var_list var_listn any_dynamic %type <x> term block cmds cmd function_body constant print_one print_list var_list var_listn any_dynamic
%type <f> filter filter_body %type <f> filter filter_body where_filter
%type <i> type break_command pair %type <i> type break_command pair
%type <e> set_item set_items switch_body %type <e> set_item set_items switch_body
%type <v> set_atom prefix prefix_s ipa %type <v> set_atom prefix prefix_s ipa
@ -124,6 +124,30 @@ filter:
| filter_body | filter_body
; ;
where_filter:
WHERE term {
/* Construct 'IF term THEN ACCEPT; REJECT;' */
struct filter *f = cfg_alloc(sizeof(struct filter));
struct f_inst *i, *acc, *rej;
acc = f_new_inst(); /* ACCEPT */
acc->code = 'p,';
acc->a1.p = NULL;
acc->a2.i = F_ACCEPT;
rej = f_new_inst(); /* REJECT */
rej->code = 'p,';
rej->a1.p = NULL;
rej->a2.i = F_REJECT;
i = f_new_inst(); /* IF */
i->code = '?';
i->a1.p = $2;
i->a2.p = acc;
i->next = rej;
f->name = NULL;
f->root = i;
$$ = f;
}
;
function_params: function_params:
'(' declsn ')' { printf( "Have function parameters\n" ); $$=$2; } '(' declsn ')' { printf( "Have function parameters\n" ); $$=$2; }
| '(' ')' { $$=NULL; } | '(' ')' { $$=NULL; }

View File

@ -237,8 +237,14 @@ r_args:
} }
| r_args FILTER filter { | r_args FILTER filter {
$$ = $1; $$ = $1;
if ($$->filter != FILTER_ACCEPT) cf_error("Filter specified twice");
$$->filter = $3; $$->filter = $3;
} }
| r_args where_filter {
$$ = $1;
if ($$->filter != FILTER_ACCEPT) cf_error("Filter specified twice");
$$->filter = $2;
}
| r_args ALL { | r_args ALL {
$$ = $1; $$ = $1;
$$->verbose = 1; $$->verbose = 1;