pktloc_syntax.y revision db5bd57899affbcaf42ac0b93c5c7be8f51ca390
1db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%{ 2db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf#include <netlink-local.h> 3db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf#include <netlink-tc.h> 4db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf#include <netlink/netlink.h> 5db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf#include <netlink/utils.h> 6db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf#include <netlink/route/pktloc.h> 7db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%} 8db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 9db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%locations 10db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%error-verbose 11db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%define api.pure 12db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%name-prefix "pktloc_" 13db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 14db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%parse-param {void *scanner} 15db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%lex-param {void *scanner} 16db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 17db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%union { 18db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf struct rtnl_pktloc *l; 19db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf uint32_t i; 20db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf char *s; 21db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf} 22db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 23db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%{ 24db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Grafextern int pktloc_lex(YYSTYPE *, YYLTYPE *, void *); 25db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Grafextern void rtnl_pktloc_add(struct rtnl_pktloc *); 26db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 27db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Grafstatic void yyerror(YYLTYPE *locp, void *scanner, const char *msg) 28db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf{ 29db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf /* FIXME */ 30db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf} 31db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%} 32db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 33db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%token <i> ERROR NUMBER LAYER 34db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%token <s> NAME 35db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 36db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%type <i> mask layer 37db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%type <l> location 38db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 39db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%destructor { free($$); } NAME 40db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 41db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%start input 42db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 43db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%% 44db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 45db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Grafinput: 46db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf def 47db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { } 48db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf ; 49db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 50db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Grafdef: 51db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf /* empty */ 52db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { } 53db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf | location def 54db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { } 55db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf ; 56db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 57db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graflocation: 58db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf NAME NAME layer NUMBER mask 59db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { 60db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf struct rtnl_pktloc *loc; 61db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 62db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf if (!(loc = calloc(1, sizeof(*loc)))) { 63db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf /* FIXME */ 64db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf } 65db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 66db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf if (!strcasecmp($2, "u8")) 67db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->align = TCF_EM_ALIGN_U8; 68db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf else if (!strcasecmp($2, "h8")) { 69db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->align = TCF_EM_ALIGN_U8; 70db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->flags = TCF_EM_CMP_TRANS; 71db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf } else if (!strcasecmp($2, "u16")) 72db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->align = TCF_EM_ALIGN_U16; 73db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf else if (!strcasecmp($2, "h16")) { 74db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->align = TCF_EM_ALIGN_U16; 75db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->flags = TCF_EM_CMP_TRANS; 76db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf } else if (!strcasecmp($2, "u32")) 77db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->align = TCF_EM_ALIGN_U32; 78db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf else if (!strcasecmp($2, "h32")) { 79db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->align = TCF_EM_ALIGN_U32; 80db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->flags = TCF_EM_CMP_TRANS; 81db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf } 82db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 83db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf free($2); 84db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 85db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->name = $1; 86db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->layer = $3; 87db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->offset = $4; 88db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf loc->mask = $5; 89db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 90db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf rtnl_pktloc_add(loc); 91db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 92db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf $$ = loc; 93db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf } 94db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf ; 95db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 96db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graflayer: 97db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf /* empty */ 98db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { $$ = TCF_LAYER_NETWORK; } 99db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf | LAYER '+' 100db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { $$ = $1; } 101db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf ; 102db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf 103db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Grafmask: 104db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf /* empty */ 105db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { $$ = 0; } 106db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf | NUMBER 107db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf { $$ = $1; } 108db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf ; 109