1db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%{
2054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart #include <netlink-private/netlink.h>
3054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart #include <netlink-private/tc.h>
4db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf #include <netlink/netlink.h>
5db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf #include <netlink/utils.h>
6db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf #include <netlink/route/pktloc.h>
7db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf #include "pktloc_syntax.h"
8db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%}
9db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
10db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option 8bit
11db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option reentrant
12db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option warn
13db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option noyywrap
14054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart%option noinput
15db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option nounput
16db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option bison-bridge
17db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option bison-locations
18db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%option prefix="pktloc_"
19db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
20db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf%%
21db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
22db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf[ \t\r\n]+
23db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
24db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf"#".*
25db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
26db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf[[:digit:]]+		|
27db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf0[xX][[:xdigit:]]+	{
28db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf				yylval->i = strtoul(yytext, NULL, 0);
29db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf				return NUMBER;
30db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf			}
31db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
32db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf"+"			{ return yylval->i = yytext[0]; }
33db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
34054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[uU]8			{ yylval->i = TCF_EM_ALIGN_U8; return ALIGN; }
35054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[uU]16			{ yylval->i = TCF_EM_ALIGN_U16; return ALIGN; }
36054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[uU]32			{ yylval->i = TCF_EM_ALIGN_U32; return ALIGN; }
37054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
38054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[lL][iI][nN][kK]	|
39054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[eE][tT][hH]		{ yylval->i = TCF_LAYER_LINK; return LAYER; }
40054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[nN][eE][tT]		|
41054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[iI][pP]		{ yylval->i = TCF_LAYER_NETWORK; return LAYER; }
42054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart[tT][rR][aA][nN][sS][pP][oO][rR][tT] |
43db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf[tT][cC][pP]		{ yylval->i = TCF_LAYER_TRANSPORT; return LAYER; }
44db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf
45054c80d775f2ae9b8f50260bdfcb821e99c0da2aPaul Stewart
46db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf[^ \t\r\n+]+		{
47db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf				yylval->s = strdup(yytext);
48db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf				if (yylval->s == NULL)
49db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf					return ERROR;
50db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf				return NAME;
51db5bd57899affbcaf42ac0b93c5c7be8f51ca390Thomas Graf			}
52