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 <netlink-private/netlink.h>
78 #include <netlink-private/tc.h>
79 #include <netlink/netlink.h>
80 #include <netlink/utils.h>
81 #include <netlink/route/pktloc.h>
82 #include <netlink/route/cls/ematch.h>
83 #include <netlink/route/cls/ematch/cmp.h>
84 #include <netlink/route/cls/ematch/nbyte.h>
85 #include <netlink/route/cls/ematch/text.h>
86 #include <netlink/route/cls/ematch/meta.h>
87 #include <linux/tc_ematch/tc_em_meta.h>
88 #include <linux/tc_ematch/tc_em_cmp.h>
90 #define META_ALLOC rtnl_meta_value_alloc_id
91 #define META_ID(name) TCF_META_ID_##name
92 #define META_INT TCF_META_TYPE_INT
93 #define META_VAR TCF_META_TYPE_VAR
95 #line 96 "lib/route/cls/ematch_syntax.c"
99 # define YY_CAST(Type, Val) static_cast<Type> (Val)
100 # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
102 # define YY_CAST(Type, Val) ((Type) (Val))
103 # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
107 # if defined __cplusplus
108 # if 201103L <= __cplusplus
109 # define YY_NULLPTR nullptr
111 # define YY_NULLPTR 0
114 # define YY_NULLPTR ((void*)0)
118 #include "ematch_syntax.h"
122 YYSYMBOL_YYEMPTY = -2,
124 YYSYMBOL_YYerror = 1,
125 YYSYMBOL_YYUNDEF = 2,
129 YYSYMBOL_OPERAND = 6,
133 YYSYMBOL_KW_OPEN = 10,
134 YYSYMBOL_KW_CLOSE = 11,
135 YYSYMBOL_KW_PLUS = 12,
136 YYSYMBOL_KW_MASK = 13,
137 YYSYMBOL_KW_SHIFT = 14,
139 YYSYMBOL_EMATCH_CMP = 16,
140 YYSYMBOL_EMATCH_NBYTE = 17,
141 YYSYMBOL_EMATCH_TEXT = 18,
142 YYSYMBOL_EMATCH_META = 19,
146 YYSYMBOL_KW_FROM = 23,
148 YYSYMBOL_META_RANDOM = 25,
149 YYSYMBOL_META_LOADAVG_0 = 26,
150 YYSYMBOL_META_LOADAVG_1 = 27,
151 YYSYMBOL_META_LOADAVG_2 = 28,
152 YYSYMBOL_META_DEV = 29,
153 YYSYMBOL_META_PRIO = 30,
154 YYSYMBOL_META_PROTO = 31,
155 YYSYMBOL_META_PKTTYPE = 32,
156 YYSYMBOL_META_PKTLEN = 33,
157 YYSYMBOL_META_DATALEN = 34,
158 YYSYMBOL_META_MACLEN = 35,
159 YYSYMBOL_META_MARK = 36,
160 YYSYMBOL_META_TCINDEX = 37,
161 YYSYMBOL_META_RTCLASSID = 38,
162 YYSYMBOL_META_RTIIF = 39,
163 YYSYMBOL_META_SK_FAMILY = 40,
164 YYSYMBOL_META_SK_STATE = 41,
165 YYSYMBOL_META_SK_REUSE = 42,
166 YYSYMBOL_META_SK_REFCNT = 43,
167 YYSYMBOL_META_SK_RCVBUF = 44,
168 YYSYMBOL_META_SK_SNDBUF = 45,
169 YYSYMBOL_META_SK_SHUTDOWN = 46,
170 YYSYMBOL_META_SK_PROTO = 47,
171 YYSYMBOL_META_SK_TYPE = 48,
172 YYSYMBOL_META_SK_RMEM_ALLOC = 49,
173 YYSYMBOL_META_SK_WMEM_ALLOC = 50,
174 YYSYMBOL_META_SK_WMEM_QUEUED = 51,
175 YYSYMBOL_META_SK_RCV_QLEN = 52,
176 YYSYMBOL_META_SK_SND_QLEN = 53,
177 YYSYMBOL_META_SK_ERR_QLEN = 54,
178 YYSYMBOL_META_SK_FORWARD_ALLOCS = 55,
179 YYSYMBOL_META_SK_ALLOCS = 56,
180 YYSYMBOL_META_SK_ROUTE_CAPS = 57,
181 YYSYMBOL_META_SK_HASH = 58,
182 YYSYMBOL_META_SK_LINGERTIME = 59,
183 YYSYMBOL_META_SK_ACK_BACKLOG = 60,
184 YYSYMBOL_META_SK_MAX_ACK_BACKLOG = 61,
185 YYSYMBOL_META_SK_PRIO = 62,
186 YYSYMBOL_META_SK_RCVLOWAT = 63,
187 YYSYMBOL_META_SK_RCVTIMEO = 64,
188 YYSYMBOL_META_SK_SNDTIMEO = 65,
189 YYSYMBOL_META_SK_SENDMSG_OFF = 66,
190 YYSYMBOL_META_SK_WRITE_PENDING = 67,
191 YYSYMBOL_META_VLAN = 68,
192 YYSYMBOL_META_RXHASH = 69,
193 YYSYMBOL_META_DEVNAME = 70,
194 YYSYMBOL_META_SK_BOUND_IF = 71,
196 YYSYMBOL_QUOTED = 73,
197 YYSYMBOL_YYACCEPT = 74,
201 YYSYMBOL_ematch = 78,
202 YYSYMBOL_cmp_match = 79,
203 YYSYMBOL_cmp_expr = 80,
204 YYSYMBOL_text_from = 81,
205 YYSYMBOL_text_to = 82,
206 YYSYMBOL_meta_value = 83,
207 YYSYMBOL_meta_int_id = 84,
208 YYSYMBOL_meta_var_id = 85,
209 YYSYMBOL_pattern = 86,
210 YYSYMBOL_pktloc = 87,
214 YYSYMBOL_operand = 91
216 typedef enum yysymbol_kind_t yysymbol_kind_t;
220 #line 46 "lib/route/cls/ematch_syntax.y"
222 extern int ematch_lex(
YYSTYPE *,
void *);
224 #define ematch_error yyerror
225 static void yyerror(
void *scanner,
char **errp,
struct nl_list_head *root,
const char *msg)
233 #line 234 "lib/route/cls/ematch_syntax.c"
244 #ifndef __PTRDIFF_MAX__
246 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
257 #ifdef __INT_LEAST8_MAX__
258 typedef __INT_LEAST8_TYPE__ yytype_int8;
259 #elif defined YY_STDINT_H
260 typedef int_least8_t yytype_int8;
262 typedef signed char yytype_int8;
265 #ifdef __INT_LEAST16_MAX__
266 typedef __INT_LEAST16_TYPE__ yytype_int16;
267 #elif defined YY_STDINT_H
268 typedef int_least16_t yytype_int16;
270 typedef short yytype_int16;
279 # undef UINT_LEAST8_MAX
280 # undef UINT_LEAST16_MAX
281 # define UINT_LEAST8_MAX 255
282 # define UINT_LEAST16_MAX 65535
285 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
286 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
287 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
288 && UINT_LEAST8_MAX <= INT_MAX)
289 typedef uint_least8_t yytype_uint8;
290 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
291 typedef unsigned char yytype_uint8;
293 typedef short yytype_uint8;
296 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
297 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
298 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
299 && UINT_LEAST16_MAX <= INT_MAX)
300 typedef uint_least16_t yytype_uint16;
301 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
302 typedef unsigned short yytype_uint16;
304 typedef int yytype_uint16;
308 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
309 # define YYPTRDIFF_T __PTRDIFF_TYPE__
310 # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
311 # elif defined PTRDIFF_MAX
315 # define YYPTRDIFF_T ptrdiff_t
316 # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
318 # define YYPTRDIFF_T long
319 # define YYPTRDIFF_MAXIMUM LONG_MAX
324 # ifdef __SIZE_TYPE__
325 # define YYSIZE_T __SIZE_TYPE__
326 # elif defined size_t
327 # define YYSIZE_T size_t
328 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
330 # define YYSIZE_T size_t
332 # define YYSIZE_T unsigned
336 #define YYSIZE_MAXIMUM \
337 YY_CAST (YYPTRDIFF_T, \
338 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
339 ? YYPTRDIFF_MAXIMUM \
340 : YY_CAST (YYSIZE_T, -1)))
342 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
346 typedef yytype_int8 yy_state_t;
349 typedef int yy_state_fast_t;
352 # if defined YYENABLE_NLS && YYENABLE_NLS
354 # include <libintl.h>
355 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
359 # define YY_(Msgid) Msgid
364 #ifndef YY_ATTRIBUTE_PURE
365 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
366 # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
368 # define YY_ATTRIBUTE_PURE
372 #ifndef YY_ATTRIBUTE_UNUSED
373 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
374 # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
376 # define YY_ATTRIBUTE_UNUSED
381 #if ! defined lint || defined __GNUC__
382 # define YY_USE(E) ((void) (E))
388 #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
389 # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
390 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
391 _Pragma ("GCC diagnostic push") \
392 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
394 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
395 _Pragma ("GCC diagnostic push") \
396 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
397 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
399 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
400 _Pragma ("GCC diagnostic pop")
402 # define YY_INITIAL_VALUE(Value) Value
404 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
405 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
406 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
408 #ifndef YY_INITIAL_VALUE
409 # define YY_INITIAL_VALUE(Value)
412 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
413 # define YY_IGNORE_USELESS_CAST_BEGIN \
414 _Pragma ("GCC diagnostic push") \
415 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
416 # define YY_IGNORE_USELESS_CAST_END \
417 _Pragma ("GCC diagnostic pop")
419 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
420 # define YY_IGNORE_USELESS_CAST_BEGIN
421 # define YY_IGNORE_USELESS_CAST_END
425 #define YY_ASSERT(E) ((void) (0 && (E)))
431 # ifdef YYSTACK_USE_ALLOCA
432 # if YYSTACK_USE_ALLOCA
434 # define YYSTACK_ALLOC __builtin_alloca
435 # elif defined __BUILTIN_VA_ARG_INCR
438 # define YYSTACK_ALLOC __alloca
439 # elif defined _MSC_VER
441 # define alloca _alloca
443 # define YYSTACK_ALLOC alloca
444 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
447 # ifndef EXIT_SUCCESS
448 # define EXIT_SUCCESS 0
455 # ifdef YYSTACK_ALLOC
457 # define YYSTACK_FREE(Ptr) do { ; } while (0)
458 # ifndef YYSTACK_ALLOC_MAXIMUM
463 # define YYSTACK_ALLOC_MAXIMUM 4032
466 # define YYSTACK_ALLOC YYMALLOC
467 # define YYSTACK_FREE YYFREE
468 # ifndef YYSTACK_ALLOC_MAXIMUM
469 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
471 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
472 && ! ((defined YYMALLOC || defined malloc) \
473 && (defined YYFREE || defined free)))
475 # ifndef EXIT_SUCCESS
476 # define EXIT_SUCCESS 0
480 # define YYMALLOC malloc
481 # if ! defined malloc && ! defined EXIT_SUCCESS
482 void *malloc (YYSIZE_T);
487 # if ! defined free && ! defined EXIT_SUCCESS
494 #if (! defined yyoverflow \
495 && (! defined __cplusplus \
496 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
501 yy_state_t yyss_alloc;
506 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
510 # define YYSTACK_BYTES(N) \
511 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
512 + YYSTACK_GAP_MAXIMUM)
514 # define YYCOPY_NEEDED 1
521 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
524 YYPTRDIFF_T yynewbytes; \
525 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
526 Stack = &yyptr->Stack_alloc; \
527 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
528 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
534 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
538 # if defined __GNUC__ && 1 < __GNUC__
539 # define YYCOPY(Dst, Src, Count) \
540 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
542 # define YYCOPY(Dst, Src, Count) \
546 for (yyi = 0; yyi < (Count); yyi++) \
547 (Dst)[yyi] = (Src)[yyi]; \
566 #define YYNSTATES 118
569 #define YYMAXUTOK 328
574 #define YYTRANSLATE(YYX) \
575 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
576 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
581 static const yytype_int8 yytranslate[] =
583 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
584 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
585 2, 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, 1, 2, 3, 4,
609 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
610 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
611 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
612 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
613 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
614 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
615 65, 66, 67, 68, 69, 70, 71, 72, 73
620 static const yytype_int16 yyrline[] =
622 0, 145, 145, 147, 154, 158, 170, 175, 183, 198,
623 216, 243, 262, 290, 292, 297, 318, 319, 325, 326,
624 331, 333, 335, 337, 342, 343, 344, 345, 346, 347,
625 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
626 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
627 368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
628 378, 379, 380, 381, 382, 383, 384, 385, 386, 390,
629 391, 398, 402, 431, 444, 470, 471, 473, 479, 480,
630 486, 487, 492, 494, 496
635 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
640 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
644 static const char *
const yytname[] =
646 "\"end of file\"",
"error",
"\"invalid token\"",
"ERROR",
"LOGIC",
647 "NOT",
"OPERAND",
"NUMBER",
"ALIGN",
"LAYER",
"\"(\"",
"\")\"",
"\"+\"",
648 "\"mask\"",
"\">>\"",
"\"at\"",
"\"cmp\"",
"\"pattern\"",
"\"text\"",
649 "\"meta\"",
"\"=\"",
"\">\"",
"\"<\"",
"\"from\"",
"\"to\"",
650 "\"random\"",
"\"loadavg_0\"",
"\"loadavg_1\"",
"\"loadavg_2\"",
651 "\"dev\"",
"\"prio\"",
"\"proto\"",
"\"pkttype\"",
"\"pktlen\"",
652 "\"datalen\"",
"\"maclen\"",
"\"mark\"",
"\"tcindex\"",
"\"rtclassid\"",
653 "\"rtiif\"",
"\"sk_family\"",
"\"sk_state\"",
"\"sk_reuse\"",
654 "\"sk_refcnt\"",
"\"sk_rcvbuf\"",
"\"sk_sndbuf\"",
"\"sk_shutdown\"",
655 "\"sk_proto\"",
"\"sk_type\"",
"\"sk_rmem_alloc\"",
"\"sk_wmem_alloc\"",
656 "\"sk_wmem_queued\"",
"\"sk_rcv_qlen\"",
"\"sk_snd_qlen\"",
657 "\"sk_err_qlen\"",
"\"sk_forward_allocs\"",
"\"sk_allocs\"",
658 "\"sk_route_caps\"",
"\"sk_hash\"",
"\"sk_lingertime\"",
659 "\"sk_ack_backlog\"",
"\"sk_max_ack_backlog\"",
"\"sk_prio\"",
660 "\"sk_rcvlowat\"",
"\"sk_rcvtimeo\"",
"\"sk_sndtimeo\"",
661 "\"sk_sendmsg_off\"",
"\"sk_write_pending\"",
"\"vlan\"",
"\"rxhash\"",
662 "\"devname\"",
"\"sk_bound_if\"",
"STR",
"QUOTED",
"$accept",
"input",
663 "expr",
"match",
"ematch",
"cmp_match",
"cmp_expr",
"text_from",
664 "text_to",
"meta_value",
"meta_int_id",
"meta_var_id",
"pattern",
665 "pktloc",
"align",
"mask",
"shift",
"operand", YY_NULLPTR
669 yysymbol_name (yysymbol_kind_t yysymbol)
671 return yytname[yysymbol];
675 #define YYPACT_NINF (-63)
677 #define yypact_value_is_default(Yyn) \
678 ((Yyn) == YYPACT_NINF)
680 #define YYTABLE_NINF (-76)
682 #define yytable_value_is_error(Yyn) \
687 static const yytype_int8 yypact[] =
689 -4, 15, -13, -8, 11, 10, 14, 25, 29, -63,
690 26, -63, 37, -63, -63, -63, 16, 33, -63, -63,
691 -63, 32, 1, 1, -28, 65, -63, 11, -63, -63,
692 -63, 38, 34, -63, 36, 28, -24, -63, -63, -63,
693 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
694 -63, -63, -63, -63, -63, -63, -63, -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, 16, 39, 39, -63,
698 -63, 43, -63, -62, 31, 65, 44, 42, -63, 42,
699 -63, -63, 41, 1, 35, 45, -63, 50, -63, -63,
700 -63, -63, 1, 47, -63, -63, -63, -63
706 static const yytype_int8 yydefact[] =
708 2, 75, 0, 0, 75, 0, 0, 0, 0, 73,
709 0, 3, 4, 7, 8, 14, 0, 0, 6, 77,
710 76, 0, 75, 75, 0, 0, 1, 75, 82, 83,
711 84, 0, 0, 12, 0, 0, 0, 21, 24, 25,
712 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
713 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
714 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
715 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
716 66, 67, 68, 69, 70, 20, 0, 80, 80, 5,
717 15, 0, 13, 0, 16, 0, 0, 78, 23, 78,
718 72, 71, 0, 75, 18, 0, 81, 0, 22, 74,
719 9, 17, 75, 0, 11, 79, 19, 10
723 static const yytype_int8 yypgoto[] =
725 -63, -63, 13, -63, 59, -63, 40, -63, -63, -34,
726 -63, -63, -63, -23, -63, -36, -22, -21
730 static const yytype_int8 yydefgoto[] =
732 0, 10, 11, 12, 13, 14, 15, 104, 113, 86,
733 87, 88, 102, 16, 17, 108, 97, 31
739 static const yytype_int8 yytable[] =
741 35, 1, 19, 2, 3, -75, 4, 20, 2, 3,
742 100, 101, 5, 6, 7, 8, 1, 21, 2, 3,
743 22, 4, 2, 3, 23, 4, 26, 5, 6, 7,
744 8, 5, 6, 7, 8, 24, 28, 29, 30, 25,
745 89, 27, 32, 33, 36, 90, 91, 92, 93, 94,
746 99, 106, 110, 96, 103, 107, 114, 115, 117, 112,
747 18, 105, 34, 109, 0, 95, 98, 0, 9, 0,
748 0, 0, 37, 9, 0, 0, 0, 0, 0, 0,
749 111, 0, 0, 9, 0, 0, 0, 9, 0, 116,
750 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
751 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
752 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
753 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
754 78, 79, 80, 81, 82, 83, 84, 0, 85
757 static const yytype_int8 yycheck[] =
759 23, 5, 15, 7, 8, 9, 10, 15, 7, 8,
760 72, 73, 16, 17, 18, 19, 5, 4, 7, 8,
761 10, 10, 7, 8, 10, 10, 0, 16, 17, 18,
762 19, 16, 17, 18, 19, 10, 20, 21, 22, 10,
763 27, 4, 9, 11, 72, 7, 12, 11, 20, 73,
764 7, 7, 11, 14, 23, 13, 11, 7, 11, 24,
765 1, 95, 22, 99, -1, 86, 88, -1, 72, -1,
766 -1, -1, 7, 72, -1, -1, -1, -1, -1, -1,
767 103, -1, -1, 72, -1, -1, -1, 72, -1, 112,
768 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
769 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
770 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
771 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
772 65, 66, 67, 68, 69, 70, 71, -1, 73
777 static const yytype_int8 yystos[] =
779 0, 5, 7, 8, 10, 16, 17, 18, 19, 72,
780 75, 76, 77, 78, 79, 80, 87, 88, 78, 15,
781 15, 76, 10, 10, 10, 10, 0, 4, 20, 21,
782 22, 91, 9, 11, 80, 87, 72, 7, 25, 26,
783 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
784 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
785 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
786 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
787 67, 68, 69, 70, 71, 73, 83, 84, 85, 76,
788 7, 12, 11, 20, 73, 91, 14, 90, 90, 7,
789 72, 73, 86, 23, 81, 83, 7, 13, 89, 89,
790 11, 87, 24, 82, 11, 7, 87, 11
794 static const yytype_int8 yyr1[] =
796 0, 74, 75, 75, 76, 76, 77, 77, 78, 78,
797 78, 78, 78, 79, 79, 80, 81, 81, 82, 82,
798 83, 83, 83, 83, 84, 84, 84, 84, 84, 84,
799 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
800 84, 84, 84, 84, 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, 85,
803 85, 86, 86, 87, 87, 88, 88, 88, 89, 89,
808 static const yytype_int8 yyr2[] =
810 0, 2, 0, 1, 1, 3, 2, 1, 1, 6,
811 7, 6, 3, 4, 1, 3, 0, 2, 0, 2,
812 1, 1, 3, 2, 1, 1, 1, 1, 1, 1,
813 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
814 1, 1, 1, 1, 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, 5, 0, 2, 2, 0, 2,
822 enum { YYENOMEM = -2 };
824 #define yyerrok (yyerrstatus = 0)
825 #define yyclearin (yychar = YYEMPTY)
827 #define YYACCEPT goto yyacceptlab
828 #define YYABORT goto yyabortlab
829 #define YYERROR goto yyerrorlab
830 #define YYNOMEM goto yyexhaustedlab
833 #define YYRECOVERING() (!!yyerrstatus)
835 #define YYBACKUP(Token, Value) \
837 if (yychar == YYEMPTY) \
841 YYPOPSTACK (yylen); \
847 yyerror (scanner, errp, root, YY_("syntax error: cannot back up")); \
854 #define YYERRCODE YYUNDEF
862 # define YYFPRINTF fprintf
865 # define YYDPRINTF(Args) \
874 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
878 YYFPRINTF (stderr, "%s ", Title); \
879 yy_symbol_print (stderr, \
880 Kind, Value, scanner, errp, root); \
881 YYFPRINTF (stderr, "\n"); \
891 yy_symbol_value_print (FILE *yyo,
892 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
894 FILE *yyoutput = yyo;
901 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
903 YY_IGNORE_MAYBE_UNINITIALIZED_END
912 yy_symbol_print (FILE *yyo,
913 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
915 YYFPRINTF (yyo,
"%s %s (",
916 yykind < YYNTOKENS ?
"token" :
"nterm", yysymbol_name (yykind));
918 yy_symbol_value_print (yyo, yykind, yyvaluep, scanner, errp, root);
919 YYFPRINTF (yyo,
")");
928 yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
930 YYFPRINTF (stderr,
"Stack now");
931 for (; yybottom <= yytop; yybottom++)
933 int yybot = *yybottom;
934 YYFPRINTF (stderr,
" %d", yybot);
936 YYFPRINTF (stderr,
"\n");
939 # define YY_STACK_PRINT(Bottom, Top) \
942 yy_stack_print ((Bottom), (Top)); \
951 yy_reduce_print (yy_state_t *yyssp,
YYSTYPE *yyvsp,
952 int yyrule,
void *scanner,
char **errp,
struct nl_list_head *root)
954 int yylno = yyrline[yyrule];
955 int yynrhs = yyr2[yyrule];
957 YYFPRINTF (stderr,
"Reducing stack by rule %d (line %d):\n",
960 for (yyi = 0; yyi < yynrhs; yyi++)
962 YYFPRINTF (stderr,
" $%d = ", yyi + 1);
963 yy_symbol_print (stderr,
964 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
965 &yyvsp[(yyi + 1) - (yynrhs)], scanner, errp, root);
966 YYFPRINTF (stderr,
"\n");
970 # define YY_REDUCE_PRINT(Rule) \
973 yy_reduce_print (yyssp, yyvsp, Rule, scanner, errp, root); \
980 # define YYDPRINTF(Args) ((void) 0)
981 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
982 # define YY_STACK_PRINT(Bottom, Top)
983 # define YY_REDUCE_PRINT(Rule)
989 # define YYINITDEPTH 200
1000 # define YYMAXDEPTH 10000
1008 yysymbol_kind_t yytoken;
1019 yysymbol_kind_t yyarg[],
int yyargn)
1023 int yyn = yypact[+*yyctx->yyssp];
1024 if (!yypact_value_is_default (yyn))
1029 int yyxbegin = yyn < 0 ? -yyn : 0;
1031 int yychecklim = YYLAST - yyn + 1;
1032 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1034 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1035 if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
1036 && !yytable_value_is_error (yytable[yyx + yyn]))
1040 else if (yycount == yyargn)
1043 yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
1046 if (yyarg && yycount == 0 && 0 < yyargn)
1047 yyarg[0] = YYSYMBOL_YYEMPTY;
1055 # if defined __GLIBC__ && defined _STRING_H
1056 # define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
1060 yystrlen (
const char *yystr)
1063 for (yylen = 0; yystr[yylen]; yylen++)
1071 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1072 # define yystpcpy stpcpy
1077 yystpcpy (
char *yydest,
const char *yysrc)
1080 const char *yys = yysrc;
1082 while ((*yyd++ = *yys++) !=
'\0')
1099 yytnamerr (
char *yyres,
const char *yystr)
1103 YYPTRDIFF_T yyn = 0;
1104 char const *yyp = yystr;
1110 goto do_not_strip_quotes;
1114 goto do_not_strip_quotes;
1130 do_not_strip_quotes: ;
1134 return yystpcpy (yyres, yystr) - yyres;
1136 return yystrlen (yystr);
1143 yysymbol_kind_t yyarg[],
int yyargn)
1170 if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
1174 yyarg[yycount] = yyctx->yytoken;
1176 yyn = yypcontext_expected_tokens (yyctx,
1177 yyarg ? yyarg + 1 : yyarg, yyargn - 1);
1178 if (yyn == YYENOMEM)
1195 yysyntax_error (YYPTRDIFF_T *yymsg_alloc,
char **yymsg,
1198 enum { YYARGS_MAX = 5 };
1200 const char *yyformat = YY_NULLPTR;
1203 yysymbol_kind_t yyarg[YYARGS_MAX];
1205 YYPTRDIFF_T yysize = 0;
1208 int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
1209 if (yycount == YYENOMEM)
1214 #define YYCASE_(N, S) \
1219 YYCASE_(0, YY_(
"syntax error"));
1220 YYCASE_(1, YY_(
"syntax error, unexpected %s"));
1221 YYCASE_(2, YY_(
"syntax error, unexpected %s, expecting %s"));
1222 YYCASE_(3, YY_(
"syntax error, unexpected %s, expecting %s or %s"));
1223 YYCASE_(4, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s"));
1224 YYCASE_(5, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1230 yysize = yystrlen (yyformat) - 2 * yycount + 1;
1233 for (yyi = 0; yyi < yycount; ++yyi)
1236 = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
1237 if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
1244 if (*yymsg_alloc < yysize)
1246 *yymsg_alloc = 2 * yysize;
1247 if (! (yysize <= *yymsg_alloc
1248 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1249 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1259 while ((*yyp = *yyformat) !=
'\0')
1260 if (*yyp ==
'%' && yyformat[1] ==
's' && yyi < yycount)
1262 yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
1280 yydestruct (
const char *yymsg,
1281 yysymbol_kind_t yykind,
YYSTYPE *yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
1289 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
1291 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1295 #line 136 "lib/route/cls/ematch_syntax.y"
1296 { free(((*yyvaluep).s)); NL_DBG(2,
"string destructor\n"); }
1297 #line 1298 "lib/route/cls/ematch_syntax.c"
1300 case YYSYMBOL_QUOTED:
1301 #line 138 "lib/route/cls/ematch_syntax.y"
1302 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1303 #line 1304 "lib/route/cls/ematch_syntax.c"
1306 case YYSYMBOL_text_from:
1307 #line 137 "lib/route/cls/ematch_syntax.y"
1308 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1309 #line 1310 "lib/route/cls/ematch_syntax.c"
1312 case YYSYMBOL_text_to:
1313 #line 137 "lib/route/cls/ematch_syntax.y"
1314 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1315 #line 1316 "lib/route/cls/ematch_syntax.c"
1318 case YYSYMBOL_meta_value:
1319 #line 139 "lib/route/cls/ematch_syntax.y"
1320 { rtnl_meta_value_put(((*yyvaluep).mv)); NL_DBG(2,
"meta value destructor\n"); }
1321 #line 1322 "lib/route/cls/ematch_syntax.c"
1324 case YYSYMBOL_pattern:
1325 #line 138 "lib/route/cls/ematch_syntax.y"
1326 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1327 #line 1328 "lib/route/cls/ematch_syntax.c"
1330 case YYSYMBOL_pktloc:
1331 #line 137 "lib/route/cls/ematch_syntax.y"
1332 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1333 #line 1334 "lib/route/cls/ematch_syntax.c"
1339 YY_IGNORE_MAYBE_UNINITIALIZED_END
1352 yyparse (
void *scanner,
char **errp,
struct nl_list_head *root)
1361 YY_INITIAL_VALUE (
static YYSTYPE yyval_default;)
1362 YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
1367 yy_state_fast_t yystate = 0;
1369 int yyerrstatus = 0;
1375 YYPTRDIFF_T yystacksize = YYINITDEPTH;
1378 yy_state_t yyssa[YYINITDEPTH];
1379 yy_state_t *yyss = yyssa;
1380 yy_state_t *yyssp = yyss;
1391 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
1398 char *yymsg = yymsgbuf;
1399 YYPTRDIFF_T yymsg_alloc =
sizeof yymsgbuf;
1401 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1407 YYDPRINTF ((stderr,
"Starting parse\n"));
1427 YYDPRINTF ((stderr,
"Entering state %d\n", yystate));
1428 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
1429 YY_IGNORE_USELESS_CAST_BEGIN
1430 *yyssp = YY_CAST (yy_state_t, yystate);
1431 YY_IGNORE_USELESS_CAST_END
1432 YY_STACK_PRINT (yyss, yyssp);
1434 if (yyss + yystacksize - 1 <= yyssp)
1435 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
1440 YYPTRDIFF_T yysize = yyssp - yyss + 1;
1442 # if defined yyoverflow
1447 yy_state_t *yyss1 = yyss;
1454 yyoverflow (YY_(
"memory exhausted"),
1455 &yyss1, yysize * YYSIZEOF (*yyssp),
1456 &yyvs1, yysize * YYSIZEOF (*yyvsp),
1463 if (YYMAXDEPTH <= yystacksize)
1466 if (YYMAXDEPTH < yystacksize)
1467 yystacksize = YYMAXDEPTH;
1470 yy_state_t *yyss1 = yyss;
1473 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
1476 YYSTACK_RELOCATE (yyss_alloc, yyss);
1477 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1478 # undef YYSTACK_RELOCATE
1480 YYSTACK_FREE (yyss1);
1484 yyssp = yyss + yysize - 1;
1485 yyvsp = yyvs + yysize - 1;
1487 YY_IGNORE_USELESS_CAST_BEGIN
1488 YYDPRINTF ((stderr,
"Stack size increased to %ld\n",
1489 YY_CAST (
long, yystacksize)));
1490 YY_IGNORE_USELESS_CAST_END
1492 if (yyss + yystacksize - 1 <= yyssp)
1498 if (yystate == YYFINAL)
1512 yyn = yypact[yystate];
1513 if (yypact_value_is_default (yyn))
1519 if (yychar == YYEMPTY)
1521 YYDPRINTF ((stderr,
"Reading a token\n"));
1522 yychar = yylex (&yylval, scanner);
1525 if (yychar <= YYEOF)
1528 yytoken = YYSYMBOL_YYEOF;
1529 YYDPRINTF ((stderr,
"Now at end of input.\n"));
1531 else if (yychar == YYerror)
1538 yytoken = YYSYMBOL_YYerror;
1543 yytoken = YYTRANSLATE (yychar);
1544 YY_SYMBOL_PRINT (
"Next token is", yytoken, &yylval, &yylloc);
1550 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1555 if (yytable_value_is_error (yyn))
1567 YY_SYMBOL_PRINT (
"Shifting", yytoken, &yylval, &yylloc);
1569 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1571 YY_IGNORE_MAYBE_UNINITIALIZED_END
1582 yyn = yydefact[yystate];
1603 yyval = yyvsp[1-yylen];
1606 YY_REDUCE_PRINT (yyn);
1610 #line 148 "lib/route/cls/ematch_syntax.y"
1612 nl_list_add_tail(root, &(yyvsp[0].e)->e_list);
1614 #line 1615 "lib/route/cls/ematch_syntax.c"
1618 #line 155 "lib/route/cls/ematch_syntax.y"
1620 (yyval.e) = (yyvsp[0].e);
1622 #line 1623 "lib/route/cls/ematch_syntax.c"
1626 #line 159 "lib/route/cls/ematch_syntax.y"
1628 rtnl_ematch_set_flags((yyvsp[-2].e), (yyvsp[-1].i));
1631 nl_list_add_tail(&(yyvsp[-2].e)->e_list, &(yyvsp[0].e)->e_list);
1633 (yyval.e) = (yyvsp[-2].e);
1635 #line 1636 "lib/route/cls/ematch_syntax.c"
1639 #line 171 "lib/route/cls/ematch_syntax.y"
1641 rtnl_ematch_set_flags((yyvsp[0].e), TCF_EM_INVERT);
1642 (yyval.e) = (yyvsp[0].e);
1644 #line 1645 "lib/route/cls/ematch_syntax.c"
1648 #line 176 "lib/route/cls/ematch_syntax.y"
1650 (yyval.e) = (yyvsp[0].e);
1652 #line 1653 "lib/route/cls/ematch_syntax.c"
1656 #line 184 "lib/route/cls/ematch_syntax.y"
1658 struct rtnl_ematch *e;
1661 *errp = strdup(
"Unable to allocate ematch object");
1665 if (rtnl_ematch_set_kind(e, TCF_EM_CMP) < 0)
1668 rtnl_ematch_cmp_set(e, &(yyvsp[0].cmp));
1671 #line 1672 "lib/route/cls/ematch_syntax.c"
1675 #line 199 "lib/route/cls/ematch_syntax.y"
1677 struct rtnl_ematch *e;
1680 *errp = strdup(
"Unable to allocate ematch object");
1684 if (rtnl_ematch_set_kind(e, TCF_EM_NBYTE) < 0)
1687 rtnl_ematch_nbyte_set_offset(e, (yyvsp[-3].loc)->layer, (yyvsp[-3].loc)->offset);
1689 rtnl_ematch_nbyte_set_pattern(e, (uint8_t *) (yyvsp[-1].q).data, (yyvsp[-1].q).index);
1693 #line 1694 "lib/route/cls/ematch_syntax.c"
1697 #line 217 "lib/route/cls/ematch_syntax.y"
1699 struct rtnl_ematch *e;
1702 *errp = strdup(
"Unable to allocate ematch object");
1706 if (rtnl_ematch_set_kind(e, TCF_EM_TEXT) < 0)
1709 rtnl_ematch_text_set_algo(e, (yyvsp[-4].s));
1710 rtnl_ematch_text_set_pattern(e, (yyvsp[-3].q).data, (yyvsp[-3].q).index);
1712 if ((yyvsp[-2].loc)) {
1713 rtnl_ematch_text_set_from(e, (yyvsp[-2].loc)->layer, (yyvsp[-2].loc)->offset);
1717 if ((yyvsp[-1].loc)) {
1718 rtnl_ematch_text_set_to(e, (yyvsp[-1].loc)->layer, (yyvsp[-1].loc)->offset);
1724 #line 1725 "lib/route/cls/ematch_syntax.c"
1728 #line 244 "lib/route/cls/ematch_syntax.y"
1730 struct rtnl_ematch *e;
1733 *errp = strdup(
"Unable to allocate ematch object");
1737 if (rtnl_ematch_set_kind(e, TCF_EM_META) < 0)
1740 rtnl_ematch_meta_set_lvalue(e, (yyvsp[-3].mv));
1741 rtnl_ematch_meta_set_rvalue(e, (yyvsp[-1].mv));
1742 rtnl_ematch_meta_set_operand(e, (yyvsp[-2].i));
1746 #line 1747 "lib/route/cls/ematch_syntax.c"
1750 #line 263 "lib/route/cls/ematch_syntax.y"
1752 struct rtnl_ematch *e;
1755 *errp = strdup(
"Unable to allocate ematch object");
1759 if (rtnl_ematch_set_kind(e, TCF_EM_CONTAINER) < 0)
1763 nl_list_add_tail(&e->e_childs, &(yyvsp[-1].e)->e_list);
1767 #line 1768 "lib/route/cls/ematch_syntax.c"
1771 #line 291 "lib/route/cls/ematch_syntax.y"
1772 { (yyval.cmp) = (yyvsp[-1].cmp); }
1773 #line 1774 "lib/route/cls/ematch_syntax.c"
1777 #line 293 "lib/route/cls/ematch_syntax.y"
1778 { (yyval.cmp) = (yyvsp[0].cmp); }
1779 #line 1780 "lib/route/cls/ematch_syntax.c"
1783 #line 298 "lib/route/cls/ematch_syntax.y"
1785 if ((yyvsp[-2].loc)->align == TCF_EM_ALIGN_U16 ||
1786 (yyvsp[-2].loc)->align == TCF_EM_ALIGN_U32)
1787 (yyval.cmp).flags = TCF_EM_CMP_TRANS;
1789 memset(&(yyval.cmp), 0,
sizeof((yyval.cmp)));
1791 (yyval.cmp).mask = (yyvsp[-2].loc)->mask;
1792 (yyval.cmp).off = (yyvsp[-2].loc)->offset;
1793 (yyval.cmp).align = (yyvsp[-2].loc)->align;
1794 (yyval.cmp).layer = (yyvsp[-2].loc)->layer;
1795 (yyval.cmp).opnd = (yyvsp[-1].i);
1796 (yyval.cmp).val = (yyvsp[0].i);
1800 #line 1801 "lib/route/cls/ematch_syntax.c"
1804 #line 318 "lib/route/cls/ematch_syntax.y"
1805 { (yyval.loc) = NULL; }
1806 #line 1807 "lib/route/cls/ematch_syntax.c"
1810 #line 320 "lib/route/cls/ematch_syntax.y"
1811 { (yyval.loc) = (yyvsp[0].loc); }
1812 #line 1813 "lib/route/cls/ematch_syntax.c"
1816 #line 325 "lib/route/cls/ematch_syntax.y"
1817 { (yyval.loc) = NULL; }
1818 #line 1819 "lib/route/cls/ematch_syntax.c"
1822 #line 327 "lib/route/cls/ematch_syntax.y"
1823 { (yyval.loc) = (yyvsp[0].loc); }
1824 #line 1825 "lib/route/cls/ematch_syntax.c"
1828 #line 332 "lib/route/cls/ematch_syntax.y"
1829 { (yyval.mv) = rtnl_meta_value_alloc_var((yyvsp[0].q).data, (yyvsp[0].q).len); }
1830 #line 1831 "lib/route/cls/ematch_syntax.c"
1834 #line 334 "lib/route/cls/ematch_syntax.y"
1835 { (yyval.mv) = rtnl_meta_value_alloc_int((yyvsp[0].i)); }
1836 #line 1837 "lib/route/cls/ematch_syntax.c"
1840 #line 336 "lib/route/cls/ematch_syntax.y"
1841 { (yyval.mv) = META_ALLOC(META_INT, (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i64)); }
1842 #line 1843 "lib/route/cls/ematch_syntax.c"
1846 #line 338 "lib/route/cls/ematch_syntax.y"
1847 { (yyval.mv) = META_ALLOC(META_VAR, (yyvsp[-1].i), (yyvsp[0].i), 0); }
1848 #line 1849 "lib/route/cls/ematch_syntax.c"
1852 #line 342 "lib/route/cls/ematch_syntax.y"
1853 { (yyval.i) = META_ID(RANDOM); }
1854 #line 1855 "lib/route/cls/ematch_syntax.c"
1858 #line 343 "lib/route/cls/ematch_syntax.y"
1859 { (yyval.i) = META_ID(LOADAVG_0); }
1860 #line 1861 "lib/route/cls/ematch_syntax.c"
1864 #line 344 "lib/route/cls/ematch_syntax.y"
1865 { (yyval.i) = META_ID(LOADAVG_1); }
1866 #line 1867 "lib/route/cls/ematch_syntax.c"
1870 #line 345 "lib/route/cls/ematch_syntax.y"
1871 { (yyval.i) = META_ID(LOADAVG_2); }
1872 #line 1873 "lib/route/cls/ematch_syntax.c"
1876 #line 346 "lib/route/cls/ematch_syntax.y"
1877 { (yyval.i) = META_ID(DEV); }
1878 #line 1879 "lib/route/cls/ematch_syntax.c"
1882 #line 347 "lib/route/cls/ematch_syntax.y"
1883 { (yyval.i) = META_ID(PRIORITY); }
1884 #line 1885 "lib/route/cls/ematch_syntax.c"
1888 #line 348 "lib/route/cls/ematch_syntax.y"
1889 { (yyval.i) = META_ID(PROTOCOL); }
1890 #line 1891 "lib/route/cls/ematch_syntax.c"
1894 #line 349 "lib/route/cls/ematch_syntax.y"
1895 { (yyval.i) = META_ID(PKTTYPE); }
1896 #line 1897 "lib/route/cls/ematch_syntax.c"
1900 #line 350 "lib/route/cls/ematch_syntax.y"
1901 { (yyval.i) = META_ID(PKTLEN); }
1902 #line 1903 "lib/route/cls/ematch_syntax.c"
1906 #line 351 "lib/route/cls/ematch_syntax.y"
1907 { (yyval.i) = META_ID(DATALEN); }
1908 #line 1909 "lib/route/cls/ematch_syntax.c"
1912 #line 352 "lib/route/cls/ematch_syntax.y"
1913 { (yyval.i) = META_ID(MACLEN); }
1914 #line 1915 "lib/route/cls/ematch_syntax.c"
1918 #line 353 "lib/route/cls/ematch_syntax.y"
1919 { (yyval.i) = META_ID(NFMARK); }
1920 #line 1921 "lib/route/cls/ematch_syntax.c"
1924 #line 354 "lib/route/cls/ematch_syntax.y"
1925 { (yyval.i) = META_ID(TCINDEX); }
1926 #line 1927 "lib/route/cls/ematch_syntax.c"
1930 #line 355 "lib/route/cls/ematch_syntax.y"
1931 { (yyval.i) = META_ID(RTCLASSID); }
1932 #line 1933 "lib/route/cls/ematch_syntax.c"
1936 #line 356 "lib/route/cls/ematch_syntax.y"
1937 { (yyval.i) = META_ID(RTIIF); }
1938 #line 1939 "lib/route/cls/ematch_syntax.c"
1942 #line 357 "lib/route/cls/ematch_syntax.y"
1943 { (yyval.i) = META_ID(SK_FAMILY); }
1944 #line 1945 "lib/route/cls/ematch_syntax.c"
1948 #line 358 "lib/route/cls/ematch_syntax.y"
1949 { (yyval.i) = META_ID(SK_STATE); }
1950 #line 1951 "lib/route/cls/ematch_syntax.c"
1954 #line 359 "lib/route/cls/ematch_syntax.y"
1955 { (yyval.i) = META_ID(SK_REUSE); }
1956 #line 1957 "lib/route/cls/ematch_syntax.c"
1960 #line 360 "lib/route/cls/ematch_syntax.y"
1961 { (yyval.i) = META_ID(SK_REFCNT); }
1962 #line 1963 "lib/route/cls/ematch_syntax.c"
1966 #line 361 "lib/route/cls/ematch_syntax.y"
1967 { (yyval.i) = META_ID(SK_RCVBUF); }
1968 #line 1969 "lib/route/cls/ematch_syntax.c"
1972 #line 362 "lib/route/cls/ematch_syntax.y"
1973 { (yyval.i) = META_ID(SK_SNDBUF); }
1974 #line 1975 "lib/route/cls/ematch_syntax.c"
1978 #line 363 "lib/route/cls/ematch_syntax.y"
1979 { (yyval.i) = META_ID(SK_SHUTDOWN); }
1980 #line 1981 "lib/route/cls/ematch_syntax.c"
1984 #line 364 "lib/route/cls/ematch_syntax.y"
1985 { (yyval.i) = META_ID(SK_PROTO); }
1986 #line 1987 "lib/route/cls/ematch_syntax.c"
1990 #line 365 "lib/route/cls/ematch_syntax.y"
1991 { (yyval.i) = META_ID(SK_TYPE); }
1992 #line 1993 "lib/route/cls/ematch_syntax.c"
1996 #line 366 "lib/route/cls/ematch_syntax.y"
1997 { (yyval.i) = META_ID(SK_RMEM_ALLOC); }
1998 #line 1999 "lib/route/cls/ematch_syntax.c"
2002 #line 367 "lib/route/cls/ematch_syntax.y"
2003 { (yyval.i) = META_ID(SK_WMEM_ALLOC); }
2004 #line 2005 "lib/route/cls/ematch_syntax.c"
2008 #line 368 "lib/route/cls/ematch_syntax.y"
2009 { (yyval.i) = META_ID(SK_WMEM_QUEUED); }
2010 #line 2011 "lib/route/cls/ematch_syntax.c"
2014 #line 369 "lib/route/cls/ematch_syntax.y"
2015 { (yyval.i) = META_ID(SK_RCV_QLEN); }
2016 #line 2017 "lib/route/cls/ematch_syntax.c"
2020 #line 370 "lib/route/cls/ematch_syntax.y"
2021 { (yyval.i) = META_ID(SK_SND_QLEN); }
2022 #line 2023 "lib/route/cls/ematch_syntax.c"
2026 #line 371 "lib/route/cls/ematch_syntax.y"
2027 { (yyval.i) = META_ID(SK_ERR_QLEN); }
2028 #line 2029 "lib/route/cls/ematch_syntax.c"
2032 #line 372 "lib/route/cls/ematch_syntax.y"
2033 { (yyval.i) = META_ID(SK_FORWARD_ALLOCS); }
2034 #line 2035 "lib/route/cls/ematch_syntax.c"
2038 #line 373 "lib/route/cls/ematch_syntax.y"
2039 { (yyval.i) = META_ID(SK_ALLOCS); }
2040 #line 2041 "lib/route/cls/ematch_syntax.c"
2044 #line 374 "lib/route/cls/ematch_syntax.y"
2045 { (yyval.i) = __TCF_META_ID_SK_ROUTE_CAPS; }
2046 #line 2047 "lib/route/cls/ematch_syntax.c"
2050 #line 375 "lib/route/cls/ematch_syntax.y"
2051 { (yyval.i) = META_ID(SK_HASH); }
2052 #line 2053 "lib/route/cls/ematch_syntax.c"
2056 #line 376 "lib/route/cls/ematch_syntax.y"
2057 { (yyval.i) = META_ID(SK_LINGERTIME); }
2058 #line 2059 "lib/route/cls/ematch_syntax.c"
2062 #line 377 "lib/route/cls/ematch_syntax.y"
2063 { (yyval.i) = META_ID(SK_ACK_BACKLOG); }
2064 #line 2065 "lib/route/cls/ematch_syntax.c"
2068 #line 378 "lib/route/cls/ematch_syntax.y"
2069 { (yyval.i) = META_ID(SK_MAX_ACK_BACKLOG); }
2070 #line 2071 "lib/route/cls/ematch_syntax.c"
2074 #line 379 "lib/route/cls/ematch_syntax.y"
2075 { (yyval.i) = META_ID(SK_PRIO); }
2076 #line 2077 "lib/route/cls/ematch_syntax.c"
2080 #line 380 "lib/route/cls/ematch_syntax.y"
2081 { (yyval.i) = META_ID(SK_RCVLOWAT); }
2082 #line 2083 "lib/route/cls/ematch_syntax.c"
2086 #line 381 "lib/route/cls/ematch_syntax.y"
2087 { (yyval.i) = META_ID(SK_RCVTIMEO); }
2088 #line 2089 "lib/route/cls/ematch_syntax.c"
2092 #line 382 "lib/route/cls/ematch_syntax.y"
2093 { (yyval.i) = META_ID(SK_SNDTIMEO); }
2094 #line 2095 "lib/route/cls/ematch_syntax.c"
2098 #line 383 "lib/route/cls/ematch_syntax.y"
2099 { (yyval.i) = META_ID(SK_SENDMSG_OFF); }
2100 #line 2101 "lib/route/cls/ematch_syntax.c"
2104 #line 384 "lib/route/cls/ematch_syntax.y"
2105 { (yyval.i) = META_ID(SK_WRITE_PENDING); }
2106 #line 2107 "lib/route/cls/ematch_syntax.c"
2110 #line 385 "lib/route/cls/ematch_syntax.y"
2111 { (yyval.i) = META_ID(VLAN_TAG); }
2112 #line 2113 "lib/route/cls/ematch_syntax.c"
2116 #line 386 "lib/route/cls/ematch_syntax.y"
2117 { (yyval.i) = META_ID(RXHASH); }
2118 #line 2119 "lib/route/cls/ematch_syntax.c"
2122 #line 390 "lib/route/cls/ematch_syntax.y"
2123 { (yyval.i) = META_ID(DEV); }
2124 #line 2125 "lib/route/cls/ematch_syntax.c"
2128 #line 391 "lib/route/cls/ematch_syntax.y"
2129 { (yyval.i) = META_ID(SK_BOUND_IF); }
2130 #line 2131 "lib/route/cls/ematch_syntax.c"
2134 #line 399 "lib/route/cls/ematch_syntax.y"
2136 (yyval.q) = (yyvsp[0].q);
2138 #line 2139 "lib/route/cls/ematch_syntax.c"
2142 #line 403 "lib/route/cls/ematch_syntax.y"
2144 struct nl_addr *addr;
2151 if (!((yyval.q).data = calloc(1, (yyval.q).len))) {
2159 if (asprintf(errp,
"invalid pattern \"%s\"", (yyvsp[0].s)) == -1)
2164 #line 2165 "lib/route/cls/ematch_syntax.c"
2168 #line 432 "lib/route/cls/ematch_syntax.y"
2173 if (asprintf(errp,
"Packet location \"%s\" not found", (yyvsp[0].s)) == -1)
2180 #line 2181 "lib/route/cls/ematch_syntax.c"
2184 #line 445 "lib/route/cls/ematch_syntax.y"
2188 if ((yyvsp[0].i64) && (!(yyvsp[-4].i) || (yyvsp[-4].i) > TCF_EM_ALIGN_U32)) {
2189 *errp = strdup(
"mask only allowed for alignments u8|u16|u32");
2194 *errp = strdup(
"Unable to allocate packet location object");
2198 loc->name = strdup(
"<USER-DEFINED>");
2199 loc->align = (yyvsp[-4].i);
2200 loc->layer = (yyvsp[-3].i);
2201 loc->offset = (yyvsp[-1].i);
2202 loc->mask = (yyvsp[0].i64);
2206 #line 2207 "lib/route/cls/ematch_syntax.c"
2210 #line 470 "lib/route/cls/ematch_syntax.y"
2212 #line 2213 "lib/route/cls/ematch_syntax.c"
2216 #line 472 "lib/route/cls/ematch_syntax.y"
2217 { (yyval.i) = (yyvsp[-1].i); }
2218 #line 2219 "lib/route/cls/ematch_syntax.c"
2222 #line 474 "lib/route/cls/ematch_syntax.y"
2223 { (yyval.i) = (yyvsp[-1].i); }
2224 #line 2225 "lib/route/cls/ematch_syntax.c"
2228 #line 479 "lib/route/cls/ematch_syntax.y"
2229 { (yyval.i64) = 0; }
2230 #line 2231 "lib/route/cls/ematch_syntax.c"
2234 #line 481 "lib/route/cls/ematch_syntax.y"
2235 { (yyval.i64) = (yyvsp[0].i); }
2236 #line 2237 "lib/route/cls/ematch_syntax.c"
2240 #line 486 "lib/route/cls/ematch_syntax.y"
2242 #line 2243 "lib/route/cls/ematch_syntax.c"
2246 #line 488 "lib/route/cls/ematch_syntax.y"
2247 { (yyval.i) = (yyvsp[0].i); }
2248 #line 2249 "lib/route/cls/ematch_syntax.c"
2252 #line 493 "lib/route/cls/ematch_syntax.y"
2253 { (yyval.i) = TCF_EM_OPND_EQ; }
2254 #line 2255 "lib/route/cls/ematch_syntax.c"
2258 #line 495 "lib/route/cls/ematch_syntax.y"
2259 { (yyval.i) = TCF_EM_OPND_GT; }
2260 #line 2261 "lib/route/cls/ematch_syntax.c"
2264 #line 497 "lib/route/cls/ematch_syntax.y"
2265 { (yyval.i) = TCF_EM_OPND_LT; }
2266 #line 2267 "lib/route/cls/ematch_syntax.c"
2270 #line 2271 "lib/route/cls/ematch_syntax.c"
2285 YY_SYMBOL_PRINT (
"-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
2296 const int yylhs = yyr1[yyn] - YYNTOKENS;
2297 const int yyi = yypgoto[yylhs] + *yyssp;
2298 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
2300 : yydefgoto[yylhs]);
2312 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
2320 char const *yymsgp = YY_(
"syntax error");
2321 int yysyntax_error_status;
2322 yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2323 if (yysyntax_error_status == 0)
2325 else if (yysyntax_error_status == -1)
2327 if (yymsg != yymsgbuf)
2328 YYSTACK_FREE (yymsg);
2329 yymsg = YY_CAST (
char *,
2330 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
2333 yysyntax_error_status
2334 = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2340 yymsg_alloc =
sizeof yymsgbuf;
2341 yysyntax_error_status = YYENOMEM;
2344 yyerror (scanner, errp, root, yymsgp);
2345 if (yysyntax_error_status == YYENOMEM)
2350 if (yyerrstatus == 3)
2355 if (yychar <= YYEOF)
2358 if (yychar == YYEOF)
2363 yydestruct (
"Error: discarding",
2364 yytoken, &yylval, scanner, errp, root);
2388 YY_STACK_PRINT (yyss, yyssp);
2402 yyn = yypact[yystate];
2403 if (!yypact_value_is_default (yyn))
2405 yyn += YYSYMBOL_YYerror;
2406 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
2419 yydestruct (
"Error: popping",
2420 YY_ACCESSING_SYMBOL (yystate), yyvsp, scanner, errp, root);
2423 YY_STACK_PRINT (yyss, yyssp);
2426 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2428 YY_IGNORE_MAYBE_UNINITIALIZED_END
2432 YY_SYMBOL_PRINT (
"Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
2458 yyerror (scanner, errp, root, YY_(
"memory exhausted"));
2467 if (yychar != YYEMPTY)
2471 yytoken = YYTRANSLATE (yychar);
2472 yydestruct (
"Cleanup: discarding lookahead",
2473 yytoken, &yylval, scanner, errp, root);
2478 YY_STACK_PRINT (yyss, yyssp);
2479 while (yyssp != yyss)
2481 yydestruct (
"Cleanup: popping",
2482 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, scanner, errp, root);
2487 YYSTACK_FREE (yyss);
2489 if (yymsg != yymsgbuf)
2490 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.
struct rtnl_pktloc * rtnl_pktloc_alloc(void)
Allocate packet location object.
void rtnl_pktloc_put(struct rtnl_pktloc *loc)
Return reference of a packet location.