4 * The olsr.org Optimized Link-State Routing daemon(olsrd)
5 * Copyright (c) 2004, Andreas Tønnesen(andreto@olsr.org)
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
18 * * Neither the name of olsr.org, olsrd nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
35 * Visit http://www.olsr.org for more information.
37 * If you find this software useful feel free to make a donation
38 * to the project. For more information see the website or contact
39 * the copyright holders.
44 #include "olsrd_conf.h"
46 #include "../ipcalc.h"
47 #include "../net_olsr.h"
52 #include <sys/types.h>
53 #include <sys/socket.h>
54 #include <netinet/in.h>
55 #include <arpa/inet.h>
58 #define PARSER_DEBUG 0
61 #define PARSER_DEBUG_PRINTF(x, ...) printf(x, ##args)
63 #define PARSER_DEBUG_PRINTF(x, ...) do { } while (0)
66 #define YYSTYPE struct conf_token *
68 void yyerror(const char *);
71 static int ifs_in_curr_cfg = 0;
73 static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg);
74 static int add_ipv6_addr(YYSTYPE ipaddr_arg, YYSTYPE prefixlen_arg);
76 static int lq_mult_helper(YYSTYPE ip_addr_arg, YYSTYPE mult_arg)
78 union olsr_ip_addr addr;
80 struct olsr_if *walker;
83 printf("\tLinkQualityMult %s %0.2f\n",
84 (ip_addr_arg != NULL) ? ip_addr_arg->string : "any",
88 memset(&addr, 0, sizeof(addr));
90 if (ip_addr_arg != NULL &&
91 inet_pton(olsr_cnf->ip_version, ip_addr_arg->string, &addr) <= 0) {
92 fprintf(stderr, "Cannot parse IP address %s.\n", ip_addr_arg->string);
96 walker = olsr_cnf->interfaces;
98 for (i = 0; i < ifs_in_curr_cfg; i++) {
99 struct olsr_lq_mult *mult = malloc(sizeof(*mult));
101 fprintf(stderr, "Out of memory (LQ multiplier).\n");
106 mult->val = mult_arg->floating;
108 mult->next = walker->cnf->lq_mult;
109 walker->cnf->lq_mult = mult;
111 walker = walker->next;
114 if (ip_addr_arg != NULL) {
115 free(ip_addr_arg->string);
124 static int add_ipv6_addr(YYSTYPE ipaddr_arg, YYSTYPE prefixlen_arg)
126 union olsr_ip_addr ipaddr;
127 PARSER_DEBUG_PRINTF("HNA IPv6 entry: %s/%d\n", ipaddr_arg->string, prefixlen_arg->integer);
129 if (olsr_cnf->ip_version != AF_INET6) {
130 fprintf(stderr, "IPv6 addresses can only be used if \"IpVersion\" == 6\n");
134 if(inet_pton(AF_INET6, ipaddr_arg->string, &ipaddr) <= 0) {
135 fprintf(stderr, "ihna6entry: Failed converting IP address %s\n", ipaddr_arg->string);
139 if (prefixlen_arg->integer > 128) {
140 fprintf(stderr, "ihna6entry: Illegal IPv6 prefix length %d\n", prefixlen_arg->integer);
145 ip_prefix_list_add(&olsr_cnf->hna_entries, &ipaddr, prefixlen_arg->integer);
147 free(ipaddr_arg->string);
167 %token TOK_DEBUGLEVEL
176 %token TOK_WILLINGNESS
184 %token TOK_NICCHGSPOLLRT
185 %token TOK_TCREDUNDANCY
186 %token TOK_MPRCOVERAGE
191 %token TOK_LQ_NAT_THRESH
193 %token TOK_CLEAR_SCREEN
200 %token TOK_IP4BROADCAST
201 %token TOK_IP6ADDRTYPE
202 %token TOK_IP6MULTISITE
203 %token TOK_IP6MULTIGLOBAL
213 %token TOK_AUTODETCHG
252 block: TOK_HNA4 hna4body
259 hna4body: TOK_OPEN hna4stmts TOK_CLOSE
262 hna4stmts: | hna4stmts hna4stmt
269 hna6body: TOK_OPEN hna6stmts TOK_CLOSE
272 hna6stmts: | hna6stmts hna6stmt
279 ipcbody: TOK_OPEN ipcstmts TOK_CLOSE
282 ipcstmts: | ipcstmts ipcstmt
291 ifblock: ifstart ifnicks
294 ifnicks: | ifnicks ifnick
297 ifbody: TOK_OPEN ifstmts TOK_CLOSE
300 ifstmts: | ifstmts ifstmt
321 plbody: TOK_OPEN plstmts TOK_CLOSE
324 plstmts: | plstmts plstmt
331 imaxipc: TOK_MAXIPC TOK_INTEGER
333 olsr_cnf->ipc_connections = $2->integer;
338 ipchost: TOK_HOSTLABEL TOK_IP4_ADDR
340 union olsr_ip_addr ipaddr;
341 PARSER_DEBUG_PRINTF("\tIPC host: %s\n", $2->string);
343 if (inet_aton($2->string, &ipaddr.v4) == 0) {
344 fprintf(stderr, "Failed converting IP address IPC %s\n", $2->string);
348 ip_prefix_list_add(&olsr_cnf->ipc_nets, &ipaddr, olsr_cnf->maxplen);
355 ipcnet: TOK_NETLABEL TOK_IP4_ADDR TOK_IP4_ADDR
357 union olsr_ip_addr ipaddr, netmask;
359 PARSER_DEBUG_PRINTF("\tIPC net: %s/%s\n", $2->string, $3->string);
361 if (inet_pton(AF_INET, $2->string, &ipaddr.v4) == 0) {
362 fprintf(stderr, "Failed converting IP net IPC %s\n", $2->string);
366 if (inet_pton(AF_INET, $3->string, &netmask.v4) == 0) {
367 fprintf(stderr, "Failed converting IP mask IPC %s\n", $3->string);
371 ip_prefix_list_add(&olsr_cnf->ipc_nets, &ipaddr, olsr_netmask_to_prefix(&netmask));
378 | TOK_NETLABEL TOK_IP4_ADDR TOK_SLASH TOK_INTEGER
380 union olsr_ip_addr ipaddr;
382 PARSER_DEBUG_PRINTF("\tIPC net: %s/%s\n", $2->string, $3->string);
384 if (inet_pton(AF_INET, $2->string, &ipaddr.v4) == 0) {
385 fprintf(stderr, "Failed converting IP net IPC %s\n", $2->string);
389 if ($4->integer > olsr_cnf->maxplen) {
390 fprintf(stderr, "ipcnet: Prefix len %u > %d is not allowed!\n", $4->integer, olsr_cnf->maxplen);
394 ip_prefix_list_add(&olsr_cnf->ipc_nets, &ipaddr, $4->integer);
402 iifweight: TOK_IFWEIGHT TOK_INTEGER
404 int ifcnt = ifs_in_curr_cfg;
405 struct olsr_if *ifs = olsr_cnf->interfaces;
407 PARSER_DEBUG_PRINTF("Fixed willingness: %d\n", $2->integer);
410 ifs->cnf->weight.value = $2->integer;
411 ifs->cnf->weight.fixed = OLSR_TRUE;
421 isetip4br: TOK_IP4BROADCAST TOK_IP4_ADDR
424 int ifcnt = ifs_in_curr_cfg;
425 struct olsr_if *ifs = olsr_cnf->interfaces;
427 PARSER_DEBUG_PRINTF("\tIPv4 broadcast: %s\n", $2->string);
429 if (inet_aton($2->string, &in) == 0) {
430 fprintf(stderr, "isetip4br: Failed converting IP address %s\n", $2->string);
435 ifs->cnf->ipv4_broadcast.v4 = in;
446 isetip6addrt: TOK_IP6ADDRTYPE TOK_IP6TYPE
448 int ifcnt = ifs_in_curr_cfg;
449 struct olsr_if *ifs = olsr_cnf->interfaces;
453 ifs->cnf->ipv6_addrtype = IPV6_ADDR_SITELOCAL;
460 ifs->cnf->ipv6_addrtype = 0;
471 isetip6mults: TOK_IP6MULTISITE TOK_IP6_ADDR
474 int ifcnt = ifs_in_curr_cfg;
475 struct olsr_if *ifs = olsr_cnf->interfaces;
477 PARSER_DEBUG_PRINTF("\tIPv6 site-local multicast: %s\n", $2->string);
479 if (inet_pton(AF_INET6, $2->string, &in6) <= 0) {
480 fprintf(stderr, "isetip6mults: Failed converting IP address %s\n", $2->string);
485 ifs->cnf->ipv6_multi_site.v6 = in6;
497 isetip6multg: TOK_IP6MULTIGLOBAL TOK_IP6_ADDR
500 int ifcnt = ifs_in_curr_cfg;
501 struct olsr_if *ifs = olsr_cnf->interfaces;
503 PARSER_DEBUG_PRINTF("\tIPv6 global multicast: %s\n", $2->string);
505 if (inet_pton(AF_INET6, $2->string, &in6) <= 0) {
506 fprintf(stderr, "isetip6multg: Failed converting IP address %s\n", $2->string);
511 //memcpy(&ifs->cnf->ipv6_multi_glbl.v6, &in6, sizeof(struct in6_addr));
512 ifs->cnf->ipv6_multi_glbl.v6 = in6;
522 isethelloint: TOK_HELLOINT TOK_FLOAT
524 int ifcnt = ifs_in_curr_cfg;
525 struct olsr_if *ifs = olsr_cnf->interfaces;
527 PARSER_DEBUG_PRINTF("\tHELLO interval: %0.2f\n", $2->floating);
530 ifs->cnf->hello_params.emission_interval = $2->floating;
539 isethelloval: TOK_HELLOVAL TOK_FLOAT
541 int ifcnt = ifs_in_curr_cfg;
542 struct olsr_if *ifs = olsr_cnf->interfaces;
544 PARSER_DEBUG_PRINTF("\tHELLO validity: %0.2f\n", $2->floating);
547 ifs->cnf->hello_params.validity_time = $2->floating;
556 isettcint: TOK_TCINT TOK_FLOAT
558 int ifcnt = ifs_in_curr_cfg;
559 struct olsr_if *ifs = olsr_cnf->interfaces;
561 PARSER_DEBUG_PRINTF("\tTC interval: %0.2f\n", $2->floating);
564 ifs->cnf->tc_params.emission_interval = $2->floating;
572 isettcval: TOK_TCVAL TOK_FLOAT
574 int ifcnt = ifs_in_curr_cfg;
575 struct olsr_if *ifs = olsr_cnf->interfaces;
577 PARSER_DEBUG_PRINTF("\tTC validity: %0.2f\n", $2->floating);
579 ifs->cnf->tc_params.validity_time = $2->floating;
588 isetmidint: TOK_MIDINT TOK_FLOAT
590 int ifcnt = ifs_in_curr_cfg;
591 struct olsr_if *ifs = olsr_cnf->interfaces;
594 PARSER_DEBUG_PRINTF("\tMID interval: %0.2f\n", $2->floating);
596 ifs->cnf->mid_params.emission_interval = $2->floating;
605 isetmidval: TOK_MIDVAL TOK_FLOAT
607 int ifcnt = ifs_in_curr_cfg;
608 struct olsr_if *ifs = olsr_cnf->interfaces;
610 PARSER_DEBUG_PRINTF("\tMID validity: %0.2f\n", $2->floating);
612 ifs->cnf->mid_params.validity_time = $2->floating;
621 isethnaint: TOK_HNAINT TOK_FLOAT
623 int ifcnt = ifs_in_curr_cfg;
624 struct olsr_if *ifs = olsr_cnf->interfaces;
626 PARSER_DEBUG_PRINTF("\tHNA interval: %0.2f\n", $2->floating);
628 ifs->cnf->hna_params.emission_interval = $2->floating;
637 isethnaval: TOK_HNAVAL TOK_FLOAT
639 int ifcnt = ifs_in_curr_cfg;
640 struct olsr_if *ifs = olsr_cnf->interfaces;
642 PARSER_DEBUG_PRINTF("\tHNA validity: %0.2f\n", $2->floating);
644 ifs->cnf->hna_params.validity_time = $2->floating;
653 isetautodetchg: TOK_AUTODETCHG TOK_BOOLEAN
655 int ifcnt = ifs_in_curr_cfg;
656 struct olsr_if *ifs = olsr_cnf->interfaces;
658 PARSER_DEBUG_PRINTF("\tAutodetect changes: %s\n", $2->boolean ? "YES" : "NO");
660 ifs->cnf->autodetect_chg = $2->boolean;
670 isetlqmult: TOK_LQ_MULT TOK_DEFAULT TOK_FLOAT
672 if (lq_mult_helper($2, $3) < 0) {
677 | TOK_LQ_MULT TOK_IP4_ADDR TOK_FLOAT
679 if (lq_mult_helper($2, $3) < 0) {
684 | TOK_LQ_MULT TOK_IP6_ADDR TOK_FLOAT
686 if (lq_mult_helper($2, $3) < 0) {
692 idebug: TOK_DEBUGLEVEL TOK_INTEGER
694 olsr_cnf->debug_level = $2->integer;
695 PARSER_DEBUG_PRINTF("Debug level: %d\n", olsr_cnf->debug_level);
701 iipversion: TOK_IPVERSION TOK_INTEGER
703 if ($2->integer == 4) {
704 olsr_cnf->ip_version = AF_INET;
705 olsr_cnf->ipsize = sizeof(struct in_addr);
706 olsr_cnf->maxplen = 32;
707 } else if ($2->integer == 6) {
708 olsr_cnf->ip_version = AF_INET6;
709 olsr_cnf->ipsize = sizeof(struct in6_addr);
710 olsr_cnf->maxplen = 128;
712 fprintf(stderr, "IPversion must be 4 or 6!\n");
716 PARSER_DEBUG_PRINTF("IpVersion: %d\n", $2->integer);
721 fibmetric: TOK_FIBMETRIC TOK_STRING
723 PARSER_DEBUG_PRINTF("FIBMetric: %d\n", $2->string);
724 if (strcmp($2->string, CFG_FIBM_FLAT) == 0) {
725 olsr_cnf->fib_metric = FIBM_FLAT;
726 } else if (strcmp($2->string, CFG_FIBM_CORRECT) == 0) {
727 olsr_cnf->fib_metric = FIBM_CORRECT;
728 } else if (strcmp($2->string, CFG_FIBM_APPROX) == 0) {
729 olsr_cnf->fib_metric = FIBM_APPROX;
731 fprintf(stderr, "FIBMetric must be \"%s\", \"%s\", or \"%s\"!\n", CFG_FIBM_FLAT, CFG_FIBM_CORRECT, CFG_FIBM_APPROX);
740 ihna4entry: TOK_IP4_ADDR TOK_IP4_ADDR
742 union olsr_ip_addr ipaddr, netmask;
744 PARSER_DEBUG_PRINTF("HNA IPv4 entry: %s/%s\n", $1->string, $2->string);
746 if (olsr_cnf->ip_version != AF_INET) {
747 fprintf(stderr, "IPv4 addresses can only be used if \"IpVersion\" == 4\n");
751 if (inet_pton(AF_INET, $1->string, &ipaddr.v4) <= 0) {
752 fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
755 if (inet_pton(AF_INET, $2->string, &netmask.v4) <= 0) {
756 fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
760 /* check that the given IP address is actually a network address */
761 if ((ipaddr.v4.s_addr & ~netmask.v4.s_addr) != 0) {
762 fprintf(stderr, "ihna4entry: The ipaddress \"%s\" is not a network address!\n", $1->string);
767 ip_prefix_list_add(&olsr_cnf->hna_entries, &ipaddr, olsr_netmask_to_prefix(&netmask));
774 | TOK_IP4_ADDR TOK_SLASH TOK_INTEGER
776 union olsr_ip_addr ipaddr, netmask;
778 PARSER_DEBUG_PRINTF("HNA IPv4 entry: %s/%d\n", $1->string, $3->integer);
780 if (inet_pton(AF_INET, $1->string, &ipaddr.v4) <= 0) {
781 fprintf(stderr, "ihna4entry: Failed converting IP address %s\n", $1->string);
784 if ($3->integer > olsr_cnf->maxplen) {
785 fprintf(stderr, "ihna4entry: Prefix len %u > %d is not allowed!\n", $3->integer, olsr_cnf->maxplen);
789 /* check that the given IP address is actually a network address */
790 olsr_prefix_to_netmask(&netmask, $3->integer);
791 if ((ipaddr.v4.s_addr & ~netmask.v4.s_addr) != 0) {
792 fprintf(stderr, "ihna4entry: The ipaddress \"%s\" is not a network address!\n", $1->string);
797 ip_prefix_list_add(&olsr_cnf->hna_entries, &ipaddr, $3->integer);
805 ihna6entry: TOK_IP6_ADDR TOK_INTEGER
807 if (add_ipv6_addr($1, $2)) {
811 | TOK_IP6_ADDR TOK_SLASH TOK_INTEGER
813 if (add_ipv6_addr($1, $3)) {
819 ifstart: TOK_INTERFACE
821 PARSER_DEBUG_PRINTF("setting ifs_in_curr_cfg = 0\n");
828 struct olsr_if *in = malloc(sizeof(*in));
831 fprintf(stderr, "Out of memory(ADD IF)\n");
835 in->cnf = get_default_if_config();
837 if (in->cnf == NULL) {
838 fprintf(stderr, "Out of memory(ADD IFRULE)\n");
842 in->name = $1->string;
845 in->next = olsr_cnf->interfaces;
846 olsr_cnf->interfaces = in;
852 bnoint: TOK_NOINT TOK_BOOLEAN
854 PARSER_DEBUG_PRINTF("Noint set to %d\n", $2->boolean);
855 olsr_cnf->allow_no_interfaces = $2->boolean;
860 atos: TOK_TOS TOK_INTEGER
862 PARSER_DEBUG_PRINTF("TOS: %d\n", $2->integer);
863 olsr_cnf->tos = $2->integer;
869 arttable: TOK_RTTABLE TOK_INTEGER
871 PARSER_DEBUG_PRINTF("RtTable: %d\n", $2->integer);
872 olsr_cnf->rttable = $2->integer;
877 awillingness: TOK_WILLINGNESS TOK_INTEGER
879 PARSER_DEBUG_PRINTF("Willingness: %d\n", $2->integer);
880 olsr_cnf->willingness_auto = OLSR_FALSE;
881 olsr_cnf->willingness = $2->integer;
886 busehyst: TOK_USEHYST TOK_BOOLEAN
888 olsr_cnf->use_hysteresis = $2->boolean;
889 PARSER_DEBUG_PRINTF("Hysteresis %s\n", olsr_cnf->use_hysteresis ? "enabled" : "disabled");
894 fhystscale: TOK_HYSTSCALE TOK_FLOAT
896 olsr_cnf->hysteresis_param.scaling = $2->floating;
897 PARSER_DEBUG_PRINTF("Hysteresis Scaling: %0.2f\n", $2->floating);
902 fhystupper: TOK_HYSTUPPER TOK_FLOAT
904 olsr_cnf->hysteresis_param.thr_high = $2->floating;
905 PARSER_DEBUG_PRINTF("Hysteresis UpperThr: %0.2f\n", $2->floating);
910 fhystlower: TOK_HYSTLOWER TOK_FLOAT
912 olsr_cnf->hysteresis_param.thr_low = $2->floating;
913 PARSER_DEBUG_PRINTF("Hysteresis LowerThr: %0.2f\n", $2->floating);
918 fpollrate: TOK_POLLRATE TOK_FLOAT
920 PARSER_DEBUG_PRINTF("Pollrate %0.2f\n", $2->floating);
921 olsr_cnf->pollrate = $2->floating;
926 fnicchgspollrt: TOK_NICCHGSPOLLRT TOK_FLOAT
928 PARSER_DEBUG_PRINTF("NIC Changes Pollrate %0.2f\n", $2->floating);
929 olsr_cnf->nic_chgs_pollrate = $2->floating;
934 atcredundancy: TOK_TCREDUNDANCY TOK_INTEGER
936 PARSER_DEBUG_PRINTF("TC redundancy %d\n", $2->integer);
937 olsr_cnf->tc_redundancy = $2->integer;
942 amprcoverage: TOK_MPRCOVERAGE TOK_INTEGER
944 PARSER_DEBUG_PRINTF("MPR coverage %d\n", $2->integer);
945 olsr_cnf->mpr_coverage = $2->integer;
950 alq_level: TOK_LQ_LEVEL TOK_INTEGER
952 PARSER_DEBUG_PRINTF("Link quality level %d\n", $2->integer);
953 olsr_cnf->lq_level = $2->integer;
958 alq_fish: TOK_LQ_FISH TOK_INTEGER
960 PARSER_DEBUG_PRINTF("Link quality fish eye %d\n", $2->integer);
961 olsr_cnf->lq_fish = $2->integer;
966 alq_dlimit: TOK_LQ_DLIMIT TOK_INTEGER TOK_FLOAT
968 PARSER_DEBUG_PRINTF("Link quality dijkstra limit %d, %0.2f\n", $2->integer, $3->floating);
969 olsr_cnf->lq_dlimit = $2->integer;
970 olsr_cnf->lq_dinter = $3->floating;
975 alq_wsize: TOK_LQ_WSIZE TOK_INTEGER
977 PARSER_DEBUG_PRINTF("Link quality window size %d\n", $2->integer);
978 olsr_cnf->lq_wsize = $2->integer;
983 anat_thresh: TOK_LQ_NAT_THRESH TOK_FLOAT
985 PARSER_DEBUG_PRINTF("NAT threshold %0.2f\n", $2->floating);
986 olsr_cnf->lq_nat_thresh = $2->floating;
991 bclear_screen: TOK_CLEAR_SCREEN TOK_BOOLEAN
993 PARSER_DEBUG_PRINTF("Clear screen %s\n", olsr_cnf->clear_screen ? "enabled" : "disabled");
994 olsr_cnf->clear_screen = $2->boolean;
999 plblock: TOK_PLUGIN TOK_STRING
1001 struct plugin_entry *pe = malloc(sizeof(*pe));
1004 fprintf(stderr, "Out of memory(ADD PL)\n");
1008 pe->name = $2->string;
1011 PARSER_DEBUG_PRINTF("Plugin: %s\n", $2->string);
1014 pe->next = olsr_cnf->plugins;
1015 olsr_cnf->plugins = pe;
1021 plparam: TOK_PLPARAM TOK_STRING TOK_STRING
1023 struct plugin_param *pp = malloc(sizeof(*pp));
1026 fprintf(stderr, "Out of memory(ADD PP)\n");
1030 PARSER_DEBUG_PRINTF("Plugin param key:\"%s\" val: \"%s\"\n", $2->string, $3->string);
1032 pp->key = $2->string;
1033 pp->value = $3->string;
1036 pp->next = olsr_cnf->plugins->params;
1037 olsr_cnf->plugins->params = pp;
1044 vcomment: TOK_COMMENT
1046 //PARSER_DEBUG_PRINTF("Comment\n");
1054 void yyerror (const char *string)
1056 fprintf(stderr, "Config line %d: %s\n", current_line, string);