00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #define YYBISON 1
00047
00048
00049 #define YYBISON_VERSION "2.4.1"
00050
00051
00052 #define YYSKELETON_NAME "yacc.c"
00053
00054
00055 #define YYPURE 0
00056
00057
00058 #define YYPUSH 0
00059
00060
00061 #define YYPULL 1
00062
00063
00064 #define YYLSP_NEEDED 0
00065
00066
00067
00068
00069
00070
00071 #line 1 "src/cfgparser/oparse.y"
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 #include "olsrd_conf.h"
00116 #include "../defs.h"
00117 #include "../ipcalc.h"
00118 #include "../net_olsr.h"
00119 #include "../link_set.h"
00120 #include "../olsr.h"
00121
00122 #include <stddef.h>
00123 #include <stdio.h>
00124 #include <stdlib.h>
00125 #include <sys/types.h>
00126 #include <sys/socket.h>
00127 #include <netinet/in.h>
00128 #include <arpa/inet.h>
00129 #include <string.h>
00130
00131 #define PARSER_DEBUG 1
00132
00133 #if PARSER_DEBUG
00134 #define PARSER_DEBUG_PRINTF(x, args...) printf(x, ##args)
00135 #else
00136 #define PARSER_DEBUG_PRINTF(x, args...) do { } while (0)
00137 #endif
00138
00139 #define SET_IFS_CONF(ifs, ifcnt, field, value) do { \
00140 for (; ifcnt>0; ifs=ifs->next, ifcnt--) { \
00141 ifs->cnfi->field = (value); \
00142 ifs->cnf->field = (value); \
00143 } \
00144 } while (0)
00145
00146 #define YYSTYPE struct conf_token *
00147
00148 void yyerror(const char *);
00149 int yylex(void);
00150
00151 static int ifs_in_curr_cfg = 0;
00152
00153 static int add_ipv6_addr(YYSTYPE ipaddr_arg, YYSTYPE prefixlen_arg);
00154
00155 static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg)
00156 {
00157 union olsr_ip_addr addr;
00158 int i;
00159 struct olsr_if *walker;
00160
00161 #if PARSER_DEBUG > 0
00162 printf("\tLinkQualityMult %s %0.2f\n",
00163 (ip_addr_arg != NULL) ? ip_addr_arg->string : "any",
00164 mult_arg->floating);
00165 #endif
00166
00167 memset(&addr, 0, sizeof(addr));
00168
00169 if (ip_addr_arg != NULL &&
00170 inet_pton(olsr_cnf->ip_version, ip_addr_arg->string, &addr) <= 0) {
00171 fprintf(stderr, "Cannot parse IP address %s.\n", ip_addr_arg->string);
00172 return -1;
00173 }
00174
00175 walker = olsr_cnf->interfaces;
00176
00177 for (i = 0; i < ifs_in_curr_cfg; i++) {
00178 struct olsr_lq_mult *mult = malloc(sizeof(*mult));
00179 if (mult == NULL) {
00180 fprintf(stderr, "Out of memory (LQ multiplier).\n");
00181 return -1;
00182 }
00183
00184 mult->addr = addr;
00185 mult->value = (uint32_t)(mult_arg->floating * LINK_LOSS_MULTIPLIER);
00186
00187 mult->next = walker->cnf->lq_mult;
00188 walker->cnfi->lq_mult = walker->cnf->lq_mult = mult;
00189 walker->cnf->orig_lq_mult_cnt++;
00190 walker->cnfi->orig_lq_mult_cnt=walker->cnf->orig_lq_mult_cnt;
00191
00192 walker = walker->next;
00193 }
00194
00195 if (ip_addr_arg != NULL) {
00196 free(ip_addr_arg->string);
00197 free(ip_addr_arg);
00198 }
00199
00200 free(mult_arg);
00201
00202 return 0;
00203 }
00204
00205 static int add_ipv6_addr(YYSTYPE ipaddr_arg, YYSTYPE prefixlen_arg)
00206 {
00207 union olsr_ip_addr ipaddr;
00208 PARSER_DEBUG_PRINTF("HNA IPv6 entry: %s/%d\n", ipaddr_arg->string, prefixlen_arg->integer);
00209
00210 if (olsr_cnf->ip_version != AF_INET6) {
00211 fprintf(stderr, "IPv6 addresses can only be used if \"IpVersion\" == 6, skipping HNA6.\n");
00212 olsr_startup_sleep(3);
00213 }
00214 else {
00215 if(inet_pton(AF_INET6, ipaddr_arg->string, &ipaddr) <= 0) {
00216 fprintf(stderr, "ihna6entry: Failed converting IP address %s\n", ipaddr_arg->string);
00217 return 1;
00218 }
00219
00220 if (prefixlen_arg->integer > 128) {
00221 fprintf(stderr, "ihna6entry: Illegal IPv6 prefix length %d\n", prefixlen_arg->integer);
00222 return 1;
00223 }
00224
00225
00226 ip_prefix_list_add(&olsr_cnf->hna_entries, &ipaddr, prefixlen_arg->integer);
00227 }
00228 free(ipaddr_arg->string);
00229 free(ipaddr_arg);
00230 free(prefixlen_arg);
00231
00232 return 0;
00233 }
00234
00235
00236
00237
00238 #line 239 "src/cfgparser/oparse.c"
00239
00240
00241 #ifndef YYDEBUG
00242 # define YYDEBUG 0
00243 #endif
00244
00245
00246 #ifdef YYERROR_VERBOSE
00247 # undef YYERROR_VERBOSE
00248 # define YYERROR_VERBOSE 1
00249 #else
00250 # define YYERROR_VERBOSE 0
00251 #endif
00252
00253
00254 #ifndef YYTOKEN_TABLE
00255 # define YYTOKEN_TABLE 0
00256 #endif
00257
00258
00259
00260 #ifndef YYTOKENTYPE
00261 # define YYTOKENTYPE
00262
00263
00264 enum yytokentype {
00265 TOK_SLASH = 258,
00266 TOK_OPEN = 259,
00267 TOK_CLOSE = 260,
00268 TOK_STRING = 261,
00269 TOK_INTEGER = 262,
00270 TOK_FLOAT = 263,
00271 TOK_BOOLEAN = 264,
00272 TOK_IPV6TYPE = 265,
00273 TOK_DEBUGLEVEL = 266,
00274 TOK_IPVERSION = 267,
00275 TOK_HNA4 = 268,
00276 TOK_HNA6 = 269,
00277 TOK_PLUGIN = 270,
00278 TOK_INTERFACE_DEFAULTS = 271,
00279 TOK_INTERFACE = 272,
00280 TOK_NOINT = 273,
00281 TOK_TOS = 274,
00282 TOK_OLSRPORT = 275,
00283 TOK_RTPROTO = 276,
00284 TOK_RTTABLE = 277,
00285 TOK_RTTABLE_DEFAULT = 278,
00286 TOK_RTTABLE_TUNNEL = 279,
00287 TOK_RTTABLE_PRIORITY = 280,
00288 TOK_RTTABLE_DEFAULTOLSR_PRIORITY = 281,
00289 TOK_RTTABLE_TUNNEL_PRIORITY = 282,
00290 TOK_RTTABLE_DEFAULT_PRIORITY = 283,
00291 TOK_WILLINGNESS = 284,
00292 TOK_IPCCON = 285,
00293 TOK_FIBMETRIC = 286,
00294 TOK_USEHYST = 287,
00295 TOK_HYSTSCALE = 288,
00296 TOK_HYSTUPPER = 289,
00297 TOK_HYSTLOWER = 290,
00298 TOK_POLLRATE = 291,
00299 TOK_NICCHGSPOLLRT = 292,
00300 TOK_TCREDUNDANCY = 293,
00301 TOK_MPRCOVERAGE = 294,
00302 TOK_LQ_LEVEL = 295,
00303 TOK_LQ_FISH = 296,
00304 TOK_LQ_AGING = 297,
00305 TOK_LQ_PLUGIN = 298,
00306 TOK_LQ_NAT_THRESH = 299,
00307 TOK_LQ_MULT = 300,
00308 TOK_CLEAR_SCREEN = 301,
00309 TOK_PLPARAM = 302,
00310 TOK_MIN_TC_VTIME = 303,
00311 TOK_LOCK_FILE = 304,
00312 TOK_USE_NIIT = 305,
00313 TOK_SMART_GW = 306,
00314 TOK_SMART_GW_ALLOW_NAT = 307,
00315 TOK_SMART_GW_UPLINK = 308,
00316 TOK_SMART_GW_UPLINK_NAT = 309,
00317 TOK_SMART_GW_SPEED = 310,
00318 TOK_SMART_GW_PREFIX = 311,
00319 TOK_SRC_IP_ROUTES = 312,
00320 TOK_MAIN_IP = 313,
00321 TOK_HOSTLABEL = 314,
00322 TOK_NETLABEL = 315,
00323 TOK_MAXIPC = 316,
00324 TOK_IFMODE = 317,
00325 TOK_IPV4MULTICAST = 318,
00326 TOK_IP4BROADCAST = 319,
00327 TOK_IPV4BROADCAST = 320,
00328 TOK_IPV6MULTICAST = 321,
00329 TOK_IPV4SRC = 322,
00330 TOK_IPV6SRC = 323,
00331 TOK_IFWEIGHT = 324,
00332 TOK_HELLOINT = 325,
00333 TOK_HELLOVAL = 326,
00334 TOK_TCINT = 327,
00335 TOK_TCVAL = 328,
00336 TOK_MIDINT = 329,
00337 TOK_MIDVAL = 330,
00338 TOK_HNAINT = 331,
00339 TOK_HNAVAL = 332,
00340 TOK_AUTODETCHG = 333,
00341 TOK_IPV4_ADDR = 334,
00342 TOK_IPV6_ADDR = 335,
00343 TOK_DEFAULT = 336,
00344 TOK_AUTO = 337,
00345 TOK_NONE = 338,
00346 TOK_COMMENT = 339
00347 };
00348 #endif
00349
00350
00351
00352 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00353 typedef int YYSTYPE;
00354 # define YYSTYPE_IS_TRIVIAL 1
00355 # define yystype YYSTYPE
00356 # define YYSTYPE_IS_DECLARED 1
00357 #endif
00358
00359
00360
00361
00362
00363
00364 #line 365 "src/cfgparser/oparse.c"
00365
00366 #ifdef short
00367 # undef short
00368 #endif
00369
00370 #ifdef YYTYPE_UINT8
00371 typedef YYTYPE_UINT8 yytype_uint8;
00372 #else
00373 typedef unsigned char yytype_uint8;
00374 #endif
00375
00376 #ifdef YYTYPE_INT8
00377 typedef YYTYPE_INT8 yytype_int8;
00378 #elif (defined __STDC__ || defined __C99__FUNC__ \
00379 || defined __cplusplus || defined _MSC_VER)
00380 typedef signed char yytype_int8;
00381 #else
00382 typedef short int yytype_int8;
00383 #endif
00384
00385 #ifdef YYTYPE_UINT16
00386 typedef YYTYPE_UINT16 yytype_uint16;
00387 #else
00388 typedef unsigned short int yytype_uint16;
00389 #endif
00390
00391 #ifdef YYTYPE_INT16
00392 typedef YYTYPE_INT16 yytype_int16;
00393 #else
00394 typedef short int yytype_int16;
00395 #endif
00396
00397 #ifndef YYSIZE_T
00398 # ifdef __SIZE_TYPE__
00399 # define YYSIZE_T __SIZE_TYPE__
00400 # elif defined size_t
00401 # define YYSIZE_T size_t
00402 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00403 || defined __cplusplus || defined _MSC_VER)
00404 # include <stddef.h>
00405 # define YYSIZE_T size_t
00406 # else
00407 # define YYSIZE_T unsigned int
00408 # endif
00409 #endif
00410
00411 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00412
00413 #ifndef YY_
00414 # if YYENABLE_NLS
00415 # if ENABLE_NLS
00416 # include <libintl.h>
00417 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00418 # endif
00419 # endif
00420 # ifndef YY_
00421 # define YY_(msgid) msgid
00422 # endif
00423 #endif
00424
00425
00426 #if ! defined lint || defined __GNUC__
00427 # define YYUSE(e) ((void) (e))
00428 #else
00429 # define YYUSE(e)
00430 #endif
00431
00432
00433 #ifndef lint
00434 # define YYID(n) (n)
00435 #else
00436 #if (defined __STDC__ || defined __C99__FUNC__ \
00437 || defined __cplusplus || defined _MSC_VER)
00438 static int
00439 YYID (int yyi)
00440 #else
00441 static int
00442 YYID (yyi)
00443 int yyi;
00444 #endif
00445 {
00446 return yyi;
00447 }
00448 #endif
00449
00450 #if ! defined yyoverflow || YYERROR_VERBOSE
00451
00452
00453
00454 # ifdef YYSTACK_USE_ALLOCA
00455 # if YYSTACK_USE_ALLOCA
00456 # ifdef __GNUC__
00457 # define YYSTACK_ALLOC __builtin_alloca
00458 # elif defined __BUILTIN_VA_ARG_INCR
00459 # include <alloca.h>
00460 # elif defined _AIX
00461 # define YYSTACK_ALLOC __alloca
00462 # elif defined _MSC_VER
00463 # include <malloc.h>
00464 # define alloca _alloca
00465 # else
00466 # define YYSTACK_ALLOC alloca
00467 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00468 || defined __cplusplus || defined _MSC_VER)
00469 # include <stdlib.h>
00470 # ifndef _STDLIB_H
00471 # define _STDLIB_H 1
00472 # endif
00473 # endif
00474 # endif
00475 # endif
00476 # endif
00477
00478 # ifdef YYSTACK_ALLOC
00479
00480 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
00481 # ifndef YYSTACK_ALLOC_MAXIMUM
00482
00483
00484
00485
00486 # define YYSTACK_ALLOC_MAXIMUM 4032
00487 # endif
00488 # else
00489 # define YYSTACK_ALLOC YYMALLOC
00490 # define YYSTACK_FREE YYFREE
00491 # ifndef YYSTACK_ALLOC_MAXIMUM
00492 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00493 # endif
00494 # if (defined __cplusplus && ! defined _STDLIB_H \
00495 && ! ((defined YYMALLOC || defined malloc) \
00496 && (defined YYFREE || defined free)))
00497 # include <stdlib.h>
00498 # ifndef _STDLIB_H
00499 # define _STDLIB_H 1
00500 # endif
00501 # endif
00502 # ifndef YYMALLOC
00503 # define YYMALLOC malloc
00504 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00505 || defined __cplusplus || defined _MSC_VER)
00506 void *malloc (YYSIZE_T);
00507 # endif
00508 # endif
00509 # ifndef YYFREE
00510 # define YYFREE free
00511 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00512 || defined __cplusplus || defined _MSC_VER)
00513 void free (void *);
00514 # endif
00515 # endif
00516 # endif
00517 #endif
00518
00519
00520 #if (! defined yyoverflow \
00521 && (! defined __cplusplus \
00522 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
00523
00524
00525 union yyalloc
00526 {
00527 yytype_int16 yyss_alloc;
00528 YYSTYPE yyvs_alloc;
00529 };
00530
00531
00532 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
00533
00534
00535
00536 # define YYSTACK_BYTES(N) \
00537 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
00538 + YYSTACK_GAP_MAXIMUM)
00539
00540
00541
00542 # ifndef YYCOPY
00543 # if defined __GNUC__ && 1 < __GNUC__
00544 # define YYCOPY(To, From, Count) \
00545 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00546 # else
00547 # define YYCOPY(To, From, Count) \
00548 do \
00549 { \
00550 YYSIZE_T yyi; \
00551 for (yyi = 0; yyi < (Count); yyi++) \
00552 (To)[yyi] = (From)[yyi]; \
00553 } \
00554 while (YYID (0))
00555 # endif
00556 # endif
00557
00558
00559
00560
00561
00562
00563 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
00564 do \
00565 { \
00566 YYSIZE_T yynewbytes; \
00567 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
00568 Stack = &yyptr->Stack_alloc; \
00569 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
00570 yyptr += yynewbytes / sizeof (*yyptr); \
00571 } \
00572 while (YYID (0))
00573
00574 #endif
00575
00576
00577 #define YYFINAL 2
00578
00579 #define YYLAST 210
00580
00581
00582 #define YYNTOKENS 85
00583
00584 #define YYNNTS 89
00585
00586 #define YYNRULES 185
00587
00588 #define YYNSTATES 276
00589
00590
00591 #define YYUNDEFTOK 2
00592 #define YYMAXUTOK 339
00593
00594 #define YYTRANSLATE(YYX) \
00595 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
00596
00597
00598 static const yytype_uint8 yytranslate[] =
00599 {
00600 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00601 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00602 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00603 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00604 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00605 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00606 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00607 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00608 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00609 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00610 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00611 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00612 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00613 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00614 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00615 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00616 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00617 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00618 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00619 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00620 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00621 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00622 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00623 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00624 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00625 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
00626 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
00627 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
00628 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
00629 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
00630 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
00631 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
00632 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
00633 75, 76, 77, 78, 79, 80, 81, 82, 83, 84
00634 };
00635
00636 #if YYDEBUG
00637
00638
00639 static const yytype_uint16 yyprhs[] =
00640 {
00641 0, 0, 3, 4, 7, 10, 12, 14, 16, 18,
00642 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
00643 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
00644 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
00645 80, 82, 84, 86, 88, 90, 92, 95, 98, 101,
00646 104, 107, 110, 114, 115, 118, 120, 122, 126, 127,
00647 130, 132, 134, 138, 139, 142, 144, 146, 148, 150,
00648 153, 154, 157, 161, 165, 166, 169, 171, 173, 175,
00649 178, 181, 184, 186, 188, 190, 192, 194, 196, 198,
00650 200, 202, 204, 206, 208, 210, 214, 215, 218, 220,
00651 222, 224, 227, 230, 234, 239, 242, 245, 247, 250,
00652 253, 258, 261, 264, 267, 270, 273, 276, 279, 282,
00653 285, 288, 292, 296, 300, 303, 306, 309, 312, 316,
00654 319, 323, 325, 327, 330, 333, 336, 339, 342, 345,
00655 348, 351, 354, 357, 360, 363, 366, 369, 372, 375,
00656 378, 381, 384, 387, 390, 393, 396, 399, 402, 405,
00657 408, 411, 414, 417, 420, 423, 426, 429, 432, 435,
00658 438, 441, 444, 447, 450, 453, 456, 460, 463, 467,
00659 472, 475, 478, 481, 484, 488
00660 };
00661
00662
00663 static const yytype_int16 yyrhs[] =
00664 {
00665 86, 0, -1, -1, 86, 88, -1, 86, 87, -1,
00666 127, -1, 128, -1, 129, -1, 134, -1, 135, -1,
00667 136, -1, 137, -1, 138, -1, 139, -1, 140, -1,
00668 141, -1, 144, -1, 143, -1, 142, -1, 145, -1,
00669 146, -1, 147, -1, 148, -1, 149, -1, 150, -1,
00670 151, -1, 152, -1, 153, -1, 154, -1, 159, -1,
00671 155, -1, 160, -1, 156, -1, 161, -1, 173, -1,
00672 157, -1, 158, -1, 162, -1, 163, -1, 164, -1,
00673 165, -1, 167, -1, 166, -1, 168, -1, 169, -1,
00674 170, -1, 13, 89, -1, 14, 92, -1, 30, 95,
00675 -1, 107, 101, -1, 98, 100, -1, 171, 104, -1,
00676 4, 90, 5, -1, -1, 90, 91, -1, 173, -1,
00677 130, -1, 4, 93, 5, -1, -1, 93, 94, -1,
00678 173, -1, 131, -1, 4, 96, 5, -1, -1, 96,
00679 97, -1, 173, -1, 108, -1, 109, -1, 110, -1,
00680 132, 99, -1, -1, 99, 133, -1, 4, 102, 5,
00681 -1, 4, 102, 5, -1, -1, 102, 103, -1, 173,
00682 -1, 111, -1, 112, -1, 64, 113, -1, 65, 113,
00683 -1, 63, 113, -1, 114, -1, 115, -1, 116, -1,
00684 117, -1, 118, -1, 119, -1, 120, -1, 121, -1,
00685 122, -1, 123, -1, 124, -1, 125, -1, 126, -1,
00686 4, 105, 5, -1, -1, 105, 106, -1, 172, -1,
00687 173, -1, 16, -1, 61, 7, -1, 59, 79, -1,
00688 60, 79, 79, -1, 60, 79, 3, 7, -1, 69,
00689 7, -1, 62, 6, -1, 79, -1, 66, 80, -1,
00690 67, 79, -1, 68, 80, 3, 7, -1, 68, 80,
00691 -1, 70, 8, -1, 71, 8, -1, 72, 8, -1,
00692 73, 8, -1, 74, 8, -1, 75, 8, -1, 76,
00693 8, -1, 77, 8, -1, 78, 9, -1, 45, 81,
00694 8, -1, 45, 79, 8, -1, 45, 80, 8, -1,
00695 11, 7, -1, 12, 7, -1, 31, 6, -1, 79,
00696 79, -1, 79, 3, 7, -1, 80, 7, -1, 80,
00697 3, 7, -1, 17, -1, 6, -1, 18, 9, -1,
00698 19, 7, -1, 20, 7, -1, 21, 7, -1, 22,
00699 7, -1, 22, 82, -1, 23, 7, -1, 23, 82,
00700 -1, 24, 7, -1, 24, 82, -1, 25, 7, -1,
00701 25, 82, -1, 25, 83, -1, 28, 7, -1, 28,
00702 82, -1, 28, 83, -1, 27, 7, -1, 27, 82,
00703 -1, 27, 83, -1, 26, 7, -1, 26, 82, -1,
00704 26, 83, -1, 29, 7, -1, 32, 9, -1, 33,
00705 8, -1, 34, 8, -1, 35, 8, -1, 36, 8,
00706 -1, 37, 8, -1, 38, 7, -1, 39, 7, -1,
00707 40, 7, -1, 41, 7, -1, 42, 8, -1, 48,
00708 8, -1, 49, 6, -1, 43, 6, -1, 44, 8,
00709 -1, 46, 9, -1, 50, 9, -1, 51, 9, -1,
00710 52, 9, -1, 53, 6, -1, 55, 7, 7, -1,
00711 54, 9, -1, 56, 80, 7, -1, 56, 80, 3,
00712 7, -1, 57, 9, -1, 58, 79, -1, 58, 80,
00713 -1, 15, 6, -1, 47, 6, 6, -1, 84, -1
00714 };
00715
00716
00717 static const yytype_uint16 yyrline[] =
00718 {
00719 0, 258, 258, 259, 260, 263, 264, 265, 266, 267,
00720 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
00721 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
00722 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
00723 298, 299, 300, 301, 302, 303, 306, 307, 308, 309,
00724 310, 311, 314, 317, 317, 320, 321, 324, 327, 327,
00725 330, 331, 334, 337, 337, 340, 341, 342, 343, 346,
00726 349, 349, 352, 355, 369, 369, 372, 373, 374, 375,
00727 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
00728 386, 387, 388, 389, 390, 393, 396, 396, 399, 400,
00729 403, 434, 441, 458, 481, 505, 526, 542, 562, 582,
00730 602, 625, 646, 658, 670, 682, 694, 707, 719, 731,
00731 743, 756, 763, 770, 778, 787, 807, 827, 861, 897,
00732 903, 911, 918, 974, 982, 991, 999, 1007, 1013, 1021,
00733 1027, 1035, 1041, 1049, 1055, 1061, 1069, 1075, 1081, 1089,
00734 1095, 1101, 1109, 1115, 1121, 1129, 1138, 1146, 1154, 1162,
00735 1170, 1178, 1186, 1194, 1202, 1210, 1218, 1226, 1234, 1241,
00736 1249, 1257, 1265, 1273, 1281, 1289, 1312, 1322, 1330, 1342,
00737 1356, 1368, 1380, 1392, 1438, 1461
00738 };
00739 #endif
00740
00741 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
00742
00743
00744 static const char *const yytname[] =
00745 {
00746 "$end", "error", "$undefined", "TOK_SLASH", "TOK_OPEN", "TOK_CLOSE",
00747 "TOK_STRING", "TOK_INTEGER", "TOK_FLOAT", "TOK_BOOLEAN", "TOK_IPV6TYPE",
00748 "TOK_DEBUGLEVEL", "TOK_IPVERSION", "TOK_HNA4", "TOK_HNA6", "TOK_PLUGIN",
00749 "TOK_INTERFACE_DEFAULTS", "TOK_INTERFACE", "TOK_NOINT", "TOK_TOS",
00750 "TOK_OLSRPORT", "TOK_RTPROTO", "TOK_RTTABLE", "TOK_RTTABLE_DEFAULT",
00751 "TOK_RTTABLE_TUNNEL", "TOK_RTTABLE_PRIORITY",
00752 "TOK_RTTABLE_DEFAULTOLSR_PRIORITY", "TOK_RTTABLE_TUNNEL_PRIORITY",
00753 "TOK_RTTABLE_DEFAULT_PRIORITY", "TOK_WILLINGNESS", "TOK_IPCCON",
00754 "TOK_FIBMETRIC", "TOK_USEHYST", "TOK_HYSTSCALE", "TOK_HYSTUPPER",
00755 "TOK_HYSTLOWER", "TOK_POLLRATE", "TOK_NICCHGSPOLLRT", "TOK_TCREDUNDANCY",
00756 "TOK_MPRCOVERAGE", "TOK_LQ_LEVEL", "TOK_LQ_FISH", "TOK_LQ_AGING",
00757 "TOK_LQ_PLUGIN", "TOK_LQ_NAT_THRESH", "TOK_LQ_MULT", "TOK_CLEAR_SCREEN",
00758 "TOK_PLPARAM", "TOK_MIN_TC_VTIME", "TOK_LOCK_FILE", "TOK_USE_NIIT",
00759 "TOK_SMART_GW", "TOK_SMART_GW_ALLOW_NAT", "TOK_SMART_GW_UPLINK",
00760 "TOK_SMART_GW_UPLINK_NAT", "TOK_SMART_GW_SPEED", "TOK_SMART_GW_PREFIX",
00761 "TOK_SRC_IP_ROUTES", "TOK_MAIN_IP", "TOK_HOSTLABEL", "TOK_NETLABEL",
00762 "TOK_MAXIPC", "TOK_IFMODE", "TOK_IPV4MULTICAST", "TOK_IP4BROADCAST",
00763 "TOK_IPV4BROADCAST", "TOK_IPV6MULTICAST", "TOK_IPV4SRC", "TOK_IPV6SRC",
00764 "TOK_IFWEIGHT", "TOK_HELLOINT", "TOK_HELLOVAL", "TOK_TCINT", "TOK_TCVAL",
00765 "TOK_MIDINT", "TOK_MIDVAL", "TOK_HNAINT", "TOK_HNAVAL", "TOK_AUTODETCHG",
00766 "TOK_IPV4_ADDR", "TOK_IPV6_ADDR", "TOK_DEFAULT", "TOK_AUTO", "TOK_NONE",
00767 "TOK_COMMENT", "$accept", "conf", "stmt", "block", "hna4body",
00768 "hna4stmts", "hna4stmt", "hna6body", "hna6stmts", "hna6stmt", "ipcbody",
00769 "ipcstmts", "ipcstmt", "ifblock", "ifnicks", "ifbody", "ifdbody",
00770 "ifstmts", "ifstmt", "plbody", "plstmts", "plstmt", "ifdblock",
00771 "imaxipc", "ipchost", "ipcnet", "iifweight", "isetifmode", "isetipv4mc",
00772 "isetipv6mc", "isetipv4src", "isetipv6src", "isethelloint",
00773 "isethelloval", "isettcint", "isettcval", "isetmidint", "isetmidval",
00774 "isethnaint", "isethnaval", "isetautodetchg", "isetlqmult", "idebug",
00775 "iipversion", "fibmetric", "ihna4entry", "ihna6entry", "ifstart",
00776 "ifnick", "bnoint", "atos", "aolsrport", "irtproto", "irttable",
00777 "irttable_default", "irttable_tunnel", "irttable_priority",
00778 "irttable_default_priority", "irttable_tunnel_priority",
00779 "irttable_defaultolsr_priority", "awillingness", "busehyst",
00780 "fhystscale", "fhystupper", "fhystlower", "fpollrate", "fnicchgspollrt",
00781 "atcredundancy", "amprcoverage", "alq_level", "alq_fish", "alq_aging",
00782 "amin_tc_vtime", "alock_file", "alq_plugin", "anat_thresh",
00783 "bclear_screen", "suse_niit", "bsmart_gw", "bsmart_gw_allow_nat",
00784 "ssmart_gw_uplink", "ismart_gw_speed", "bsmart_gw_uplink_nat",
00785 "ismart_gw_prefix", "bsrc_ip_routes", "amain_ip", "plblock", "plparam",
00786 "vcomment", 0
00787 };
00788 #endif
00789
00790 # ifdef YYPRINT
00791
00792
00793 static const yytype_uint16 yytoknum[] =
00794 {
00795 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
00796 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
00797 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
00798 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
00799 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
00800 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
00801 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
00802 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
00803 335, 336, 337, 338, 339
00804 };
00805 # endif
00806
00807
00808 static const yytype_uint8 yyr1[] =
00809 {
00810 0, 85, 86, 86, 86, 87, 87, 87, 87, 87,
00811 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
00812 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
00813 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
00814 87, 87, 87, 87, 87, 87, 88, 88, 88, 88,
00815 88, 88, 89, 90, 90, 91, 91, 92, 93, 93,
00816 94, 94, 95, 96, 96, 97, 97, 97, 97, 98,
00817 99, 99, 100, 101, 102, 102, 103, 103, 103, 103,
00818 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
00819 103, 103, 103, 103, 103, 104, 105, 105, 106, 106,
00820 107, 108, 109, 110, 110, 111, 112, 113, 114, 115,
00821 116, 116, 117, 118, 119, 120, 121, 122, 123, 124,
00822 125, 126, 126, 126, 127, 128, 129, 130, 130, 131,
00823 131, 132, 133, 134, 135, 136, 137, 138, 138, 139,
00824 139, 140, 140, 141, 141, 141, 142, 142, 142, 143,
00825 143, 143, 144, 144, 144, 145, 146, 147, 148, 149,
00826 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
00827 160, 161, 162, 163, 164, 165, 166, 167, 168, 168,
00828 169, 170, 170, 171, 172, 173
00829 };
00830
00831
00832 static const yytype_uint8 yyr2[] =
00833 {
00834 0, 2, 0, 2, 2, 1, 1, 1, 1, 1,
00835 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00836 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00837 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00838 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
00839 2, 2, 3, 0, 2, 1, 1, 3, 0, 2,
00840 1, 1, 3, 0, 2, 1, 1, 1, 1, 2,
00841 0, 2, 3, 3, 0, 2, 1, 1, 1, 2,
00842 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
00843 1, 1, 1, 1, 1, 3, 0, 2, 1, 1,
00844 1, 2, 2, 3, 4, 2, 2, 1, 2, 2,
00845 4, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00846 2, 3, 3, 3, 2, 2, 2, 2, 3, 2,
00847 3, 1, 1, 2, 2, 2, 2, 2, 2, 2,
00848 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00849 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00850 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00851 2, 2, 2, 2, 2, 2, 3, 2, 3, 4,
00852 2, 2, 2, 2, 3, 1
00853 };
00854
00855
00856
00857
00858 static const yytype_uint8 yydefact[] =
00859 {
00860 2, 0, 1, 0, 0, 0, 0, 0, 100, 131,
00861 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00862 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00863 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00864 0, 0, 0, 0, 0, 0, 0, 0, 0, 185,
00865 4, 3, 0, 0, 5, 6, 7, 70, 8, 9,
00866 10, 11, 12, 13, 14, 15, 18, 17, 16, 19,
00867 20, 21, 22, 23, 24, 25, 26, 27, 28, 30,
00868 32, 35, 36, 29, 31, 33, 37, 38, 39, 40,
00869 42, 41, 43, 44, 45, 0, 34, 124, 125, 53,
00870 46, 58, 47, 183, 133, 134, 135, 136, 137, 138,
00871 139, 140, 141, 142, 143, 144, 145, 152, 153, 154,
00872 149, 150, 151, 146, 147, 148, 155, 63, 48, 126,
00873 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
00874 166, 169, 170, 171, 167, 168, 172, 173, 174, 175,
00875 177, 0, 0, 180, 181, 182, 74, 50, 74, 49,
00876 69, 96, 51, 0, 0, 0, 176, 0, 178, 0,
00877 0, 132, 71, 0, 52, 0, 54, 56, 55, 57,
00878 0, 59, 61, 60, 62, 0, 0, 0, 64, 66,
00879 67, 68, 65, 179, 72, 0, 0, 0, 0, 0,
00880 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00881 0, 0, 0, 75, 77, 78, 82, 83, 84, 85,
00882 86, 87, 88, 89, 90, 91, 92, 93, 94, 76,
00883 73, 95, 0, 97, 98, 99, 0, 127, 0, 129,
00884 102, 0, 101, 0, 0, 0, 106, 107, 81, 79,
00885 80, 108, 109, 111, 105, 112, 113, 114, 115, 116,
00886 117, 118, 119, 120, 0, 128, 130, 0, 103, 122,
00887 123, 121, 0, 184, 104, 110
00888 };
00889
00890
00891 static const yytype_int16 yydefgoto[] =
00892 {
00893 -1, 1, 50, 51, 100, 163, 176, 102, 164, 181,
00894 128, 165, 188, 52, 160, 157, 159, 169, 213, 162,
00895 173, 233, 53, 189, 190, 191, 214, 215, 248, 216,
00896 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
00897 227, 228, 54, 55, 56, 177, 182, 57, 172, 58,
00898 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
00899 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
00900 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
00901 89, 90, 91, 92, 93, 94, 95, 234, 229
00902 };
00903
00904
00905
00906 #define YYPACT_NINF -138
00907 static const yytype_int16 yypact[] =
00908 {
00909 -138, 1, -138, -5, 56, 97, 116, 115, -138, -138,
00910 90, 86, 117, 119, 85, 89, 95, 83, 87, 91,
00911 93, 120, 118, 122, 114, 121, 124, 125, 126, 133,
00912 123, 135, 136, 137, 138, 139, 140, 141, 143, 146,
00913 144, 145, 147, 149, 148, 142, 17, 150, -69, -138,
00914 -138, -138, 154, 174, -138, -138, -138, -138, -138, -138,
00915 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00916 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00917 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00918 -138, -138, -138, -138, -138, 175, -138, -138, -138, -138,
00919 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00920 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00921 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00922 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00923 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00924 -138, 173, 0, -138, -138, -138, -138, -138, -138, -138,
00925 176, -138, -138, 4, 55, 77, -138, 177, -138, 3,
00926 41, -138, -138, 84, -138, 61, -138, -138, -138, -138,
00927 88, -138, -138, -138, -138, 68, 102, 178, -138, -138,
00928 -138, -138, -138, -138, -138, -75, 180, 104, 104, 104,
00929 107, 109, 110, 182, 183, 184, 185, 186, 187, 188,
00930 189, 190, 191, -138, -138, -138, -138, -138, -138, -138,
00931 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00932 -138, -138, 193, -138, -138, -138, 194, -138, 195, -138,
00933 -138, 81, -138, 196, 197, 198, -138, -138, -138, -138,
00934 -138, -138, -138, 200, -138, -138, -138, -138, -138, -138,
00935 -138, -138, -138, -138, 201, -138, -138, 202, -138, -138,
00936 -138, -138, 203, -138, -138, -138
00937 };
00938
00939
00940 static const yytype_int16 yypgoto[] =
00941 {
00942 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00943 -138, -138, -138, -138, -138, -138, -138, 50, -138, -138,
00944 -138, -138, -138, -138, -138, -138, -138, -138, -137, -138,
00945 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00946 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00947 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00948 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00949 -138, -138, -138, -138, -138, -138, -138, -138, -138, -138,
00950 -138, -138, -138, -138, -138, -138, -138, -138, -1
00951 };
00952
00953
00954
00955
00956
00957 #define YYTABLE_NINF -1
00958 static const yytype_uint16 yytable[] =
00959 {
00960 96, 2, 97, 167, 243, 244, 245, 168, 194, 174,
00961 154, 155, 3, 4, 5, 6, 7, 8, 9, 10,
00962 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
00963 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
00964 31, 32, 33, 34, 35, 36, 230, 37, 195, 38,
00965 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
00966 179, 249, 250, 98, 236, 196, 197, 198, 199, 200,
00967 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
00968 211, 212, 184, 175, 267, 49, 195, 49, 49, 231,
00969 114, 238, 108, 105, 117, 239, 110, 152, 120, 104,
00970 123, 99, 112, 196, 197, 198, 199, 200, 201, 202,
00971 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
00972 101, 103, 127, 130, 106, 49, 107, 126, 129, 131,
00973 136, 232, 132, 133, 134, 180, 185, 186, 187, 49,
00974 237, 135, 137, 138, 139, 141, 140, 240, 142, 151,
00975 143, 144, 145, 146, 147, 149, 148, 150, 156, 153,
00976 268, 49, 178, 183, 192, 115, 116, 109, 49, 118,
00977 119, 111, 235, 121, 122, 124, 125, 113, 158, 161,
00978 166, 241, 171, 247, 193, 242, 246, 251, 252, 254,
00979 253, 255, 256, 257, 258, 259, 260, 261, 262, 264,
00980 263, 265, 266, 272, 269, 270, 271, 273, 170, 274,
00981 275
00982 };
00983
00984 static const yytype_uint8 yycheck[] =
00985 {
00986 1, 0, 7, 3, 79, 80, 81, 7, 5, 5,
00987 79, 80, 11, 12, 13, 14, 15, 16, 17, 18,
00988 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
00989 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
00990 39, 40, 41, 42, 43, 44, 5, 46, 45, 48,
00991 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
00992 5, 198, 199, 7, 3, 62, 63, 64, 65, 66,
00993 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
00994 77, 78, 5, 79, 3, 84, 45, 84, 84, 5,
00995 7, 3, 7, 7, 7, 7, 7, 80, 7, 9,
00996 7, 4, 7, 62, 63, 64, 65, 66, 67, 68,
00997 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
00998 4, 6, 4, 9, 7, 84, 7, 7, 6, 8,
00999 7, 47, 8, 8, 8, 80, 59, 60, 61, 84,
01000 79, 8, 7, 7, 7, 6, 8, 79, 8, 7,
01001 9, 8, 6, 9, 9, 6, 9, 9, 4, 9,
01002 79, 84, 163, 164, 165, 82, 83, 82, 84, 82,
01003 83, 82, 173, 82, 83, 82, 83, 82, 4, 4,
01004 7, 79, 6, 79, 7, 7, 6, 80, 79, 7,
01005 80, 8, 8, 8, 8, 8, 8, 8, 8, 6,
01006 9, 7, 7, 3, 8, 8, 8, 6, 158, 7,
01007 7
01008 };
01009
01010
01011
01012 static const yytype_uint8 yystos[] =
01013 {
01014 0, 86, 0, 11, 12, 13, 14, 15, 16, 17,
01015 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
01016 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
01017 38, 39, 40, 41, 42, 43, 44, 46, 48, 49,
01018 50, 51, 52, 53, 54, 55, 56, 57, 58, 84,
01019 87, 88, 98, 107, 127, 128, 129, 132, 134, 135,
01020 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
01021 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
01022 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
01023 166, 167, 168, 169, 170, 171, 173, 7, 7, 4,
01024 89, 4, 92, 6, 9, 7, 7, 7, 7, 82,
01025 7, 82, 7, 82, 7, 82, 83, 7, 82, 83,
01026 7, 82, 83, 7, 82, 83, 7, 4, 95, 6,
01027 9, 8, 8, 8, 8, 8, 7, 7, 7, 7,
01028 8, 6, 8, 9, 8, 6, 9, 9, 9, 6,
01029 9, 7, 80, 9, 79, 80, 4, 100, 4, 101,
01030 99, 4, 104, 90, 93, 96, 7, 3, 7, 102,
01031 102, 6, 133, 105, 5, 79, 91, 130, 173, 5,
01032 80, 94, 131, 173, 5, 59, 60, 61, 97, 108,
01033 109, 110, 173, 7, 5, 45, 62, 63, 64, 65,
01034 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
01035 76, 77, 78, 103, 111, 112, 114, 115, 116, 117,
01036 118, 119, 120, 121, 122, 123, 124, 125, 126, 173,
01037 5, 5, 47, 106, 172, 173, 3, 79, 3, 7,
01038 79, 79, 7, 79, 80, 81, 6, 79, 113, 113,
01039 113, 80, 79, 80, 7, 8, 8, 8, 8, 8,
01040 8, 8, 8, 9, 6, 7, 7, 3, 79, 8,
01041 8, 8, 3, 6, 7, 7
01042 };
01043
01044 #define yyerrok (yyerrstatus = 0)
01045 #define yyclearin (yychar = YYEMPTY)
01046 #define YYEMPTY (-2)
01047 #define YYEOF 0
01048
01049 #define YYACCEPT goto yyacceptlab
01050 #define YYABORT goto yyabortlab
01051 #define YYERROR goto yyerrorlab
01052
01053
01054
01055
01056
01057
01058 #define YYFAIL goto yyerrlab
01059
01060 #define YYRECOVERING() (!!yyerrstatus)
01061
01062 #define YYBACKUP(Token, Value) \
01063 do \
01064 if (yychar == YYEMPTY && yylen == 1) \
01065 { \
01066 yychar = (Token); \
01067 yylval = (Value); \
01068 yytoken = YYTRANSLATE (yychar); \
01069 YYPOPSTACK (1); \
01070 goto yybackup; \
01071 } \
01072 else \
01073 { \
01074 yyerror (YY_("syntax error: cannot back up")); \
01075 YYERROR; \
01076 } \
01077 while (YYID (0))
01078
01079
01080 #define YYTERROR 1
01081 #define YYERRCODE 256
01082
01083
01084
01085
01086
01087
01088 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
01089 #ifndef YYLLOC_DEFAULT
01090 # define YYLLOC_DEFAULT(Current, Rhs, N) \
01091 do \
01092 if (YYID (N)) \
01093 { \
01094 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
01095 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
01096 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
01097 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
01098 } \
01099 else \
01100 { \
01101 (Current).first_line = (Current).last_line = \
01102 YYRHSLOC (Rhs, 0).last_line; \
01103 (Current).first_column = (Current).last_column = \
01104 YYRHSLOC (Rhs, 0).last_column; \
01105 } \
01106 while (YYID (0))
01107 #endif
01108
01109
01110
01111
01112
01113
01114 #ifndef YY_LOCATION_PRINT
01115 # if YYLTYPE_IS_TRIVIAL
01116 # define YY_LOCATION_PRINT(File, Loc) \
01117 fprintf (File, "%d.%d-%d.%d", \
01118 (Loc).first_line, (Loc).first_column, \
01119 (Loc).last_line, (Loc).last_column)
01120 # else
01121 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
01122 # endif
01123 #endif
01124
01125
01126
01127
01128 #ifdef YYLEX_PARAM
01129 # define YYLEX yylex (YYLEX_PARAM)
01130 #else
01131 # define YYLEX yylex ()
01132 #endif
01133
01134
01135 #if YYDEBUG
01136
01137 # ifndef YYFPRINTF
01138 # include <stdio.h>
01139 # define YYFPRINTF fprintf
01140 # endif
01141
01142 # define YYDPRINTF(Args) \
01143 do { \
01144 if (yydebug) \
01145 YYFPRINTF Args; \
01146 } while (YYID (0))
01147
01148 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
01149 do { \
01150 if (yydebug) \
01151 { \
01152 YYFPRINTF (stderr, "%s ", Title); \
01153 yy_symbol_print (stderr, \
01154 Type, Value); \
01155 YYFPRINTF (stderr, "\n"); \
01156 } \
01157 } while (YYID (0))
01158
01159
01160
01161
01162
01163
01164
01165 #if (defined __STDC__ || defined __C99__FUNC__ \
01166 || defined __cplusplus || defined _MSC_VER)
01167 static void
01168 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
01169 #else
01170 static void
01171 yy_symbol_value_print (yyoutput, yytype, yyvaluep)
01172 FILE *yyoutput;
01173 int yytype;
01174 YYSTYPE const * const yyvaluep;
01175 #endif
01176 {
01177 if (!yyvaluep)
01178 return;
01179 # ifdef YYPRINT
01180 if (yytype < YYNTOKENS)
01181 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
01182 # else
01183 YYUSE (yyoutput);
01184 # endif
01185 switch (yytype)
01186 {
01187 default:
01188 break;
01189 }
01190 }
01191
01192
01193
01194
01195
01196
01197 #if (defined __STDC__ || defined __C99__FUNC__ \
01198 || defined __cplusplus || defined _MSC_VER)
01199 static void
01200 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
01201 #else
01202 static void
01203 yy_symbol_print (yyoutput, yytype, yyvaluep)
01204 FILE *yyoutput;
01205 int yytype;
01206 YYSTYPE const * const yyvaluep;
01207 #endif
01208 {
01209 if (yytype < YYNTOKENS)
01210 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
01211 else
01212 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
01213
01214 yy_symbol_value_print (yyoutput, yytype, yyvaluep);
01215 YYFPRINTF (yyoutput, ")");
01216 }
01217
01218
01219
01220
01221
01222
01223 #if (defined __STDC__ || defined __C99__FUNC__ \
01224 || defined __cplusplus || defined _MSC_VER)
01225 static void
01226 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
01227 #else
01228 static void
01229 yy_stack_print (yybottom, yytop)
01230 yytype_int16 *yybottom;
01231 yytype_int16 *yytop;
01232 #endif
01233 {
01234 YYFPRINTF (stderr, "Stack now");
01235 for (; yybottom <= yytop; yybottom++)
01236 {
01237 int yybot = *yybottom;
01238 YYFPRINTF (stderr, " %d", yybot);
01239 }
01240 YYFPRINTF (stderr, "\n");
01241 }
01242
01243 # define YY_STACK_PRINT(Bottom, Top) \
01244 do { \
01245 if (yydebug) \
01246 yy_stack_print ((Bottom), (Top)); \
01247 } while (YYID (0))
01248
01249
01250
01251
01252
01253
01254 #if (defined __STDC__ || defined __C99__FUNC__ \
01255 || defined __cplusplus || defined _MSC_VER)
01256 static void
01257 yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
01258 #else
01259 static void
01260 yy_reduce_print (yyvsp, yyrule)
01261 YYSTYPE *yyvsp;
01262 int yyrule;
01263 #endif
01264 {
01265 int yynrhs = yyr2[yyrule];
01266 int yyi;
01267 unsigned long int yylno = yyrline[yyrule];
01268 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
01269 yyrule - 1, yylno);
01270
01271 for (yyi = 0; yyi < yynrhs; yyi++)
01272 {
01273 YYFPRINTF (stderr, " $%d = ", yyi + 1);
01274 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
01275 &(yyvsp[(yyi + 1) - (yynrhs)])
01276 );
01277 YYFPRINTF (stderr, "\n");
01278 }
01279 }
01280
01281 # define YY_REDUCE_PRINT(Rule) \
01282 do { \
01283 if (yydebug) \
01284 yy_reduce_print (yyvsp, Rule); \
01285 } while (YYID (0))
01286
01287
01288
01289 int yydebug;
01290 #else
01291 # define YYDPRINTF(Args)
01292 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
01293 # define YY_STACK_PRINT(Bottom, Top)
01294 # define YY_REDUCE_PRINT(Rule)
01295 #endif
01296
01297
01298
01299 #ifndef YYINITDEPTH
01300 # define YYINITDEPTH 200
01301 #endif
01302
01303
01304
01305
01306
01307
01308
01309
01310 #ifndef YYMAXDEPTH
01311 # define YYMAXDEPTH 10000
01312 #endif
01313
01314
01315
01316 #if YYERROR_VERBOSE
01317
01318 # ifndef yystrlen
01319 # if defined __GLIBC__ && defined _STRING_H
01320 # define yystrlen strlen
01321 # else
01322
01323 #if (defined __STDC__ || defined __C99__FUNC__ \
01324 || defined __cplusplus || defined _MSC_VER)
01325 static YYSIZE_T
01326 yystrlen (const char *yystr)
01327 #else
01328 static YYSIZE_T
01329 yystrlen (yystr)
01330 const char *yystr;
01331 #endif
01332 {
01333 YYSIZE_T yylen;
01334 for (yylen = 0; yystr[yylen]; yylen++)
01335 continue;
01336 return yylen;
01337 }
01338 # endif
01339 # endif
01340
01341 # ifndef yystpcpy
01342 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
01343 # define yystpcpy stpcpy
01344 # else
01345
01346
01347 #if (defined __STDC__ || defined __C99__FUNC__ \
01348 || defined __cplusplus || defined _MSC_VER)
01349 static char *
01350 yystpcpy (char *yydest, const char *yysrc)
01351 #else
01352 static char *
01353 yystpcpy (yydest, yysrc)
01354 char *yydest;
01355 const char *yysrc;
01356 #endif
01357 {
01358 char *yyd = yydest;
01359 const char *yys = yysrc;
01360
01361 while ((*yyd++ = *yys++) != '\0')
01362 continue;
01363
01364 return yyd - 1;
01365 }
01366 # endif
01367 # endif
01368
01369 # ifndef yytnamerr
01370
01371
01372
01373
01374
01375
01376
01377 static YYSIZE_T
01378 yytnamerr (char *yyres, const char *yystr)
01379 {
01380 if (*yystr == '"')
01381 {
01382 YYSIZE_T yyn = 0;
01383 char const *yyp = yystr;
01384
01385 for (;;)
01386 switch (*++yyp)
01387 {
01388 case '\'':
01389 case ',':
01390 goto do_not_strip_quotes;
01391
01392 case '\\':
01393 if (*++yyp != '\\')
01394 goto do_not_strip_quotes;
01395
01396 default:
01397 if (yyres)
01398 yyres[yyn] = *yyp;
01399 yyn++;
01400 break;
01401
01402 case '"':
01403 if (yyres)
01404 yyres[yyn] = '\0';
01405 return yyn;
01406 }
01407 do_not_strip_quotes: ;
01408 }
01409
01410 if (! yyres)
01411 return yystrlen (yystr);
01412
01413 return yystpcpy (yyres, yystr) - yyres;
01414 }
01415 # endif
01416
01417
01418
01419
01420
01421
01422
01423
01424 static YYSIZE_T
01425 yysyntax_error (char *yyresult, int yystate, int yychar)
01426 {
01427 int yyn = yypact[yystate];
01428
01429 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
01430 return 0;
01431 else
01432 {
01433 int yytype = YYTRANSLATE (yychar);
01434 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
01435 YYSIZE_T yysize = yysize0;
01436 YYSIZE_T yysize1;
01437 int yysize_overflow = 0;
01438 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
01439 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
01440 int yyx;
01441
01442 # if 0
01443
01444
01445 YY_("syntax error, unexpected %s");
01446 YY_("syntax error, unexpected %s, expecting %s");
01447 YY_("syntax error, unexpected %s, expecting %s or %s");
01448 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
01449 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
01450 # endif
01451 char *yyfmt;
01452 char const *yyf;
01453 static char const yyunexpected[] = "syntax error, unexpected %s";
01454 static char const yyexpecting[] = ", expecting %s";
01455 static char const yyor[] = " or %s";
01456 char yyformat[sizeof yyunexpected
01457 + sizeof yyexpecting - 1
01458 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
01459 * (sizeof yyor - 1))];
01460 char const *yyprefix = yyexpecting;
01461
01462
01463
01464 int yyxbegin = yyn < 0 ? -yyn : 0;
01465
01466
01467 int yychecklim = YYLAST - yyn + 1;
01468 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
01469 int yycount = 1;
01470
01471 yyarg[0] = yytname[yytype];
01472 yyfmt = yystpcpy (yyformat, yyunexpected);
01473
01474 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
01475 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
01476 {
01477 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
01478 {
01479 yycount = 1;
01480 yysize = yysize0;
01481 yyformat[sizeof yyunexpected - 1] = '\0';
01482 break;
01483 }
01484 yyarg[yycount++] = yytname[yyx];
01485 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
01486 yysize_overflow |= (yysize1 < yysize);
01487 yysize = yysize1;
01488 yyfmt = yystpcpy (yyfmt, yyprefix);
01489 yyprefix = yyor;
01490 }
01491
01492 yyf = YY_(yyformat);
01493 yysize1 = yysize + yystrlen (yyf);
01494 yysize_overflow |= (yysize1 < yysize);
01495 yysize = yysize1;
01496
01497 if (yysize_overflow)
01498 return YYSIZE_MAXIMUM;
01499
01500 if (yyresult)
01501 {
01502
01503
01504
01505 char *yyp = yyresult;
01506 int yyi = 0;
01507 while ((*yyp = *yyf) != '\0')
01508 {
01509 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
01510 {
01511 yyp += yytnamerr (yyp, yyarg[yyi++]);
01512 yyf += 2;
01513 }
01514 else
01515 {
01516 yyp++;
01517 yyf++;
01518 }
01519 }
01520 }
01521 return yysize;
01522 }
01523 }
01524 #endif
01525
01526
01527
01528
01529
01530
01531
01532 #if (defined __STDC__ || defined __C99__FUNC__ \
01533 || defined __cplusplus || defined _MSC_VER)
01534 static void
01535 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
01536 #else
01537 static void
01538 yydestruct (yymsg, yytype, yyvaluep)
01539 const char *yymsg;
01540 int yytype;
01541 YYSTYPE *yyvaluep;
01542 #endif
01543 {
01544 YYUSE (yyvaluep);
01545
01546 if (!yymsg)
01547 yymsg = "Deleting";
01548 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
01549
01550 switch (yytype)
01551 {
01552
01553 default:
01554 break;
01555 }
01556 }
01557
01558
01559 #ifdef YYPARSE_PARAM
01560 #if defined __STDC__ || defined __cplusplus
01561 int yyparse (void *YYPARSE_PARAM);
01562 #else
01563 int yyparse ();
01564 #endif
01565 #else
01566 #if defined __STDC__ || defined __cplusplus
01567 int yyparse (void);
01568 #else
01569 int yyparse ();
01570 #endif
01571 #endif
01572
01573
01574
01575 int yychar;
01576
01577
01578 YYSTYPE yylval;
01579
01580
01581 int yynerrs;
01582
01583
01584
01585
01586
01587
01588
01589 #ifdef YYPARSE_PARAM
01590 #if (defined __STDC__ || defined __C99__FUNC__ \
01591 || defined __cplusplus || defined _MSC_VER)
01592 int
01593 yyparse (void *YYPARSE_PARAM)
01594 #else
01595 int
01596 yyparse (YYPARSE_PARAM)
01597 void *YYPARSE_PARAM;
01598 #endif
01599 #else
01600 #if (defined __STDC__ || defined __C99__FUNC__ \
01601 || defined __cplusplus || defined _MSC_VER)
01602 int
01603 yyparse (void)
01604 #else
01605 int
01606 yyparse ()
01607
01608 #endif
01609 #endif
01610 {
01611
01612
01613 int yystate;
01614
01615 int yyerrstatus;
01616
01617
01618
01619
01620
01621
01622
01623
01624
01625 yytype_int16 yyssa[YYINITDEPTH];
01626 yytype_int16 *yyss;
01627 yytype_int16 *yyssp;
01628
01629
01630 YYSTYPE yyvsa[YYINITDEPTH];
01631 YYSTYPE *yyvs;
01632 YYSTYPE *yyvsp;
01633
01634 YYSIZE_T yystacksize;
01635
01636 int yyn;
01637 int yyresult;
01638
01639 int yytoken;
01640
01641
01642 YYSTYPE yyval;
01643
01644 #if YYERROR_VERBOSE
01645
01646 char yymsgbuf[128];
01647 char *yymsg = yymsgbuf;
01648 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
01649 #endif
01650
01651 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
01652
01653
01654
01655 int yylen = 0;
01656
01657 yytoken = 0;
01658 yyss = yyssa;
01659 yyvs = yyvsa;
01660 yystacksize = YYINITDEPTH;
01661
01662 YYDPRINTF ((stderr, "Starting parse\n"));
01663
01664 yystate = 0;
01665 yyerrstatus = 0;
01666 yynerrs = 0;
01667 yychar = YYEMPTY;
01668
01669
01670
01671
01672
01673 yyssp = yyss;
01674 yyvsp = yyvs;
01675
01676 goto yysetstate;
01677
01678
01679
01680
01681 yynewstate:
01682
01683
01684 yyssp++;
01685
01686 yysetstate:
01687 *yyssp = yystate;
01688
01689 if (yyss + yystacksize - 1 <= yyssp)
01690 {
01691
01692 YYSIZE_T yysize = yyssp - yyss + 1;
01693
01694 #ifdef yyoverflow
01695 {
01696
01697
01698
01699 YYSTYPE *yyvs1 = yyvs;
01700 yytype_int16 *yyss1 = yyss;
01701
01702
01703
01704
01705
01706 yyoverflow (YY_("memory exhausted"),
01707 &yyss1, yysize * sizeof (*yyssp),
01708 &yyvs1, yysize * sizeof (*yyvsp),
01709 &yystacksize);
01710
01711 yyss = yyss1;
01712 yyvs = yyvs1;
01713 }
01714 #else
01715 # ifndef YYSTACK_RELOCATE
01716 goto yyexhaustedlab;
01717 # else
01718
01719 if (YYMAXDEPTH <= yystacksize)
01720 goto yyexhaustedlab;
01721 yystacksize *= 2;
01722 if (YYMAXDEPTH < yystacksize)
01723 yystacksize = YYMAXDEPTH;
01724
01725 {
01726 yytype_int16 *yyss1 = yyss;
01727 union yyalloc *yyptr =
01728 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
01729 if (! yyptr)
01730 goto yyexhaustedlab;
01731 YYSTACK_RELOCATE (yyss_alloc, yyss);
01732 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
01733 # undef YYSTACK_RELOCATE
01734 if (yyss1 != yyssa)
01735 YYSTACK_FREE (yyss1);
01736 }
01737 # endif
01738 #endif
01739
01740 yyssp = yyss + yysize - 1;
01741 yyvsp = yyvs + yysize - 1;
01742
01743 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
01744 (unsigned long int) yystacksize));
01745
01746 if (yyss + yystacksize - 1 <= yyssp)
01747 YYABORT;
01748 }
01749
01750 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
01751
01752 if (yystate == YYFINAL)
01753 YYACCEPT;
01754
01755 goto yybackup;
01756
01757
01758
01759
01760 yybackup:
01761
01762
01763
01764
01765
01766 yyn = yypact[yystate];
01767 if (yyn == YYPACT_NINF)
01768 goto yydefault;
01769
01770
01771
01772
01773 if (yychar == YYEMPTY)
01774 {
01775 YYDPRINTF ((stderr, "Reading a token: "));
01776 yychar = YYLEX;
01777 }
01778
01779 if (yychar <= YYEOF)
01780 {
01781 yychar = yytoken = YYEOF;
01782 YYDPRINTF ((stderr, "Now at end of input.\n"));
01783 }
01784 else
01785 {
01786 yytoken = YYTRANSLATE (yychar);
01787 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
01788 }
01789
01790
01791
01792 yyn += yytoken;
01793 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
01794 goto yydefault;
01795 yyn = yytable[yyn];
01796 if (yyn <= 0)
01797 {
01798 if (yyn == 0 || yyn == YYTABLE_NINF)
01799 goto yyerrlab;
01800 yyn = -yyn;
01801 goto yyreduce;
01802 }
01803
01804
01805
01806 if (yyerrstatus)
01807 yyerrstatus--;
01808
01809
01810 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
01811
01812
01813 yychar = YYEMPTY;
01814
01815 yystate = yyn;
01816 *++yyvsp = yylval;
01817
01818 goto yynewstate;
01819
01820
01821
01822
01823
01824 yydefault:
01825 yyn = yydefact[yystate];
01826 if (yyn == 0)
01827 goto yyerrlab;
01828 goto yyreduce;
01829
01830
01831
01832
01833
01834 yyreduce:
01835
01836 yylen = yyr2[yyn];
01837
01838
01839
01840
01841
01842
01843
01844
01845
01846 yyval = yyvsp[1-yylen];
01847
01848
01849 YY_REDUCE_PRINT (yyn);
01850 switch (yyn)
01851 {
01852 case 73:
01853
01854
01855 #line 356 "src/cfgparser/oparse.y"
01856 {
01857 struct olsr_if *in = olsr_cnf->interfaces;
01858 printf("\nInterface Defaults");
01859
01860 olsr_cnf->interfaces = in->next;
01861 ifs_in_curr_cfg=0;
01862
01863 free(in->cnfi);
01864 free(in);
01865
01866 ;}
01867 break;
01868
01869 case 100:
01870
01871
01872 #line 404 "src/cfgparser/oparse.y"
01873 {
01874 struct olsr_if *in = malloc(sizeof(*in));
01875
01876 if (in == NULL) {
01877 fprintf(stderr, "Out of memory(ADD IF)\n");
01878 YYABORT;
01879 }
01880
01881 in->cnf = get_default_if_config();
01882 in->cnfi = get_default_if_config();
01883
01884 if (in->cnf == NULL || in->cnfi == NULL) {
01885 fprintf(stderr, "Out of memory(ADD DEFIFRULE)\n");
01886 YYABORT;
01887 }
01888
01889
01890
01891
01892 olsr_cnf->interface_defaults = in->cnf;
01893
01894
01895 in->next = olsr_cnf->interfaces;
01896 olsr_cnf->interfaces = in;
01897 ifs_in_curr_cfg=1;
01898
01899 fflush(stdout);
01900 ;}
01901 break;
01902
01903 case 101:
01904
01905
01906 #line 435 "src/cfgparser/oparse.y"
01907 {
01908 olsr_cnf->ipc_connections = (yyvsp[(2) - (2)])->integer;
01909 free((yyvsp[(2) - (2)]));
01910 ;}
01911 break;
01912
01913 case 102:
01914
01915
01916 #line 442 "src/cfgparser/oparse.y"
01917 {
01918 union olsr_ip_addr ipaddr;
01919 PARSER_DEBUG_PRINTF("\tIPC host: %s\n", (yyvsp[(2) - (2)])->string);
01920
01921 if (inet_aton((yyvsp[(2) - (2)])->string, &ipaddr.v4) == 0) {
01922 fprintf(stderr, "Failed converting IP address IPC %s\n", (yyvsp[(2) - (2)])->string);
01923 YYABORT;
01924 }
01925
01926 ip_prefix_list_add(&olsr_cnf->ipc_nets, &ipaddr, olsr_cnf->maxplen);
01927
01928 free((yyvsp[(2) - (2)])->string);
01929 free((yyvsp[(2) - (2)]));
01930 ;}
01931 break;
01932
01933 case 103:
01934
01935
01936 #line 459 "src/cfgparser/oparse.y"
01937 {
01938 union olsr_ip_addr ipaddr, netmask;
01939
01940 PARSER_DEBUG_PRINTF("\tIPC net: %s/%s\n", (yyvsp[(2) - (3)])->string, (yyvsp[(3) - (3)])->string);
01941
01942 if (inet_pton(AF_INET, (yyvsp[(2) - (3)])->string, &ipaddr.v4) == 0) {
01943 fprintf(stderr, "Failed converting IP net IPC %s\n", (yyvsp[(2) - (3)])->string);
01944 YYABORT;
01945 }
01946
01947 if (inet_pton(AF_INET, (yyvsp[(3) - (3)])->string, &netmask.v4) == 0) {
01948 fprintf(stderr, "Failed converting IP mask IPC %s\n", (yyvsp[(3) - (3)])->string);
01949 YYABORT;
01950 }
01951
01952 ip_prefix_list_add(&olsr_cnf->ipc_nets, &ipaddr, olsr_netmask_to_prefix(&netmask));
01953
01954 free((yyvsp[(2) - (3)])->string);
01955 free((yyvsp[(2) - (3)]));
01956 free((yyvsp[(3) - (3)])->string);
01957 free((yyvsp[(3) - (3)]));
01958 ;}
01959 break;
01960
01961 case 104:
01962
01963
01964 #line 482 "src/cfgparser/oparse.y"
01965 {
01966 union olsr_ip_addr ipaddr;
01967
01968 PARSER_DEBUG_PRINTF("\tIPC net: %s/%s\n", (yyvsp[(2) - (4)])->string, (yyvsp[(3) - (4)])->string);
01969
01970 if (inet_pton(AF_INET, (yyvsp[(2) - (4)])->string, &ipaddr.v4) == 0) {
01971 fprintf(stderr, "Failed converting IP net IPC %s\n", (yyvsp[(2) - (4)])->string);
01972 YYABORT;
01973 }
01974
01975 if ((yyvsp[(4) - (4)])->integer > olsr_cnf->maxplen) {
01976 fprintf(stderr, "ipcnet: Prefix len %u > %d is not allowed!\n", (yyvsp[(4) - (4)])->integer, olsr_cnf->maxplen);
01977 YYABORT;
01978 }
01979
01980 ip_prefix_list_add(&olsr_cnf->ipc_nets, &ipaddr, (yyvsp[(4) - (4)])->integer);
01981
01982 free((yyvsp[(2) - (4)])->string);
01983 free((yyvsp[(2) - (4)]));
01984 free((yyvsp[(4) - (4)]));
01985 ;}
01986 break;
01987
01988 case 105:
01989
01990
01991 #line 506 "src/cfgparser/oparse.y"
01992 {
01993 int ifcnt = ifs_in_curr_cfg;
01994 struct olsr_if *ifs = olsr_cnf->interfaces;
01995
01996 PARSER_DEBUG_PRINTF("Fixed willingness: %d\n", (yyvsp[(2) - (2)])->integer);
01997
01998 while (ifcnt) {
01999 ifs->cnf->weight.value = (yyvsp[(2) - (2)])->integer;
02000 ifs->cnf->weight.fixed = true;
02001 ifs->cnfi->weight.value = (yyvsp[(2) - (2)])->integer;
02002 ifs->cnfi->weight.fixed = true;
02003
02004 ifs = ifs->next;
02005 ifcnt--;
02006 }
02007
02008 free((yyvsp[(2) - (2)]));
02009 ;}
02010 break;
02011
02012 case 106:
02013
02014
02015 #line 527 "src/cfgparser/oparse.y"
02016 {
02017 int ifcnt = ifs_in_curr_cfg;
02018 struct olsr_if *ifs = olsr_cnf->interfaces;
02019 int mode = (strcmp((yyvsp[(2) - (2)])->string, "ether") == 0)?IF_MODE_ETHER:IF_MODE_MESH;
02020
02021 PARSER_DEBUG_PRINTF("\tMode: %s\n", (yyvsp[(2) - (2)])->string);
02022
02023 SET_IFS_CONF(ifs, ifcnt, mode, mode);
02024
02025 free((yyvsp[(2) - (2)])->string);
02026 free((yyvsp[(2) - (2)]));
02027 ;}
02028 break;
02029
02030 case 107:
02031
02032
02033 #line 543 "src/cfgparser/oparse.y"
02034 {
02035 struct in_addr in;
02036 int ifcnt = ifs_in_curr_cfg;
02037 struct olsr_if *ifs = olsr_cnf->interfaces;
02038
02039 PARSER_DEBUG_PRINTF("\tIPv4 broadcast: %s\n", (yyvsp[(1) - (1)])->string);
02040
02041 if (inet_aton((yyvsp[(1) - (1)])->string, &in) == 0) {
02042 fprintf(stderr, "isetipv4br: Failed converting IP address %s\n", (yyvsp[(1) - (1)])->string);
02043 YYABORT;
02044 }
02045
02046 SET_IFS_CONF(ifs, ifcnt, ipv4_multicast.v4, in);
02047
02048 free((yyvsp[(1) - (1)])->string);
02049 free((yyvsp[(1) - (1)]));
02050 ;}
02051 break;
02052
02053 case 108:
02054
02055
02056 #line 563 "src/cfgparser/oparse.y"
02057 {
02058 struct in6_addr in6;
02059 int ifcnt = ifs_in_curr_cfg;
02060 struct olsr_if *ifs = olsr_cnf->interfaces;
02061
02062 PARSER_DEBUG_PRINTF("\tIPv6 multicast: %s\n", (yyvsp[(2) - (2)])->string);
02063
02064 if (inet_pton(AF_INET6, (yyvsp[(2) - (2)])->string, &in6) <= 0) {
02065 fprintf(stderr, "isetipv6mc: Failed converting IP address %s\n", (yyvsp[(2) - (2)])->string);
02066 YYABORT;
02067 }
02068
02069 SET_IFS_CONF(ifs, ifcnt, ipv6_multicast.v6, in6);
02070
02071 free((yyvsp[(2) - (2)])->string);
02072 free((yyvsp[(2) - (2)]));
02073 ;}
02074 break;
02075
02076 case 109:
02077
02078
02079 #line 583 "src/cfgparser/oparse.y"
02080 {
02081 struct in_addr in;
02082 int ifcnt = ifs_in_curr_cfg;
02083 struct olsr_if *ifs = olsr_cnf->interfaces;
02084
02085 PARSER_DEBUG_PRINTF("\tIPv4 src: %s\n", (yyvsp[(2) - (2)])->string);
02086
02087 if (inet_aton((yyvsp[(2) - (2)])->string, &in) == 0) {
02088 fprintf(stderr, "isetipv4src: Failed converting IP address %s\n", (yyvsp[(2) - (2)])->string);
02089 YYABORT;
02090 }
02091
02092 SET_IFS_CONF(ifs, ifcnt, ipv4_src.v4, in);
02093
02094 free((yyvsp[(2) - (2)])->string);
02095 free((yyvsp[(2) - (2)]));
02096 ;}
02097 break;
02098
02099 case 110:
02100
02101
02102 #line 603 "src/cfgparser/oparse.y"
02103 {
02104 struct olsr_ip_prefix pr6;
02105 int ifcnt = ifs_in_curr_cfg;
02106 struct olsr_if *ifs = olsr_cnf->interfaces;
02107
02108 PARSER_DEBUG_PRINTF("\tIPv6 src prefix: %s/%d\n", (yyvsp[(2) - (4)])->string, (yyvsp[(4) - (4)])->integer);
02109
02110 if (inet_pton(AF_INET6, (yyvsp[(2) - (4)])->string, &pr6.prefix.v6) <= 0) {
02111 fprintf(stderr, "isetipv6src: Failed converting IP address %s\n", (yyvsp[(2) - (4)])->string);
02112 YYABORT;
02113 }
02114 if ((yyvsp[(4) - (4)])->integer > 128) {
02115 fprintf(stderr, "isetipv6src: Illegal Prefixlength %d\n", (yyvsp[(4) - (4)])->integer);
02116 YYABORT;
02117 }
02118 pr6.prefix_len = (yyvsp[(4) - (4)])->integer;
02119
02120 SET_IFS_CONF(ifs, ifcnt, ipv6_src, pr6);
02121
02122 free((yyvsp[(2) - (4)])->string);
02123 free((yyvsp[(2) - (4)]));
02124 ;}
02125 break;
02126
02127 case 111:
02128
02129
02130 #line 626 "src/cfgparser/oparse.y"
02131 {
02132 struct olsr_ip_prefix pr6;
02133 int ifcnt = ifs_in_curr_cfg;
02134 struct olsr_if *ifs = olsr_cnf->interfaces;
02135
02136 PARSER_DEBUG_PRINTF("\tIPv6 src prefix: %s/%d\n", (yyvsp[(2) - (2)])->string, 128);
02137
02138 if (inet_pton(AF_INET6, (yyvsp[(2) - (2)])->string, &pr6.prefix.v6) <= 0) {
02139 fprintf(stderr, "isetipv6src: Failed converting IP address %s\n", (yyvsp[(2) - (2)])->string);
02140 YYABORT;
02141 }
02142 pr6.prefix_len = 128;
02143
02144 SET_IFS_CONF(ifs, ifcnt, ipv6_src, pr6);
02145
02146 free((yyvsp[(2) - (2)])->string);
02147 free((yyvsp[(2) - (2)]));
02148 ;}
02149 break;
02150
02151 case 112:
02152
02153
02154 #line 647 "src/cfgparser/oparse.y"
02155 {
02156 int ifcnt = ifs_in_curr_cfg;
02157 struct olsr_if *ifs = olsr_cnf->interfaces;
02158
02159 PARSER_DEBUG_PRINTF("\tHELLO interval: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02160
02161 SET_IFS_CONF(ifs, ifcnt, hello_params.emission_interval, (yyvsp[(2) - (2)])->floating);
02162
02163 free((yyvsp[(2) - (2)]));
02164 ;}
02165 break;
02166
02167 case 113:
02168
02169
02170 #line 659 "src/cfgparser/oparse.y"
02171 {
02172 int ifcnt = ifs_in_curr_cfg;
02173 struct olsr_if *ifs = olsr_cnf->interfaces;
02174
02175 PARSER_DEBUG_PRINTF("\tHELLO validity: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02176
02177 SET_IFS_CONF(ifs, ifcnt, hello_params.validity_time, (yyvsp[(2) - (2)])->floating);
02178
02179 free((yyvsp[(2) - (2)]));
02180 ;}
02181 break;
02182
02183 case 114:
02184
02185
02186 #line 671 "src/cfgparser/oparse.y"
02187 {
02188 int ifcnt = ifs_in_curr_cfg;
02189 struct olsr_if *ifs = olsr_cnf->interfaces;
02190
02191 PARSER_DEBUG_PRINTF("\tTC interval: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02192
02193 SET_IFS_CONF(ifs, ifcnt, tc_params.emission_interval, (yyvsp[(2) - (2)])->floating);
02194
02195 free((yyvsp[(2) - (2)]));
02196 ;}
02197 break;
02198
02199 case 115:
02200
02201
02202 #line 683 "src/cfgparser/oparse.y"
02203 {
02204 int ifcnt = ifs_in_curr_cfg;
02205 struct olsr_if *ifs = olsr_cnf->interfaces;
02206
02207 PARSER_DEBUG_PRINTF("\tTC validity: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02208
02209 SET_IFS_CONF(ifs, ifcnt, tc_params.validity_time, (yyvsp[(2) - (2)])->floating);
02210
02211 free((yyvsp[(2) - (2)]));
02212 ;}
02213 break;
02214
02215 case 116:
02216
02217
02218 #line 695 "src/cfgparser/oparse.y"
02219 {
02220 int ifcnt = ifs_in_curr_cfg;
02221 struct olsr_if *ifs = olsr_cnf->interfaces;
02222
02223
02224 PARSER_DEBUG_PRINTF("\tMID interval: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02225
02226 SET_IFS_CONF(ifs, ifcnt, mid_params.emission_interval, (yyvsp[(2) - (2)])->floating);
02227
02228 free((yyvsp[(2) - (2)]));
02229 ;}
02230 break;
02231
02232 case 117:
02233
02234
02235 #line 708 "src/cfgparser/oparse.y"
02236 {
02237 int ifcnt = ifs_in_curr_cfg;
02238 struct olsr_if *ifs = olsr_cnf->interfaces;
02239
02240 PARSER_DEBUG_PRINTF("\tMID validity: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02241
02242 SET_IFS_CONF(ifs, ifcnt, mid_params.validity_time, (yyvsp[(2) - (2)])->floating);
02243
02244 free((yyvsp[(2) - (2)]));
02245 ;}
02246 break;
02247
02248 case 118:
02249
02250
02251 #line 720 "src/cfgparser/oparse.y"
02252 {
02253 int ifcnt = ifs_in_curr_cfg;
02254 struct olsr_if *ifs = olsr_cnf->interfaces;
02255
02256 PARSER_DEBUG_PRINTF("\tHNA interval: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02257
02258 SET_IFS_CONF(ifs, ifcnt, hna_params.emission_interval, (yyvsp[(2) - (2)])->floating);
02259
02260 free((yyvsp[(2) - (2)]));
02261 ;}
02262 break;
02263
02264 case 119:
02265
02266
02267 #line 732 "src/cfgparser/oparse.y"
02268 {
02269 int ifcnt = ifs_in_curr_cfg;
02270 struct olsr_if *ifs = olsr_cnf->interfaces;
02271
02272 PARSER_DEBUG_PRINTF("\tHNA validity: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02273
02274 SET_IFS_CONF(ifs, ifcnt, hna_params.validity_time, (yyvsp[(2) - (2)])->floating);
02275
02276 free((yyvsp[(2) - (2)]));
02277 ;}
02278 break;
02279
02280 case 120:
02281
02282
02283 #line 744 "src/cfgparser/oparse.y"
02284 {
02285 int ifcnt = ifs_in_curr_cfg;
02286 struct olsr_if *ifs = olsr_cnf->interfaces;
02287
02288 PARSER_DEBUG_PRINTF("\tAutodetect changes: %s\n", (yyvsp[(2) - (2)])->boolean ? "YES" : "NO");
02289
02290 SET_IFS_CONF(ifs, ifcnt, autodetect_chg, (yyvsp[(2) - (2)])->boolean);
02291
02292 free((yyvsp[(2) - (2)]));
02293 ;}
02294 break;
02295
02296 case 121:
02297
02298
02299 #line 757 "src/cfgparser/oparse.y"
02300 {
02301 if (lq_mult_helper((yyvsp[(2) - (3)]), (yyvsp[(3) - (3)])) < 0) {
02302 YYABORT;
02303 }
02304 ;}
02305 break;
02306
02307 case 122:
02308
02309
02310 #line 764 "src/cfgparser/oparse.y"
02311 {
02312 if (lq_mult_helper((yyvsp[(2) - (3)]), (yyvsp[(3) - (3)])) < 0) {
02313 YYABORT;
02314 }
02315 ;}
02316 break;
02317
02318 case 123:
02319
02320
02321 #line 771 "src/cfgparser/oparse.y"
02322 {
02323 if (lq_mult_helper((yyvsp[(2) - (3)]), (yyvsp[(3) - (3)])) < 0) {
02324 YYABORT;
02325 }
02326 ;}
02327 break;
02328
02329 case 124:
02330
02331
02332 #line 779 "src/cfgparser/oparse.y"
02333 {
02334 olsr_cnf->debug_level = (yyvsp[(2) - (2)])->integer;
02335 PARSER_DEBUG_PRINTF("Debug level: %d\n", olsr_cnf->debug_level);
02336 free((yyvsp[(2) - (2)]));
02337 ;}
02338 break;
02339
02340 case 125:
02341
02342
02343 #line 788 "src/cfgparser/oparse.y"
02344 {
02345 if ((yyvsp[(2) - (2)])->integer == 4) {
02346 olsr_cnf->ip_version = AF_INET;
02347 olsr_cnf->ipsize = sizeof(struct in_addr);
02348 olsr_cnf->maxplen = 32;
02349 } else if ((yyvsp[(2) - (2)])->integer == 6) {
02350 olsr_cnf->ip_version = AF_INET6;
02351 olsr_cnf->ipsize = sizeof(struct in6_addr);
02352 olsr_cnf->maxplen = 128;
02353 } else {
02354 fprintf(stderr, "IPversion must be 4 or 6!\n");
02355 YYABORT;
02356 }
02357
02358 PARSER_DEBUG_PRINTF("IpVersion: %d\n", (yyvsp[(2) - (2)])->integer);
02359 free((yyvsp[(2) - (2)]));
02360 ;}
02361 break;
02362
02363 case 126:
02364
02365
02366 #line 808 "src/cfgparser/oparse.y"
02367 {
02368 int i;
02369 PARSER_DEBUG_PRINTF("FIBMetric: %s\n", (yyvsp[(2) - (2)])->string);
02370 for (i=0; i<FIBM_CNT; i++) {
02371 if (strcmp((yyvsp[(2) - (2)])->string, FIB_METRIC_TXT[i]) == 0) {
02372 olsr_cnf->fib_metric = i;
02373 break;
02374 }
02375 }
02376 if (i == FIBM_CNT) {
02377 fprintf(stderr, "Bad FIBMetric value: %s\n", (yyvsp[(2) - (2)])->string);
02378 YYABORT;
02379 }
02380 free((yyvsp[(1) - (2)]));
02381 free((yyvsp[(2) - (2)])->string);
02382 free((yyvsp[(2) - (2)]));
02383 ;}
02384 break;
02385
02386 case 127:
02387
02388
02389 #line 828 "src/cfgparser/oparse.y"
02390 {
02391 union olsr_ip_addr ipaddr, netmask;
02392
02393 if (olsr_cnf->ip_version == AF_INET6) {
02394 fprintf(stderr, "IPv4 addresses can only be used if \"IpVersion\" == 4, skipping HNA.\n");
02395 olsr_startup_sleep(3);
02396 }
02397 else {
02398 PARSER_DEBUG_PRINTF("HNA IPv4 entry: %s/%s\n", (yyvsp[(1) - (2)])->string, (yyvsp[(2) - (2)])->string);
02399
02400 if (inet_pton(AF_INET, (yyvsp[(1) - (2)])->string, &ipaddr.v4) <= 0) {
02401 fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", (yyvsp[(1) - (2)])->string);
02402 YYABORT;
02403 }
02404 if (inet_pton(AF_INET, (yyvsp[(2) - (2)])->string, &netmask.v4) <= 0) {
02405 fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", (yyvsp[(1) - (2)])->string);
02406 YYABORT;
02407 }
02408
02409
02410 if ((ipaddr.v4.s_addr & ~netmask.v4.s_addr) != 0) {
02411 fprintf(stderr, "ihna4entry: The ipaddress \"%s\" is not a network address!\n", (yyvsp[(1) - (2)])->string);
02412 YYABORT;
02413 }
02414
02415
02416 ip_prefix_list_add(&olsr_cnf->hna_entries, &ipaddr, olsr_netmask_to_prefix(&netmask));
02417 }
02418 free((yyvsp[(1) - (2)])->string);
02419 free((yyvsp[(1) - (2)]));
02420 free((yyvsp[(2) - (2)])->string);
02421 free((yyvsp[(2) - (2)]));
02422 ;}
02423 break;
02424
02425 case 128:
02426
02427
02428 #line 862 "src/cfgparser/oparse.y"
02429 {
02430 union olsr_ip_addr ipaddr, netmask;
02431
02432 if (olsr_cnf->ip_version == AF_INET6) {
02433 fprintf(stderr, "IPv4 addresses can only be used if \"IpVersion\" == 4, skipping HNA.\n");
02434 olsr_startup_sleep(3);
02435 }
02436 else {
02437 PARSER_DEBUG_PRINTF("HNA IPv4 entry: %s/%d\n", (yyvsp[(1) - (3)])->string, (yyvsp[(3) - (3)])->integer);
02438
02439 if (inet_pton(AF_INET, (yyvsp[(1) - (3)])->string, &ipaddr.v4) <= 0) {
02440 fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", (yyvsp[(1) - (3)])->string);
02441 YYABORT;
02442 }
02443 if ((yyvsp[(3) - (3)])->integer > olsr_cnf->maxplen) {
02444 fprintf(stderr, "ihna4entry: Prefix len %u > %d is not allowed!\n", (yyvsp[(3) - (3)])->integer, olsr_cnf->maxplen);
02445 YYABORT;
02446 }
02447
02448
02449 olsr_prefix_to_netmask(&netmask, (yyvsp[(3) - (3)])->integer);
02450 if ((ipaddr.v4.s_addr & ~netmask.v4.s_addr) != 0) {
02451 fprintf(stderr, "ihna4entry: The ipaddress \"%s\" is not a network address!\n", (yyvsp[(1) - (3)])->string);
02452 YYABORT;
02453 }
02454
02455
02456 ip_prefix_list_add(&olsr_cnf->hna_entries, &ipaddr, (yyvsp[(3) - (3)])->integer);
02457 }
02458 free((yyvsp[(1) - (3)])->string);
02459 free((yyvsp[(1) - (3)]));
02460 free((yyvsp[(3) - (3)]));
02461 ;}
02462 break;
02463
02464 case 129:
02465
02466
02467 #line 898 "src/cfgparser/oparse.y"
02468 {
02469 if (add_ipv6_addr((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]))) {
02470 YYABORT;
02471 }
02472 ;}
02473 break;
02474
02475 case 130:
02476
02477
02478 #line 904 "src/cfgparser/oparse.y"
02479 {
02480 if (add_ipv6_addr((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]))) {
02481 YYABORT;
02482 }
02483 ;}
02484 break;
02485
02486 case 131:
02487
02488
02489 #line 912 "src/cfgparser/oparse.y"
02490 {
02491 PARSER_DEBUG_PRINTF("setting ifs_in_curr_cfg = 0\n");
02492 ifs_in_curr_cfg = 0;
02493 ;}
02494 break;
02495
02496 case 132:
02497
02498
02499 #line 919 "src/cfgparser/oparse.y"
02500 {
02501 struct olsr_if *in, *last;
02502 in = olsr_cnf->interfaces;
02503 last = NULL;
02504 while (in != NULL) {
02505 if (strcmp(in->name, (yyvsp[(1) - (1)])->string) == 0) {
02506 free ((yyvsp[(1) - (1)])->string);
02507 break;
02508 }
02509 last = in;
02510 in = in->next;
02511 }
02512
02513 if (in != NULL) {
02514
02515 if (last) {
02516 last->next = in->next;
02517 }
02518 else {
02519 olsr_cnf->interfaces = in->next;
02520 }
02521 }
02522 else {
02523 in = malloc(sizeof(*in));
02524 if (in == NULL) {
02525 fprintf(stderr, "Out of memory(ADD IF)\n");
02526 YYABORT;
02527 }
02528 memset(in, 0, sizeof(*in));
02529
02530 in->cnf = malloc(sizeof(*in->cnf));
02531 if (in->cnf == NULL) {
02532 fprintf(stderr, "Out of memory(ADD IFRULE)\n");
02533 YYABORT;
02534 }
02535 memset(in->cnf, 0x00, sizeof(*in->cnf));
02536
02537 in->cnfi = malloc(sizeof(*in->cnfi));
02538 if (in->cnf == NULL) {
02539 fprintf(stderr, "Out of memory(ADD IFRULE)\n");
02540 YYABORT;
02541 }
02542 memset(in->cnfi, 0xFF, sizeof(*in->cnfi));
02543 in->cnfi->orig_lq_mult_cnt=0;
02544
02545 in->name = (yyvsp[(1) - (1)])->string;
02546 }
02547
02548 in->next = olsr_cnf->interfaces;
02549 olsr_cnf->interfaces = in;
02550 ifs_in_curr_cfg++;
02551 free((yyvsp[(1) - (1)]));
02552 ;}
02553 break;
02554
02555 case 133:
02556
02557
02558 #line 975 "src/cfgparser/oparse.y"
02559 {
02560 PARSER_DEBUG_PRINTF("Noint set to %d\n", (yyvsp[(2) - (2)])->boolean);
02561 olsr_cnf->allow_no_interfaces = (yyvsp[(2) - (2)])->boolean;
02562 free((yyvsp[(2) - (2)]));
02563 ;}
02564 break;
02565
02566 case 134:
02567
02568
02569 #line 983 "src/cfgparser/oparse.y"
02570 {
02571 PARSER_DEBUG_PRINTF("TOS: %d\n", (yyvsp[(2) - (2)])->integer);
02572 olsr_cnf->tos = (yyvsp[(2) - (2)])->integer;
02573 free((yyvsp[(2) - (2)]));
02574
02575 ;}
02576 break;
02577
02578 case 135:
02579
02580
02581 #line 992 "src/cfgparser/oparse.y"
02582 {
02583 PARSER_DEBUG_PRINTF("OlsrPort: %d\n", (yyvsp[(2) - (2)])->integer);
02584 olsr_cnf->olsrport = (yyvsp[(2) - (2)])->integer;
02585 free((yyvsp[(2) - (2)]));
02586 ;}
02587 break;
02588
02589 case 136:
02590
02591
02592 #line 1000 "src/cfgparser/oparse.y"
02593 {
02594 PARSER_DEBUG_PRINTF("RtProto: %d\n", (yyvsp[(2) - (2)])->integer);
02595 olsr_cnf->rt_proto = (yyvsp[(2) - (2)])->integer;
02596 free((yyvsp[(2) - (2)]));
02597 ;}
02598 break;
02599
02600 case 137:
02601
02602
02603 #line 1008 "src/cfgparser/oparse.y"
02604 {
02605 PARSER_DEBUG_PRINTF("RtTable: %d\n", (yyvsp[(2) - (2)])->integer);
02606 olsr_cnf->rt_table = (yyvsp[(2) - (2)])->integer;
02607 free((yyvsp[(2) - (2)]));
02608 ;}
02609 break;
02610
02611 case 138:
02612
02613
02614 #line 1014 "src/cfgparser/oparse.y"
02615 {
02616 PARSER_DEBUG_PRINTF("RtTable: auto\n");
02617 olsr_cnf->rt_table = DEF_RT_AUTO;
02618 free((yyvsp[(2) - (2)]));
02619 ;}
02620 break;
02621
02622 case 139:
02623
02624
02625 #line 1022 "src/cfgparser/oparse.y"
02626 {
02627 PARSER_DEBUG_PRINTF("RtTableDefault: %d\n", (yyvsp[(2) - (2)])->integer);
02628 olsr_cnf->rt_table_default = (yyvsp[(2) - (2)])->integer;
02629 free((yyvsp[(2) - (2)]));
02630 ;}
02631 break;
02632
02633 case 140:
02634
02635
02636 #line 1028 "src/cfgparser/oparse.y"
02637 {
02638 PARSER_DEBUG_PRINTF("RtTableDefault: auto\n");
02639 olsr_cnf->rt_table_default = DEF_RT_AUTO;
02640 free((yyvsp[(2) - (2)]));
02641 ;}
02642 break;
02643
02644 case 141:
02645
02646
02647 #line 1036 "src/cfgparser/oparse.y"
02648 {
02649 PARSER_DEBUG_PRINTF("RtTableTunnel: %d\n", (yyvsp[(2) - (2)])->integer);
02650 olsr_cnf->rt_table_tunnel = (yyvsp[(2) - (2)])->integer;
02651 free((yyvsp[(2) - (2)]));
02652 ;}
02653 break;
02654
02655 case 142:
02656
02657
02658 #line 1042 "src/cfgparser/oparse.y"
02659 {
02660 PARSER_DEBUG_PRINTF("RtTableTunnel: auto\n");
02661 olsr_cnf->rt_table_tunnel = DEF_RT_AUTO;
02662 free((yyvsp[(2) - (2)]));
02663 ;}
02664 break;
02665
02666 case 143:
02667
02668
02669 #line 1050 "src/cfgparser/oparse.y"
02670 {
02671 PARSER_DEBUG_PRINTF("RtTablePriority: %d\n", (yyvsp[(2) - (2)])->integer);
02672 olsr_cnf->rt_table_pri = (yyvsp[(2) - (2)])->integer;
02673 free((yyvsp[(2) - (2)]));
02674 ;}
02675 break;
02676
02677 case 144:
02678
02679
02680 #line 1056 "src/cfgparser/oparse.y"
02681 {
02682 PARSER_DEBUG_PRINTF("RtTablePriority: auto\n");
02683 olsr_cnf->rt_table_pri = DEF_RT_AUTO;
02684 free((yyvsp[(2) - (2)]));
02685 ;}
02686 break;
02687
02688 case 145:
02689
02690
02691 #line 1062 "src/cfgparser/oparse.y"
02692 {
02693 PARSER_DEBUG_PRINTF("RtTablePriority: none\n");
02694 olsr_cnf->rt_table_pri = DEF_RT_NONE;
02695 free((yyvsp[(2) - (2)]));
02696 ;}
02697 break;
02698
02699 case 146:
02700
02701
02702 #line 1070 "src/cfgparser/oparse.y"
02703 {
02704 PARSER_DEBUG_PRINTF("RtTableDefaultPriority: %d\n", (yyvsp[(2) - (2)])->integer);
02705 olsr_cnf->rt_table_default_pri = (yyvsp[(2) - (2)])->integer;
02706 free((yyvsp[(2) - (2)]));
02707 ;}
02708 break;
02709
02710 case 147:
02711
02712
02713 #line 1076 "src/cfgparser/oparse.y"
02714 {
02715 PARSER_DEBUG_PRINTF("RtTableDefaultPriority: auto\n");
02716 olsr_cnf->rt_table_default_pri = DEF_RT_AUTO;
02717 free((yyvsp[(2) - (2)]));
02718 ;}
02719 break;
02720
02721 case 148:
02722
02723
02724 #line 1082 "src/cfgparser/oparse.y"
02725 {
02726 PARSER_DEBUG_PRINTF("RtTableDefaultPriority: none\n");
02727 olsr_cnf->rt_table_default_pri = DEF_RT_NONE;
02728 free((yyvsp[(2) - (2)]));
02729 ;}
02730 break;
02731
02732 case 149:
02733
02734
02735 #line 1090 "src/cfgparser/oparse.y"
02736 {
02737 PARSER_DEBUG_PRINTF("RtTableTunnelPriority: %d\n", (yyvsp[(2) - (2)])->integer);
02738 olsr_cnf->rt_table_tunnel_pri = (yyvsp[(2) - (2)])->integer;
02739 free((yyvsp[(2) - (2)]));
02740 ;}
02741 break;
02742
02743 case 150:
02744
02745
02746 #line 1096 "src/cfgparser/oparse.y"
02747 {
02748 PARSER_DEBUG_PRINTF("RtTableTunnelPriority: auto\n");
02749 olsr_cnf->rt_table_tunnel_pri = DEF_RT_AUTO;
02750 free((yyvsp[(2) - (2)]));
02751 ;}
02752 break;
02753
02754 case 151:
02755
02756
02757 #line 1102 "src/cfgparser/oparse.y"
02758 {
02759 PARSER_DEBUG_PRINTF("RtTableTunnelPriority: none\n");
02760 olsr_cnf->rt_table_tunnel_pri = DEF_RT_NONE;
02761 free((yyvsp[(2) - (2)]));
02762 ;}
02763 break;
02764
02765 case 152:
02766
02767
02768 #line 1110 "src/cfgparser/oparse.y"
02769 {
02770 PARSER_DEBUG_PRINTF("RtTableDefaultOlsrPriority: %d\n", (yyvsp[(2) - (2)])->integer);
02771 olsr_cnf->rt_table_defaultolsr_pri = (yyvsp[(2) - (2)])->integer;
02772 free((yyvsp[(2) - (2)]));
02773 ;}
02774 break;
02775
02776 case 153:
02777
02778
02779 #line 1116 "src/cfgparser/oparse.y"
02780 {
02781 PARSER_DEBUG_PRINTF("RtTableDefaultOlsrPriority: auto\n");
02782 olsr_cnf->rt_table_defaultolsr_pri = DEF_RT_AUTO;
02783 free((yyvsp[(2) - (2)]));
02784 ;}
02785 break;
02786
02787 case 154:
02788
02789
02790 #line 1122 "src/cfgparser/oparse.y"
02791 {
02792 PARSER_DEBUG_PRINTF("RtTableDefaultOlsrPriority: none\n");
02793 olsr_cnf->rt_table_defaultolsr_pri = DEF_RT_NONE;
02794 free((yyvsp[(2) - (2)]));
02795 ;}
02796 break;
02797
02798 case 155:
02799
02800
02801 #line 1130 "src/cfgparser/oparse.y"
02802 {
02803 PARSER_DEBUG_PRINTF("Willingness: %d\n", (yyvsp[(2) - (2)])->integer);
02804 olsr_cnf->willingness_auto = false;
02805 olsr_cnf->willingness = (yyvsp[(2) - (2)])->integer;
02806 free((yyvsp[(2) - (2)]));
02807 ;}
02808 break;
02809
02810 case 156:
02811
02812
02813 #line 1139 "src/cfgparser/oparse.y"
02814 {
02815 olsr_cnf->use_hysteresis = (yyvsp[(2) - (2)])->boolean;
02816 PARSER_DEBUG_PRINTF("Hysteresis %s\n", olsr_cnf->use_hysteresis ? "enabled" : "disabled");
02817 free((yyvsp[(2) - (2)]));
02818 ;}
02819 break;
02820
02821 case 157:
02822
02823
02824 #line 1147 "src/cfgparser/oparse.y"
02825 {
02826 olsr_cnf->hysteresis_param.scaling = (yyvsp[(2) - (2)])->floating;
02827 PARSER_DEBUG_PRINTF("Hysteresis Scaling: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02828 free((yyvsp[(2) - (2)]));
02829 ;}
02830 break;
02831
02832 case 158:
02833
02834
02835 #line 1155 "src/cfgparser/oparse.y"
02836 {
02837 olsr_cnf->hysteresis_param.thr_high = (yyvsp[(2) - (2)])->floating;
02838 PARSER_DEBUG_PRINTF("Hysteresis UpperThr: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02839 free((yyvsp[(2) - (2)]));
02840 ;}
02841 break;
02842
02843 case 159:
02844
02845
02846 #line 1163 "src/cfgparser/oparse.y"
02847 {
02848 olsr_cnf->hysteresis_param.thr_low = (yyvsp[(2) - (2)])->floating;
02849 PARSER_DEBUG_PRINTF("Hysteresis LowerThr: %0.2f\n", (yyvsp[(2) - (2)])->floating);
02850 free((yyvsp[(2) - (2)]));
02851 ;}
02852 break;
02853
02854 case 160:
02855
02856
02857 #line 1171 "src/cfgparser/oparse.y"
02858 {
02859 PARSER_DEBUG_PRINTF("Pollrate %0.2f\n", (yyvsp[(2) - (2)])->floating);
02860 olsr_cnf->pollrate = (yyvsp[(2) - (2)])->floating;
02861 free((yyvsp[(2) - (2)]));
02862 ;}
02863 break;
02864
02865 case 161:
02866
02867
02868 #line 1179 "src/cfgparser/oparse.y"
02869 {
02870 PARSER_DEBUG_PRINTF("NIC Changes Pollrate %0.2f\n", (yyvsp[(2) - (2)])->floating);
02871 olsr_cnf->nic_chgs_pollrate = (yyvsp[(2) - (2)])->floating;
02872 free((yyvsp[(2) - (2)]));
02873 ;}
02874 break;
02875
02876 case 162:
02877
02878
02879 #line 1187 "src/cfgparser/oparse.y"
02880 {
02881 PARSER_DEBUG_PRINTF("TC redundancy %d\n", (yyvsp[(2) - (2)])->integer);
02882 olsr_cnf->tc_redundancy = (yyvsp[(2) - (2)])->integer;
02883 free((yyvsp[(2) - (2)]));
02884 ;}
02885 break;
02886
02887 case 163:
02888
02889
02890 #line 1195 "src/cfgparser/oparse.y"
02891 {
02892 PARSER_DEBUG_PRINTF("MPR coverage %d\n", (yyvsp[(2) - (2)])->integer);
02893 olsr_cnf->mpr_coverage = (yyvsp[(2) - (2)])->integer;
02894 free((yyvsp[(2) - (2)]));
02895 ;}
02896 break;
02897
02898 case 164:
02899
02900
02901 #line 1203 "src/cfgparser/oparse.y"
02902 {
02903 PARSER_DEBUG_PRINTF("Link quality level %d\n", (yyvsp[(2) - (2)])->integer);
02904 olsr_cnf->lq_level = (yyvsp[(2) - (2)])->integer;
02905 free((yyvsp[(2) - (2)]));
02906 ;}
02907 break;
02908
02909 case 165:
02910
02911
02912 #line 1211 "src/cfgparser/oparse.y"
02913 {
02914 PARSER_DEBUG_PRINTF("Link quality fish eye %d\n", (yyvsp[(2) - (2)])->integer);
02915 olsr_cnf->lq_fish = (yyvsp[(2) - (2)])->integer;
02916 free((yyvsp[(2) - (2)]));
02917 ;}
02918 break;
02919
02920 case 166:
02921
02922
02923 #line 1219 "src/cfgparser/oparse.y"
02924 {
02925 PARSER_DEBUG_PRINTF("Link quality aging factor %f\n", (yyvsp[(2) - (2)])->floating);
02926 olsr_cnf->lq_aging = (yyvsp[(2) - (2)])->floating;
02927 free((yyvsp[(2) - (2)]));
02928 ;}
02929 break;
02930
02931 case 167:
02932
02933
02934 #line 1227 "src/cfgparser/oparse.y"
02935 {
02936 PARSER_DEBUG_PRINTF("Minimum TC validity time %f\n", (yyvsp[(2) - (2)])->floating);
02937 olsr_cnf->min_tc_vtime = (yyvsp[(2) - (2)])->floating;
02938 free((yyvsp[(2) - (2)]));
02939 ;}
02940 break;
02941
02942 case 168:
02943
02944
02945 #line 1235 "src/cfgparser/oparse.y"
02946 {
02947 PARSER_DEBUG_PRINTF("Lock file %s\n", (yyvsp[(2) - (2)])->string);
02948 olsr_cnf->lock_file = (yyvsp[(2) - (2)])->string;
02949 free((yyvsp[(2) - (2)]));
02950 ;}
02951 break;
02952
02953 case 169:
02954
02955
02956 #line 1242 "src/cfgparser/oparse.y"
02957 {
02958 olsr_cnf->lq_algorithm = (yyvsp[(2) - (2)])->string;
02959 PARSER_DEBUG_PRINTF("LQ Algorithm: %s\n", (yyvsp[(2) - (2)])->string);
02960 free((yyvsp[(2) - (2)]));
02961 ;}
02962 break;
02963
02964 case 170:
02965
02966
02967 #line 1250 "src/cfgparser/oparse.y"
02968 {
02969 PARSER_DEBUG_PRINTF("NAT threshold %0.2f\n", (yyvsp[(2) - (2)])->floating);
02970 olsr_cnf->lq_nat_thresh = (yyvsp[(2) - (2)])->floating;
02971 free((yyvsp[(2) - (2)]));
02972 ;}
02973 break;
02974
02975 case 171:
02976
02977
02978 #line 1258 "src/cfgparser/oparse.y"
02979 {
02980 PARSER_DEBUG_PRINTF("Clear screen %s\n", (yyvsp[(2) - (2)])->boolean ? "enabled" : "disabled");
02981 olsr_cnf->clear_screen = (yyvsp[(2) - (2)])->boolean;
02982 free((yyvsp[(2) - (2)]));
02983 ;}
02984 break;
02985
02986 case 172:
02987
02988
02989 #line 1266 "src/cfgparser/oparse.y"
02990 {
02991 PARSER_DEBUG_PRINTF("Use NIIT ip translation: %s\n", (yyvsp[(2) - (2)])->boolean ? "enabled" : "disabled");
02992 olsr_cnf->use_niit = (yyvsp[(2) - (2)])->boolean;
02993 free((yyvsp[(2) - (2)]));
02994 ;}
02995 break;
02996
02997 case 173:
02998
02999
03000 #line 1274 "src/cfgparser/oparse.y"
03001 {
03002 PARSER_DEBUG_PRINTF("Smart gateway system: %s\n", (yyvsp[(2) - (2)])->boolean ? "enabled" : "disabled");
03003 olsr_cnf->smart_gw_active = (yyvsp[(2) - (2)])->boolean;
03004 free((yyvsp[(2) - (2)]));
03005 ;}
03006 break;
03007
03008 case 174:
03009
03010
03011 #line 1282 "src/cfgparser/oparse.y"
03012 {
03013 PARSER_DEBUG_PRINTF("Smart gateway allow client nat: %s\n", (yyvsp[(2) - (2)])->boolean ? "yes" : "no");
03014 olsr_cnf->smart_gw_allow_nat = (yyvsp[(2) - (2)])->boolean;
03015 free((yyvsp[(2) - (2)]));
03016 ;}
03017 break;
03018
03019 case 175:
03020
03021
03022 #line 1290 "src/cfgparser/oparse.y"
03023 {
03024 PARSER_DEBUG_PRINTF("Smart gateway uplink: %s\n", (yyvsp[(2) - (2)])->string);
03025 if (strcasecmp((yyvsp[(2) - (2)])->string, GW_UPLINK_TXT[GW_UPLINK_NONE]) == 0) {
03026 olsr_cnf->smart_gw_type = GW_UPLINK_NONE;
03027 }
03028 if (strcasecmp((yyvsp[(2) - (2)])->string, GW_UPLINK_TXT[GW_UPLINK_IPV4]) == 0) {
03029 olsr_cnf->smart_gw_type = GW_UPLINK_IPV4;
03030 }
03031 else if (strcasecmp((yyvsp[(2) - (2)])->string, GW_UPLINK_TXT[GW_UPLINK_IPV6]) == 0) {
03032 olsr_cnf->smart_gw_type = GW_UPLINK_IPV6;
03033 }
03034 else if (strcasecmp((yyvsp[(2) - (2)])->string, GW_UPLINK_TXT[GW_UPLINK_IPV46]) == 0) {
03035 olsr_cnf->smart_gw_type = GW_UPLINK_IPV46;
03036 }
03037 else {
03038 fprintf(stderr, "Bad gateway uplink type: %s\n", (yyvsp[(2) - (2)])->string);
03039 YYABORT;
03040 }
03041 free((yyvsp[(2) - (2)]));
03042 ;}
03043 break;
03044
03045 case 176:
03046
03047
03048 #line 1313 "src/cfgparser/oparse.y"
03049 {
03050 PARSER_DEBUG_PRINTF("Smart gateway speed: %u uplink/%u downlink kbit/s\n", (yyvsp[(2) - (3)])->integer, (yyvsp[(3) - (3)])->integer);
03051 olsr_cnf->smart_gw_uplink = (yyvsp[(2) - (3)])->integer;
03052 olsr_cnf->smart_gw_downlink = (yyvsp[(3) - (3)])->integer;
03053 free((yyvsp[(2) - (3)]));
03054 free((yyvsp[(3) - (3)]));
03055 ;}
03056 break;
03057
03058 case 177:
03059
03060
03061 #line 1323 "src/cfgparser/oparse.y"
03062 {
03063 PARSER_DEBUG_PRINTF("Smart gateway uplink nat: %s\n", (yyvsp[(2) - (2)])->boolean ? "yes" : "no");
03064 olsr_cnf->smart_gw_uplink_nat = (yyvsp[(2) - (2)])->boolean;
03065 free((yyvsp[(2) - (2)]));
03066 ;}
03067 break;
03068
03069 case 178:
03070
03071
03072 #line 1331 "src/cfgparser/oparse.y"
03073 {
03074 PARSER_DEBUG_PRINTF("Smart gateway prefix: %s %u\n", (yyvsp[(2) - (3)])->string, (yyvsp[(3) - (3)])->integer);
03075 if (inet_pton(olsr_cnf->ip_version, (yyvsp[(2) - (3)])->string, &olsr_cnf->smart_gw_prefix.prefix) == 0) {
03076 fprintf(stderr, "Bad IP part of gateway prefix: %s\n", (yyvsp[(2) - (3)])->string);
03077 YYABORT;
03078 }
03079 olsr_cnf->smart_gw_prefix.prefix_len = (uint8_t)(yyvsp[(3) - (3)])->integer;
03080
03081 free((yyvsp[(2) - (3)]));
03082 free((yyvsp[(3) - (3)]));
03083 ;}
03084 break;
03085
03086 case 179:
03087
03088
03089 #line 1343 "src/cfgparser/oparse.y"
03090 {
03091 PARSER_DEBUG_PRINTF("Smart gateway prefix: %s %u\n", (yyvsp[(2) - (4)])->string, (yyvsp[(4) - (4)])->integer);
03092 if (inet_pton(olsr_cnf->ip_version, (yyvsp[(2) - (4)])->string, &olsr_cnf->smart_gw_prefix.prefix) == 0) {
03093 fprintf(stderr, "Bad IP part of gateway prefix: %s\n", (yyvsp[(2) - (4)])->string);
03094 YYABORT;
03095 }
03096 olsr_cnf->smart_gw_prefix.prefix_len = (uint8_t)(yyvsp[(4) - (4)])->integer;
03097
03098 free((yyvsp[(2) - (4)]));
03099 free((yyvsp[(4) - (4)]));
03100 ;}
03101 break;
03102
03103 case 180:
03104
03105
03106 #line 1357 "src/cfgparser/oparse.y"
03107 {
03108 PARSER_DEBUG_PRINTF("Use originator for routes src-ip: %s\n", (yyvsp[(2) - (2)])->boolean ? "yes" : "no");
03109 if (olsr_cnf->ip_version != AF_INET) {
03110 fprintf(stderr, "Source ip routes not possible with IPV6\n");
03111 YYABORT;
03112 }
03113 else olsr_cnf->use_src_ip_routes = (yyvsp[(2) - (2)])->boolean;
03114 free((yyvsp[(2) - (2)]));
03115 ;}
03116 break;
03117
03118 case 181:
03119
03120
03121 #line 1369 "src/cfgparser/oparse.y"
03122 {
03123 PARSER_DEBUG_PRINTF("Fixed Main IP: %s\n", (yyvsp[(2) - (2)])->string);
03124
03125 if (olsr_cnf->ip_version != AF_INET
03126 || inet_pton(olsr_cnf->ip_version, (yyvsp[(2) - (2)])->string, &olsr_cnf->main_addr) != 1) {
03127 fprintf(stderr, "Bad main IP: %s\n", (yyvsp[(2) - (2)])->string);
03128 YYABORT;
03129 }
03130 else olsr_cnf->unicast_src_ip = olsr_cnf->main_addr;
03131 free((yyvsp[(2) - (2)]));
03132 ;}
03133 break;
03134
03135 case 182:
03136
03137
03138 #line 1381 "src/cfgparser/oparse.y"
03139 {
03140 PARSER_DEBUG_PRINTF("Fixed Main IP: %s\n", (yyvsp[(2) - (2)])->string);
03141
03142 if (olsr_cnf->ip_version != AF_INET6
03143 || inet_pton(olsr_cnf->ip_version, (yyvsp[(2) - (2)])->string, &olsr_cnf->main_addr) != 1) {
03144 fprintf(stderr, "Bad main IP: %s\n", (yyvsp[(2) - (2)])->string);
03145 YYABORT;
03146 }
03147 free((yyvsp[(2) - (2)]));
03148 ;}
03149 break;
03150
03151 case 183:
03152
03153
03154 #line 1393 "src/cfgparser/oparse.y"
03155 {
03156 struct plugin_entry *pe, *last;
03157
03158 pe = olsr_cnf->plugins;
03159 last = NULL;
03160 while (pe != NULL) {
03161 if (strcmp(pe->name, (yyvsp[(2) - (2)])->string) == 0) {
03162 free ((yyvsp[(2) - (2)])->string);
03163 break;
03164 }
03165 last = pe;
03166 pe = pe->next;
03167 }
03168
03169 if (pe != NULL) {
03170
03171 if (last) {
03172 last->next = pe->next;
03173 }
03174 else {
03175 olsr_cnf->plugins = pe->next;
03176 }
03177 }
03178 else {
03179 pe = malloc(sizeof(*pe));
03180
03181 if (pe == NULL) {
03182 fprintf(stderr, "Out of memory(ADD PL)\n");
03183 YYABORT;
03184 }
03185
03186 pe->name = (yyvsp[(2) - (2)])->string;
03187 pe->params = NULL;
03188
03189 PARSER_DEBUG_PRINTF("Plugin: %s\n", (yyvsp[(2) - (2)])->string);
03190 }
03191
03192
03193 pe->next = olsr_cnf->plugins;
03194 olsr_cnf->plugins = pe;
03195
03196 free((yyvsp[(2) - (2)]));
03197 ;}
03198 break;
03199
03200 case 184:
03201
03202
03203 #line 1439 "src/cfgparser/oparse.y"
03204 {
03205 struct plugin_param *pp = malloc(sizeof(*pp));
03206
03207 if (pp == NULL) {
03208 fprintf(stderr, "Out of memory(ADD PP)\n");
03209 YYABORT;
03210 }
03211
03212 PARSER_DEBUG_PRINTF("Plugin param key:\"%s\" val: \"%s\"\n", (yyvsp[(2) - (3)])->string, (yyvsp[(3) - (3)])->string);
03213
03214 pp->key = (yyvsp[(2) - (3)])->string;
03215 pp->value = (yyvsp[(3) - (3)])->string;
03216
03217
03218 pp->next = olsr_cnf->plugins->params;
03219 olsr_cnf->plugins->params = pp;
03220
03221 free((yyvsp[(2) - (3)]));
03222 free((yyvsp[(3) - (3)]));
03223 ;}
03224 break;
03225
03226 case 185:
03227
03228
03229 #line 1462 "src/cfgparser/oparse.y"
03230 {
03231
03232 ;}
03233 break;
03234
03235
03236
03237
03238 #line 3239 "src/cfgparser/oparse.c"
03239 default: break;
03240 }
03241 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
03242
03243 YYPOPSTACK (yylen);
03244 yylen = 0;
03245 YY_STACK_PRINT (yyss, yyssp);
03246
03247 *++yyvsp = yyval;
03248
03249
03250
03251
03252
03253 yyn = yyr1[yyn];
03254
03255 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
03256 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
03257 yystate = yytable[yystate];
03258 else
03259 yystate = yydefgoto[yyn - YYNTOKENS];
03260
03261 goto yynewstate;
03262
03263
03264
03265
03266
03267 yyerrlab:
03268
03269 if (!yyerrstatus)
03270 {
03271 ++yynerrs;
03272 #if ! YYERROR_VERBOSE
03273 yyerror (YY_("syntax error"));
03274 #else
03275 {
03276 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
03277 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
03278 {
03279 YYSIZE_T yyalloc = 2 * yysize;
03280 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
03281 yyalloc = YYSTACK_ALLOC_MAXIMUM;
03282 if (yymsg != yymsgbuf)
03283 YYSTACK_FREE (yymsg);
03284 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
03285 if (yymsg)
03286 yymsg_alloc = yyalloc;
03287 else
03288 {
03289 yymsg = yymsgbuf;
03290 yymsg_alloc = sizeof yymsgbuf;
03291 }
03292 }
03293
03294 if (0 < yysize && yysize <= yymsg_alloc)
03295 {
03296 (void) yysyntax_error (yymsg, yystate, yychar);
03297 yyerror (yymsg);
03298 }
03299 else
03300 {
03301 yyerror (YY_("syntax error"));
03302 if (yysize != 0)
03303 goto yyexhaustedlab;
03304 }
03305 }
03306 #endif
03307 }
03308
03309
03310
03311 if (yyerrstatus == 3)
03312 {
03313
03314
03315
03316 if (yychar <= YYEOF)
03317 {
03318
03319 if (yychar == YYEOF)
03320 YYABORT;
03321 }
03322 else
03323 {
03324 yydestruct ("Error: discarding",
03325 yytoken, &yylval);
03326 yychar = YYEMPTY;
03327 }
03328 }
03329
03330
03331
03332 goto yyerrlab1;
03333
03334
03335
03336
03337
03338 yyerrorlab:
03339
03340
03341
03342
03343 if ( 0)
03344 goto yyerrorlab;
03345
03346
03347
03348 YYPOPSTACK (yylen);
03349 yylen = 0;
03350 YY_STACK_PRINT (yyss, yyssp);
03351 yystate = *yyssp;
03352 goto yyerrlab1;
03353
03354
03355
03356
03357
03358 yyerrlab1:
03359 yyerrstatus = 3;
03360
03361 for (;;)
03362 {
03363 yyn = yypact[yystate];
03364 if (yyn != YYPACT_NINF)
03365 {
03366 yyn += YYTERROR;
03367 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
03368 {
03369 yyn = yytable[yyn];
03370 if (0 < yyn)
03371 break;
03372 }
03373 }
03374
03375
03376 if (yyssp == yyss)
03377 YYABORT;
03378
03379
03380 yydestruct ("Error: popping",
03381 yystos[yystate], yyvsp);
03382 YYPOPSTACK (1);
03383 yystate = *yyssp;
03384 YY_STACK_PRINT (yyss, yyssp);
03385 }
03386
03387 *++yyvsp = yylval;
03388
03389
03390
03391 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
03392
03393 yystate = yyn;
03394 goto yynewstate;
03395
03396
03397
03398
03399
03400 yyacceptlab:
03401 yyresult = 0;
03402 goto yyreturn;
03403
03404
03405
03406
03407 yyabortlab:
03408 yyresult = 1;
03409 goto yyreturn;
03410
03411 #if !defined(yyoverflow) || YYERROR_VERBOSE
03412
03413
03414
03415 yyexhaustedlab:
03416 yyerror (YY_("memory exhausted"));
03417 yyresult = 2;
03418
03419 #endif
03420
03421 yyreturn:
03422 if (yychar != YYEMPTY)
03423 yydestruct ("Cleanup: discarding lookahead",
03424 yytoken, &yylval);
03425
03426
03427 YYPOPSTACK (yylen);
03428 YY_STACK_PRINT (yyss, yyssp);
03429 while (yyssp != yyss)
03430 {
03431 yydestruct ("Cleanup: popping",
03432 yystos[*yyssp], yyvsp);
03433 YYPOPSTACK (1);
03434 }
03435 #ifndef yyoverflow
03436 if (yyss != yyssa)
03437 YYSTACK_FREE (yyss);
03438 #endif
03439 #if YYERROR_VERBOSE
03440 if (yymsg != yymsgbuf)
03441 YYSTACK_FREE (yymsg);
03442 #endif
03443
03444 return YYID (yyresult);
03445 }
03446
03447
03448
03449
03450 #line 1469 "src/cfgparser/oparse.y"
03451
03452
03453 void yyerror (const char *string)
03454 {
03455 fprintf(stderr, "Config line %d: %s\n", current_line, string);
03456 }
03457