52 #define YYBISON_VERSION "3.7.6"
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))
387 #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
389 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
390 _Pragma ("GCC diagnostic push") \
391 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
392 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
393 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
394 _Pragma ("GCC diagnostic pop")
396 # define YY_INITIAL_VALUE(Value) Value
398 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
399 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
400 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
402 #ifndef YY_INITIAL_VALUE
403 # define YY_INITIAL_VALUE(Value)
406 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
407 # define YY_IGNORE_USELESS_CAST_BEGIN \
408 _Pragma ("GCC diagnostic push") \
409 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
410 # define YY_IGNORE_USELESS_CAST_END \
411 _Pragma ("GCC diagnostic pop")
413 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
414 # define YY_IGNORE_USELESS_CAST_BEGIN
415 # define YY_IGNORE_USELESS_CAST_END
419 #define YY_ASSERT(E) ((void) (0 && (E)))
425 # ifdef YYSTACK_USE_ALLOCA
426 # if YYSTACK_USE_ALLOCA
428 # define YYSTACK_ALLOC __builtin_alloca
429 # elif defined __BUILTIN_VA_ARG_INCR
432 # define YYSTACK_ALLOC __alloca
433 # elif defined _MSC_VER
435 # define alloca _alloca
437 # define YYSTACK_ALLOC alloca
438 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
441 # ifndef EXIT_SUCCESS
442 # define EXIT_SUCCESS 0
449 # ifdef YYSTACK_ALLOC
451 # define YYSTACK_FREE(Ptr) do { ; } while (0)
452 # ifndef YYSTACK_ALLOC_MAXIMUM
457 # define YYSTACK_ALLOC_MAXIMUM 4032
460 # define YYSTACK_ALLOC YYMALLOC
461 # define YYSTACK_FREE YYFREE
462 # ifndef YYSTACK_ALLOC_MAXIMUM
463 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
465 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
466 && ! ((defined YYMALLOC || defined malloc) \
467 && (defined YYFREE || defined free)))
469 # ifndef EXIT_SUCCESS
470 # define EXIT_SUCCESS 0
474 # define YYMALLOC malloc
475 # if ! defined malloc && ! defined EXIT_SUCCESS
476 void *malloc (YYSIZE_T);
481 # if ! defined free && ! defined EXIT_SUCCESS
488 #if (! defined yyoverflow \
489 && (! defined __cplusplus \
490 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
495 yy_state_t yyss_alloc;
500 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
504 # define YYSTACK_BYTES(N) \
505 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
506 + YYSTACK_GAP_MAXIMUM)
508 # define YYCOPY_NEEDED 1
515 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
518 YYPTRDIFF_T yynewbytes; \
519 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
520 Stack = &yyptr->Stack_alloc; \
521 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
522 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
528 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
532 # if defined __GNUC__ && 1 < __GNUC__
533 # define YYCOPY(Dst, Src, Count) \
534 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
536 # define YYCOPY(Dst, Src, Count) \
540 for (yyi = 0; yyi < (Count); yyi++) \
541 (Dst)[yyi] = (Src)[yyi]; \
560 #define YYNSTATES 118
563 #define YYMAXUTOK 328
568 #define YYTRANSLATE(YYX) \
569 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
570 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
575 static const yytype_int8 yytranslate[] =
577 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
578 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
579 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
580 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
581 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
582 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
583 2, 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, 1, 2, 3, 4,
603 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
604 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
605 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
606 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
607 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
608 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
609 65, 66, 67, 68, 69, 70, 71, 72, 73
614 static const yytype_int16 yyrline[] =
616 0, 145, 145, 147, 154, 158, 170, 175, 183, 198,
617 216, 243, 262, 290, 292, 297, 318, 319, 325, 326,
618 331, 333, 335, 337, 342, 343, 344, 345, 346, 347,
619 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
620 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
621 368, 369, 370, 371, 372, 373, 374, 375, 376, 377,
622 378, 379, 380, 381, 382, 383, 384, 385, 386, 390,
623 391, 398, 402, 431, 444, 470, 471, 473, 479, 480,
624 486, 487, 492, 494, 496
629 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
634 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
638 static const char *
const yytname[] =
640 "\"end of file\"",
"error",
"\"invalid token\"",
"ERROR",
"LOGIC",
641 "NOT",
"OPERAND",
"NUMBER",
"ALIGN",
"LAYER",
"\"(\"",
"\")\"",
"\"+\"",
642 "\"mask\"",
"\">>\"",
"\"at\"",
"\"cmp\"",
"\"pattern\"",
"\"text\"",
643 "\"meta\"",
"\"=\"",
"\">\"",
"\"<\"",
"\"from\"",
"\"to\"",
644 "\"random\"",
"\"loadavg_0\"",
"\"loadavg_1\"",
"\"loadavg_2\"",
645 "\"dev\"",
"\"prio\"",
"\"proto\"",
"\"pkttype\"",
"\"pktlen\"",
646 "\"datalen\"",
"\"maclen\"",
"\"mark\"",
"\"tcindex\"",
"\"rtclassid\"",
647 "\"rtiif\"",
"\"sk_family\"",
"\"sk_state\"",
"\"sk_reuse\"",
648 "\"sk_refcnt\"",
"\"sk_rcvbuf\"",
"\"sk_sndbuf\"",
"\"sk_shutdown\"",
649 "\"sk_proto\"",
"\"sk_type\"",
"\"sk_rmem_alloc\"",
"\"sk_wmem_alloc\"",
650 "\"sk_wmem_queued\"",
"\"sk_rcv_qlen\"",
"\"sk_snd_qlen\"",
651 "\"sk_err_qlen\"",
"\"sk_forward_allocs\"",
"\"sk_allocs\"",
652 "\"sk_route_caps\"",
"\"sk_hash\"",
"\"sk_lingertime\"",
653 "\"sk_ack_backlog\"",
"\"sk_max_ack_backlog\"",
"\"sk_prio\"",
654 "\"sk_rcvlowat\"",
"\"sk_rcvtimeo\"",
"\"sk_sndtimeo\"",
655 "\"sk_sendmsg_off\"",
"\"sk_write_pending\"",
"\"vlan\"",
"\"rxhash\"",
656 "\"devname\"",
"\"sk_bound_if\"",
"STR",
"QUOTED",
"$accept",
"input",
657 "expr",
"match",
"ematch",
"cmp_match",
"cmp_expr",
"text_from",
658 "text_to",
"meta_value",
"meta_int_id",
"meta_var_id",
"pattern",
659 "pktloc",
"align",
"mask",
"shift",
"operand", YY_NULLPTR
663 yysymbol_name (yysymbol_kind_t yysymbol)
665 return yytname[yysymbol];
672 static const yytype_int16 yytoknum[] =
674 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
675 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
676 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
677 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
678 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
679 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
680 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
685 #define YYPACT_NINF (-63)
687 #define yypact_value_is_default(Yyn) \
688 ((Yyn) == YYPACT_NINF)
690 #define YYTABLE_NINF (-76)
692 #define yytable_value_is_error(Yyn) \
697 static const yytype_int8 yypact[] =
699 -4, 15, -13, -8, 11, 10, 14, 25, 29, -63,
700 26, -63, 37, -63, -63, -63, 16, 33, -63, -63,
701 -63, 32, 1, 1, -28, 65, -63, 11, -63, -63,
702 -63, 38, 34, -63, 36, 28, -24, -63, -63, -63,
703 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
704 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
705 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
706 -63, -63, -63, -63, -63, -63, -63, -63, -63, -63,
707 -63, -63, -63, -63, -63, -63, 16, 39, 39, -63,
708 -63, 43, -63, -62, 31, 65, 44, 42, -63, 42,
709 -63, -63, 41, 1, 35, 45, -63, 50, -63, -63,
710 -63, -63, 1, 47, -63, -63, -63, -63
716 static const yytype_int8 yydefact[] =
718 2, 75, 0, 0, 75, 0, 0, 0, 0, 73,
719 0, 3, 4, 7, 8, 14, 0, 0, 6, 77,
720 76, 0, 75, 75, 0, 0, 1, 75, 82, 83,
721 84, 0, 0, 12, 0, 0, 0, 21, 24, 25,
722 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
723 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
724 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
725 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
726 66, 67, 68, 69, 70, 20, 0, 80, 80, 5,
727 15, 0, 13, 0, 16, 0, 0, 78, 23, 78,
728 72, 71, 0, 75, 18, 0, 81, 0, 22, 74,
729 9, 17, 75, 0, 11, 79, 19, 10
733 static const yytype_int8 yypgoto[] =
735 -63, -63, 13, -63, 59, -63, 40, -63, -63, -34,
736 -63, -63, -63, -23, -63, -36, -22, -21
740 static const yytype_int8 yydefgoto[] =
742 0, 10, 11, 12, 13, 14, 15, 104, 113, 86,
743 87, 88, 102, 16, 17, 108, 97, 31
749 static const yytype_int8 yytable[] =
751 35, 1, 19, 2, 3, -75, 4, 20, 2, 3,
752 100, 101, 5, 6, 7, 8, 1, 21, 2, 3,
753 22, 4, 2, 3, 23, 4, 26, 5, 6, 7,
754 8, 5, 6, 7, 8, 24, 28, 29, 30, 25,
755 89, 27, 32, 33, 36, 90, 91, 92, 93, 94,
756 99, 106, 110, 96, 103, 107, 114, 115, 117, 112,
757 18, 105, 34, 109, 0, 95, 98, 0, 9, 0,
758 0, 0, 37, 9, 0, 0, 0, 0, 0, 0,
759 111, 0, 0, 9, 0, 0, 0, 9, 0, 116,
760 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
761 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
762 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
763 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
764 78, 79, 80, 81, 82, 83, 84, 0, 85
767 static const yytype_int8 yycheck[] =
769 23, 5, 15, 7, 8, 9, 10, 15, 7, 8,
770 72, 73, 16, 17, 18, 19, 5, 4, 7, 8,
771 10, 10, 7, 8, 10, 10, 0, 16, 17, 18,
772 19, 16, 17, 18, 19, 10, 20, 21, 22, 10,
773 27, 4, 9, 11, 72, 7, 12, 11, 20, 73,
774 7, 7, 11, 14, 23, 13, 11, 7, 11, 24,
775 1, 95, 22, 99, -1, 86, 88, -1, 72, -1,
776 -1, -1, 7, 72, -1, -1, -1, -1, -1, -1,
777 103, -1, -1, 72, -1, -1, -1, 72, -1, 112,
778 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
779 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
780 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
781 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
782 65, 66, 67, 68, 69, 70, 71, -1, 73
787 static const yytype_int8 yystos[] =
789 0, 5, 7, 8, 10, 16, 17, 18, 19, 72,
790 75, 76, 77, 78, 79, 80, 87, 88, 78, 15,
791 15, 76, 10, 10, 10, 10, 0, 4, 20, 21,
792 22, 91, 9, 11, 80, 87, 72, 7, 25, 26,
793 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
794 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
795 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
796 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
797 67, 68, 69, 70, 71, 73, 83, 84, 85, 76,
798 7, 12, 11, 20, 73, 91, 14, 90, 90, 7,
799 72, 73, 86, 23, 81, 83, 7, 13, 89, 89,
800 11, 87, 24, 82, 11, 7, 87, 11
804 static const yytype_int8 yyr1[] =
806 0, 74, 75, 75, 76, 76, 77, 77, 78, 78,
807 78, 78, 78, 79, 79, 80, 81, 81, 82, 82,
808 83, 83, 83, 83, 84, 84, 84, 84, 84, 84,
809 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
810 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
811 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
812 84, 84, 84, 84, 84, 84, 84, 84, 84, 85,
813 85, 86, 86, 87, 87, 88, 88, 88, 89, 89,
818 static const yytype_int8 yyr2[] =
820 0, 2, 0, 1, 1, 3, 2, 1, 1, 6,
821 7, 6, 3, 4, 1, 3, 0, 2, 0, 2,
822 1, 1, 3, 2, 1, 1, 1, 1, 1, 1,
823 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
824 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
825 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
826 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
827 1, 1, 1, 1, 5, 0, 2, 2, 0, 2,
832 enum { YYENOMEM = -2 };
834 #define yyerrok (yyerrstatus = 0)
835 #define yyclearin (yychar = YYEMPTY)
837 #define YYACCEPT goto yyacceptlab
838 #define YYABORT goto yyabortlab
839 #define YYERROR goto yyerrorlab
842 #define YYRECOVERING() (!!yyerrstatus)
844 #define YYBACKUP(Token, Value) \
846 if (yychar == YYEMPTY) \
850 YYPOPSTACK (yylen); \
856 yyerror (scanner, errp, root, YY_("syntax error: cannot back up")); \
863 #define YYERRCODE YYUNDEF
871 # define YYFPRINTF fprintf
874 # define YYDPRINTF(Args) \
881 # ifndef YY_LOCATION_PRINT
882 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
886 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
890 YYFPRINTF (stderr, "%s ", Title); \
891 yy_symbol_print (stderr, \
892 Kind, Value, scanner, errp, root); \
893 YYFPRINTF (stderr, "\n"); \
903 yy_symbol_value_print (FILE *yyo,
904 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
906 FILE *yyoutput = yyo;
914 if (yykind < YYNTOKENS)
915 YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
917 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
919 YY_IGNORE_MAYBE_UNINITIALIZED_END
928 yy_symbol_print (FILE *yyo,
929 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
931 YYFPRINTF (yyo,
"%s %s (",
932 yykind < YYNTOKENS ?
"token" :
"nterm", yysymbol_name (yykind));
934 yy_symbol_value_print (yyo, yykind, yyvaluep, scanner, errp, root);
935 YYFPRINTF (yyo,
")");
944 yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
946 YYFPRINTF (stderr,
"Stack now");
947 for (; yybottom <= yytop; yybottom++)
949 int yybot = *yybottom;
950 YYFPRINTF (stderr,
" %d", yybot);
952 YYFPRINTF (stderr,
"\n");
955 # define YY_STACK_PRINT(Bottom, Top) \
958 yy_stack_print ((Bottom), (Top)); \
967 yy_reduce_print (yy_state_t *yyssp,
YYSTYPE *yyvsp,
968 int yyrule,
void *scanner,
char **errp,
struct nl_list_head *root)
970 int yylno = yyrline[yyrule];
971 int yynrhs = yyr2[yyrule];
973 YYFPRINTF (stderr,
"Reducing stack by rule %d (line %d):\n",
976 for (yyi = 0; yyi < yynrhs; yyi++)
978 YYFPRINTF (stderr,
" $%d = ", yyi + 1);
979 yy_symbol_print (stderr,
980 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
981 &yyvsp[(yyi + 1) - (yynrhs)], scanner, errp, root);
982 YYFPRINTF (stderr,
"\n");
986 # define YY_REDUCE_PRINT(Rule) \
989 yy_reduce_print (yyssp, yyvsp, Rule, scanner, errp, root); \
996 # define YYDPRINTF(Args) ((void) 0)
997 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
998 # define YY_STACK_PRINT(Bottom, Top)
999 # define YY_REDUCE_PRINT(Rule)
1005 # define YYINITDEPTH 200
1016 # define YYMAXDEPTH 10000
1024 yysymbol_kind_t yytoken;
1035 yysymbol_kind_t yyarg[],
int yyargn)
1039 int yyn = yypact[+*yyctx->yyssp];
1040 if (!yypact_value_is_default (yyn))
1045 int yyxbegin = yyn < 0 ? -yyn : 0;
1047 int yychecklim = YYLAST - yyn + 1;
1048 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1050 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1051 if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
1052 && !yytable_value_is_error (yytable[yyx + yyn]))
1056 else if (yycount == yyargn)
1059 yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
1062 if (yyarg && yycount == 0 && 0 < yyargn)
1063 yyarg[0] = YYSYMBOL_YYEMPTY;
1071 # if defined __GLIBC__ && defined _STRING_H
1072 # define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
1076 yystrlen (
const char *yystr)
1079 for (yylen = 0; yystr[yylen]; yylen++)
1087 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1088 # define yystpcpy stpcpy
1093 yystpcpy (
char *yydest,
const char *yysrc)
1096 const char *yys = yysrc;
1098 while ((*yyd++ = *yys++) !=
'\0')
1115 yytnamerr (
char *yyres,
const char *yystr)
1119 YYPTRDIFF_T yyn = 0;
1120 char const *yyp = yystr;
1126 goto do_not_strip_quotes;
1130 goto do_not_strip_quotes;
1146 do_not_strip_quotes: ;
1150 return yystpcpy (yyres, yystr) - yyres;
1152 return yystrlen (yystr);
1159 yysymbol_kind_t yyarg[],
int yyargn)
1186 if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
1190 yyarg[yycount] = yyctx->yytoken;
1192 yyn = yypcontext_expected_tokens (yyctx,
1193 yyarg ? yyarg + 1 : yyarg, yyargn - 1);
1194 if (yyn == YYENOMEM)
1211 yysyntax_error (YYPTRDIFF_T *yymsg_alloc,
char **yymsg,
1214 enum { YYARGS_MAX = 5 };
1216 const char *yyformat = YY_NULLPTR;
1219 yysymbol_kind_t yyarg[YYARGS_MAX];
1221 YYPTRDIFF_T yysize = 0;
1224 int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
1225 if (yycount == YYENOMEM)
1230 #define YYCASE_(N, S) \
1235 YYCASE_(0, YY_(
"syntax error"));
1236 YYCASE_(1, YY_(
"syntax error, unexpected %s"));
1237 YYCASE_(2, YY_(
"syntax error, unexpected %s, expecting %s"));
1238 YYCASE_(3, YY_(
"syntax error, unexpected %s, expecting %s or %s"));
1239 YYCASE_(4, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s"));
1240 YYCASE_(5, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1246 yysize = yystrlen (yyformat) - 2 * yycount + 1;
1249 for (yyi = 0; yyi < yycount; ++yyi)
1252 = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
1253 if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
1260 if (*yymsg_alloc < yysize)
1262 *yymsg_alloc = 2 * yysize;
1263 if (! (yysize <= *yymsg_alloc
1264 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1265 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1275 while ((*yyp = *yyformat) !=
'\0')
1276 if (*yyp ==
'%' && yyformat[1] ==
's' && yyi < yycount)
1278 yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
1296 yydestruct (
const char *yymsg,
1297 yysymbol_kind_t yykind,
YYSTYPE *yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
1305 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
1307 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1311 #line 136 "lib/route/cls/ematch_syntax.y"
1312 { free(((*yyvaluep).s)); NL_DBG(2,
"string destructor\n"); }
1313 #line 1314 "lib/route/cls/ematch_syntax.c"
1316 case YYSYMBOL_QUOTED:
1317 #line 138 "lib/route/cls/ematch_syntax.y"
1318 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1319 #line 1320 "lib/route/cls/ematch_syntax.c"
1322 case YYSYMBOL_text_from:
1323 #line 137 "lib/route/cls/ematch_syntax.y"
1324 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1325 #line 1326 "lib/route/cls/ematch_syntax.c"
1328 case YYSYMBOL_text_to:
1329 #line 137 "lib/route/cls/ematch_syntax.y"
1330 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1331 #line 1332 "lib/route/cls/ematch_syntax.c"
1334 case YYSYMBOL_meta_value:
1335 #line 139 "lib/route/cls/ematch_syntax.y"
1336 { rtnl_meta_value_put(((*yyvaluep).mv)); NL_DBG(2,
"meta value destructor\n"); }
1337 #line 1338 "lib/route/cls/ematch_syntax.c"
1340 case YYSYMBOL_pattern:
1341 #line 138 "lib/route/cls/ematch_syntax.y"
1342 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1343 #line 1344 "lib/route/cls/ematch_syntax.c"
1346 case YYSYMBOL_pktloc:
1347 #line 137 "lib/route/cls/ematch_syntax.y"
1348 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1349 #line 1350 "lib/route/cls/ematch_syntax.c"
1355 YY_IGNORE_MAYBE_UNINITIALIZED_END
1368 yyparse (
void *scanner,
char **errp,
struct nl_list_head *root)
1377 YY_INITIAL_VALUE (
static YYSTYPE yyval_default;)
1378 YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
1383 yy_state_fast_t yystate = 0;
1385 int yyerrstatus = 0;
1391 YYPTRDIFF_T yystacksize = YYINITDEPTH;
1394 yy_state_t yyssa[YYINITDEPTH];
1395 yy_state_t *yyss = yyssa;
1396 yy_state_t *yyssp = yyss;
1407 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
1414 char *yymsg = yymsgbuf;
1415 YYPTRDIFF_T yymsg_alloc =
sizeof yymsgbuf;
1417 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1423 YYDPRINTF ((stderr,
"Starting parse\n"));
1442 YYDPRINTF ((stderr,
"Entering state %d\n", yystate));
1443 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
1444 YY_IGNORE_USELESS_CAST_BEGIN
1445 *yyssp = YY_CAST (yy_state_t, yystate);
1446 YY_IGNORE_USELESS_CAST_END
1447 YY_STACK_PRINT (yyss, yyssp);
1449 if (yyss + yystacksize - 1 <= yyssp)
1450 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
1451 goto yyexhaustedlab;
1455 YYPTRDIFF_T yysize = yyssp - yyss + 1;
1457 # if defined yyoverflow
1462 yy_state_t *yyss1 = yyss;
1469 yyoverflow (YY_(
"memory exhausted"),
1470 &yyss1, yysize * YYSIZEOF (*yyssp),
1471 &yyvs1, yysize * YYSIZEOF (*yyvsp),
1478 if (YYMAXDEPTH <= yystacksize)
1479 goto yyexhaustedlab;
1481 if (YYMAXDEPTH < yystacksize)
1482 yystacksize = YYMAXDEPTH;
1485 yy_state_t *yyss1 = yyss;
1488 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
1490 goto yyexhaustedlab;
1491 YYSTACK_RELOCATE (yyss_alloc, yyss);
1492 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1493 # undef YYSTACK_RELOCATE
1495 YYSTACK_FREE (yyss1);
1499 yyssp = yyss + yysize - 1;
1500 yyvsp = yyvs + yysize - 1;
1502 YY_IGNORE_USELESS_CAST_BEGIN
1503 YYDPRINTF ((stderr,
"Stack size increased to %ld\n",
1504 YY_CAST (
long, yystacksize)));
1505 YY_IGNORE_USELESS_CAST_END
1507 if (yyss + yystacksize - 1 <= yyssp)
1512 if (yystate == YYFINAL)
1526 yyn = yypact[yystate];
1527 if (yypact_value_is_default (yyn))
1533 if (yychar == YYEMPTY)
1535 YYDPRINTF ((stderr,
"Reading a token\n"));
1536 yychar = yylex (&yylval, scanner);
1539 if (yychar <= YYEOF)
1542 yytoken = YYSYMBOL_YYEOF;
1543 YYDPRINTF ((stderr,
"Now at end of input.\n"));
1545 else if (yychar == YYerror)
1552 yytoken = YYSYMBOL_YYerror;
1557 yytoken = YYTRANSLATE (yychar);
1558 YY_SYMBOL_PRINT (
"Next token is", yytoken, &yylval, &yylloc);
1564 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1569 if (yytable_value_is_error (yyn))
1581 YY_SYMBOL_PRINT (
"Shifting", yytoken, &yylval, &yylloc);
1583 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1585 YY_IGNORE_MAYBE_UNINITIALIZED_END
1596 yyn = yydefact[yystate];
1617 yyval = yyvsp[1-yylen];
1620 YY_REDUCE_PRINT (yyn);
1624 #line 148 "lib/route/cls/ematch_syntax.y"
1626 nl_list_add_tail(root, &(yyvsp[0].e)->e_list);
1628 #line 1629 "lib/route/cls/ematch_syntax.c"
1632 #line 155 "lib/route/cls/ematch_syntax.y"
1634 (yyval.e) = (yyvsp[0].e);
1636 #line 1637 "lib/route/cls/ematch_syntax.c"
1640 #line 159 "lib/route/cls/ematch_syntax.y"
1642 rtnl_ematch_set_flags((yyvsp[-2].e), (yyvsp[-1].i));
1645 nl_list_add_tail(&(yyvsp[-2].e)->e_list, &(yyvsp[0].e)->e_list);
1647 (yyval.e) = (yyvsp[-2].e);
1649 #line 1650 "lib/route/cls/ematch_syntax.c"
1653 #line 171 "lib/route/cls/ematch_syntax.y"
1655 rtnl_ematch_set_flags((yyvsp[0].e), TCF_EM_INVERT);
1656 (yyval.e) = (yyvsp[0].e);
1658 #line 1659 "lib/route/cls/ematch_syntax.c"
1662 #line 176 "lib/route/cls/ematch_syntax.y"
1664 (yyval.e) = (yyvsp[0].e);
1666 #line 1667 "lib/route/cls/ematch_syntax.c"
1670 #line 184 "lib/route/cls/ematch_syntax.y"
1672 struct rtnl_ematch *e;
1675 *errp = strdup(
"Unable to allocate ematch object");
1679 if (rtnl_ematch_set_kind(e, TCF_EM_CMP) < 0)
1682 rtnl_ematch_cmp_set(e, &(yyvsp[0].cmp));
1685 #line 1686 "lib/route/cls/ematch_syntax.c"
1689 #line 199 "lib/route/cls/ematch_syntax.y"
1691 struct rtnl_ematch *e;
1694 *errp = strdup(
"Unable to allocate ematch object");
1698 if (rtnl_ematch_set_kind(e, TCF_EM_NBYTE) < 0)
1701 rtnl_ematch_nbyte_set_offset(e, (yyvsp[-3].loc)->layer, (yyvsp[-3].loc)->offset);
1703 rtnl_ematch_nbyte_set_pattern(e, (uint8_t *) (yyvsp[-1].q).data, (yyvsp[-1].q).index);
1707 #line 1708 "lib/route/cls/ematch_syntax.c"
1711 #line 217 "lib/route/cls/ematch_syntax.y"
1713 struct rtnl_ematch *e;
1716 *errp = strdup(
"Unable to allocate ematch object");
1720 if (rtnl_ematch_set_kind(e, TCF_EM_TEXT) < 0)
1723 rtnl_ematch_text_set_algo(e, (yyvsp[-4].s));
1724 rtnl_ematch_text_set_pattern(e, (yyvsp[-3].q).data, (yyvsp[-3].q).index);
1726 if ((yyvsp[-2].loc)) {
1727 rtnl_ematch_text_set_from(e, (yyvsp[-2].loc)->layer, (yyvsp[-2].loc)->offset);
1731 if ((yyvsp[-1].loc)) {
1732 rtnl_ematch_text_set_to(e, (yyvsp[-1].loc)->layer, (yyvsp[-1].loc)->offset);
1738 #line 1739 "lib/route/cls/ematch_syntax.c"
1742 #line 244 "lib/route/cls/ematch_syntax.y"
1744 struct rtnl_ematch *e;
1747 *errp = strdup(
"Unable to allocate ematch object");
1751 if (rtnl_ematch_set_kind(e, TCF_EM_META) < 0)
1754 rtnl_ematch_meta_set_lvalue(e, (yyvsp[-3].mv));
1755 rtnl_ematch_meta_set_rvalue(e, (yyvsp[-1].mv));
1756 rtnl_ematch_meta_set_operand(e, (yyvsp[-2].i));
1760 #line 1761 "lib/route/cls/ematch_syntax.c"
1764 #line 263 "lib/route/cls/ematch_syntax.y"
1766 struct rtnl_ematch *e;
1769 *errp = strdup(
"Unable to allocate ematch object");
1773 if (rtnl_ematch_set_kind(e, TCF_EM_CONTAINER) < 0)
1777 nl_list_add_tail(&e->e_childs, &(yyvsp[-1].e)->e_list);
1781 #line 1782 "lib/route/cls/ematch_syntax.c"
1785 #line 291 "lib/route/cls/ematch_syntax.y"
1786 { (yyval.cmp) = (yyvsp[-1].cmp); }
1787 #line 1788 "lib/route/cls/ematch_syntax.c"
1791 #line 293 "lib/route/cls/ematch_syntax.y"
1792 { (yyval.cmp) = (yyvsp[0].cmp); }
1793 #line 1794 "lib/route/cls/ematch_syntax.c"
1797 #line 298 "lib/route/cls/ematch_syntax.y"
1799 if ((yyvsp[-2].loc)->align == TCF_EM_ALIGN_U16 ||
1800 (yyvsp[-2].loc)->align == TCF_EM_ALIGN_U32)
1801 (yyval.cmp).flags = TCF_EM_CMP_TRANS;
1803 memset(&(yyval.cmp), 0,
sizeof((yyval.cmp)));
1805 (yyval.cmp).mask = (yyvsp[-2].loc)->mask;
1806 (yyval.cmp).off = (yyvsp[-2].loc)->offset;
1807 (yyval.cmp).align = (yyvsp[-2].loc)->align;
1808 (yyval.cmp).layer = (yyvsp[-2].loc)->layer;
1809 (yyval.cmp).opnd = (yyvsp[-1].i);
1810 (yyval.cmp).val = (yyvsp[0].i);
1814 #line 1815 "lib/route/cls/ematch_syntax.c"
1818 #line 318 "lib/route/cls/ematch_syntax.y"
1819 { (yyval.loc) = NULL; }
1820 #line 1821 "lib/route/cls/ematch_syntax.c"
1824 #line 320 "lib/route/cls/ematch_syntax.y"
1825 { (yyval.loc) = (yyvsp[0].loc); }
1826 #line 1827 "lib/route/cls/ematch_syntax.c"
1830 #line 325 "lib/route/cls/ematch_syntax.y"
1831 { (yyval.loc) = NULL; }
1832 #line 1833 "lib/route/cls/ematch_syntax.c"
1836 #line 327 "lib/route/cls/ematch_syntax.y"
1837 { (yyval.loc) = (yyvsp[0].loc); }
1838 #line 1839 "lib/route/cls/ematch_syntax.c"
1842 #line 332 "lib/route/cls/ematch_syntax.y"
1843 { (yyval.mv) = rtnl_meta_value_alloc_var((yyvsp[0].q).data, (yyvsp[0].q).len); }
1844 #line 1845 "lib/route/cls/ematch_syntax.c"
1848 #line 334 "lib/route/cls/ematch_syntax.y"
1849 { (yyval.mv) = rtnl_meta_value_alloc_int((yyvsp[0].i)); }
1850 #line 1851 "lib/route/cls/ematch_syntax.c"
1854 #line 336 "lib/route/cls/ematch_syntax.y"
1855 { (yyval.mv) = META_ALLOC(META_INT, (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i64)); }
1856 #line 1857 "lib/route/cls/ematch_syntax.c"
1860 #line 338 "lib/route/cls/ematch_syntax.y"
1861 { (yyval.mv) = META_ALLOC(META_VAR, (yyvsp[-1].i), (yyvsp[0].i), 0); }
1862 #line 1863 "lib/route/cls/ematch_syntax.c"
1866 #line 342 "lib/route/cls/ematch_syntax.y"
1867 { (yyval.i) = META_ID(RANDOM); }
1868 #line 1869 "lib/route/cls/ematch_syntax.c"
1872 #line 343 "lib/route/cls/ematch_syntax.y"
1873 { (yyval.i) = META_ID(LOADAVG_0); }
1874 #line 1875 "lib/route/cls/ematch_syntax.c"
1878 #line 344 "lib/route/cls/ematch_syntax.y"
1879 { (yyval.i) = META_ID(LOADAVG_1); }
1880 #line 1881 "lib/route/cls/ematch_syntax.c"
1884 #line 345 "lib/route/cls/ematch_syntax.y"
1885 { (yyval.i) = META_ID(LOADAVG_2); }
1886 #line 1887 "lib/route/cls/ematch_syntax.c"
1890 #line 346 "lib/route/cls/ematch_syntax.y"
1891 { (yyval.i) = META_ID(DEV); }
1892 #line 1893 "lib/route/cls/ematch_syntax.c"
1896 #line 347 "lib/route/cls/ematch_syntax.y"
1897 { (yyval.i) = META_ID(PRIORITY); }
1898 #line 1899 "lib/route/cls/ematch_syntax.c"
1902 #line 348 "lib/route/cls/ematch_syntax.y"
1903 { (yyval.i) = META_ID(PROTOCOL); }
1904 #line 1905 "lib/route/cls/ematch_syntax.c"
1908 #line 349 "lib/route/cls/ematch_syntax.y"
1909 { (yyval.i) = META_ID(PKTTYPE); }
1910 #line 1911 "lib/route/cls/ematch_syntax.c"
1914 #line 350 "lib/route/cls/ematch_syntax.y"
1915 { (yyval.i) = META_ID(PKTLEN); }
1916 #line 1917 "lib/route/cls/ematch_syntax.c"
1920 #line 351 "lib/route/cls/ematch_syntax.y"
1921 { (yyval.i) = META_ID(DATALEN); }
1922 #line 1923 "lib/route/cls/ematch_syntax.c"
1926 #line 352 "lib/route/cls/ematch_syntax.y"
1927 { (yyval.i) = META_ID(MACLEN); }
1928 #line 1929 "lib/route/cls/ematch_syntax.c"
1932 #line 353 "lib/route/cls/ematch_syntax.y"
1933 { (yyval.i) = META_ID(NFMARK); }
1934 #line 1935 "lib/route/cls/ematch_syntax.c"
1938 #line 354 "lib/route/cls/ematch_syntax.y"
1939 { (yyval.i) = META_ID(TCINDEX); }
1940 #line 1941 "lib/route/cls/ematch_syntax.c"
1944 #line 355 "lib/route/cls/ematch_syntax.y"
1945 { (yyval.i) = META_ID(RTCLASSID); }
1946 #line 1947 "lib/route/cls/ematch_syntax.c"
1950 #line 356 "lib/route/cls/ematch_syntax.y"
1951 { (yyval.i) = META_ID(RTIIF); }
1952 #line 1953 "lib/route/cls/ematch_syntax.c"
1956 #line 357 "lib/route/cls/ematch_syntax.y"
1957 { (yyval.i) = META_ID(SK_FAMILY); }
1958 #line 1959 "lib/route/cls/ematch_syntax.c"
1962 #line 358 "lib/route/cls/ematch_syntax.y"
1963 { (yyval.i) = META_ID(SK_STATE); }
1964 #line 1965 "lib/route/cls/ematch_syntax.c"
1968 #line 359 "lib/route/cls/ematch_syntax.y"
1969 { (yyval.i) = META_ID(SK_REUSE); }
1970 #line 1971 "lib/route/cls/ematch_syntax.c"
1974 #line 360 "lib/route/cls/ematch_syntax.y"
1975 { (yyval.i) = META_ID(SK_REFCNT); }
1976 #line 1977 "lib/route/cls/ematch_syntax.c"
1980 #line 361 "lib/route/cls/ematch_syntax.y"
1981 { (yyval.i) = META_ID(SK_RCVBUF); }
1982 #line 1983 "lib/route/cls/ematch_syntax.c"
1986 #line 362 "lib/route/cls/ematch_syntax.y"
1987 { (yyval.i) = META_ID(SK_SNDBUF); }
1988 #line 1989 "lib/route/cls/ematch_syntax.c"
1992 #line 363 "lib/route/cls/ematch_syntax.y"
1993 { (yyval.i) = META_ID(SK_SHUTDOWN); }
1994 #line 1995 "lib/route/cls/ematch_syntax.c"
1998 #line 364 "lib/route/cls/ematch_syntax.y"
1999 { (yyval.i) = META_ID(SK_PROTO); }
2000 #line 2001 "lib/route/cls/ematch_syntax.c"
2004 #line 365 "lib/route/cls/ematch_syntax.y"
2005 { (yyval.i) = META_ID(SK_TYPE); }
2006 #line 2007 "lib/route/cls/ematch_syntax.c"
2010 #line 366 "lib/route/cls/ematch_syntax.y"
2011 { (yyval.i) = META_ID(SK_RMEM_ALLOC); }
2012 #line 2013 "lib/route/cls/ematch_syntax.c"
2016 #line 367 "lib/route/cls/ematch_syntax.y"
2017 { (yyval.i) = META_ID(SK_WMEM_ALLOC); }
2018 #line 2019 "lib/route/cls/ematch_syntax.c"
2022 #line 368 "lib/route/cls/ematch_syntax.y"
2023 { (yyval.i) = META_ID(SK_WMEM_QUEUED); }
2024 #line 2025 "lib/route/cls/ematch_syntax.c"
2028 #line 369 "lib/route/cls/ematch_syntax.y"
2029 { (yyval.i) = META_ID(SK_RCV_QLEN); }
2030 #line 2031 "lib/route/cls/ematch_syntax.c"
2034 #line 370 "lib/route/cls/ematch_syntax.y"
2035 { (yyval.i) = META_ID(SK_SND_QLEN); }
2036 #line 2037 "lib/route/cls/ematch_syntax.c"
2040 #line 371 "lib/route/cls/ematch_syntax.y"
2041 { (yyval.i) = META_ID(SK_ERR_QLEN); }
2042 #line 2043 "lib/route/cls/ematch_syntax.c"
2046 #line 372 "lib/route/cls/ematch_syntax.y"
2047 { (yyval.i) = META_ID(SK_FORWARD_ALLOCS); }
2048 #line 2049 "lib/route/cls/ematch_syntax.c"
2052 #line 373 "lib/route/cls/ematch_syntax.y"
2053 { (yyval.i) = META_ID(SK_ALLOCS); }
2054 #line 2055 "lib/route/cls/ematch_syntax.c"
2058 #line 374 "lib/route/cls/ematch_syntax.y"
2059 { (yyval.i) = __TCF_META_ID_SK_ROUTE_CAPS; }
2060 #line 2061 "lib/route/cls/ematch_syntax.c"
2064 #line 375 "lib/route/cls/ematch_syntax.y"
2065 { (yyval.i) = META_ID(SK_HASH); }
2066 #line 2067 "lib/route/cls/ematch_syntax.c"
2070 #line 376 "lib/route/cls/ematch_syntax.y"
2071 { (yyval.i) = META_ID(SK_LINGERTIME); }
2072 #line 2073 "lib/route/cls/ematch_syntax.c"
2076 #line 377 "lib/route/cls/ematch_syntax.y"
2077 { (yyval.i) = META_ID(SK_ACK_BACKLOG); }
2078 #line 2079 "lib/route/cls/ematch_syntax.c"
2082 #line 378 "lib/route/cls/ematch_syntax.y"
2083 { (yyval.i) = META_ID(SK_MAX_ACK_BACKLOG); }
2084 #line 2085 "lib/route/cls/ematch_syntax.c"
2088 #line 379 "lib/route/cls/ematch_syntax.y"
2089 { (yyval.i) = META_ID(SK_PRIO); }
2090 #line 2091 "lib/route/cls/ematch_syntax.c"
2094 #line 380 "lib/route/cls/ematch_syntax.y"
2095 { (yyval.i) = META_ID(SK_RCVLOWAT); }
2096 #line 2097 "lib/route/cls/ematch_syntax.c"
2100 #line 381 "lib/route/cls/ematch_syntax.y"
2101 { (yyval.i) = META_ID(SK_RCVTIMEO); }
2102 #line 2103 "lib/route/cls/ematch_syntax.c"
2106 #line 382 "lib/route/cls/ematch_syntax.y"
2107 { (yyval.i) = META_ID(SK_SNDTIMEO); }
2108 #line 2109 "lib/route/cls/ematch_syntax.c"
2112 #line 383 "lib/route/cls/ematch_syntax.y"
2113 { (yyval.i) = META_ID(SK_SENDMSG_OFF); }
2114 #line 2115 "lib/route/cls/ematch_syntax.c"
2118 #line 384 "lib/route/cls/ematch_syntax.y"
2119 { (yyval.i) = META_ID(SK_WRITE_PENDING); }
2120 #line 2121 "lib/route/cls/ematch_syntax.c"
2124 #line 385 "lib/route/cls/ematch_syntax.y"
2125 { (yyval.i) = META_ID(VLAN_TAG); }
2126 #line 2127 "lib/route/cls/ematch_syntax.c"
2130 #line 386 "lib/route/cls/ematch_syntax.y"
2131 { (yyval.i) = META_ID(RXHASH); }
2132 #line 2133 "lib/route/cls/ematch_syntax.c"
2136 #line 390 "lib/route/cls/ematch_syntax.y"
2137 { (yyval.i) = META_ID(DEV); }
2138 #line 2139 "lib/route/cls/ematch_syntax.c"
2142 #line 391 "lib/route/cls/ematch_syntax.y"
2143 { (yyval.i) = META_ID(SK_BOUND_IF); }
2144 #line 2145 "lib/route/cls/ematch_syntax.c"
2148 #line 399 "lib/route/cls/ematch_syntax.y"
2150 (yyval.q) = (yyvsp[0].q);
2152 #line 2153 "lib/route/cls/ematch_syntax.c"
2156 #line 403 "lib/route/cls/ematch_syntax.y"
2158 struct nl_addr *addr;
2165 if (!((yyval.q).data = calloc(1, (yyval.q).len))) {
2173 if (asprintf(errp,
"invalid pattern \"%s\"", (yyvsp[0].s)) == -1)
2178 #line 2179 "lib/route/cls/ematch_syntax.c"
2182 #line 432 "lib/route/cls/ematch_syntax.y"
2187 if (asprintf(errp,
"Packet location \"%s\" not found", (yyvsp[0].s)) == -1)
2194 #line 2195 "lib/route/cls/ematch_syntax.c"
2198 #line 445 "lib/route/cls/ematch_syntax.y"
2202 if ((yyvsp[0].i64) && (!(yyvsp[-4].i) || (yyvsp[-4].i) > TCF_EM_ALIGN_U32)) {
2203 *errp = strdup(
"mask only allowed for alignments u8|u16|u32");
2208 *errp = strdup(
"Unable to allocate packet location object");
2212 loc->name = strdup(
"<USER-DEFINED>");
2213 loc->align = (yyvsp[-4].i);
2214 loc->layer = (yyvsp[-3].i);
2215 loc->offset = (yyvsp[-1].i);
2216 loc->mask = (yyvsp[0].i64);
2220 #line 2221 "lib/route/cls/ematch_syntax.c"
2224 #line 470 "lib/route/cls/ematch_syntax.y"
2226 #line 2227 "lib/route/cls/ematch_syntax.c"
2230 #line 472 "lib/route/cls/ematch_syntax.y"
2231 { (yyval.i) = (yyvsp[-1].i); }
2232 #line 2233 "lib/route/cls/ematch_syntax.c"
2236 #line 474 "lib/route/cls/ematch_syntax.y"
2237 { (yyval.i) = (yyvsp[-1].i); }
2238 #line 2239 "lib/route/cls/ematch_syntax.c"
2242 #line 479 "lib/route/cls/ematch_syntax.y"
2243 { (yyval.i64) = 0; }
2244 #line 2245 "lib/route/cls/ematch_syntax.c"
2248 #line 481 "lib/route/cls/ematch_syntax.y"
2249 { (yyval.i64) = (yyvsp[0].i); }
2250 #line 2251 "lib/route/cls/ematch_syntax.c"
2254 #line 486 "lib/route/cls/ematch_syntax.y"
2256 #line 2257 "lib/route/cls/ematch_syntax.c"
2260 #line 488 "lib/route/cls/ematch_syntax.y"
2261 { (yyval.i) = (yyvsp[0].i); }
2262 #line 2263 "lib/route/cls/ematch_syntax.c"
2266 #line 493 "lib/route/cls/ematch_syntax.y"
2267 { (yyval.i) = TCF_EM_OPND_EQ; }
2268 #line 2269 "lib/route/cls/ematch_syntax.c"
2272 #line 495 "lib/route/cls/ematch_syntax.y"
2273 { (yyval.i) = TCF_EM_OPND_GT; }
2274 #line 2275 "lib/route/cls/ematch_syntax.c"
2278 #line 497 "lib/route/cls/ematch_syntax.y"
2279 { (yyval.i) = TCF_EM_OPND_LT; }
2280 #line 2281 "lib/route/cls/ematch_syntax.c"
2284 #line 2285 "lib/route/cls/ematch_syntax.c"
2299 YY_SYMBOL_PRINT (
"-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
2310 const int yylhs = yyr1[yyn] - YYNTOKENS;
2311 const int yyi = yypgoto[yylhs] + *yyssp;
2312 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
2314 : yydefgoto[yylhs]);
2326 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
2334 char const *yymsgp = YY_(
"syntax error");
2335 int yysyntax_error_status;
2336 yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2337 if (yysyntax_error_status == 0)
2339 else if (yysyntax_error_status == -1)
2341 if (yymsg != yymsgbuf)
2342 YYSTACK_FREE (yymsg);
2343 yymsg = YY_CAST (
char *,
2344 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
2347 yysyntax_error_status
2348 = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2354 yymsg_alloc =
sizeof yymsgbuf;
2355 yysyntax_error_status = YYENOMEM;
2358 yyerror (scanner, errp, root, yymsgp);
2359 if (yysyntax_error_status == YYENOMEM)
2360 goto yyexhaustedlab;
2364 if (yyerrstatus == 3)
2369 if (yychar <= YYEOF)
2372 if (yychar == YYEOF)
2377 yydestruct (
"Error: discarding",
2378 yytoken, &yylval, scanner, errp, root);
2401 YY_STACK_PRINT (yyss, yyssp);
2415 yyn = yypact[yystate];
2416 if (!yypact_value_is_default (yyn))
2418 yyn += YYSYMBOL_YYerror;
2419 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
2432 yydestruct (
"Error: popping",
2433 YY_ACCESSING_SYMBOL (yystate), yyvsp, scanner, errp, root);
2436 YY_STACK_PRINT (yyss, yyssp);
2439 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2441 YY_IGNORE_MAYBE_UNINITIALIZED_END
2445 YY_SYMBOL_PRINT (
"Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
2472 yyerror (scanner, errp, root, YY_(
"memory exhausted"));
2482 if (yychar != YYEMPTY)
2486 yytoken = YYTRANSLATE (yychar);
2487 yydestruct (
"Cleanup: discarding lookahead",
2488 yytoken, &yylval, scanner, errp, root);
2493 YY_STACK_PRINT (yyss, yyssp);
2494 while (yyssp != yyss)
2496 yydestruct (
"Cleanup: popping",
2497 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, scanner, errp, root);
2502 YYSTACK_FREE (yyss);
2504 if (yymsg != yymsgbuf)
2505 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.