diff options
author | Henning Brauer <henning@cvs.openbsd.org> | 2009-11-26 13:40:44 +0000 |
---|---|---|
committer | Henning Brauer <henning@cvs.openbsd.org> | 2009-11-26 13:40:44 +0000 |
commit | b747318d2801c2c3f5fa118893932d89a3ebb3bc (patch) | |
tree | a6a08cab192718c3af547aea362f353672d63d40 /usr.sbin/bgpd/parse.y | |
parent | 8bca6e9896c0cb906b457e4f4b5ac6a8b8b6a67a (diff) |
support for set origin; based on an initial diff from
Sebastian Benoit <benoit-lists at fb12 dot de> who also tested this version
claudio ok
Diffstat (limited to 'usr.sbin/bgpd/parse.y')
-rw-r--r-- | usr.sbin/bgpd/parse.y | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/usr.sbin/bgpd/parse.y b/usr.sbin/bgpd/parse.y index fe1c7361af5..3c1dd8d95c1 100644 --- a/usr.sbin/bgpd/parse.y +++ b/usr.sbin/bgpd/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.239 2009/11/11 13:48:34 claudio Exp $ */ +/* $OpenBSD: parse.y,v 1.240 2009/11/26 13:40:43 henning Exp $ */ /* * Copyright (c) 2002, 2003, 2004 Henning Brauer <henning@openbsd.org> @@ -173,7 +173,7 @@ typedef struct { %token CONNECTED STATIC %token PREFIX PREFIXLEN SOURCEAS TRANSITAS PEERAS COMMUNITY DELETE %token SET LOCALPREF MED METRIC NEXTHOP REJECT BLACKHOLE NOMODIFY SELF -%token PREPEND_SELF PREPEND_PEER PFTABLE WEIGHT RTLABEL +%token PREPEND_SELF PREPEND_PEER PFTABLE WEIGHT RTLABEL ORIGIN %token ERROR INCLUDE %token IPSEC ESP AH SPI IKE %token IPV4 IPV6 @@ -181,7 +181,7 @@ typedef struct { %token <v.string> STRING %token <v.number> NUMBER %type <v.number> asnumber as4number optnumber yesno inout -%type <v.number> espah family restart +%type <v.number> espah family restart origincode %type <v.string> string filter_rib %type <v.addr> address %type <v.prefix> prefix addrspec @@ -1846,8 +1846,29 @@ filter_set_opt : LOCALPREF NUMBER { } } } + | ORIGIN origincode { + if (($$ = calloc(1, sizeof(struct filter_set))) == NULL) + fatal(NULL); + $$->type = ACTION_SET_ORIGIN; + $$->action.origin = $2; + } ; +origincode : string { + if (!strcmp($1, "egp")) + $$ = ORIGIN_EGP; + else if (!strcmp($1, "igp")) + $$ = ORIGIN_IGP; + else if (!strcmp($1, "incomplete")) + $$ = ORIGIN_INCOMPLETE; + else { + yyerror("unknown origin \"%s\"", $1); + free($1); + YYERROR; + } + free($1); + }; + comma : "," | /* empty */ ; @@ -1951,6 +1972,7 @@ lookup(char *s) { "nexthop", NEXTHOP}, { "no-modify", NOMODIFY}, { "on", ON}, + { "origin", ORIGIN}, { "out", OUT}, { "passive", PASSIVE}, { "password", PASSWORD}, |