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 "nl-default.h"
79#include <linux/tc_ematch/tc_em_meta.h>
80#include <linux/tc_ematch/tc_em_cmp.h>
82#include <netlink/netlink.h>
83#include <netlink/utils.h>
84#include <netlink/route/pktloc.h>
85#include <netlink/route/cls/ematch.h>
86#include <netlink/route/cls/ematch/cmp.h>
87#include <netlink/route/cls/ematch/nbyte.h>
88#include <netlink/route/cls/ematch/text.h>
89#include <netlink/route/cls/ematch/meta.h>
93#define META_ALLOC rtnl_meta_value_alloc_id
94#define META_ID(name) TCF_META_ID_##name
95#define META_INT TCF_META_TYPE_INT
96#define META_VAR TCF_META_TYPE_VAR
98#line 99 "lib/route/cls/ematch_syntax.c"
102# define YY_CAST(Type, Val) static_cast<Type> (Val)
103# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
105# define YY_CAST(Type, Val) ((Type) (Val))
106# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
110# if defined __cplusplus
111# if 201103L <= __cplusplus
112# define YY_NULLPTR nullptr
117# define YY_NULLPTR ((void*)0)
121#include "ematch_syntax.h"
125 YYSYMBOL_YYEMPTY = -2,
127 YYSYMBOL_YYerror = 1,
128 YYSYMBOL_YYUNDEF = 2,
132 YYSYMBOL_OPERAND = 6,
136 YYSYMBOL_KW_OPEN = 10,
137 YYSYMBOL_KW_CLOSE = 11,
138 YYSYMBOL_KW_PLUS = 12,
139 YYSYMBOL_KW_MASK = 13,
140 YYSYMBOL_KW_SHIFT = 14,
142 YYSYMBOL_EMATCH_CMP = 16,
143 YYSYMBOL_EMATCH_NBYTE = 17,
144 YYSYMBOL_EMATCH_TEXT = 18,
145 YYSYMBOL_EMATCH_META = 19,
149 YYSYMBOL_KW_FROM = 23,
151 YYSYMBOL_META_RANDOM = 25,
152 YYSYMBOL_META_LOADAVG_0 = 26,
153 YYSYMBOL_META_LOADAVG_1 = 27,
154 YYSYMBOL_META_LOADAVG_2 = 28,
155 YYSYMBOL_META_DEV = 29,
156 YYSYMBOL_META_PRIO = 30,
157 YYSYMBOL_META_PROTO = 31,
158 YYSYMBOL_META_PKTTYPE = 32,
159 YYSYMBOL_META_PKTLEN = 33,
160 YYSYMBOL_META_DATALEN = 34,
161 YYSYMBOL_META_MACLEN = 35,
162 YYSYMBOL_META_MARK = 36,
163 YYSYMBOL_META_TCINDEX = 37,
164 YYSYMBOL_META_RTCLASSID = 38,
165 YYSYMBOL_META_RTIIF = 39,
166 YYSYMBOL_META_SK_FAMILY = 40,
167 YYSYMBOL_META_SK_STATE = 41,
168 YYSYMBOL_META_SK_REUSE = 42,
169 YYSYMBOL_META_SK_REFCNT = 43,
170 YYSYMBOL_META_SK_RCVBUF = 44,
171 YYSYMBOL_META_SK_SNDBUF = 45,
172 YYSYMBOL_META_SK_SHUTDOWN = 46,
173 YYSYMBOL_META_SK_PROTO = 47,
174 YYSYMBOL_META_SK_TYPE = 48,
175 YYSYMBOL_META_SK_RMEM_ALLOC = 49,
176 YYSYMBOL_META_SK_WMEM_ALLOC = 50,
177 YYSYMBOL_META_SK_WMEM_QUEUED = 51,
178 YYSYMBOL_META_SK_RCV_QLEN = 52,
179 YYSYMBOL_META_SK_SND_QLEN = 53,
180 YYSYMBOL_META_SK_ERR_QLEN = 54,
181 YYSYMBOL_META_SK_FORWARD_ALLOCS = 55,
182 YYSYMBOL_META_SK_ALLOCS = 56,
183 YYSYMBOL_META_SK_ROUTE_CAPS = 57,
184 YYSYMBOL_META_SK_HASH = 58,
185 YYSYMBOL_META_SK_LINGERTIME = 59,
186 YYSYMBOL_META_SK_ACK_BACKLOG = 60,
187 YYSYMBOL_META_SK_MAX_ACK_BACKLOG = 61,
188 YYSYMBOL_META_SK_PRIO = 62,
189 YYSYMBOL_META_SK_RCVLOWAT = 63,
190 YYSYMBOL_META_SK_RCVTIMEO = 64,
191 YYSYMBOL_META_SK_SNDTIMEO = 65,
192 YYSYMBOL_META_SK_SENDMSG_OFF = 66,
193 YYSYMBOL_META_SK_WRITE_PENDING = 67,
194 YYSYMBOL_META_VLAN = 68,
195 YYSYMBOL_META_RXHASH = 69,
196 YYSYMBOL_META_DEVNAME = 70,
197 YYSYMBOL_META_SK_BOUND_IF = 71,
199 YYSYMBOL_QUOTED = 73,
200 YYSYMBOL_YYACCEPT = 74,
204 YYSYMBOL_ematch = 78,
205 YYSYMBOL_cmp_match = 79,
206 YYSYMBOL_cmp_expr = 80,
207 YYSYMBOL_text_from = 81,
208 YYSYMBOL_text_to = 82,
209 YYSYMBOL_meta_value = 83,
210 YYSYMBOL_meta_int_id = 84,
211 YYSYMBOL_meta_var_id = 85,
212 YYSYMBOL_pattern = 86,
213 YYSYMBOL_pktloc = 87,
217 YYSYMBOL_operand = 91
219typedef enum yysymbol_kind_t yysymbol_kind_t;
223#line 59 "lib/route/cls/ematch_syntax.y"
225extern int ematch_lex(
YYSTYPE *,
void *);
227#define ematch_error yyerror
228static void yyerror(
void *scanner,
char **errp,
struct nl_list_head *root,
const char *msg)
236#line 237 "lib/route/cls/ematch_syntax.c"
247#ifndef __PTRDIFF_MAX__
249# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
260#ifdef __INT_LEAST8_MAX__
261typedef __INT_LEAST8_TYPE__ yytype_int8;
262#elif defined YY_STDINT_H
263typedef int_least8_t yytype_int8;
265typedef signed char yytype_int8;
268#ifdef __INT_LEAST16_MAX__
269typedef __INT_LEAST16_TYPE__ yytype_int16;
270#elif defined YY_STDINT_H
271typedef int_least16_t yytype_int16;
273typedef short yytype_int16;
282# undef UINT_LEAST8_MAX
283# undef UINT_LEAST16_MAX
284# define UINT_LEAST8_MAX 255
285# define UINT_LEAST16_MAX 65535
288#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
289typedef __UINT_LEAST8_TYPE__ yytype_uint8;
290#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
291 && UINT_LEAST8_MAX <= INT_MAX)
292typedef uint_least8_t yytype_uint8;
293#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
294typedef unsigned char yytype_uint8;
296typedef short yytype_uint8;
299#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
300typedef __UINT_LEAST16_TYPE__ yytype_uint16;
301#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
302 && UINT_LEAST16_MAX <= INT_MAX)
303typedef uint_least16_t yytype_uint16;
304#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
305typedef unsigned short yytype_uint16;
307typedef int yytype_uint16;
311# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
312# define YYPTRDIFF_T __PTRDIFF_TYPE__
313# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
314# elif defined PTRDIFF_MAX
318# define YYPTRDIFF_T ptrdiff_t
319# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
321# define YYPTRDIFF_T long
322# define YYPTRDIFF_MAXIMUM LONG_MAX
328# define YYSIZE_T __SIZE_TYPE__
330# define YYSIZE_T size_t
331# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
333# define YYSIZE_T size_t
335# define YYSIZE_T unsigned
339#define YYSIZE_MAXIMUM \
340 YY_CAST (YYPTRDIFF_T, \
341 (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
342 ? YYPTRDIFF_MAXIMUM \
343 : YY_CAST (YYSIZE_T, -1)))
345#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
349typedef yytype_int8 yy_state_t;
352typedef int yy_state_fast_t;
355# if defined YYENABLE_NLS && YYENABLE_NLS
358# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
362# define YY_(Msgid) Msgid
367#ifndef YY_ATTRIBUTE_PURE
368# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
369# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
371# define YY_ATTRIBUTE_PURE
375#ifndef YY_ATTRIBUTE_UNUSED
376# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
377# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
379# define YY_ATTRIBUTE_UNUSED
384#if ! defined lint || defined __GNUC__
385# define YY_USE(E) ((void) (E))
391#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
392# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
393# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
394 _Pragma ("GCC diagnostic push") \
395 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
397# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
398 _Pragma ("GCC diagnostic push") \
399 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
400 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
402# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
403 _Pragma ("GCC diagnostic pop")
405# define YY_INITIAL_VALUE(Value) Value
407#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
408# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
409# define YY_IGNORE_MAYBE_UNINITIALIZED_END
411#ifndef YY_INITIAL_VALUE
412# define YY_INITIAL_VALUE(Value)
415#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
416# define YY_IGNORE_USELESS_CAST_BEGIN \
417 _Pragma ("GCC diagnostic push") \
418 _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
419# define YY_IGNORE_USELESS_CAST_END \
420 _Pragma ("GCC diagnostic pop")
422#ifndef YY_IGNORE_USELESS_CAST_BEGIN
423# define YY_IGNORE_USELESS_CAST_BEGIN
424# define YY_IGNORE_USELESS_CAST_END
428#define YY_ASSERT(E) ((void) (0 && (E)))
434# ifdef YYSTACK_USE_ALLOCA
435# if YYSTACK_USE_ALLOCA
437# define YYSTACK_ALLOC __builtin_alloca
438# elif defined __BUILTIN_VA_ARG_INCR
441# define YYSTACK_ALLOC __alloca
442# elif defined _MSC_VER
444# define alloca _alloca
446# define YYSTACK_ALLOC alloca
447# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
451# define EXIT_SUCCESS 0
460# define YYSTACK_FREE(Ptr) do { ; } while (0)
461# ifndef YYSTACK_ALLOC_MAXIMUM
466# define YYSTACK_ALLOC_MAXIMUM 4032
469# define YYSTACK_ALLOC YYMALLOC
470# define YYSTACK_FREE YYFREE
471# ifndef YYSTACK_ALLOC_MAXIMUM
472# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
474# if (defined __cplusplus && ! defined EXIT_SUCCESS \
475 && ! ((defined YYMALLOC || defined malloc) \
476 && (defined YYFREE || defined free)))
479# define EXIT_SUCCESS 0
483# define YYMALLOC malloc
484# if ! defined malloc && ! defined EXIT_SUCCESS
485void *malloc (YYSIZE_T);
490# if ! defined free && ! defined EXIT_SUCCESS
497#if (! defined yyoverflow \
498 && (! defined __cplusplus \
499 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
504 yy_state_t yyss_alloc;
509# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
513# define YYSTACK_BYTES(N) \
514 ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
515 + YYSTACK_GAP_MAXIMUM)
517# define YYCOPY_NEEDED 1
524# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
527 YYPTRDIFF_T yynewbytes; \
528 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
529 Stack = &yyptr->Stack_alloc; \
530 yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
531 yyptr += yynewbytes / YYSIZEOF (*yyptr); \
537#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
541# if defined __GNUC__ && 1 < __GNUC__
542# define YYCOPY(Dst, Src, Count) \
543 __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
545# define YYCOPY(Dst, Src, Count) \
549 for (yyi = 0; yyi < (Count); yyi++) \
550 (Dst)[yyi] = (Src)[yyi]; \
577#define YYTRANSLATE(YYX) \
578 (0 <= (YYX) && (YYX) <= YYMAXUTOK \
579 ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
584static const yytype_int8 yytranslate[] =
586 0, 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, 2, 2, 2, 2,
611 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
612 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
613 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
614 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
615 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
616 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
617 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
618 65, 66, 67, 68, 69, 70, 71, 72, 73
623static const yytype_int16 yyrline[] =
625 0, 158, 158, 160, 167, 171, 183, 188, 196, 211,
626 229, 256, 275, 303, 305, 310, 331, 332, 338, 339,
627 344, 346, 348, 350, 355, 356, 357, 358, 359, 360,
628 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
629 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
630 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
631 391, 392, 393, 394, 395, 396, 397, 398, 399, 403,
632 404, 411, 415, 444, 457, 483, 484, 486, 492, 493,
633 499, 500, 505, 507, 509
638#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
643static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
647static const char *
const yytname[] =
649 "\"end of file\"",
"error",
"\"invalid token\"",
"ERROR",
"LOGIC",
650 "NOT",
"OPERAND",
"NUMBER",
"ALIGN",
"LAYER",
"\"(\"",
"\")\"",
"\"+\"",
651 "\"mask\"",
"\">>\"",
"\"at\"",
"\"cmp\"",
"\"pattern\"",
"\"text\"",
652 "\"meta\"",
"\"=\"",
"\">\"",
"\"<\"",
"\"from\"",
"\"to\"",
653 "\"random\"",
"\"loadavg_0\"",
"\"loadavg_1\"",
"\"loadavg_2\"",
654 "\"dev\"",
"\"prio\"",
"\"proto\"",
"\"pkttype\"",
"\"pktlen\"",
655 "\"datalen\"",
"\"maclen\"",
"\"mark\"",
"\"tcindex\"",
"\"rtclassid\"",
656 "\"rtiif\"",
"\"sk_family\"",
"\"sk_state\"",
"\"sk_reuse\"",
657 "\"sk_refcnt\"",
"\"sk_rcvbuf\"",
"\"sk_sndbuf\"",
"\"sk_shutdown\"",
658 "\"sk_proto\"",
"\"sk_type\"",
"\"sk_rmem_alloc\"",
"\"sk_wmem_alloc\"",
659 "\"sk_wmem_queued\"",
"\"sk_rcv_qlen\"",
"\"sk_snd_qlen\"",
660 "\"sk_err_qlen\"",
"\"sk_forward_allocs\"",
"\"sk_allocs\"",
661 "\"sk_route_caps\"",
"\"sk_hash\"",
"\"sk_lingertime\"",
662 "\"sk_ack_backlog\"",
"\"sk_max_ack_backlog\"",
"\"sk_prio\"",
663 "\"sk_rcvlowat\"",
"\"sk_rcvtimeo\"",
"\"sk_sndtimeo\"",
664 "\"sk_sendmsg_off\"",
"\"sk_write_pending\"",
"\"vlan\"",
"\"rxhash\"",
665 "\"devname\"",
"\"sk_bound_if\"",
"STR",
"QUOTED",
"$accept",
"input",
666 "expr",
"match",
"ematch",
"cmp_match",
"cmp_expr",
"text_from",
667 "text_to",
"meta_value",
"meta_int_id",
"meta_var_id",
"pattern",
668 "pktloc",
"align",
"mask",
"shift",
"operand", YY_NULLPTR
672yysymbol_name (yysymbol_kind_t yysymbol)
674 return yytname[yysymbol];
678#define YYPACT_NINF (-63)
680#define yypact_value_is_default(Yyn) \
681 ((Yyn) == YYPACT_NINF)
683#define YYTABLE_NINF (-76)
685#define yytable_value_is_error(Yyn) \
690static const yytype_int8 yypact[] =
692 -4, 15, -13, -8, 11, 10, 14, 25, 29, -63,
693 26, -63, 37, -63, -63, -63, 16, 33, -63, -63,
694 -63, 32, 1, 1, -28, 65, -63, 11, -63, -63,
695 -63, 38, 34, -63, 36, 28, -24, -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, -63, -63, -63, -63,
700 -63, -63, -63, -63, -63, -63, 16, 39, 39, -63,
701 -63, 43, -63, -62, 31, 65, 44, 42, -63, 42,
702 -63, -63, 41, 1, 35, 45, -63, 50, -63, -63,
703 -63, -63, 1, 47, -63, -63, -63, -63
709static const yytype_int8 yydefact[] =
711 2, 75, 0, 0, 75, 0, 0, 0, 0, 73,
712 0, 3, 4, 7, 8, 14, 0, 0, 6, 77,
713 76, 0, 75, 75, 0, 0, 1, 75, 82, 83,
714 84, 0, 0, 12, 0, 0, 0, 21, 24, 25,
715 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
716 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
717 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
718 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
719 66, 67, 68, 69, 70, 20, 0, 80, 80, 5,
720 15, 0, 13, 0, 16, 0, 0, 78, 23, 78,
721 72, 71, 0, 75, 18, 0, 81, 0, 22, 74,
722 9, 17, 75, 0, 11, 79, 19, 10
726static const yytype_int8 yypgoto[] =
728 -63, -63, 13, -63, 59, -63, 40, -63, -63, -34,
729 -63, -63, -63, -23, -63, -36, -22, -21
733static const yytype_int8 yydefgoto[] =
735 0, 10, 11, 12, 13, 14, 15, 104, 113, 86,
736 87, 88, 102, 16, 17, 108, 97, 31
742static const yytype_int8 yytable[] =
744 35, 1, 19, 2, 3, -75, 4, 20, 2, 3,
745 100, 101, 5, 6, 7, 8, 1, 21, 2, 3,
746 22, 4, 2, 3, 23, 4, 26, 5, 6, 7,
747 8, 5, 6, 7, 8, 24, 28, 29, 30, 25,
748 89, 27, 32, 33, 36, 90, 91, 92, 93, 94,
749 99, 106, 110, 96, 103, 107, 114, 115, 117, 112,
750 18, 105, 34, 109, 0, 95, 98, 0, 9, 0,
751 0, 0, 37, 9, 0, 0, 0, 0, 0, 0,
752 111, 0, 0, 9, 0, 0, 0, 9, 0, 116,
753 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
754 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
755 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
756 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
757 78, 79, 80, 81, 82, 83, 84, 0, 85
760static const yytype_int8 yycheck[] =
762 23, 5, 15, 7, 8, 9, 10, 15, 7, 8,
763 72, 73, 16, 17, 18, 19, 5, 4, 7, 8,
764 10, 10, 7, 8, 10, 10, 0, 16, 17, 18,
765 19, 16, 17, 18, 19, 10, 20, 21, 22, 10,
766 27, 4, 9, 11, 72, 7, 12, 11, 20, 73,
767 7, 7, 11, 14, 23, 13, 11, 7, 11, 24,
768 1, 95, 22, 99, -1, 86, 88, -1, 72, -1,
769 -1, -1, 7, 72, -1, -1, -1, -1, -1, -1,
770 103, -1, -1, 72, -1, -1, -1, 72, -1, 112,
771 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
772 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
773 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
774 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
775 65, 66, 67, 68, 69, 70, 71, -1, 73
780static const yytype_int8 yystos[] =
782 0, 5, 7, 8, 10, 16, 17, 18, 19, 72,
783 75, 76, 77, 78, 79, 80, 87, 88, 78, 15,
784 15, 76, 10, 10, 10, 10, 0, 4, 20, 21,
785 22, 91, 9, 11, 80, 87, 72, 7, 25, 26,
786 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
787 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
788 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
789 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
790 67, 68, 69, 70, 71, 73, 83, 84, 85, 76,
791 7, 12, 11, 20, 73, 91, 14, 90, 90, 7,
792 72, 73, 86, 23, 81, 83, 7, 13, 89, 89,
793 11, 87, 24, 82, 11, 7, 87, 11
797static const yytype_int8 yyr1[] =
799 0, 74, 75, 75, 76, 76, 77, 77, 78, 78,
800 78, 78, 78, 79, 79, 80, 81, 81, 82, 82,
801 83, 83, 83, 83, 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, 84,
805 84, 84, 84, 84, 84, 84, 84, 84, 84, 85,
806 85, 86, 86, 87, 87, 88, 88, 88, 89, 89,
811static const yytype_int8 yyr2[] =
813 0, 2, 0, 1, 1, 3, 2, 1, 1, 6,
814 7, 6, 3, 4, 1, 3, 0, 2, 0, 2,
815 1, 1, 3, 2, 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, 1, 1, 1, 1, 1, 1,
820 1, 1, 1, 1, 5, 0, 2, 2, 0, 2,
825enum { YYENOMEM = -2 };
827#define yyerrok (yyerrstatus = 0)
828#define yyclearin (yychar = YYEMPTY)
830#define YYACCEPT goto yyacceptlab
831#define YYABORT goto yyabortlab
832#define YYERROR goto yyerrorlab
833#define YYNOMEM goto yyexhaustedlab
836#define YYRECOVERING() (!!yyerrstatus)
838#define YYBACKUP(Token, Value) \
840 if (yychar == YYEMPTY) \
844 YYPOPSTACK (yylen); \
850 yyerror (scanner, errp, root, YY_("syntax error: cannot back up")); \
857#define YYERRCODE YYUNDEF
865# define YYFPRINTF fprintf
868# define YYDPRINTF(Args) \
877# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
881 YYFPRINTF (stderr, "%s ", Title); \
882 yy_symbol_print (stderr, \
883 Kind, Value, scanner, errp, root); \
884 YYFPRINTF (stderr, "\n"); \
894yy_symbol_value_print (FILE *yyo,
895 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
897 FILE *yyoutput = yyo;
904 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
906 YY_IGNORE_MAYBE_UNINITIALIZED_END
915yy_symbol_print (FILE *yyo,
916 yysymbol_kind_t yykind,
YYSTYPE const *
const yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
918 YYFPRINTF (yyo,
"%s %s (",
919 yykind < YYNTOKENS ?
"token" :
"nterm", yysymbol_name (yykind));
921 yy_symbol_value_print (yyo, yykind, yyvaluep, scanner, errp, root);
922 YYFPRINTF (yyo,
")");
931yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
933 YYFPRINTF (stderr,
"Stack now");
934 for (; yybottom <= yytop; yybottom++)
936 int yybot = *yybottom;
937 YYFPRINTF (stderr,
" %d", yybot);
939 YYFPRINTF (stderr,
"\n");
942# define YY_STACK_PRINT(Bottom, Top) \
945 yy_stack_print ((Bottom), (Top)); \
954yy_reduce_print (yy_state_t *yyssp,
YYSTYPE *yyvsp,
955 int yyrule,
void *scanner,
char **errp,
struct nl_list_head *root)
957 int yylno = yyrline[yyrule];
958 int yynrhs = yyr2[yyrule];
960 YYFPRINTF (stderr,
"Reducing stack by rule %d (line %d):\n",
963 for (yyi = 0; yyi < yynrhs; yyi++)
965 YYFPRINTF (stderr,
" $%d = ", yyi + 1);
966 yy_symbol_print (stderr,
967 YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
968 &yyvsp[(yyi + 1) - (yynrhs)], scanner, errp, root);
969 YYFPRINTF (stderr,
"\n");
973# define YY_REDUCE_PRINT(Rule) \
976 yy_reduce_print (yyssp, yyvsp, Rule, scanner, errp, root); \
983# define YYDPRINTF(Args) ((void) 0)
984# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
985# define YY_STACK_PRINT(Bottom, Top)
986# define YY_REDUCE_PRINT(Rule)
992# define YYINITDEPTH 200
1003# define YYMAXDEPTH 10000
1011 yysymbol_kind_t yytoken;
1022 yysymbol_kind_t yyarg[],
int yyargn)
1026 int yyn = yypact[+*yyctx->yyssp];
1027 if (!yypact_value_is_default (yyn))
1032 int yyxbegin = yyn < 0 ? -yyn : 0;
1034 int yychecklim = YYLAST - yyn + 1;
1035 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1037 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1038 if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
1039 && !yytable_value_is_error (yytable[yyx + yyn]))
1043 else if (yycount == yyargn)
1046 yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
1049 if (yyarg && yycount == 0 && 0 < yyargn)
1050 yyarg[0] = YYSYMBOL_YYEMPTY;
1058# if defined __GLIBC__ && defined _STRING_H
1059# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
1063yystrlen (
const char *yystr)
1066 for (yylen = 0; yystr[yylen]; yylen++)
1074# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1075# define yystpcpy stpcpy
1080yystpcpy (
char *yydest,
const char *yysrc)
1083 const char *yys = yysrc;
1085 while ((*yyd++ = *yys++) !=
'\0')
1102yytnamerr (
char *yyres,
const char *yystr)
1106 YYPTRDIFF_T yyn = 0;
1107 char const *yyp = yystr;
1113 goto do_not_strip_quotes;
1117 goto do_not_strip_quotes;
1133 do_not_strip_quotes: ;
1137 return yystpcpy (yyres, yystr) - yyres;
1139 return yystrlen (yystr);
1146 yysymbol_kind_t yyarg[],
int yyargn)
1173 if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
1177 yyarg[yycount] = yyctx->yytoken;
1179 yyn = yypcontext_expected_tokens (yyctx,
1180 yyarg ? yyarg + 1 : yyarg, yyargn - 1);
1181 if (yyn == YYENOMEM)
1198yysyntax_error (YYPTRDIFF_T *yymsg_alloc,
char **yymsg,
1201 enum { YYARGS_MAX = 5 };
1203 const char *yyformat = YY_NULLPTR;
1206 yysymbol_kind_t yyarg[YYARGS_MAX];
1208 YYPTRDIFF_T yysize = 0;
1211 int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
1212 if (yycount == YYENOMEM)
1217#define YYCASE_(N, S) \
1222 YYCASE_(0, YY_(
"syntax error"));
1223 YYCASE_(1, YY_(
"syntax error, unexpected %s"));
1224 YYCASE_(2, YY_(
"syntax error, unexpected %s, expecting %s"));
1225 YYCASE_(3, YY_(
"syntax error, unexpected %s, expecting %s or %s"));
1226 YYCASE_(4, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s"));
1227 YYCASE_(5, YY_(
"syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1233 yysize = yystrlen (yyformat) - 2 * yycount + 1;
1236 for (yyi = 0; yyi < yycount; ++yyi)
1239 = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
1240 if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
1247 if (*yymsg_alloc < yysize)
1249 *yymsg_alloc = 2 * yysize;
1250 if (! (yysize <= *yymsg_alloc
1251 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1252 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1262 while ((*yyp = *yyformat) !=
'\0')
1263 if (*yyp ==
'%' && yyformat[1] ==
's' && yyi < yycount)
1265 yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
1283yydestruct (
const char *yymsg,
1284 yysymbol_kind_t yykind,
YYSTYPE *yyvaluep,
void *scanner,
char **errp,
struct nl_list_head *root)
1292 YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
1294 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1298#line 149 "lib/route/cls/ematch_syntax.y"
1299 { free(((*yyvaluep).s)); NL_DBG(2,
"string destructor\n"); }
1300#line 1301 "lib/route/cls/ematch_syntax.c"
1303 case YYSYMBOL_QUOTED:
1304#line 151 "lib/route/cls/ematch_syntax.y"
1305 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1306#line 1307 "lib/route/cls/ematch_syntax.c"
1309 case YYSYMBOL_text_from:
1310#line 150 "lib/route/cls/ematch_syntax.y"
1311 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1312#line 1313 "lib/route/cls/ematch_syntax.c"
1315 case YYSYMBOL_text_to:
1316#line 150 "lib/route/cls/ematch_syntax.y"
1317 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1318#line 1319 "lib/route/cls/ematch_syntax.c"
1321 case YYSYMBOL_meta_value:
1322#line 152 "lib/route/cls/ematch_syntax.y"
1323 { rtnl_meta_value_put(((*yyvaluep).mv)); NL_DBG(2,
"meta value destructor\n"); }
1324#line 1325 "lib/route/cls/ematch_syntax.c"
1327 case YYSYMBOL_pattern:
1328#line 151 "lib/route/cls/ematch_syntax.y"
1329 { free(((*yyvaluep).q).data); NL_DBG(2,
"quoted destructor\n"); }
1330#line 1331 "lib/route/cls/ematch_syntax.c"
1333 case YYSYMBOL_pktloc:
1334#line 150 "lib/route/cls/ematch_syntax.y"
1335 {
rtnl_pktloc_put(((*yyvaluep).loc)); NL_DBG(2,
"pktloc destructor\n"); }
1336#line 1337 "lib/route/cls/ematch_syntax.c"
1342 YY_IGNORE_MAYBE_UNINITIALIZED_END
1355yyparse (
void *scanner,
char **errp,
struct nl_list_head *root)
1364YY_INITIAL_VALUE (
static YYSTYPE yyval_default;)
1365YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
1370 yy_state_fast_t yystate = 0;
1372 int yyerrstatus = 0;
1378 YYPTRDIFF_T yystacksize = YYINITDEPTH;
1381 yy_state_t yyssa[YYINITDEPTH];
1382 yy_state_t *yyss = yyssa;
1383 yy_state_t *yyssp = yyss;
1394 yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
1401 char *yymsg = yymsgbuf;
1402 YYPTRDIFF_T yymsg_alloc =
sizeof yymsgbuf;
1404#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1410 YYDPRINTF ((stderr,
"Starting parse\n"));
1430 YYDPRINTF ((stderr,
"Entering state %d\n", yystate));
1431 YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
1432 YY_IGNORE_USELESS_CAST_BEGIN
1433 *yyssp = YY_CAST (yy_state_t, yystate);
1434 YY_IGNORE_USELESS_CAST_END
1435 YY_STACK_PRINT (yyss, yyssp);
1437 if (yyss + yystacksize - 1 <= yyssp)
1438#if !defined yyoverflow && !defined YYSTACK_RELOCATE
1443 YYPTRDIFF_T yysize = yyssp - yyss + 1;
1445# if defined yyoverflow
1450 yy_state_t *yyss1 = yyss;
1457 yyoverflow (YY_(
"memory exhausted"),
1458 &yyss1, yysize * YYSIZEOF (*yyssp),
1459 &yyvs1, yysize * YYSIZEOF (*yyvsp),
1466 if (YYMAXDEPTH <= yystacksize)
1469 if (YYMAXDEPTH < yystacksize)
1470 yystacksize = YYMAXDEPTH;
1473 yy_state_t *yyss1 = yyss;
1476 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
1479 YYSTACK_RELOCATE (yyss_alloc, yyss);
1480 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1481# undef YYSTACK_RELOCATE
1483 YYSTACK_FREE (yyss1);
1487 yyssp = yyss + yysize - 1;
1488 yyvsp = yyvs + yysize - 1;
1490 YY_IGNORE_USELESS_CAST_BEGIN
1491 YYDPRINTF ((stderr,
"Stack size increased to %ld\n",
1492 YY_CAST (
long, yystacksize)));
1493 YY_IGNORE_USELESS_CAST_END
1495 if (yyss + yystacksize - 1 <= yyssp)
1501 if (yystate == YYFINAL)
1515 yyn = yypact[yystate];
1516 if (yypact_value_is_default (yyn))
1522 if (yychar == YYEMPTY)
1524 YYDPRINTF ((stderr,
"Reading a token\n"));
1525 yychar = yylex (&yylval, scanner);
1528 if (yychar <= YYEOF)
1531 yytoken = YYSYMBOL_YYEOF;
1532 YYDPRINTF ((stderr,
"Now at end of input.\n"));
1534 else if (yychar == YYerror)
1541 yytoken = YYSYMBOL_YYerror;
1546 yytoken = YYTRANSLATE (yychar);
1547 YY_SYMBOL_PRINT (
"Next token is", yytoken, &yylval, &yylloc);
1553 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1558 if (yytable_value_is_error (yyn))
1570 YY_SYMBOL_PRINT (
"Shifting", yytoken, &yylval, &yylloc);
1572 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1574 YY_IGNORE_MAYBE_UNINITIALIZED_END
1585 yyn = yydefact[yystate];
1606 yyval = yyvsp[1-yylen];
1609 YY_REDUCE_PRINT (yyn);
1613#line 161 "lib/route/cls/ematch_syntax.y"
1615 nl_list_add_tail(root, &(yyvsp[0].e)->e_list);
1617#line 1618 "lib/route/cls/ematch_syntax.c"
1621#line 168 "lib/route/cls/ematch_syntax.y"
1623 (yyval.e) = (yyvsp[0].e);
1625#line 1626 "lib/route/cls/ematch_syntax.c"
1629#line 172 "lib/route/cls/ematch_syntax.y"
1631 rtnl_ematch_set_flags((yyvsp[-2].e), (yyvsp[-1].i));
1634 nl_list_add_tail(&(yyvsp[-2].e)->e_list, &(yyvsp[0].e)->e_list);
1636 (yyval.e) = (yyvsp[-2].e);
1638#line 1639 "lib/route/cls/ematch_syntax.c"
1642#line 184 "lib/route/cls/ematch_syntax.y"
1644 rtnl_ematch_set_flags((yyvsp[0].e), TCF_EM_INVERT);
1645 (yyval.e) = (yyvsp[0].e);
1647#line 1648 "lib/route/cls/ematch_syntax.c"
1651#line 189 "lib/route/cls/ematch_syntax.y"
1653 (yyval.e) = (yyvsp[0].e);
1655#line 1656 "lib/route/cls/ematch_syntax.c"
1659#line 197 "lib/route/cls/ematch_syntax.y"
1661 struct rtnl_ematch *e;
1664 *errp = strdup(
"Unable to allocate ematch object");
1668 if (rtnl_ematch_set_kind(e, TCF_EM_CMP) < 0)
1671 rtnl_ematch_cmp_set(e, &(yyvsp[0].cmp));
1674#line 1675 "lib/route/cls/ematch_syntax.c"
1678#line 212 "lib/route/cls/ematch_syntax.y"
1680 struct rtnl_ematch *e;
1683 *errp = strdup(
"Unable to allocate ematch object");
1687 if (rtnl_ematch_set_kind(e, TCF_EM_NBYTE) < 0)
1690 rtnl_ematch_nbyte_set_offset(e, (yyvsp[-3].loc)->layer, (yyvsp[-3].loc)->offset);
1692 rtnl_ematch_nbyte_set_pattern(e, (uint8_t *) (yyvsp[-1].q).data, (yyvsp[-1].q).index);
1696#line 1697 "lib/route/cls/ematch_syntax.c"
1700#line 230 "lib/route/cls/ematch_syntax.y"
1702 struct rtnl_ematch *e;
1705 *errp = strdup(
"Unable to allocate ematch object");
1709 if (rtnl_ematch_set_kind(e, TCF_EM_TEXT) < 0)
1712 rtnl_ematch_text_set_algo(e, (yyvsp[-4].s));
1713 rtnl_ematch_text_set_pattern(e, (yyvsp[-3].q).data, (yyvsp[-3].q).index);
1715 if ((yyvsp[-2].loc)) {
1716 rtnl_ematch_text_set_from(e, (yyvsp[-2].loc)->layer, (yyvsp[-2].loc)->offset);
1720 if ((yyvsp[-1].loc)) {
1721 rtnl_ematch_text_set_to(e, (yyvsp[-1].loc)->layer, (yyvsp[-1].loc)->offset);
1727#line 1728 "lib/route/cls/ematch_syntax.c"
1731#line 257 "lib/route/cls/ematch_syntax.y"
1733 struct rtnl_ematch *e;
1736 *errp = strdup(
"Unable to allocate ematch object");
1740 if (rtnl_ematch_set_kind(e, TCF_EM_META) < 0)
1743 rtnl_ematch_meta_set_lvalue(e, (yyvsp[-3].mv));
1744 rtnl_ematch_meta_set_rvalue(e, (yyvsp[-1].mv));
1745 rtnl_ematch_meta_set_operand(e, (yyvsp[-2].i));
1749#line 1750 "lib/route/cls/ematch_syntax.c"
1753#line 276 "lib/route/cls/ematch_syntax.y"
1755 struct rtnl_ematch *e;
1758 *errp = strdup(
"Unable to allocate ematch object");
1762 if (rtnl_ematch_set_kind(e, TCF_EM_CONTAINER) < 0)
1766 nl_list_add_tail(&e->e_childs, &(yyvsp[-1].e)->e_list);
1770#line 1771 "lib/route/cls/ematch_syntax.c"
1774#line 304 "lib/route/cls/ematch_syntax.y"
1775 { (yyval.cmp) = (yyvsp[-1].cmp); }
1776#line 1777 "lib/route/cls/ematch_syntax.c"
1780#line 306 "lib/route/cls/ematch_syntax.y"
1781 { (yyval.cmp) = (yyvsp[0].cmp); }
1782#line 1783 "lib/route/cls/ematch_syntax.c"
1786#line 311 "lib/route/cls/ematch_syntax.y"
1788 if ((yyvsp[-2].loc)->align == TCF_EM_ALIGN_U16 ||
1789 (yyvsp[-2].loc)->align == TCF_EM_ALIGN_U32)
1790 (yyval.cmp).flags = TCF_EM_CMP_TRANS;
1792 memset(&(yyval.cmp), 0,
sizeof((yyval.cmp)));
1794 (yyval.cmp).mask = (yyvsp[-2].loc)->mask;
1795 (yyval.cmp).off = (yyvsp[-2].loc)->offset;
1796 (yyval.cmp).align = (yyvsp[-2].loc)->align;
1797 (yyval.cmp).layer = (yyvsp[-2].loc)->layer;
1798 (yyval.cmp).opnd = (yyvsp[-1].i);
1799 (yyval.cmp).val = (yyvsp[0].i);
1803#line 1804 "lib/route/cls/ematch_syntax.c"
1807#line 331 "lib/route/cls/ematch_syntax.y"
1808 { (yyval.loc) = NULL; }
1809#line 1810 "lib/route/cls/ematch_syntax.c"
1813#line 333 "lib/route/cls/ematch_syntax.y"
1814 { (yyval.loc) = (yyvsp[0].loc); }
1815#line 1816 "lib/route/cls/ematch_syntax.c"
1819#line 338 "lib/route/cls/ematch_syntax.y"
1820 { (yyval.loc) = NULL; }
1821#line 1822 "lib/route/cls/ematch_syntax.c"
1825#line 340 "lib/route/cls/ematch_syntax.y"
1826 { (yyval.loc) = (yyvsp[0].loc); }
1827#line 1828 "lib/route/cls/ematch_syntax.c"
1831#line 345 "lib/route/cls/ematch_syntax.y"
1832 { (yyval.mv) = rtnl_meta_value_alloc_var((yyvsp[0].q).data, (yyvsp[0].q).len); }
1833#line 1834 "lib/route/cls/ematch_syntax.c"
1837#line 347 "lib/route/cls/ematch_syntax.y"
1838 { (yyval.mv) = rtnl_meta_value_alloc_int((yyvsp[0].i)); }
1839#line 1840 "lib/route/cls/ematch_syntax.c"
1843#line 349 "lib/route/cls/ematch_syntax.y"
1844 { (yyval.mv) = META_ALLOC(META_INT, (yyvsp[-2].i), (yyvsp[-1].i), (yyvsp[0].i64)); }
1845#line 1846 "lib/route/cls/ematch_syntax.c"
1849#line 351 "lib/route/cls/ematch_syntax.y"
1850 { (yyval.mv) = META_ALLOC(META_VAR, (yyvsp[-1].i), (yyvsp[0].i), 0); }
1851#line 1852 "lib/route/cls/ematch_syntax.c"
1855#line 355 "lib/route/cls/ematch_syntax.y"
1856 { (yyval.i) = META_ID(RANDOM); }
1857#line 1858 "lib/route/cls/ematch_syntax.c"
1861#line 356 "lib/route/cls/ematch_syntax.y"
1862 { (yyval.i) = META_ID(LOADAVG_0); }
1863#line 1864 "lib/route/cls/ematch_syntax.c"
1867#line 357 "lib/route/cls/ematch_syntax.y"
1868 { (yyval.i) = META_ID(LOADAVG_1); }
1869#line 1870 "lib/route/cls/ematch_syntax.c"
1873#line 358 "lib/route/cls/ematch_syntax.y"
1874 { (yyval.i) = META_ID(LOADAVG_2); }
1875#line 1876 "lib/route/cls/ematch_syntax.c"
1879#line 359 "lib/route/cls/ematch_syntax.y"
1880 { (yyval.i) = META_ID(DEV); }
1881#line 1882 "lib/route/cls/ematch_syntax.c"
1885#line 360 "lib/route/cls/ematch_syntax.y"
1886 { (yyval.i) = META_ID(PRIORITY); }
1887#line 1888 "lib/route/cls/ematch_syntax.c"
1891#line 361 "lib/route/cls/ematch_syntax.y"
1892 { (yyval.i) = META_ID(PROTOCOL); }
1893#line 1894 "lib/route/cls/ematch_syntax.c"
1897#line 362 "lib/route/cls/ematch_syntax.y"
1898 { (yyval.i) = META_ID(PKTTYPE); }
1899#line 1900 "lib/route/cls/ematch_syntax.c"
1903#line 363 "lib/route/cls/ematch_syntax.y"
1904 { (yyval.i) = META_ID(PKTLEN); }
1905#line 1906 "lib/route/cls/ematch_syntax.c"
1909#line 364 "lib/route/cls/ematch_syntax.y"
1910 { (yyval.i) = META_ID(DATALEN); }
1911#line 1912 "lib/route/cls/ematch_syntax.c"
1915#line 365 "lib/route/cls/ematch_syntax.y"
1916 { (yyval.i) = META_ID(MACLEN); }
1917#line 1918 "lib/route/cls/ematch_syntax.c"
1921#line 366 "lib/route/cls/ematch_syntax.y"
1922 { (yyval.i) = META_ID(NFMARK); }
1923#line 1924 "lib/route/cls/ematch_syntax.c"
1927#line 367 "lib/route/cls/ematch_syntax.y"
1928 { (yyval.i) = META_ID(TCINDEX); }
1929#line 1930 "lib/route/cls/ematch_syntax.c"
1933#line 368 "lib/route/cls/ematch_syntax.y"
1934 { (yyval.i) = META_ID(RTCLASSID); }
1935#line 1936 "lib/route/cls/ematch_syntax.c"
1939#line 369 "lib/route/cls/ematch_syntax.y"
1940 { (yyval.i) = META_ID(RTIIF); }
1941#line 1942 "lib/route/cls/ematch_syntax.c"
1945#line 370 "lib/route/cls/ematch_syntax.y"
1946 { (yyval.i) = META_ID(SK_FAMILY); }
1947#line 1948 "lib/route/cls/ematch_syntax.c"
1951#line 371 "lib/route/cls/ematch_syntax.y"
1952 { (yyval.i) = META_ID(SK_STATE); }
1953#line 1954 "lib/route/cls/ematch_syntax.c"
1957#line 372 "lib/route/cls/ematch_syntax.y"
1958 { (yyval.i) = META_ID(SK_REUSE); }
1959#line 1960 "lib/route/cls/ematch_syntax.c"
1963#line 373 "lib/route/cls/ematch_syntax.y"
1964 { (yyval.i) = META_ID(SK_REFCNT); }
1965#line 1966 "lib/route/cls/ematch_syntax.c"
1969#line 374 "lib/route/cls/ematch_syntax.y"
1970 { (yyval.i) = META_ID(SK_RCVBUF); }
1971#line 1972 "lib/route/cls/ematch_syntax.c"
1975#line 375 "lib/route/cls/ematch_syntax.y"
1976 { (yyval.i) = META_ID(SK_SNDBUF); }
1977#line 1978 "lib/route/cls/ematch_syntax.c"
1981#line 376 "lib/route/cls/ematch_syntax.y"
1982 { (yyval.i) = META_ID(SK_SHUTDOWN); }
1983#line 1984 "lib/route/cls/ematch_syntax.c"
1987#line 377 "lib/route/cls/ematch_syntax.y"
1988 { (yyval.i) = META_ID(SK_PROTO); }
1989#line 1990 "lib/route/cls/ematch_syntax.c"
1993#line 378 "lib/route/cls/ematch_syntax.y"
1994 { (yyval.i) = META_ID(SK_TYPE); }
1995#line 1996 "lib/route/cls/ematch_syntax.c"
1999#line 379 "lib/route/cls/ematch_syntax.y"
2000 { (yyval.i) = META_ID(SK_RMEM_ALLOC); }
2001#line 2002 "lib/route/cls/ematch_syntax.c"
2005#line 380 "lib/route/cls/ematch_syntax.y"
2006 { (yyval.i) = META_ID(SK_WMEM_ALLOC); }
2007#line 2008 "lib/route/cls/ematch_syntax.c"
2011#line 381 "lib/route/cls/ematch_syntax.y"
2012 { (yyval.i) = META_ID(SK_WMEM_QUEUED); }
2013#line 2014 "lib/route/cls/ematch_syntax.c"
2017#line 382 "lib/route/cls/ematch_syntax.y"
2018 { (yyval.i) = META_ID(SK_RCV_QLEN); }
2019#line 2020 "lib/route/cls/ematch_syntax.c"
2023#line 383 "lib/route/cls/ematch_syntax.y"
2024 { (yyval.i) = META_ID(SK_SND_QLEN); }
2025#line 2026 "lib/route/cls/ematch_syntax.c"
2029#line 384 "lib/route/cls/ematch_syntax.y"
2030 { (yyval.i) = META_ID(SK_ERR_QLEN); }
2031#line 2032 "lib/route/cls/ematch_syntax.c"
2035#line 385 "lib/route/cls/ematch_syntax.y"
2036 { (yyval.i) = META_ID(SK_FORWARD_ALLOCS); }
2037#line 2038 "lib/route/cls/ematch_syntax.c"
2041#line 386 "lib/route/cls/ematch_syntax.y"
2042 { (yyval.i) = META_ID(SK_ALLOCS); }
2043#line 2044 "lib/route/cls/ematch_syntax.c"
2047#line 387 "lib/route/cls/ematch_syntax.y"
2048 { (yyval.i) = __TCF_META_ID_SK_ROUTE_CAPS; }
2049#line 2050 "lib/route/cls/ematch_syntax.c"
2053#line 388 "lib/route/cls/ematch_syntax.y"
2054 { (yyval.i) = META_ID(SK_HASH); }
2055#line 2056 "lib/route/cls/ematch_syntax.c"
2059#line 389 "lib/route/cls/ematch_syntax.y"
2060 { (yyval.i) = META_ID(SK_LINGERTIME); }
2061#line 2062 "lib/route/cls/ematch_syntax.c"
2065#line 390 "lib/route/cls/ematch_syntax.y"
2066 { (yyval.i) = META_ID(SK_ACK_BACKLOG); }
2067#line 2068 "lib/route/cls/ematch_syntax.c"
2071#line 391 "lib/route/cls/ematch_syntax.y"
2072 { (yyval.i) = META_ID(SK_MAX_ACK_BACKLOG); }
2073#line 2074 "lib/route/cls/ematch_syntax.c"
2077#line 392 "lib/route/cls/ematch_syntax.y"
2078 { (yyval.i) = META_ID(SK_PRIO); }
2079#line 2080 "lib/route/cls/ematch_syntax.c"
2083#line 393 "lib/route/cls/ematch_syntax.y"
2084 { (yyval.i) = META_ID(SK_RCVLOWAT); }
2085#line 2086 "lib/route/cls/ematch_syntax.c"
2089#line 394 "lib/route/cls/ematch_syntax.y"
2090 { (yyval.i) = META_ID(SK_RCVTIMEO); }
2091#line 2092 "lib/route/cls/ematch_syntax.c"
2095#line 395 "lib/route/cls/ematch_syntax.y"
2096 { (yyval.i) = META_ID(SK_SNDTIMEO); }
2097#line 2098 "lib/route/cls/ematch_syntax.c"
2101#line 396 "lib/route/cls/ematch_syntax.y"
2102 { (yyval.i) = META_ID(SK_SENDMSG_OFF); }
2103#line 2104 "lib/route/cls/ematch_syntax.c"
2107#line 397 "lib/route/cls/ematch_syntax.y"
2108 { (yyval.i) = META_ID(SK_WRITE_PENDING); }
2109#line 2110 "lib/route/cls/ematch_syntax.c"
2113#line 398 "lib/route/cls/ematch_syntax.y"
2114 { (yyval.i) = META_ID(VLAN_TAG); }
2115#line 2116 "lib/route/cls/ematch_syntax.c"
2119#line 399 "lib/route/cls/ematch_syntax.y"
2120 { (yyval.i) = META_ID(RXHASH); }
2121#line 2122 "lib/route/cls/ematch_syntax.c"
2125#line 403 "lib/route/cls/ematch_syntax.y"
2126 { (yyval.i) = META_ID(DEV); }
2127#line 2128 "lib/route/cls/ematch_syntax.c"
2131#line 404 "lib/route/cls/ematch_syntax.y"
2132 { (yyval.i) = META_ID(SK_BOUND_IF); }
2133#line 2134 "lib/route/cls/ematch_syntax.c"
2137#line 412 "lib/route/cls/ematch_syntax.y"
2139 (yyval.q) = (yyvsp[0].q);
2141#line 2142 "lib/route/cls/ematch_syntax.c"
2145#line 416 "lib/route/cls/ematch_syntax.y"
2147 struct nl_addr *addr;
2154 if (!((yyval.q).data = calloc(1, (yyval.q).len))) {
2162 if (asprintf(errp,
"invalid pattern \"%s\"", (yyvsp[0].s)) == -1)
2167#line 2168 "lib/route/cls/ematch_syntax.c"
2171#line 445 "lib/route/cls/ematch_syntax.y"
2176 if (asprintf(errp,
"Packet location \"%s\" not found", (yyvsp[0].s)) == -1)
2183#line 2184 "lib/route/cls/ematch_syntax.c"
2187#line 458 "lib/route/cls/ematch_syntax.y"
2191 if ((yyvsp[0].i64) && (!(yyvsp[-4].i) || (yyvsp[-4].i) > TCF_EM_ALIGN_U32)) {
2192 *errp = strdup(
"mask only allowed for alignments u8|u16|u32");
2197 *errp = strdup(
"Unable to allocate packet location object");
2201 loc->name = strdup(
"<USER-DEFINED>");
2202 loc->align = (yyvsp[-4].i);
2203 loc->layer = (yyvsp[-3].i);
2204 loc->offset = (yyvsp[-1].i);
2205 loc->mask = (yyvsp[0].i64);
2209#line 2210 "lib/route/cls/ematch_syntax.c"
2213#line 483 "lib/route/cls/ematch_syntax.y"
2215#line 2216 "lib/route/cls/ematch_syntax.c"
2219#line 485 "lib/route/cls/ematch_syntax.y"
2220 { (yyval.i) = (yyvsp[-1].i); }
2221#line 2222 "lib/route/cls/ematch_syntax.c"
2225#line 487 "lib/route/cls/ematch_syntax.y"
2226 { (yyval.i) = (yyvsp[-1].i); }
2227#line 2228 "lib/route/cls/ematch_syntax.c"
2231#line 492 "lib/route/cls/ematch_syntax.y"
2232 { (yyval.i64) = 0; }
2233#line 2234 "lib/route/cls/ematch_syntax.c"
2237#line 494 "lib/route/cls/ematch_syntax.y"
2238 { (yyval.i64) = (yyvsp[0].i); }
2239#line 2240 "lib/route/cls/ematch_syntax.c"
2243#line 499 "lib/route/cls/ematch_syntax.y"
2245#line 2246 "lib/route/cls/ematch_syntax.c"
2249#line 501 "lib/route/cls/ematch_syntax.y"
2250 { (yyval.i) = (yyvsp[0].i); }
2251#line 2252 "lib/route/cls/ematch_syntax.c"
2255#line 506 "lib/route/cls/ematch_syntax.y"
2256 { (yyval.i) = TCF_EM_OPND_EQ; }
2257#line 2258 "lib/route/cls/ematch_syntax.c"
2261#line 508 "lib/route/cls/ematch_syntax.y"
2262 { (yyval.i) = TCF_EM_OPND_GT; }
2263#line 2264 "lib/route/cls/ematch_syntax.c"
2267#line 510 "lib/route/cls/ematch_syntax.y"
2268 { (yyval.i) = TCF_EM_OPND_LT; }
2269#line 2270 "lib/route/cls/ematch_syntax.c"
2273#line 2274 "lib/route/cls/ematch_syntax.c"
2288 YY_SYMBOL_PRINT (
"-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
2299 const int yylhs = yyr1[yyn] - YYNTOKENS;
2300 const int yyi = yypgoto[yylhs] + *yyssp;
2301 yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
2303 : yydefgoto[yylhs]);
2315 yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
2323 char const *yymsgp = YY_(
"syntax error");
2324 int yysyntax_error_status;
2325 yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2326 if (yysyntax_error_status == 0)
2328 else if (yysyntax_error_status == -1)
2330 if (yymsg != yymsgbuf)
2331 YYSTACK_FREE (yymsg);
2332 yymsg = YY_CAST (
char *,
2333 YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
2336 yysyntax_error_status
2337 = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
2343 yymsg_alloc =
sizeof yymsgbuf;
2344 yysyntax_error_status = YYENOMEM;
2347 yyerror (scanner, errp, root, yymsgp);
2348 if (yysyntax_error_status == YYENOMEM)
2353 if (yyerrstatus == 3)
2358 if (yychar <= YYEOF)
2361 if (yychar == YYEOF)
2366 yydestruct (
"Error: discarding",
2367 yytoken, &yylval, scanner, errp, root);
2391 YY_STACK_PRINT (yyss, yyssp);
2405 yyn = yypact[yystate];
2406 if (!yypact_value_is_default (yyn))
2408 yyn += YYSYMBOL_YYerror;
2409 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
2422 yydestruct (
"Error: popping",
2423 YY_ACCESSING_SYMBOL (yystate), yyvsp, scanner, errp, root);
2426 YY_STACK_PRINT (yyss, yyssp);
2429 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
2431 YY_IGNORE_MAYBE_UNINITIALIZED_END
2435 YY_SYMBOL_PRINT (
"Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
2461 yyerror (scanner, errp, root, YY_(
"memory exhausted"));
2470 if (yychar != YYEMPTY)
2474 yytoken = YYTRANSLATE (yychar);
2475 yydestruct (
"Cleanup: discarding lookahead",
2476 yytoken, &yylval, scanner, errp, root);
2481 YY_STACK_PRINT (yyss, yyssp);
2482 while (yyssp != yyss)
2484 yydestruct (
"Cleanup: popping",
2485 YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, scanner, errp, root);
2490 YYSTACK_FREE (yyss);
2492 if (yymsg != yymsgbuf)
2493 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.