conf: calculate the checksum over the effective configuration
[olsrd.git] / src / cfgparser / oscan.lex
1 %{
2
3 /*
4  * The olsr.org Optimized Link-State Routing daemon (olsrd)
5  *
6  * (c) by the OLSR project
7  *
8  * See our Git repository to find out who worked on this file
9  * and thus is a copyright holder on it.
10  *
11  * All rights reserved.
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  *
17  * * Redistributions of source code must retain the above copyright
18  *   notice, this list of conditions and the following disclaimer.
19  * * Redistributions in binary form must reproduce the above copyright
20  *   notice, this list of conditions and the following disclaimer in
21  *   the documentation and/or other materials provided with the
22  *   distribution.
23  * * Neither the name of olsr.org, olsrd nor the names of its
24  *   contributors may be used to endorse or promote products derived
25  *   from this software without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
30  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
31  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
32  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
33  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
34  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
35  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
37  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38  * POSSIBILITY OF SUCH DAMAGE.
39  *
40  * Visit http://www.olsr.org for more information.
41  *
42  * If you find this software useful feel free to make a donation
43  * to the project. For more information see the website or contact
44  * the copyright holders.
45  *
46  */
47
48 #define YYSTYPE struct conf_token *
49
50 #include <stdio.h>
51 #include <stdlib.h>
52 #include <string.h>
53 #include <sys/types.h>
54 #include <sys/socket.h>
55 #include <netinet/in.h>
56 #include <arpa/inet.h>
57
58 #include "olsrd_conf.h"
59 #include "olsrd_conf_checksum.h"
60
61 #include "oparse.h"
62  
63 #define ECHO if(fwrite( yytext, yyleng, 1, yyout )) {}
64
65 /* Prototypes */
66 int yyget_lineno(void);
67 FILE * yyget_in(void);
68 FILE* yyget_out(void);
69 char *yyget_text(void);
70 void yyset_lineno(int);
71 void yyset_in(FILE *);
72 void yyset_out(FILE *);
73 int yyget_debug(void);
74 void yyset_debug(int);
75 int yylex_destroy(void);
76 int yylex(void);
77
78 static struct conf_token *get_conf_token(void);
79 static struct conf_token *get_string_token(const char * const s, const size_t n);
80 static struct conf_token *get_integer_token(const char * const s);
81 static struct conf_token *get_floating_token(const char * const s);
82 static struct conf_token *get_boolean_token(const bool b);
83
84 static struct conf_token *get_conf_token(void)
85 {
86     struct conf_token *t = calloc(1, sizeof(struct conf_token));
87     if (t == NULL) {
88         fprintf(stderr, "Cannot allocate %d bytes for an configuration token.\n", (int)sizeof(struct conf_token));
89     }
90     return t;
91 }
92
93 static struct conf_token *get_string_token(const char * const s, const size_t n)
94 {
95     struct conf_token *rv = get_conf_token();
96     if (rv != NULL) {
97         rv->string = malloc(n + 1);
98         if (rv->string == NULL) {
99           fprintf(stderr, "Cannot allocate %lu bytes for string token data.\n", (unsigned long)(n+1)); /* size_t on 64bit */
100             free(rv);
101             return NULL;
102         }
103         memcpy(rv->string, s, n);
104         rv->string[n] = '\0';
105     }
106     return rv;
107 }
108
109 static struct conf_token *get_integer_token(const char * const s)
110 {
111     struct conf_token *rv = get_conf_token();
112     if (rv != NULL) {
113         rv->integer = strtol(s, NULL, 0);
114     }
115     return rv;
116 }
117
118 static struct conf_token *get_floating_token(const char * const s)
119 {
120     struct conf_token *rv = get_conf_token();
121     if (rv != NULL) {
122         rv->floating = 0.0;
123         sscanf(s, "%f", &rv->floating);
124     }
125     return rv;
126 }
127
128 static struct conf_token *get_boolean_token(const bool b)
129 {
130     struct conf_token *rv = get_conf_token();
131     if (rv != NULL) {
132         rv->boolean = b;
133     }
134     return rv;
135 }
136
137 %}
138
139 %option never-interactive
140 %option noalways-interactive
141 %option nomain
142 %option nostack
143 %option noyywrap
144
145 DECDIGIT [0-9]
146 FLOAT {DECDIGIT}+\.{DECDIGIT}+
147 HEX8 [a-fA-F0-9]
148 QUAD {DECDIGIT}{1,3}
149
150 IPV4ADDR {QUAD}\.{QUAD}\.{QUAD}\.{QUAD}
151
152 HEX16 {HEX8}{1,4}
153
154 IPV6PAT2 ({HEX16}:){1}:({HEX16}:){0,5}{HEX16}
155 IPV6PAT3 ({HEX16}:){2}:({HEX16}:){0,4}{HEX16}
156 IPV6PAT4 ({HEX16}:){3}:({HEX16}:){0,3}{HEX16}
157 IPV6PAT5 ({HEX16}:){4}:({HEX16}:){0,2}{HEX16}
158 IPV6PAT6 ({HEX16}:){5}:({HEX16}:){0,1}{HEX16}
159 IPV6PAT7 ({HEX16}:){6}:({HEX16})
160 IPV6PAT1 ({HEX16}:){7}{HEX16}
161 IPV6PAT8 ({HEX16}:){1,7}:
162 IPV6PAT9 ::
163 IPV6PAT10 :(:{HEX16}){1,7}
164
165 IPV6ADDR {IPV6PAT1}|{IPV6PAT2}|{IPV6PAT3}|{IPV6PAT4}|{IPV6PAT5}|{IPV6PAT6}|{IPV6PAT7}|{IPV6PAT8}|{IPV6PAT9}|{IPV6PAT10}
166
167 %%
168
169 \s*"#".*\n {
170     current_line++;
171     return TOK_COMMENT;
172 }
173
174 \/ {
175     olsrd_config_checksum_add(yytext, yyleng);
176     yylval = NULL;
177     return TOK_SLASH;
178 }
179
180 \{ {
181     olsrd_config_checksum_add(yytext, yyleng);
182     yylval = NULL;
183     return TOK_OPEN;
184 }
185
186 \} {
187     olsrd_config_checksum_add(yytext, yyleng);
188     yylval = NULL;
189     return TOK_CLOSE;
190 }
191
192 \"[^\"]*\" {
193     olsrd_config_checksum_add(yytext, yyleng);
194     yylval = get_string_token(yytext + 1, yyleng - 2);
195     if (yylval == NULL) {
196         yyterminate();
197     }
198     return TOK_STRING;
199 }
200
201 0x{HEX8}+ {
202     olsrd_config_checksum_add(yytext, yyleng);
203     yylval = get_integer_token(yytext);
204     return TOK_INTEGER;
205 }
206
207 {FLOAT} {
208     olsrd_config_checksum_add(yytext, yyleng);
209     yylval = get_floating_token(yytext);
210     return TOK_FLOAT;
211 }
212
213 {IPV4ADDR} {
214     olsrd_config_checksum_add(yytext, yyleng);
215     yylval = get_string_token(yytext, yyleng + 1);
216     if (yylval == NULL) {
217         yyterminate();
218     }
219     return TOK_IPV4_ADDR;
220 }
221 {IPV6ADDR} {
222     olsrd_config_checksum_add(yytext, yyleng);
223     yylval = get_string_token(yytext, yyleng + 1);
224     if (yylval == NULL) {
225         yyterminate();
226     }
227     return TOK_IPV6_ADDR;
228 }
229
230 "default" {
231     olsrd_config_checksum_add(yytext, yyleng);
232     yylval = NULL;
233     return TOK_DEFAULT;
234 }
235
236 "auto" {
237     olsrd_config_checksum_add(yytext, yyleng);
238     yylval = NULL;
239     return TOK_AUTO;
240 }
241
242 "none" {
243     olsrd_config_checksum_add(yytext, yyleng);
244     yylval = NULL;
245     return TOK_NONE;
246 }
247
248 {DECDIGIT}+ {
249     olsrd_config_checksum_add(yytext, yyleng);
250     yylval = get_integer_token(yytext);
251     return TOK_INTEGER;
252 }
253
254
255 "yes" {
256     olsrd_config_checksum_add(yytext, yyleng);
257     yylval = get_boolean_token(true);
258     return TOK_BOOLEAN;
259 }
260
261 "no" {
262     olsrd_config_checksum_add(yytext, yyleng);
263     yylval = get_boolean_token(false);
264     return TOK_BOOLEAN;
265 }
266
267 "Host" {
268     olsrd_config_checksum_add(yytext, yyleng);
269     yylval = NULL;
270     return TOK_HOSTLABEL;
271 }
272
273 "Net" {
274     olsrd_config_checksum_add(yytext, yyleng);
275     yylval = NULL;
276     return TOK_NETLABEL;
277 }
278
279 "MaxConnections" {
280     olsrd_config_checksum_add(yytext, yyleng);
281     yylval = NULL;
282     return TOK_MAXIPC;
283 }
284
285 "DebugLevel" {
286     olsrd_config_checksum_add(yytext, yyleng);
287     yylval = NULL;
288     return TOK_DEBUGLEVEL;
289 }
290
291 "IpVersion" {
292     olsrd_config_checksum_add(yytext, yyleng);
293     yylval = NULL;
294     return TOK_IPVERSION;
295 }
296
297 "NicChgsPollInt" {
298     olsrd_config_checksum_add(yytext, yyleng);
299     yylval = NULL;
300     return TOK_NICCHGSPOLLRT;
301 }
302
303 "Hna4" {
304     olsrd_config_checksum_add(yytext, yyleng);
305     yylval = NULL;
306     return TOK_HNA4;
307 }
308
309 "Hna6" {
310     olsrd_config_checksum_add(yytext, yyleng);
311     yylval = NULL;
312     return TOK_HNA6;
313 }
314
315 "LoadPlugin" {
316     olsrd_config_checksum_add(yytext, yyleng);
317     yylval = NULL;
318     return TOK_PLUGIN;
319 }
320
321 "PlParam" {
322     olsrd_config_checksum_add(yytext, yyleng);
323     yylval = NULL;
324     return TOK_PLPARAM;
325 }
326
327 "Interface" {
328     olsrd_config_checksum_add(yytext, yyleng);
329     yylval = NULL;
330     return TOK_INTERFACE;
331 }
332 "InterfaceDefaults" {
333     olsrd_config_checksum_add(yytext, yyleng);
334     yylval = NULL;
335     return TOK_INTERFACE_DEFAULTS;
336 }
337
338 "AllowNoInt" {
339     olsrd_config_checksum_add(yytext, yyleng);
340     yylval = NULL;
341     return TOK_NOINT;
342 }
343
344 "TosValue" {
345     olsrd_config_checksum_add(yytext, yyleng);
346     yylval = NULL;
347     return TOK_TOS;
348 }
349
350
351 "OlsrPort" {
352   olsrd_config_checksum_add(yytext, yyleng);
353   yylval = NULL;
354   return TOK_OLSRPORT;
355 }
356
357 "RtProto" {
358   olsrd_config_checksum_add(yytext, yyleng);
359   yylval = NULL;
360   return TOK_RTPROTO;
361 }
362
363 "RtTable" {
364   olsrd_config_checksum_add(yytext, yyleng);
365   yylval = NULL;
366   return TOK_RTTABLE;
367 }
368
369 "RtTableDefault" {
370   olsrd_config_checksum_add(yytext, yyleng);
371   yylval = NULL;
372   return TOK_RTTABLE_DEFAULT;
373 }
374
375 "RtTableTunnel" {
376   olsrd_config_checksum_add(yytext, yyleng);
377   yylval = NULL;
378   return TOK_RTTABLE_TUNNEL;
379 }
380
381 "RtTablePriority" {
382   olsrd_config_checksum_add(yytext, yyleng);
383   yylval = NULL;
384   return TOK_RTTABLE_PRIORITY;
385 }
386
387 "RtTableDefaultOlsrPriority" {
388   olsrd_config_checksum_add(yytext, yyleng);
389   yylval = NULL;
390   return TOK_RTTABLE_DEFAULTOLSR_PRIORITY;
391 }
392
393 "RtTableTunnelPriority" {
394   olsrd_config_checksum_add(yytext, yyleng);
395   yylval = NULL;
396   return TOK_RTTABLE_TUNNEL_PRIORITY;
397 }
398
399 "RtTableDefaultPriority" {
400   olsrd_config_checksum_add(yytext, yyleng);
401   yylval = NULL;
402   return TOK_RTTABLE_DEFAULT_PRIORITY;
403 }
404
405 "Willingness" {
406     olsrd_config_checksum_add(yytext, yyleng);
407     yylval = NULL;
408     return TOK_WILLINGNESS;
409 }
410
411 "IpcConnect" {
412     olsrd_config_checksum_add(yytext, yyleng);
413     yylval = NULL;
414     return TOK_IPCCON;
415 }
416
417 "FIBMetric" {
418     olsrd_config_checksum_add(yytext, yyleng);
419     yylval = NULL;
420     return TOK_FIBMETRIC;
421 }
422
423 "FIBMetricDefault" {
424     olsrd_config_checksum_add(yytext, yyleng);
425     yylval = NULL;
426     return TOK_FIBMETRICDEFAULT;
427 }
428
429 "UseHysteresis" {
430     olsrd_config_checksum_add(yytext, yyleng);
431     yylval = NULL;
432     return TOK_USEHYST;
433 }
434
435 "HystScaling" {
436     olsrd_config_checksum_add(yytext, yyleng);
437     yylval = NULL;
438     return TOK_HYSTSCALE;
439 }
440
441 "HystThrHigh" {
442     olsrd_config_checksum_add(yytext, yyleng);
443     yylval = NULL;
444     return TOK_HYSTUPPER;
445 }
446
447 "HystThrLow" {
448     olsrd_config_checksum_add(yytext, yyleng);
449     yylval = NULL;
450     return TOK_HYSTLOWER;
451 }
452
453 "Pollrate" {
454     olsrd_config_checksum_add(yytext, yyleng);
455     yylval = NULL;
456     return TOK_POLLRATE;
457 }
458
459
460 "TcRedundancy" {
461     olsrd_config_checksum_add(yytext, yyleng);
462     yylval = NULL;
463     return TOK_TCREDUNDANCY;
464 }
465
466 "MprCoverage" {
467     olsrd_config_checksum_add(yytext, yyleng);
468     yylval = NULL;
469     return TOK_MPRCOVERAGE;
470 }
471
472 "LinkQualityLevel" {
473     olsrd_config_checksum_add(yytext, yyleng);
474     yylval = NULL;
475     return TOK_LQ_LEVEL;
476 }
477
478 "LinkQualityFishEye" {
479     olsrd_config_checksum_add(yytext, yyleng);
480     yylval = NULL;
481     return TOK_LQ_FISH;
482 }
483
484 "LinkQualityAging" {
485     olsrd_config_checksum_add(yytext, yyleng);
486     yylval = NULL;
487     return TOK_LQ_AGING;
488 }
489
490 "LinkQualityAlgorithm" {
491     olsrd_config_checksum_add(yytext, yyleng);
492     yylval = NULL;
493     return TOK_LQ_PLUGIN;
494 }
495
496 "NatThreshold" {
497     olsrd_config_checksum_add(yytext, yyleng);
498     yylval = NULL;
499     return TOK_LQ_NAT_THRESH;
500 }
501
502 "LinkQualityMult" {
503     olsrd_config_checksum_add(yytext, yyleng);
504     yylval = NULL;
505     return TOK_LQ_MULT;
506 }
507
508 "MinTCVTime" {
509     olsrd_config_checksum_add(yytext, yyleng);
510     yylval = NULL;
511     return TOK_MIN_TC_VTIME;
512 }
513
514 "LockFile" {
515     olsrd_config_checksum_add(yytext, yyleng);
516     yylval = NULL;
517     return TOK_LOCK_FILE;
518 }
519
520 "ClearScreen" {
521     olsrd_config_checksum_add(yytext, yyleng);
522     yylval = NULL;
523     return TOK_CLEAR_SCREEN;
524 }
525
526 "UseNiit" {
527     olsrd_config_checksum_add(yytext, yyleng);
528     yylval = NULL;
529     return TOK_USE_NIIT;
530 }
531
532 "SmartGateway" {
533     olsrd_config_checksum_add(yytext, yyleng);
534     yylval = NULL;
535     return TOK_SMART_GW;
536 }
537
538 "SmartGatewayAlwaysRemoveServerTunnel" {
539     olsrd_config_checksum_add(yytext, yyleng);
540     yylval = NULL;
541     return TOK_SMART_GW_ALWAYS_REMOVE_SERVER_TUNNEL;
542 }
543
544 "SmartGatewayUseCount" {
545     olsrd_config_checksum_add(yytext, yyleng);
546     yylval = NULL;
547     return TOK_SMART_GW_USE_COUNT;
548 }
549
550 "SmartGatewayTakeDownPercentage" {
551     olsrd_config_checksum_add(yytext, yyleng);
552     yylval = NULL;
553     return TOK_SMART_GW_TAKEDOWN_PERCENTAGE;
554 }
555
556 "SmartGatewayInstanceId" {
557     olsrd_config_checksum_add(yytext, yyleng);
558     yylval = NULL;
559     return TOK_SMART_GW_INSTANCE_ID;
560 }
561
562 "SmartGatewayPolicyRoutingScript" {
563     olsrd_config_checksum_add(yytext, yyleng);
564     yylval = NULL;
565     return TOK_SMART_GW_POLICYROUTING_SCRIPT;
566 }
567
568 "SmartGatewayEgressInterfaces" {
569     olsrd_config_checksum_add(yytext, yyleng);
570     yylval = NULL;
571     return TOK_SMART_GW_EGRESS_IFS;
572 }
573
574 "SmartGatewayEgressFile" {
575     olsrd_config_checksum_add(yytext, yyleng);
576     yylval = NULL;
577     return TOK_SMART_GW_EGRESS_FILE;
578 }
579
580 "SmartGatewayEgressFilePeriod" {
581     olsrd_config_checksum_add(yytext, yyleng);
582     yylval = NULL;
583     return TOK_SMART_GW_EGRESS_FILE_PERIOD;
584 }
585
586 "SmartGatewayStatusFile" {
587     olsrd_config_checksum_add(yytext, yyleng);
588     yylval = NULL;
589     return TOK_SMART_GW_STATUS_FILE;
590 }
591
592 "SmartGatewayTablesOffset" {
593     olsrd_config_checksum_add(yytext, yyleng);
594     yylval = NULL;
595     return TOK_SMART_GW_OFFSET_TABLES;
596 }
597
598 "SmartGatewayRulesOffset" {
599     olsrd_config_checksum_add(yytext, yyleng);
600     yylval = NULL;
601     return TOK_SMART_GW_OFFSET_RULES;
602 }
603
604 "SmartGatewayAllowNAT" {
605     olsrd_config_checksum_add(yytext, yyleng);
606     yylval = NULL;
607     return TOK_SMART_GW_ALLOW_NAT;
608 }
609
610 "SmartGatewayPeriod" {
611     olsrd_config_checksum_add(yytext, yyleng);
612     yylval = NULL;
613     return TOK_SMART_GW_PERIOD;
614 }
615
616 "SmartGatewayStableCount" {
617     olsrd_config_checksum_add(yytext, yyleng);
618     yylval = NULL;
619     return TOK_SMART_GW_STABLECOUNT;
620 }
621
622 "SmartGatewayThreshold" {
623     olsrd_config_checksum_add(yytext, yyleng);
624     yylval = NULL;
625     return TOK_SMART_GW_THRESH;
626 }
627
628 "SmartGatewayWeightExitLinkUp" {
629     olsrd_config_checksum_add(yytext, yyleng);
630     yylval = NULL;
631     return TOK_SMART_GW_WEIGHT_EXITLINK_UP;
632 }
633
634 "SmartGatewayWeightExitLinkDown" {
635     olsrd_config_checksum_add(yytext, yyleng);
636     yylval = NULL;
637     return TOK_SMART_GW_WEIGHT_EXITLINK_DOWN;
638 }
639
640 "SmartGatewayWeightEtx" {
641     olsrd_config_checksum_add(yytext, yyleng);
642     yylval = NULL;
643     return TOK_SMART_GW_WEIGHT_ETX;
644 }
645
646 "SmartGatewayDividerEtx" {
647     olsrd_config_checksum_add(yytext, yyleng);
648     yylval = NULL;
649     return TOK_SMART_GW_DIVIDER_ETX;
650 }
651
652 "SmartGatewayMaxCostMaxEtx" {
653     olsrd_config_checksum_add(yytext, yyleng);
654     yylval = NULL;
655     return TOK_SMART_GW_MAX_COST_MAX_ETX;
656 }
657
658 "SmartGatewayUplink" {
659     olsrd_config_checksum_add(yytext, yyleng);
660     yylval = NULL;
661     return TOK_SMART_GW_UPLINK;
662 }
663  
664 "SmartGatewayUplinkNAT" {
665     olsrd_config_checksum_add(yytext, yyleng);
666     yylval = NULL;
667     return TOK_SMART_GW_UPLINK_NAT;
668 }
669  
670 "SmartGatewaySpeed" {
671     olsrd_config_checksum_add(yytext, yyleng);
672     yylval = NULL;
673     return TOK_SMART_GW_SPEED;
674 }
675
676 "SmartGatewayPrefix" {
677     olsrd_config_checksum_add(yytext, yyleng);
678     yylval = NULL;
679     return TOK_SMART_GW_PREFIX;
680 }
681
682 "SrcIpRoutes" {
683     olsrd_config_checksum_add(yytext, yyleng);
684     yylval = NULL;
685     return TOK_SRC_IP_ROUTES;
686 }
687 "Weight" {
688     olsrd_config_checksum_add(yytext, yyleng);
689     yylval = NULL;
690     return TOK_IFWEIGHT;
691 }
692 "MainIp" {
693     olsrd_config_checksum_add(yytext, yyleng);
694     yylval = NULL;
695     return TOK_MAIN_IP;
696 }
697 "SetIpForward" {
698     olsrd_config_checksum_add(yytext, yyleng);
699     yylval = NULL;
700     return TOK_SET_IPFORWARD;
701 }
702 "Ip4Broadcast" {
703     olsrd_config_checksum_add(yytext, yyleng);
704     yylval = NULL;
705     return TOK_IP4BROADCAST;
706 }
707 "IPv4Broadcast" {
708     olsrd_config_checksum_add(yytext, yyleng);
709     yylval = NULL;
710     return TOK_IPV4BROADCAST;
711 }
712 "IPv4Multicast" {
713     olsrd_config_checksum_add(yytext, yyleng);
714     yylval = NULL;
715     return TOK_IPV4MULTICAST;
716 }
717 "Mode" {
718     olsrd_config_checksum_add(yytext, yyleng);
719     yylval = NULL;
720     return TOK_IFMODE;
721 }
722 "IPv6Multicast" {
723     olsrd_config_checksum_add(yytext, yyleng);
724     yylval = NULL;
725     return TOK_IPV6MULTICAST;
726 }
727 "IPv4Src" {
728         olsrd_config_checksum_add(yytext, yyleng);
729                 yylval = NULL;
730                 return TOK_IPV4SRC;
731 }
732 "IPv6Src" {
733         olsrd_config_checksum_add(yytext, yyleng);
734                 yylval = NULL;
735                 return TOK_IPV6SRC;
736 }
737 "HelloInterval" {
738     olsrd_config_checksum_add(yytext, yyleng);
739     yylval = NULL;
740     return TOK_HELLOINT;
741 }
742 "HelloValidityTime" {
743     olsrd_config_checksum_add(yytext, yyleng);
744     yylval = NULL;
745     return TOK_HELLOVAL;
746 }
747 "TcInterval" {
748     olsrd_config_checksum_add(yytext, yyleng);
749     yylval = NULL;
750     return TOK_TCINT;
751 }
752 "TcValidityTime" {
753     olsrd_config_checksum_add(yytext, yyleng);
754     yylval = NULL;
755     return TOK_TCVAL;
756 }
757 "MidInterval" {
758     olsrd_config_checksum_add(yytext, yyleng);
759     yylval = NULL;
760     return TOK_MIDINT;
761 }
762 "MidValidityTime" {
763     olsrd_config_checksum_add(yytext, yyleng);
764     yylval = NULL;
765     return TOK_MIDVAL;
766 }
767 "HnaInterval" {
768     olsrd_config_checksum_add(yytext, yyleng);
769     yylval = NULL;
770     return TOK_HNAINT;
771 }
772 "HnaValidityTime" {
773     olsrd_config_checksum_add(yytext, yyleng);
774     yylval = NULL;
775     return TOK_HNAVAL;
776 }
777 "AutoDetectChanges" {
778     olsrd_config_checksum_add(yytext, yyleng);
779     yylval = NULL;
780     return TOK_AUTODETCHG;
781 }
782
783
784 \n|\r\n {
785     current_line++;
786 }
787
788 \ |\t
789
790 . {
791   /* Do nothing */
792   //fprintf(stderr, "Failed to parse line %d of configuration file.\n",
793   //      current_line);
794   //yyterminate();
795   //yy_fatal_error("Parsing failed.\n");
796
797   /* To avoid compiler warning (stupid...) */
798   if(0)
799     yyunput(0, NULL);
800 }
801
802 %%