52#define YYBISON_VERSION "3.8.2"
55#define YYSKELETON_NAME "yacc.c"
68#define yyparse ematch_parse
69#define yylex ematch_lex
70#define yyerror ematch_error
71#define yydebug ematch_debug
72#define yynerrs ematch_nerrs
75#line 6 "lib/route/cls/ematch_syntax.y"
77#include <linux/tc_ematch/tc_em_meta.h>
79#include <linux/tc_ematch/tc_em_cmp.h>
81#include <netlink/netlink.h>
82#include <netlink/utils.h>
83#include <netlink/route/pktloc.h>
84#include <netlink/route/cls/ematch.h>
85#include <netlink/route/cls/ematch/cmp.h>
86#include <netlink/route/cls/ematch/nbyte.h>
87#include <netlink/route/cls/ematch/text.h>
88#include <netlink/route/cls/ematch/meta.h>
92#define META_ALLOC rtnl_meta_value_alloc_id
93#define META_ID(name) TCF_META_ID_##name
94#define META_INT TCF_META_TYPE_INT
95#define META_VAR TCF_META_TYPE_VAR
97#line 98 "lib/route/cls/ematch_syntax.c"
101# define YY_CAST(Type, Val) static_cast<Type> (Val)
102# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
104# define YY_CAST(Type, Val) ((Type) (Val))
105# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
109# if defined __cplusplus
110# if 201103L <= __cplusplus
111# define YY_NULLPTR nullptr
116# define YY_NULLPTR ((void*)0)
120#include "ematch_syntax.h"
124 YYSYMBOL_YYEMPTY = -2,
126 YYSYMBOL_YYerror = 1,
127 YYSYMBOL_YYUNDEF = 2,
131 YYSYMBOL_OPERAND = 6,
135 YYSYMBOL_KW_OPEN = 10,
136 YYSYMBOL_KW_CLOSE = 11,
137 YYSYMBOL_KW_PLUS = 12,
138 YYSYMBOL_KW_MASK = 13,
139 YYSYMBOL_KW_SHIFT = 14,
141 YYSYMBOL_EMATCH_CMP = 16,
142 YYSYMBOL_EMATCH_NBYTE = 17,
143 YYSYMBOL_EMATCH_TEXT = 18,
144 YYSYMBOL_EMATCH_META = 19,
148 YYSYMBOL_KW_FROM = 23,
150 YYSYMBOL_META_RANDOM = 25,
151 YYSYMBOL_META_LOADAVG_0 = 26,
152 YYSYMBOL_META_LOADAVG_1 = 27,
153 YYSYMBOL_META_LOADAVG_2 = 28,
154 YYSYMBOL_META_DEV = 29,
155 YYSYMBOL_META_PRIO = 30,
156 YYSYMBOL_META_PROTO = 31,
157 YYSYMBOL_META_PKTTYPE = 32,
158 YYSYMBOL_META_PKTLEN = 33,
159 YYSYMBOL_META_DATALEN = 34,
160 YYSYMBOL_META_MACLEN = 35,
161 YYSYMBOL_META_MARK = 36,
162 YYSYMBOL_META_TCINDEX = 37,
163 YYSYMBOL_META_RTCLASSID = 38,
164 YYSYMBOL_META_RTIIF = 39,
165 YYSYMBOL_META_SK_FAMILY = 40,
166 YYSYMBOL_META_SK_STATE = 41,
167 YYSYMBOL_META_SK_REUSE = 42,
168 YYSYMBOL_META_SK_REFCNT = 43,
169 YYSYMBOL_META_SK_RCVBUF = 44,
170 YYSYMBOL_META_SK_SNDBUF = 45,
171 YYSYMBOL_META_SK_SHUTDOWN = 46,
172 YYSYMBOL_META_SK_PROTO = 47,
173 YYSYMBOL_META_SK_TYPE = 48,
174 YYSYMBOL_META_SK_RMEM_ALLOC = 49,
175 YYSYMBOL_META_SK_WMEM_ALLOC = 50,
176 YYSYMBOL_META_SK_WMEM_QUEUED = 51,
177 YYSYMBOL_META_SK_RCV_QLEN = 52,
178 YYSYMBOL_META_SK_SND_QLEN = 53,
179 YYSYMBOL_META_SK_ERR_QLEN = 54,
180 YYSYMBOL_META_SK_FORWARD_ALLOCS = 55,
181 YYSYMBOL_META_SK_ALLOCS = 56,
182 YYSYMBOL_META_SK_ROUTE_CAPS = 57,
183 YYSYMBOL_META_SK_HASH = 58,
184 YYSYMBOL_META_SK_LINGERTIME = 59,
185 YYSYMBOL_META_SK_ACK_BACKLOG = 60,
186 YYSYMBOL_META_SK_MAX_ACK_BACKLOG = 61,
187 YYSYMBOL_META_SK_PRIO = 62,
188 YYSYMBOL_META_SK_RCVLOWAT = 63,
189 YYSYMBOL_META_SK_RCVTIMEO = 64,
190 YYSYMBOL_META_SK_SNDTIMEO = 65,
191 YYSYMBOL_META_SK_SENDMSG_OFF = 66,
192 YYSYMBOL_META_SK_WRITE_PENDING = 67,
193 YYSYMBOL_META_VLAN = 68,
194 YYSYMBOL_META_RXHASH = 69,
195 YYSYMBOL_META_DEVNAME = 70,
196 YYSYMBOL_META_SK_BOUND_IF = 71,
198 YYSYMBOL_QUOTED = 73,
199 YYSYMBOL_YYACCEPT = 74,
203 YYSYMBOL_ematch = 78,
204 YYSYMBOL_cmp_match = 79,
205 YYSYMBOL_cmp_expr = 80,
206 YYSYMBOL_text_from = 81,
207 YYSYMBOL_text_to = 82,
208 YYSYMBOL_meta_value = 83,
209 YYSYMBOL_meta_int_id = 84,
210 YYSYMBOL_meta_var_id = 85,
211 YYSYMBOL_pattern = 86,
212 YYSYMBOL_pktloc = 87,
216 YYSYMBOL_operand = 91
218typedef enum yysymbol_kind_t yysymbol_kind_t;
222#line 58 "lib/route/cls/ematch_syntax.y"
224extern int ematch_lex(
YYSTYPE *,
void *);
226#define ematch_error yyerror
227static void yyerror(
void *scanner,
char **errp,
struct nl_list_head *root,
const char *msg)
235#line 236 "lib/route/cls/ematch_syntax.c"
246#ifndef __PTRDIFF_MAX__
248# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
259#ifdef __INT_LEAST8_MAX__
260typedef __INT_LEAST8_TYPE__ yytype_int8;
261#elif defined YY_STDINT_H
262typedef int_least8_t yytype_int8;
264typedef signed char yytype_int8;
267#ifdef __INT_LEAST16_MAX__
268typedef __INT_LEAST16_TYPE__ yytype_int16;
269#elif defined YY_STDINT_H
270typedef int_least16_t yytype_int16;
272typedef short yytype_int16;
281# undef UINT_LEAST8_MAX
282# undef UINT_LEAST16_MAX
283# define UINT_LEAST8_MAX 255
284# define UINT_LEAST16_MAX 65535
287#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
288typedef __UINT_LEAST8_TYPE__ yytype_uint8;
289#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
290 && UINT_LEAST8_MAX <= INT_MAX)
291typedef uint_least8_t yytype_uint8;
292#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
293typedef unsigned char yytype_uint8;
295typedef short yytype_uint8;
298#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
299typedef __UINT_LEAST16_TYPE__ yytype_uint16;
300#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
301 && UINT_LEAST16_MAX <= INT_MAX)
302typedef uint_least16_t yytype_uint16;
303#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
304typedef unsigned short yytype_uint16;
306typedef int yytype_uint16;
310# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
311# define YYPTRDIFF_T __PTRDIFF_TYPE__
312# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
313# elif defined PTRDIFF_MAX
317# define YYPTRDIFF_T ptrdiff_t
318# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
320# define YYPTRDIFF_T long
321# define YYPTRDIFF_MAXIMUM LONG_MAX
327# define YYSIZE_T __SIZE_TYPE__
329# define YYSIZE_T size_t
330# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
332# define YYSIZE_T size_t
334# define YYSIZE_T unsigned
338#define YYSIZE_MAXIMUM \
339 YY_CAST (YYPTRDIFF_T, \
340 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
341 ? YYPTRDIFF_MAXIMUM \
342 : YY_CAST (YYSIZE_T, -1)))
344#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
348typedef yytype_int8 yy_state_t;
351typedef int yy_state_fast_t;
354# if defined YYENABLE_NLS && YYENABLE_NLS
357# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
361# define YY_(Msgid) Msgid
366#ifndef YY_ATTRIBUTE_PURE
367# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
368# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
370# define YY_ATTRIBUTE_PURE
374#ifndef YY_ATTRIBUTE_UNUSED
375# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
376# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
378# define YY_ATTRIBUTE_UNUSED
383#if ! defined lint || defined __GNUC__
384# define YY_USE(E) ((void) (E))
390#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
391# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
392# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
393 _Pragma ("GCC diagnostic push") \
394 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
396# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
397 _Pragma ("GCC diagnostic push") \
398 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
399 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
401# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
402 _Pragma ("GCC diagnostic pop")
404# define YY_INITIAL_VALUE(Value) Value
406#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
407# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
408# define YY_IGNORE_MAYBE_UNINITIALIZED_END
410#ifndef YY_INITIAL_VALUE
411# define YY_INITIAL_VALUE(Value)
414#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
415# define YY_IGNORE_USELESS_CAST_BEGIN \
416 _Pragma ("GCC diagnostic push") \
417 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
418# define YY_IGNORE_USELESS_CAST_END \
419 _Pragma ("GCC diagnostic pop")
421#ifndef YY_IGNORE_USELESS_CAST_BEGIN
422# define YY_IGNORE_USELESS_CAST_BEGIN
423# define YY_IGNORE_USELESS_CAST_END
427#define YY_ASSERT(E) ((void) (0 && (E)))
433# ifdef YYSTACK_USE_ALLOCA
434# if YYSTACK_USE_ALLOCA
436# define YYSTACK_ALLOC __builtin_alloca
437# elif defined __BUILTIN_VA_ARG_INCR
440# define YYSTACK_ALLOC __alloca
441# elif defined _MSC_VER
443# define alloca _alloca
445# define YYSTACK_ALLOC alloca
446# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
450# define EXIT_SUCCESS 0
459# define YYSTACK_FREE(Ptr) do { ; } while (0)
460# ifndef YYSTACK_ALLOC_MAXIMUM
465# define YYSTACK_ALLOC_MAXIMUM 4032
468# define YYSTACK_ALLOC YYMALLOC
469# define YYSTACK_FREE YYFREE
470# ifndef YYSTACK_ALLOC_MAXIMUM
471# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
473# if (defined __cplusplus && ! defined EXIT_SUCCESS \
474 && ! ((defined YYMALLOC || defined malloc) \
475 && (defined YYFREE || defined free)))
478# define EXIT_SUCCESS 0
482# define YYMALLOC malloc
483# if ! defined malloc && ! defined EXIT_SUCCESS
484void *malloc (YYSIZE_T);
489# if ! defined free && ! defined EXIT_SUCCESS
496#if (! defined yyoverflow \
497 && (! defined __cplusplus \
498 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
503 yy_state_t yyss_alloc;
508# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
512# define YYSTACK_BYTES(N) \
513 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
514 + YYSTACK_GAP_MAXIMUM)
516# define YYCOPY_NEEDED 1
523# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
526 YYPTRDIFF_T yynewbytes; \
527 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
528 Stack = &yyptr->Stack_alloc; \
529 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
530 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
536#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
540# if defined __GNUC__ && 1 < __GNUC__
541# define YYCOPY(Dst, Src, Count) \
542 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
544# define YYCOPY(Dst, Src, Count) \
548 for (yyi = 0; yyi < (Count); yyi++) \
549 (Dst)[yyi] = (Src)[yyi]; \
576#define YYTRANSLATE(YYX) \
577 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
578 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
583static const yytype_int8 yytranslate[] =
585 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
586 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
587 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
588 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
589 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
590 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
591 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
592 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
593 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
594 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
595 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
596 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
597 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
598 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
599 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
600 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
601 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
602 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
603 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
604 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
605 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
606 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
607 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
608 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
609 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
610 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
611 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
612 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
613 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
614 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
615 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
616 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
617 65, 66, 67, 68, 69, 70, 71, 72, 73
622static const yytype_int16 yyrline[] =
624 0, 157, 157, 159, 166, 170, 182, 187, 195, 210,
625 228, 255, 274, 302, 304, 309, 330, 331, 337, 338,
626 343, 345, 347, 349, 354, 355, 356, 357, 358, 359,
627 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
628 370, 371, 372, 373, 374, 375, 376, 377, 378, 379,
629 380, 381, 382, 383, 384, 385, 386, 387, 388, 389,
630 390, 391, 392, 393, 394, 395, 396, 397, 398, 402,
631 403, 410, 414, 443, 456, 482, 483, 485, 491, 492,
632 498, 499, 504, 506, 508
637#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
642static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
646static const char *
const yytname[] =
648 "\"end of file\"",
"error",
"\"invalid token\"",
"ERROR",
"LOGIC",
649 "NOT",
"OPERAND",
"NUMBER",
"ALIGN",
"LAYER",
"\"(\"",
"\")\"",
"\"+\"",
650 "\"mask\"",
"\">>\"",
"\"at\"",
"\"cmp\"",
"\"pattern\"",
"\"text\"",
651 "\"meta\"",
"\"=\"",
"\">\"",
"\"<\"",
"\"from\"",
"\"to\"",
652 "\"random\"",
"\"loadavg_0\"",
"\"loadavg_1\"",
"\"loadavg_2\"",
653 "\"dev\"",
"\"prio\"",
"\"proto\"",
"\"pkttype\"",
"\"pktlen\"",
654 "\"datalen\"",
"\"maclen\"",
"\"mark\"",
"\"tcindex\"",
"\"rtclassid\"",
655 "\"rtiif\"",
"\"sk_family\"",
"\"sk_state\"",
"\"sk_reuse\"",
656 "\"sk_refcnt\"",
"\"sk_rcvbuf\"",
"\"sk_sndbuf\"",
"\"sk_shutdown\"",
657 "\"sk_proto\"",
"\"sk_type\"",
"\"sk_rmem_alloc\"",
"\"sk_wmem_alloc\"",
658 "\"sk_wmem_queued\"",
"\"sk_rcv_qlen\"",
"\"sk_snd_qlen\"",
659 "\"sk_err_qlen\"",
"\"sk_forward_allocs\"",
"\"sk_allocs\"",
660 "\"sk_route_caps\"",
"\"sk_hash\"",
"\"sk_lingertime\"",
661 "\"sk_ack_backlog\"",
"\"sk_max_ack_backlog\"",
"\"sk_prio\"",
662 "\"sk_rcvlowat\"",
"\"sk_rcvtimeo\"",
"\"sk_sndtimeo\"",
663 "\"sk_sendmsg_off\"",
"\"sk_write_pending\"",
"\"vlan\"",
"\"rxhash\"",
664 "\"devname\"",
"\"sk_bound_if\"",
"STR",
"QUOTED",
"$accept",
"input",
665 "expr",
"match",
"ematch",
"cmp_match",
"cmp_expr",
"text_from",
666 "text_to",
"meta_value",
"meta_int_id",
"meta_var_id",
"pattern",
667 "pktloc",
"align",
"mask",
"shift",
"operand", YY_NULLPTR
671yysymbol_name (yysymbol_kind_t yysymbol)
673 return yytname[yysymbol];
677#define YYPACT_NINF (-63)
679#define yypact_value_is_default(Yyn) \
680 ((Yyn) == YYPACT_NINF)
682#define YYTABLE_NINF (-76)
684#define yytable_value_is_error(Yyn) \
689static const yytype_int8 yypact[] =
691 -4, 15, -13, -8, 11, 10, 14, 25, 29, -63,
692 26, -63, 37, -63, -63, -63, 16, 33, -63, -63,
693 -63, 32, 1, 1, -28, 65, -63, 11, -63, -63,
694 -63, 38, 34, -63, 36, 28, -24, -63, -63, -63,
695 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
696 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
697 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
698 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
699 -63, -63, -63, -63, -63, -63, 16, 39, 39, -63,
700 -63, 43, -63, -62, 31, 65, 44, 42, -63, 42,
701 -63, -63, 41, 1, 35, 45, -63, 50, -63, -63,
702 -63, -63, 1, 47, -63, -63, -63, -63
708static const yytype_int8 yydefact[] =
710 2, 75, 0, 0, 75, 0, 0, 0, 0, 73,
711 0, 3, 4, 7, 8, 14, 0, 0, 6, 77,
712 76, 0, 75, 75, 0, 0, 1, 75, 82, 83,
713 84, 0, 0, 12, 0, 0, 0, 21, 24, 25,
714 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
715 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
716 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
717 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
718 66, 67, 68, 69, 70, 20, 0, 80, 80, 5,
719 15, 0, 13, 0, 16, 0, 0, 78, 23, 78,
720 72, 71, 0, 75, 18, 0, 81, 0, 22, 74,
721 9, 17, 75, 0, 11, 79, 19, 10
725static const yytype_int8 yypgoto[] =
727 -63, -63, 13, -63, 59, -63, 40, -63, -63, -34,
728 -63, -63, -63, -23, -63, -36, -22, -21
732static const yytype_int8 yydefgoto[] =
734 0, 10, 11, 12, 13, 14, 15, 104, 113, 86,
735 87, 88, 102, 16, 17, 108, 97, 31
741static const yytype_int8 yytable[] =
743 35, 1, 19, 2, 3, -75, 4, 20, 2, 3,
744 100, 101, 5, 6, 7, 8, 1, 21, 2, 3,
745 22, 4, 2, 3, 23, 4, 26, 5, 6, 7,
746 8, 5, 6, 7, 8, 24, 28, 29, 30, 25,
747 89, 27, 32, 33, 36, 90, 91, 92, 93, 94,
748 99, 106, 110, 96, 103, 107, 114, 115, 117, 112,
749 18, 105, 34, 109, 0, 95, 98, 0, 9, 0,
750 0, 0, 37, 9, 0, 0, 0, 0, 0, 0,
751 111, 0, 0, 9, 0, 0, 0, 9, 0, 116,
752 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
753 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
754 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
755 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
756 78, 79, 80, 81, 82, 83, 84, 0, 85
759static const yytype_int8 yycheck[] =
761 23, 5, 15, 7, 8, 9, 10, 15, 7, 8,
762 72, 73, 16, 17, 18, 19, 5, 4, 7, 8,
763 10, 10, 7, 8, 10, 10, 0, 16, 17, 18,
764 19, 16, 17, 18, 19, 10, 20, 21, 22, 10,
765 27, 4, 9, 11, 72, 7, 12, 11, 20, 73,
766 7, 7, 11, 14, 23, 13, 11, 7, 11, 24,
767 1, 95, 22, 99, -1, 86, 88, -1, 72, -1,
768 -1, -1, 7, 72, -1, -1, -1, -1, -1, -1,
769 103, -1, -1, 72, -1, -1, -1, 72, -1, 112,
770 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
771 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
772 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
773 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
774 65, 66, 67, 68, 69, 70, 71, -1, 73
779static const yytype_int8 yystos[] =
781 0, 5, 7, 8, 10, 16, 17, 18, 19, 72,
782 75, 76, 77, 78, 79, 80, 87, 88, 78, 15,
783 15, 76, 10, 10, 10, 10, 0, 4, 20, 21,
784 22, 91, 9, 11, 80, 87, 72, 7, 25, 26,
785 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
786 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
787 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
788 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
789 67, 68, 69, 70, 71, 73, 83, 84, 85, 76,
790 7, 12, 11, 20, 73, 91, 14, 90, 90, 7,
791 72, 73, 86, 23, 81, 83, 7, 13, 89, 89,
792 11, 87, 24, 82, 11, 7, 87, 11
796static const yytype_int8 yyr1[] =
798 0, 74, 75, 75, 76, 76, 77, 77, 78, 78,
799 78, 78, 78, 79, 79, 80, 81, 81, 82, 82,
800 83, 83, 83, 83, 84, 84, 84, 84, 84, 84,
801 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
802 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
803 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
804 84, 84, 84, 84, 84, 84, 84, 84, 84, 85,
805 85, 86, 86, 87, 87, 88, 88, 88, 89, 89,
810static const yytype_int8 yyr2[] =
812 0, 2, 0, 1, 1, 3, 2, 1, 1, 6,
813 7, 6, 3, 4, 1, 3, 0, 2, 0, 2,
814 1, 1, 3, 2, 1, 1, 1, 1, 1, 1,
815 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
816 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
817 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
818 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
819 1, 1, 1, 1, 5, 0, 2, 2, 0, 2,
824enum { YYENOMEM = -2 };
826#define yyerrok (yyerrstatus = 0)
827#define yyclearin (yychar = YYEMPTY)
829#define YYACCEPT goto yyacceptlab
830#define YYABORT goto yyabortlab
831#define YYERROR goto yyerrorlab
832#define YYNOMEM goto yyexhaustedlab
835#define YYRECOVERING() (!!yyerrstatus)
837#define YYBACKUP(Token, Value) \
839 if (yychar == YYEMPTY) \
843 YYPOPSTACK (yylen); \
849 yyerror (scanner, errp, root, YY_("syntax error: cannot back up")); \
856#define YYERRCODE YYUNDEF
864# define YYFPRINTF fprintf
867# define YYDPRINTF(Args) \
876# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
880 YYFPRINTF (stderr, "%s ", Title); \
881 yy_symbol_print (stderr, \
882 Kind, Value, scanner, errp, root); \
883 YYFPRINTF (stderr, "\n"); \
893yy_symbol_value_print (FILE *yyo,
894 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
896 FILE *yyoutput = yyo;
903 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
905 YY_IGNORE_MAYBE_UNINITIALIZED_END
914yy_symbol_print (FILE *yyo,
915 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
917 YYFPRINTF (yyo,
"%s %s (",
918 yykind < YYNTOKENS ?
"token" :
"nterm", yysymbol_name (yykind));
920 yy_symbol_value_print (yyo, yykind, yyvaluep, scanner, errp, root);
921 YYFPRINTF (yyo,
")");
930yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
932 YYFPRINTF (stderr,
"Stack now");
933 for (; yybottom <= yytop; yybottom++)
935 int yybot = *yybottom;
936 YYFPRINTF (stderr,
" %d", yybot);
938 YYFPRINTF (stderr,
"\n");
941# define YY_STACK_PRINT(Bottom, Top) \
944 yy_stack_print ((Bottom), (Top)); \
953yy_reduce_print (yy_state_t *yyssp,
YYSTYPE *yyvsp,
954 int yyrule,
void *scanner,
char **errp,
struct nl_list_head *root)
956 int yylno = yyrline[yyrule];
957 int yynrhs = yyr2[yyrule];
959 YYFPRINTF (stderr,
"Reducing stack by rule %d (line %d):\n",
962 for (yyi = 0; yyi < yynrhs; yyi++)
964 YYFPRINTF (stderr,
" $%d = ", yyi + 1);
965 yy_symbol_print (stderr,
966 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
967 &yyvsp[(yyi + 1) - (yynrhs)], scanner, errp, root);
968 YYFPRINTF (stderr,
"\n");
972# define YY_REDUCE_PRINT(Rule) \
975 yy_reduce_print (yyssp, yyvsp, Rule, scanner, errp, root); \
982# define YYDPRINTF(Args) ((void) 0)
983# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
984# define YY_STACK_PRINT(Bottom, Top)
985# define YY_REDUCE_PRINT(Rule)
991# define YYINITDEPTH 200
1002# define YYMAXDEPTH 10000
1010 yysymbol_kind_t yytoken;
1021 yysymbol_kind_t yyarg[],
int yyargn)
1025 int yyn = yypact[+*yyctx->yyssp];
1026 if (!yypact_value_is_default (yyn))
1031 int yyxbegin = yyn < 0 ? -yyn : 0;
1033 int yychecklim = YYLAST - yyn + 1;
1034 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1036 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1037 if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
1038 && !yytable_value_is_error (yytable[yyx + yyn]))
1042 else if (yycount == yyargn)
1045 yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
1048 if (yyarg && yycount == 0 && 0 < yyargn)
1049 yyarg[0] = YYSYMBOL_YYEMPTY;
1057# if defined __GLIBC__ && defined _STRING_H
1058# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
1062yystrlen (
const char *yystr)
1065 for (yylen = 0; yystr[yylen]; yylen++)
1073# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1074# define yystpcpy stpcpy
1079yystpcpy (
char *yydest,
const char *yysrc)
1082 const char *yys = yysrc;
1084 while ((*yyd++ = *yys++) !=
'\0')
1101yytnamerr (
char *yyres,
const char *yystr)
1105 YYPTRDIFF_T yyn = 0;
1106 char const *yyp = yystr;
1112 goto do_not_strip_quotes;
1116 goto do_not_strip_quotes;
1132 do_not_strip_quotes: ;
1136 return yystpcpy (yyres, yystr) - yyres;
1138 return yystrlen (yystr);
1145 yysymbol_kind_t yyarg[],
int yyargn)
1172 if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
1176 yyarg[yycount] = yyctx->yytoken;
1178 yyn = yypcontext_expected_tokens (yyctx,
1179 yyarg ? yyarg + 1 : yyarg, yyargn - 1);
1180 if (yyn == YYENOMEM)
1197yysyntax_error (YYPTRDIFF_T *yymsg_alloc,
char **yymsg,
1200 enum { YYARGS_MAX = 5 };
1202 const char *yyformat = YY_NULLPTR;
1205 yysymbol_kind_t yyarg[YYARGS_MAX];
1207 YYPTRDIFF_T yysize = 0;
1210 int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
1211 if (yycount == YYENOMEM)
1216#define YYCASE_(N, S) \
1221 YYCASE_(0, YY_(
"syntax error"));
1222 YYCASE_(1, YY_(
"syntax error, unexpected %s"));
1223 YYCASE_(2, YY_(
"syntax error, unexpected %s, expecting %s"));
1224 YYCASE_(3, YY_(
"syntax error, unexpected %s, expecting %s or %s"));
1225 YYCASE_(4, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s"));
1226 YYCASE_(5, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1232 yysize = yystrlen (yyformat) - 2 * yycount + 1;
1235 for (yyi = 0; yyi < yycount; ++yyi)
1238 = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
1239 if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
1246 if (*yymsg_alloc < yysize)
1248 *yymsg_alloc = 2 * yysize;
1249 if (! (yysize <= *yymsg_alloc
1250 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1251 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1261 while ((*yyp = *yyformat) !=
'\0')
1262 if (*yyp ==
'%' && yyformat[1] ==
's' && yyi < yycount)
1264 yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
1282yydestruct (
const char *yymsg,
1283 yysymbol_kind_t yykind,
YYSTYPE *yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
1291 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
1293 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1297#line 148 "lib/route/cls/ematch_syntax.y"
1298 { free(((*yyvaluep).s)); NL_DBG(2,
"string destructor\n"); }
1299#line 1300 "lib/route/cls/ematch_syntax.c"
1302 case YYSYMBOL_QUOTED:
1303#line 150 "lib/route/cls/ematch_syntax.y"
1304 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1305#line 1306 "lib/route/cls/ematch_syntax.c"
1308 case YYSYMBOL_text_from:
1309#line 149 "lib/route/cls/ematch_syntax.y"
1310 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1311#line 1312 "lib/route/cls/ematch_syntax.c"
1314 case YYSYMBOL_text_to:
1315#line 149 "lib/route/cls/ematch_syntax.y"
1316 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1317#line 1318 "lib/route/cls/ematch_syntax.c"
1320 case YYSYMBOL_meta_value:
1321#line 151 "lib/route/cls/ematch_syntax.y"
1322 { rtnl_meta_value_put(((*yyvaluep).mv)); NL_DBG(2,
"meta value destructor\n"); }
1323#line 1324 "lib/route/cls/ematch_syntax.c"
1326 case YYSYMBOL_pattern:
1327#line 150 "lib/route/cls/ematch_syntax.y"
1328 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1329#line 1330 "lib/route/cls/ematch_syntax.c"
1332 case YYSYMBOL_pktloc:
1333#line 149 "lib/route/cls/ematch_syntax.y"
1334 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1335#line 1336 "lib/route/cls/ematch_syntax.c"
1341 YY_IGNORE_MAYBE_UNINITIALIZED_END
1354yyparse (
void *scanner,
char **errp,
struct nl_list_head *root)
1363YY_INITIAL_VALUE (
static YYSTYPE yyval_default;)
1364YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
1369 yy_state_fast_t yystate = 0;
1371 int yyerrstatus = 0;
1377 YYPTRDIFF_T yystacksize = YYINITDEPTH;
1380 yy_state_t yyssa[YYINITDEPTH];
1381 yy_state_t *yyss = yyssa;
1382 yy_state_t *yyssp = yyss;
1393 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
1400 char *yymsg = yymsgbuf;
1401 YYPTRDIFF_T yymsg_alloc =
sizeof yymsgbuf;
1403#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1409 YYDPRINTF ((stderr,
"Starting parse\n"));
1429 YYDPRINTF ((stderr,
"Entering state %d\n", yystate));
1430 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
1431 YY_IGNORE_USELESS_CAST_BEGIN
1432 *yyssp = YY_CAST (yy_state_t, yystate);
1433 YY_IGNORE_USELESS_CAST_END
1434 YY_STACK_PRINT (yyss, yyssp);
1436 if (yyss + yystacksize - 1 <= yyssp)
1437#if !defined yyoverflow && !defined YYSTACK_RELOCATE
1442 YYPTRDIFF_T yysize = yyssp - yyss + 1;
1444# if defined yyoverflow
1449 yy_state_t *yyss1 = yyss;
1456 yyoverflow (YY_(
"memory exhausted"),
1457 &yyss1, yysize * YYSIZEOF (*yyssp),
1458 &yyvs1, yysize * YYSIZEOF (*yyvsp),
1465 if (YYMAXDEPTH <= yystacksize)
1468 if (YYMAXDEPTH < yystacksize)
1469 yystacksize = YYMAXDEPTH;
1472 yy_state_t *yyss1 = yyss;
1475 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
1478 YYSTACK_RELOCATE (yyss_alloc, yyss);
1479 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1480# undef YYSTACK_RELOCATE
1482 YYSTACK_FREE (yyss1);
1486 yyssp = yyss + yysize - 1;
1487 yyvsp = yyvs + yysize - 1;
1489 YY_IGNORE_USELESS_CAST_BEGIN
1490 YYDPRINTF ((stderr,
"Stack size increased to %ld\n",
1491 YY_CAST (
long, yystacksize)));
1492 YY_IGNORE_USELESS_CAST_END
1494 if (yyss + yystacksize - 1 <= yyssp)
1500 if (yystate == YYFINAL)
1514 yyn = yypact[yystate];
1515 if (yypact_value_is_default (yyn))
1521 if (yychar == YYEMPTY)
1523 YYDPRINTF ((stderr,
"Reading a token\n"));
1524 yychar = yylex (&yylval, scanner);
1527 if (yychar <= YYEOF)
1530 yytoken = YYSYMBOL_YYEOF;
1531 YYDPRINTF ((stderr,
"Now at end of input.\n"));
1533 else if (yychar == YYerror)
1540 yytoken = YYSYMBOL_YYerror;
1545 yytoken = YYTRANSLATE (yychar);
1546 YY_SYMBOL_PRINT (
"Next token is", yytoken, &yylval, &yylloc);
1552 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1557 if (yytable_value_is_error (yyn))
1569 YY_SYMBOL_PRINT (
"Shifting", yytoken, &yylval, &yylloc);
1571 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1573 YY_IGNORE_MAYBE_UNINITIALIZED_END
1584 yyn = yydefact[yystate];
1605 yyval = yyvsp[1-yylen];
1608 YY_REDUCE_PRINT (yyn);
1612#line 160 "lib/route/cls/ematch_syntax.y"
1614 nl_list_add_tail(root, &(yyvsp[0].e)->e_list);
1616#line 1617 "lib/route/cls/ematch_syntax.c"
1620#line 167 "lib/route/cls/ematch_syntax.y"
1622 (yyval.e) = (yyvsp[0].e);
1624#line 1625 "lib/route/cls/ematch_syntax.c"
1628#line 171 "lib/route/cls/ematch_syntax.y"
1630 rtnl_ematch_set_flags((yyvsp[-2].e), (yyvsp[-1].i));
1633 nl_list_add_tail(&(yyvsp[-2].e)->e_list, &(yyvsp[0].e)->e_list);
1635 (yyval.e) = (yyvsp[-2].e);
1637#line 1638 "lib/route/cls/ematch_syntax.c"
1641#line 183 "lib/route/cls/ematch_syntax.y"
1643 rtnl_ematch_set_flags((yyvsp[0].e), TCF_EM_INVERT);
1644 (yyval.e) = (yyvsp[0].e);
1646#line 1647 "lib/route/cls/ematch_syntax.c"
1650#line 188 "lib/route/cls/ematch_syntax.y"
1652 (yyval.e) = (yyvsp[0].e);
1654#line 1655 "lib/route/cls/ematch_syntax.c"
1658#line 196 "lib/route/cls/ematch_syntax.y"
1660 struct rtnl_ematch *e;
1663 *errp = strdup(
"Unable to allocate ematch object");
1667 if (rtnl_ematch_set_kind(e, TCF_EM_CMP) < 0)
1670 rtnl_ematch_cmp_set(e, &(yyvsp[0].cmp));
1673#line 1674 "lib/route/cls/ematch_syntax.c"
1677#line 211 "lib/route/cls/ematch_syntax.y"
1679 struct rtnl_ematch *e;
1682 *errp = strdup(
"Unable to allocate ematch object");
1686 if (rtnl_ematch_set_kind(e, TCF_EM_NBYTE) < 0)
1689 rtnl_ematch_nbyte_set_offset(e, (yyvsp[-3].loc)->layer, (yyvsp[-3].loc)->offset);
1691 rtnl_ematch_nbyte_set_pattern(e, (uint8_t *) (yyvsp[-1].q).data, (yyvsp[-1].q).index);
1695#line 1696 "lib/route/cls/ematch_syntax.c"
1699#line 229 "lib/route/cls/ematch_syntax.y"
1701 struct rtnl_ematch *e;
1704 *errp = strdup(
"Unable to allocate ematch object");
1708 if (rtnl_ematch_set_kind(e, TCF_EM_TEXT) < 0)
1711 rtnl_ematch_text_set_algo(e, (yyvsp[-4].s));
1712 rtnl_ematch_text_set_pattern(e, (yyvsp[-3].q).data, (yyvsp[-3].q).index);
1714 if ((yyvsp[-2].loc)) {
1715 rtnl_ematch_text_set_from(e, (yyvsp[-2].loc)->layer, (yyvsp[-2].loc)->offset);
1719 if ((yyvsp[-1].loc)) {
1720 rtnl_ematch_text_set_to(e, (yyvsp[-1].loc)->layer, (yyvsp[-1].loc)->offset);
1726#line 1727 "lib/route/cls/ematch_syntax.c"
1730#line 256 "lib/route/cls/ematch_syntax.y"
1732 struct rtnl_ematch *e;
1735 *errp = strdup(
"Unable to allocate ematch object");
1739 if (rtnl_ematch_set_kind(e, TCF_EM_META) < 0)
1742 rtnl_ematch_meta_set_lvalue(e, (yyvsp[-3].mv));
1743 rtnl_ematch_meta_set_rvalue(e, (yyvsp[-1].mv));
1744 rtnl_ematch_meta_set_operand(e, (yyvsp[-2].i));
1748#line 1749 "lib/route/cls/ematch_syntax.c"
1752#line 275 "lib/route/cls/ematch_syntax.y"
1754 struct rtnl_ematch *e;
1757 *errp = strdup(
"Unable to allocate ematch object");
1761 if (rtnl_ematch_set_kind(e, TCF_EM_CONTAINER) < 0)
1765 nl_list_add_tail(&e->e_childs, &(yyvsp[-1].e)->e_list);
1769#line 1770 "lib/route/cls/ematch_syntax.c"
1773#line 303 "lib/route/cls/ematch_syntax.y"
1774 { (yyval.cmp) = (yyvsp[-1].cmp); }
1775#line 1776 "lib/route/cls/ematch_syntax.c"
1779#line 305 "lib/route/cls/ematch_syntax.y"
1780 { (yyval.cmp) = (yyvsp[0].cmp); }
1781#line 1782 "lib/route/cls/ematch_syntax.c"
1785#line 310 "lib/route/cls/ematch_syntax.y"
1787 if ((yyvsp[-2].loc)->align == TCF_EM_ALIGN_U16 ||
1788 (yyvsp[-2].loc)->align == TCF_EM_ALIGN_U32)
1789 (yyval.cmp).flags = TCF_EM_CMP_TRANS;
1791 memset(&(yyval.cmp), 0,
sizeof((yyval.cmp)));
1793 (yyval.cmp).mask = (yyvsp[-2].loc)->mask;
1794 (yyval.cmp).off = (yyvsp[-2].loc)->offset;
1795 (yyval.cmp).align = (yyvsp[-2].loc)->align;
1796 (yyval.cmp).layer = (yyvsp[-2].loc)->layer;
1797 (yyval.cmp).opnd = (yyvsp[-1].i);
1798 (yyval.cmp).val = (yyvsp[0].i);
1802#line 1803 "lib/route/cls/ematch_syntax.c"
1806#line 330 "lib/route/cls/ematch_syntax.y"
1807 { (yyval.loc) = NULL; }
1808#line 1809 "lib/route/cls/ematch_syntax.c"
1812#line 332 "lib/route/cls/ematch_syntax.y"
1813 { (yyval.loc) = (yyvsp[0].loc); }
1814#line 1815 "lib/route/cls/ematch_syntax.c"
1818#line 337 "lib/route/cls/ematch_syntax.y"
1819 { (yyval.loc) = NULL; }
1820#line 1821 "lib/route/cls/ematch_syntax.c"
1824#line 339 "lib/route/cls/ematch_syntax.y"
1825 { (yyval.loc) = (yyvsp[0].loc); }
1826#line 1827 "lib/route/cls/ematch_syntax.c"
1830#line 344 "lib/route/cls/ematch_syntax.y"
1831 { (yyval.mv) = rtnl_meta_value_alloc_var((yyvsp[0].q).data, (yyvsp[0].q).len); }
1832#line 1833 "lib/route/cls/ematch_syntax.c"
1836#line 346 "lib/route/cls/ematch_syntax.y"
1837 { (yyval.mv) = rtnl_meta_value_alloc_int((yyvsp[0].i)); }
1838#line 1839 "lib/route/cls/ematch_syntax.c"
1842#line 348 "lib/route/cls/ematch_syntax.y"
1843 { (yyval.mv) = META_ALLOC(META_INT, (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i64)); }
1844#line 1845 "lib/route/cls/ematch_syntax.c"
1848#line 350 "lib/route/cls/ematch_syntax.y"
1849 { (yyval.mv) = META_ALLOC(META_VAR, (yyvsp[-1].i), (yyvsp[0].i), 0); }
1850#line 1851 "lib/route/cls/ematch_syntax.c"
1854#line 354 "lib/route/cls/ematch_syntax.y"
1855 { (yyval.i) = META_ID(RANDOM); }
1856#line 1857 "lib/route/cls/ematch_syntax.c"
1860#line 355 "lib/route/cls/ematch_syntax.y"
1861 { (yyval.i) = META_ID(LOADAVG_0); }
1862#line 1863 "lib/route/cls/ematch_syntax.c"
1866#line 356 "lib/route/cls/ematch_syntax.y"
1867 { (yyval.i) = META_ID(LOADAVG_1); }
1868#line 1869 "lib/route/cls/ematch_syntax.c"
1872#line 357 "lib/route/cls/ematch_syntax.y"
1873 { (yyval.i) = META_ID(LOADAVG_2); }
1874#line 1875 "lib/route/cls/ematch_syntax.c"
1878#line 358 "lib/route/cls/ematch_syntax.y"
1879 { (yyval.i) = META_ID(DEV); }
1880#line 1881 "lib/route/cls/ematch_syntax.c"
1884#line 359 "lib/route/cls/ematch_syntax.y"
1885 { (yyval.i) = META_ID(PRIORITY); }
1886#line 1887 "lib/route/cls/ematch_syntax.c"
1890#line 360 "lib/route/cls/ematch_syntax.y"
1891 { (yyval.i) = META_ID(PROTOCOL); }
1892#line 1893 "lib/route/cls/ematch_syntax.c"
1896#line 361 "lib/route/cls/ematch_syntax.y"
1897 { (yyval.i) = META_ID(PKTTYPE); }
1898#line 1899 "lib/route/cls/ematch_syntax.c"
1902#line 362 "lib/route/cls/ematch_syntax.y"
1903 { (yyval.i) = META_ID(PKTLEN); }
1904#line 1905 "lib/route/cls/ematch_syntax.c"
1908#line 363 "lib/route/cls/ematch_syntax.y"
1909 { (yyval.i) = META_ID(DATALEN); }
1910#line 1911 "lib/route/cls/ematch_syntax.c"
1914#line 364 "lib/route/cls/ematch_syntax.y"
1915 { (yyval.i) = META_ID(MACLEN); }
1916#line 1917 "lib/route/cls/ematch_syntax.c"
1920#line 365 "lib/route/cls/ematch_syntax.y"
1921 { (yyval.i) = META_ID(NFMARK); }
1922#line 1923 "lib/route/cls/ematch_syntax.c"
1926#line 366 "lib/route/cls/ematch_syntax.y"
1927 { (yyval.i) = META_ID(TCINDEX); }
1928#line 1929 "lib/route/cls/ematch_syntax.c"
1932#line 367 "lib/route/cls/ematch_syntax.y"
1933 { (yyval.i) = META_ID(RTCLASSID); }
1934#line 1935 "lib/route/cls/ematch_syntax.c"
1938#line 368 "lib/route/cls/ematch_syntax.y"
1939 { (yyval.i) = META_ID(RTIIF); }
1940#line 1941 "lib/route/cls/ematch_syntax.c"
1944#line 369 "lib/route/cls/ematch_syntax.y"
1945 { (yyval.i) = META_ID(SK_FAMILY); }
1946#line 1947 "lib/route/cls/ematch_syntax.c"
1950#line 370 "lib/route/cls/ematch_syntax.y"
1951 { (yyval.i) = META_ID(SK_STATE); }
1952#line 1953 "lib/route/cls/ematch_syntax.c"
1956#line 371 "lib/route/cls/ematch_syntax.y"
1957 { (yyval.i) = META_ID(SK_REUSE); }
1958#line 1959 "lib/route/cls/ematch_syntax.c"
1962#line 372 "lib/route/cls/ematch_syntax.y"
1963 { (yyval.i) = META_ID(SK_REFCNT); }
1964#line 1965 "lib/route/cls/ematch_syntax.c"
1968#line 373 "lib/route/cls/ematch_syntax.y"
1969 { (yyval.i) = META_ID(SK_RCVBUF); }
1970#line 1971 "lib/route/cls/ematch_syntax.c"
1974#line 374 "lib/route/cls/ematch_syntax.y"
1975 { (yyval.i) = META_ID(SK_SNDBUF); }
1976#line 1977 "lib/route/cls/ematch_syntax.c"
1980#line 375 "lib/route/cls/ematch_syntax.y"
1981 { (yyval.i) = META_ID(SK_SHUTDOWN); }
1982#line 1983 "lib/route/cls/ematch_syntax.c"
1986#line 376 "lib/route/cls/ematch_syntax.y"
1987 { (yyval.i) = META_ID(SK_PROTO); }
1988#line 1989 "lib/route/cls/ematch_syntax.c"
1992#line 377 "lib/route/cls/ematch_syntax.y"
1993 { (yyval.i) = META_ID(SK_TYPE); }
1994#line 1995 "lib/route/cls/ematch_syntax.c"
1998#line 378 "lib/route/cls/ematch_syntax.y"
1999 { (yyval.i) = META_ID(SK_RMEM_ALLOC); }
2000#line 2001 "lib/route/cls/ematch_syntax.c"
2004#line 379 "lib/route/cls/ematch_syntax.y"
2005 { (yyval.i) = META_ID(SK_WMEM_ALLOC); }
2006#line 2007 "lib/route/cls/ematch_syntax.c"
2010#line 380 "lib/route/cls/ematch_syntax.y"
2011 { (yyval.i) = META_ID(SK_WMEM_QUEUED); }
2012#line 2013 "lib/route/cls/ematch_syntax.c"
2016#line 381 "lib/route/cls/ematch_syntax.y"
2017 { (yyval.i) = META_ID(SK_RCV_QLEN); }
2018#line 2019 "lib/route/cls/ematch_syntax.c"
2022#line 382 "lib/route/cls/ematch_syntax.y"
2023 { (yyval.i) = META_ID(SK_SND_QLEN); }
2024#line 2025 "lib/route/cls/ematch_syntax.c"
2028#line 383 "lib/route/cls/ematch_syntax.y"
2029 { (yyval.i) = META_ID(SK_ERR_QLEN); }
2030#line 2031 "lib/route/cls/ematch_syntax.c"
2034#line 384 "lib/route/cls/ematch_syntax.y"
2035 { (yyval.i) = META_ID(SK_FORWARD_ALLOCS); }
2036#line 2037 "lib/route/cls/ematch_syntax.c"
2040#line 385 "lib/route/cls/ematch_syntax.y"
2041 { (yyval.i) = META_ID(SK_ALLOCS); }
2042#line 2043 "lib/route/cls/ematch_syntax.c"
2046#line 386 "lib/route/cls/ematch_syntax.y"
2047 { (yyval.i) = __TCF_META_ID_SK_ROUTE_CAPS; }
2048#line 2049 "lib/route/cls/ematch_syntax.c"
2052#line 387 "lib/route/cls/ematch_syntax.y"
2053 { (yyval.i) = META_ID(SK_HASH); }
2054#line 2055 "lib/route/cls/ematch_syntax.c"
2058#line 388 "lib/route/cls/ematch_syntax.y"
2059 { (yyval.i) = META_ID(SK_LINGERTIME); }
2060#line 2061 "lib/route/cls/ematch_syntax.c"
2064#line 389 "lib/route/cls/ematch_syntax.y"
2065 { (yyval.i) = META_ID(SK_ACK_BACKLOG); }
2066#line 2067 "lib/route/cls/ematch_syntax.c"
2070#line 390 "lib/route/cls/ematch_syntax.y"
2071 { (yyval.i) = META_ID(SK_MAX_ACK_BACKLOG); }
2072#line 2073 "lib/route/cls/ematch_syntax.c"
2076#line 391 "lib/route/cls/ematch_syntax.y"
2077 { (yyval.i) = META_ID(SK_PRIO); }
2078#line 2079 "lib/route/cls/ematch_syntax.c"
2082#line 392 "lib/route/cls/ematch_syntax.y"
2083 { (yyval.i) = META_ID(SK_RCVLOWAT); }
2084#line 2085 "lib/route/cls/ematch_syntax.c"
2088#line 393 "lib/route/cls/ematch_syntax.y"
2089 { (yyval.i) = META_ID(SK_RCVTIMEO); }
2090#line 2091 "lib/route/cls/ematch_syntax.c"
2094#line 394 "lib/route/cls/ematch_syntax.y"
2095 { (yyval.i) = META_ID(SK_SNDTIMEO); }
2096#line 2097 "lib/route/cls/ematch_syntax.c"
2100#line 395 "lib/route/cls/ematch_syntax.y"
2101 { (yyval.i) = META_ID(SK_SENDMSG_OFF); }
2102#line 2103 "lib/route/cls/ematch_syntax.c"
2106#line 396 "lib/route/cls/ematch_syntax.y"
2107 { (yyval.i) = META_ID(SK_WRITE_PENDING); }
2108#line 2109 "lib/route/cls/ematch_syntax.c"
2112#line 397 "lib/route/cls/ematch_syntax.y"
2113 { (yyval.i) = META_ID(VLAN_TAG); }
2114#line 2115 "lib/route/cls/ematch_syntax.c"
2118#line 398 "lib/route/cls/ematch_syntax.y"
2119 { (yyval.i) = META_ID(RXHASH); }
2120#line 2121 "lib/route/cls/ematch_syntax.c"
2124#line 402 "lib/route/cls/ematch_syntax.y"
2125 { (yyval.i) = META_ID(DEV); }
2126#line 2127 "lib/route/cls/ematch_syntax.c"
2130#line 403 "lib/route/cls/ematch_syntax.y"
2131 { (yyval.i) = META_ID(SK_BOUND_IF); }
2132#line 2133 "lib/route/cls/ematch_syntax.c"
2136#line 411 "lib/route/cls/ematch_syntax.y"
2138 (yyval.q) = (yyvsp[0].q);
2140#line 2141 "lib/route/cls/ematch_syntax.c"
2144#line 415 "lib/route/cls/ematch_syntax.y"
2146 struct nl_addr *addr;
2153 if (!((yyval.q).data = calloc(1, (yyval.q).len))) {
2161 if (asprintf(errp,
"invalid pattern \"%s\"", (yyvsp[0].s)) == -1)
2166#line 2167 "lib/route/cls/ematch_syntax.c"
2170#line 444 "lib/route/cls/ematch_syntax.y"
2175 if (asprintf(errp,
"Packet location \"%s\" not found", (yyvsp[0].s)) == -1)
2182#line 2183 "lib/route/cls/ematch_syntax.c"
2186#line 457 "lib/route/cls/ematch_syntax.y"
2190 if ((yyvsp[0].i64) && (!(yyvsp[-4].i) || (yyvsp[-4].i) > TCF_EM_ALIGN_U32)) {
2191 *errp = strdup(
"mask only allowed for alignments u8|u16|u32");
2196 *errp = strdup(
"Unable to allocate packet location object");
2200 loc->name = strdup(
"<USER-DEFINED>");
2201 loc->align = (yyvsp[-4].i);
2202 loc->layer = (yyvsp[-3].i);
2203 loc->offset = (yyvsp[-1].i);
2204 loc->mask = (yyvsp[0].i64);
2208#line 2209 "lib/route/cls/ematch_syntax.c"
2212#line 482 "lib/route/cls/ematch_syntax.y"
2214#line 2215 "lib/route/cls/ematch_syntax.c"
2218#line 484 "lib/route/cls/ematch_syntax.y"
2219 { (yyval.i) = (yyvsp[-1].i); }
2220#line 2221 "lib/route/cls/ematch_syntax.c"
2224#line 486 "lib/route/cls/ematch_syntax.y"
2225 { (yyval.i) = (yyvsp[-1].i); }
2226#line 2227 "lib/route/cls/ematch_syntax.c"
2230#line 491 "lib/route/cls/ematch_syntax.y"
2231 { (yyval.i64) = 0; }
2232#line 2233 "lib/route/cls/ematch_syntax.c"
2236#line 493 "lib/route/cls/ematch_syntax.y"
2237 { (yyval.i64) = (yyvsp[0].i); }
2238#line 2239 "lib/route/cls/ematch_syntax.c"
2242#line 498 "lib/route/cls/ematch_syntax.y"
2244#line 2245 "lib/route/cls/ematch_syntax.c"
2248#line 500 "lib/route/cls/ematch_syntax.y"
2249 { (yyval.i) = (yyvsp[0].i); }
2250#line 2251 "lib/route/cls/ematch_syntax.c"
2254#line 505 "lib/route/cls/ematch_syntax.y"
2255 { (yyval.i) = TCF_EM_OPND_EQ; }
2256#line 2257 "lib/route/cls/ematch_syntax.c"
2260#line 507 "lib/route/cls/ematch_syntax.y"
2261 { (yyval.i) = TCF_EM_OPND_GT; }
2262#line 2263 "lib/route/cls/ematch_syntax.c"
2266#line 509 "lib/route/cls/ematch_syntax.y"
2267 { (yyval.i) = TCF_EM_OPND_LT; }
2268#line 2269 "lib/route/cls/ematch_syntax.c"
2272#line 2273 "lib/route/cls/ematch_syntax.c"
2287 YY_SYMBOL_PRINT (
"-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
2298 const int yylhs = yyr1[yyn] - YYNTOKENS;
2299 const int yyi = yypgoto[yylhs] + *yyssp;
2300 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
2302 : yydefgoto[yylhs]);
2314 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
2322 char const *yymsgp = YY_(
"syntax error");
2323 int yysyntax_error_status;
2324 yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2325 if (yysyntax_error_status == 0)
2327 else if (yysyntax_error_status == -1)
2329 if (yymsg != yymsgbuf)
2330 YYSTACK_FREE (yymsg);
2331 yymsg = YY_CAST (
char *,
2332 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
2335 yysyntax_error_status
2336 = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2342 yymsg_alloc =
sizeof yymsgbuf;
2343 yysyntax_error_status = YYENOMEM;
2346 yyerror (scanner, errp, root, yymsgp);
2347 if (yysyntax_error_status == YYENOMEM)
2352 if (yyerrstatus == 3)
2357 if (yychar <= YYEOF)
2360 if (yychar == YYEOF)
2365 yydestruct (
"Error: discarding",
2366 yytoken, &yylval, scanner, errp, root);
2390 YY_STACK_PRINT (yyss, yyssp);
2404 yyn = yypact[yystate];
2405 if (!yypact_value_is_default (yyn))
2407 yyn += YYSYMBOL_YYerror;
2408 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
2421 yydestruct (
"Error: popping",
2422 YY_ACCESSING_SYMBOL (yystate), yyvsp, scanner, errp, root);
2425 YY_STACK_PRINT (yyss, yyssp);
2428 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2430 YY_IGNORE_MAYBE_UNINITIALIZED_END
2434 YY_SYMBOL_PRINT (
"Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
2460 yyerror (scanner, errp, root, YY_(
"memory exhausted"));
2469 if (yychar != YYEMPTY)
2473 yytoken = YYTRANSLATE (yychar);
2474 yydestruct (
"Cleanup: discarding lookahead",
2475 yytoken, &yylval, scanner, errp, root);
2480 YY_STACK_PRINT (yyss, yyssp);
2481 while (yyssp != yyss)
2483 yydestruct (
"Cleanup: popping",
2484 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, scanner, errp, root);
2489 YYSTACK_FREE (yyss);
2491 if (yymsg != yymsgbuf)
2492 YYSTACK_FREE (yymsg);
void * nl_addr_get_binary_addr(const struct nl_addr *addr)
Get binary address of abstract address object.
int nl_addr_parse(const char *addrstr, int hint, struct nl_addr **result)
Allocate abstract address based on character string.
unsigned int nl_addr_get_prefixlen(const struct nl_addr *addr)
Return prefix length of abstract address object.
unsigned int nl_addr_get_len(const struct nl_addr *addr)
Get length of binary address of abstract address object.
void nl_addr_put(struct nl_addr *addr)
Decrease the reference counter of an abstract address.
struct rtnl_ematch * rtnl_ematch_alloc(void)
Allocate ematch object.
int rtnl_pktloc_lookup(const char *name, struct rtnl_pktloc **result)
Lookup packet location alias.
void rtnl_pktloc_put(struct rtnl_pktloc *loc)
Return reference of a packet location.
struct rtnl_pktloc * rtnl_pktloc_alloc(void)
Allocate packet location object.