xref: /aosp_15_r20/external/libnl/lib/route/cls/ematch_grammar.l (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker /*
3*4dc78e53SAndroid Build Coastguard Worker  * Copyright (c) 2010-2013 Thomas Graf <[email protected]>
4*4dc78e53SAndroid Build Coastguard Worker  */
5*4dc78e53SAndroid Build Coastguard Worker 
6*4dc78e53SAndroid Build Coastguard Worker %top{
7*4dc78e53SAndroid Build Coastguard Worker  #include "nl-default.h"
8*4dc78e53SAndroid Build Coastguard Worker }
9*4dc78e53SAndroid Build Coastguard Worker %{
10*4dc78e53SAndroid Build Coastguard Worker  #include <linux/tc_ematch/tc_em_cmp.h>
11*4dc78e53SAndroid Build Coastguard Worker 
12*4dc78e53SAndroid Build Coastguard Worker  #include <netlink/netlink.h>
13*4dc78e53SAndroid Build Coastguard Worker  #include <netlink/route/cls/ematch.h>
14*4dc78e53SAndroid Build Coastguard Worker  #include <netlink/route/cls/ematch/cmp.h>
15*4dc78e53SAndroid Build Coastguard Worker 
16*4dc78e53SAndroid Build Coastguard Worker  #include "nl-route.h"
17*4dc78e53SAndroid Build Coastguard Worker 
18*4dc78e53SAndroid Build Coastguard Worker  #include "ematch_syntax.h"
19*4dc78e53SAndroid Build Coastguard Worker 
20*4dc78e53SAndroid Build Coastguard Worker  int ematch_get_column(yyscan_t);
21*4dc78e53SAndroid Build Coastguard Worker  void ematch_set_column(int, yyscan_t);
22*4dc78e53SAndroid Build Coastguard Worker %}
23*4dc78e53SAndroid Build Coastguard Worker 
24*4dc78e53SAndroid Build Coastguard Worker %option 8bit
25*4dc78e53SAndroid Build Coastguard Worker %option reentrant
26*4dc78e53SAndroid Build Coastguard Worker %option warn
27*4dc78e53SAndroid Build Coastguard Worker %option noyywrap
28*4dc78e53SAndroid Build Coastguard Worker %option noinput
29*4dc78e53SAndroid Build Coastguard Worker %option nounput
30*4dc78e53SAndroid Build Coastguard Worker %option bison-bridge
31*4dc78e53SAndroid Build Coastguard Worker %option prefix="ematch_"
32*4dc78e53SAndroid Build Coastguard Worker 
33*4dc78e53SAndroid Build Coastguard Worker %x QUOTE
34*4dc78e53SAndroid Build Coastguard Worker 
35*4dc78e53SAndroid Build Coastguard Worker %%
36*4dc78e53SAndroid Build Coastguard Worker 
37*4dc78e53SAndroid Build Coastguard Worker [ \t\r\n]+
38*4dc78e53SAndroid Build Coastguard Worker 
39*4dc78e53SAndroid Build Coastguard Worker \"			{
40*4dc78e53SAndroid Build Coastguard Worker 				NL_DBG(4, "Beginning of quote\n");
41*4dc78e53SAndroid Build Coastguard Worker 				yylval->q.len = 32;
42*4dc78e53SAndroid Build Coastguard Worker 				if (!(yylval->q.data = calloc(1, yylval->q.len)))
43*4dc78e53SAndroid Build Coastguard Worker 					return ERROR;
44*4dc78e53SAndroid Build Coastguard Worker 
45*4dc78e53SAndroid Build Coastguard Worker 				yylval->q.index = 0;
46*4dc78e53SAndroid Build Coastguard Worker 				BEGIN(QUOTE);
47*4dc78e53SAndroid Build Coastguard Worker 			}
48*4dc78e53SAndroid Build Coastguard Worker 
49*4dc78e53SAndroid Build Coastguard Worker <QUOTE>[^\\\n\"]+	{
50*4dc78e53SAndroid Build Coastguard Worker 				memcpy(yylval->q.data + yylval->q.index, yytext,
51*4dc78e53SAndroid Build Coastguard Worker 				       strlen(yytext));
52*4dc78e53SAndroid Build Coastguard Worker 				yylval->q.index += strlen(yytext);
53*4dc78e53SAndroid Build Coastguard Worker 			}
54*4dc78e53SAndroid Build Coastguard Worker 
55*4dc78e53SAndroid Build Coastguard Worker <QUOTE>\"		{
56*4dc78e53SAndroid Build Coastguard Worker 				BEGIN(0);
57*4dc78e53SAndroid Build Coastguard Worker 				return QUOTED;
58*4dc78e53SAndroid Build Coastguard Worker 			}
59*4dc78e53SAndroid Build Coastguard Worker 
60*4dc78e53SAndroid Build Coastguard Worker 
61*4dc78e53SAndroid Build Coastguard Worker [[:digit:]]+		|
62*4dc78e53SAndroid Build Coastguard Worker 0[xX][[:xdigit:]]+	{
63*4dc78e53SAndroid Build Coastguard Worker 				yylval->i = strtoul(yytext, NULL, 0);
64*4dc78e53SAndroid Build Coastguard Worker 				return NUMBER;
65*4dc78e53SAndroid Build Coastguard Worker 			}
66*4dc78e53SAndroid Build Coastguard Worker 
67*4dc78e53SAndroid Build Coastguard Worker eq			|
68*4dc78e53SAndroid Build Coastguard Worker "="			return KW_EQ;
69*4dc78e53SAndroid Build Coastguard Worker gt			|
70*4dc78e53SAndroid Build Coastguard Worker ">"			return KW_GT;
71*4dc78e53SAndroid Build Coastguard Worker lt			|
72*4dc78e53SAndroid Build Coastguard Worker "<"			return KW_LT;
73*4dc78e53SAndroid Build Coastguard Worker 
74*4dc78e53SAndroid Build Coastguard Worker [aA][nN][dD]		|
75*4dc78e53SAndroid Build Coastguard Worker "&&"			{ yylval->i = TCF_EM_REL_AND; return LOGIC; }
76*4dc78e53SAndroid Build Coastguard Worker [oO][rR]		|
77*4dc78e53SAndroid Build Coastguard Worker "||"			{ yylval->i = TCF_EM_REL_OR; return LOGIC; }
78*4dc78e53SAndroid Build Coastguard Worker [nN][oO][tT]		|
79*4dc78e53SAndroid Build Coastguard Worker "!"			return NOT;
80*4dc78e53SAndroid Build Coastguard Worker 
81*4dc78e53SAndroid Build Coastguard Worker [cC][mM][pP]		{ yylval->i = TCF_EM_CMP; return EMATCH_CMP; }
82*4dc78e53SAndroid Build Coastguard Worker [pP][aA][tT][tT][eE][rR][nN] { yylval->i = TCF_EM_NBYTE; return EMATCH_NBYTE; }
83*4dc78e53SAndroid Build Coastguard Worker [tT][eE][xX][tT]	{ yylval->i = TCF_EM_TEXT; return EMATCH_TEXT; }
84*4dc78e53SAndroid Build Coastguard Worker [mM][eE][tT][aA]	{ yylval->i = TCF_EM_META; return EMATCH_META; }
85*4dc78e53SAndroid Build Coastguard Worker 
86*4dc78e53SAndroid Build Coastguard Worker "("			return KW_OPEN;
87*4dc78e53SAndroid Build Coastguard Worker ")"			return KW_CLOSE;
88*4dc78e53SAndroid Build Coastguard Worker [mM][aA][sS][kK]	|
89*4dc78e53SAndroid Build Coastguard Worker "&"			return KW_MASK;
90*4dc78e53SAndroid Build Coastguard Worker [sS][hH][iI][fF][tT]	|
91*4dc78e53SAndroid Build Coastguard Worker ">>"			return KW_SHIFT;
92*4dc78e53SAndroid Build Coastguard Worker [aA][tT]		return KW_AT;
93*4dc78e53SAndroid Build Coastguard Worker "+"			return KW_PLUS;
94*4dc78e53SAndroid Build Coastguard Worker [fF][rR][oO][mM]	return KW_FROM;
95*4dc78e53SAndroid Build Coastguard Worker [tT][oO]		return KW_TO;
96*4dc78e53SAndroid Build Coastguard Worker 
97*4dc78e53SAndroid Build Coastguard Worker [uU]8			{ yylval->i = TCF_EM_ALIGN_U8; return ALIGN; }
98*4dc78e53SAndroid Build Coastguard Worker [uU]16			{ yylval->i = TCF_EM_ALIGN_U16; return ALIGN; }
99*4dc78e53SAndroid Build Coastguard Worker [uU]32			{ yylval->i = TCF_EM_ALIGN_U32; return ALIGN; }
100*4dc78e53SAndroid Build Coastguard Worker 
101*4dc78e53SAndroid Build Coastguard Worker [lL][iI][nN][kK]	|
102*4dc78e53SAndroid Build Coastguard Worker [eE][tT][hH]		{ yylval->i = TCF_LAYER_LINK; return LAYER; }
103*4dc78e53SAndroid Build Coastguard Worker [nN][eE][tT]		|
104*4dc78e53SAndroid Build Coastguard Worker [iI][pP]6		|
105*4dc78e53SAndroid Build Coastguard Worker [iI][pP]		{ yylval->i = TCF_LAYER_NETWORK; return LAYER; }
106*4dc78e53SAndroid Build Coastguard Worker [tT][rR][aA][nN][sS][pP][oO][rR][tT] |
107*4dc78e53SAndroid Build Coastguard Worker [tT][cC][pP]		{ yylval->i = TCF_LAYER_TRANSPORT; return LAYER; }
108*4dc78e53SAndroid Build Coastguard Worker 
109*4dc78e53SAndroid Build Coastguard Worker random			return META_RANDOM;
110*4dc78e53SAndroid Build Coastguard Worker loadavg_0		return META_LOADAVG_0;
111*4dc78e53SAndroid Build Coastguard Worker loadavg_1		return META_LOADAVG_1;
112*4dc78e53SAndroid Build Coastguard Worker loadavg_2		return META_LOADAVG_2;
113*4dc78e53SAndroid Build Coastguard Worker dev			return META_DEV;
114*4dc78e53SAndroid Build Coastguard Worker prio			return META_PRIO;
115*4dc78e53SAndroid Build Coastguard Worker proto			return META_PROTO;
116*4dc78e53SAndroid Build Coastguard Worker pkttype			return META_PKTTYPE;
117*4dc78e53SAndroid Build Coastguard Worker pktlen			return META_PKTLEN;
118*4dc78e53SAndroid Build Coastguard Worker datalen			return META_DATALEN;
119*4dc78e53SAndroid Build Coastguard Worker maclen			return META_MACLEN;
120*4dc78e53SAndroid Build Coastguard Worker mark			return META_MARK;
121*4dc78e53SAndroid Build Coastguard Worker tcindex			return META_TCINDEX;
122*4dc78e53SAndroid Build Coastguard Worker rtclassid		return META_RTCLASSID;
123*4dc78e53SAndroid Build Coastguard Worker rtiif			return META_RTIIF;
124*4dc78e53SAndroid Build Coastguard Worker sk_family		return META_SK_FAMILY;
125*4dc78e53SAndroid Build Coastguard Worker sk_state		return META_SK_STATE;
126*4dc78e53SAndroid Build Coastguard Worker sk_reuse		return META_SK_REUSE;
127*4dc78e53SAndroid Build Coastguard Worker sk_refcnt		return META_SK_REFCNT;
128*4dc78e53SAndroid Build Coastguard Worker sk_rcvbuf		return META_SK_RCVBUF;
129*4dc78e53SAndroid Build Coastguard Worker sk_sndbuf		return META_SK_SNDBUF;
130*4dc78e53SAndroid Build Coastguard Worker sk_shutdown		return META_SK_SHUTDOWN;
131*4dc78e53SAndroid Build Coastguard Worker sk_proto		return META_SK_PROTO;
132*4dc78e53SAndroid Build Coastguard Worker sk_type			return META_SK_TYPE;
133*4dc78e53SAndroid Build Coastguard Worker sk_rmem_alloc		return META_SK_RMEM_ALLOC;
134*4dc78e53SAndroid Build Coastguard Worker sk_wmem_alloc		return META_SK_WMEM_ALLOC;
135*4dc78e53SAndroid Build Coastguard Worker sk_wmem_queued		return META_SK_WMEM_QUEUED;
136*4dc78e53SAndroid Build Coastguard Worker sk_rcv_qlen		return META_SK_RCV_QLEN;
137*4dc78e53SAndroid Build Coastguard Worker sk_snd_qlen		return META_SK_SND_QLEN;
138*4dc78e53SAndroid Build Coastguard Worker sk_err_qlen		return META_SK_ERR_QLEN;
139*4dc78e53SAndroid Build Coastguard Worker sk_forward_allocs	return META_SK_FORWARD_ALLOCS;
140*4dc78e53SAndroid Build Coastguard Worker sk_allocs		return META_SK_ALLOCS;
141*4dc78e53SAndroid Build Coastguard Worker sk_route_caps		return META_SK_ROUTE_CAPS;
142*4dc78e53SAndroid Build Coastguard Worker sk_hash			return META_SK_HASH;
143*4dc78e53SAndroid Build Coastguard Worker sk_lingertime		return META_SK_LINGERTIME;
144*4dc78e53SAndroid Build Coastguard Worker sk_ack_backlog		return META_SK_ACK_BACKLOG;
145*4dc78e53SAndroid Build Coastguard Worker sk_max_ack_backlog	return META_SK_MAX_ACK_BACKLOG;
146*4dc78e53SAndroid Build Coastguard Worker sk_prio			return META_SK_PRIO;
147*4dc78e53SAndroid Build Coastguard Worker sk_rcvlowat		return META_SK_RCVLOWAT;
148*4dc78e53SAndroid Build Coastguard Worker sk_rcvtimeo		return META_SK_RCVTIMEO;
149*4dc78e53SAndroid Build Coastguard Worker sk_sndtimeo		return META_SK_SNDTIMEO;
150*4dc78e53SAndroid Build Coastguard Worker sk_sendmsg_off		return META_SK_SENDMSG_OFF;
151*4dc78e53SAndroid Build Coastguard Worker sk_write_pending	return META_SK_WRITE_PENDING;
152*4dc78e53SAndroid Build Coastguard Worker vlan			return META_VLAN;
153*4dc78e53SAndroid Build Coastguard Worker rxhash			return META_RXHASH;
154*4dc78e53SAndroid Build Coastguard Worker 
155*4dc78e53SAndroid Build Coastguard Worker devname			return META_DEVNAME;
156*4dc78e53SAndroid Build Coastguard Worker sk_bound_if		return META_SK_BOUND_IF;
157*4dc78e53SAndroid Build Coastguard Worker 
158*4dc78e53SAndroid Build Coastguard Worker 
159*4dc78e53SAndroid Build Coastguard Worker [^ \t\r\n+()=<>&|\"]+	{
160*4dc78e53SAndroid Build Coastguard Worker 				yylval->s = strdup(yytext);
161*4dc78e53SAndroid Build Coastguard Worker 				if (yylval->s == NULL)
162*4dc78e53SAndroid Build Coastguard Worker 					return ERROR;
163*4dc78e53SAndroid Build Coastguard Worker 				NL_DBG(4, "lex STR=%s\n", yylval->s);
164*4dc78e53SAndroid Build Coastguard Worker 				return STR;
165*4dc78e53SAndroid Build Coastguard Worker 			}
166