Transmission 2.33
[tomato.git] / release / src / router / radvd / scanner.l
blob936c596f3551d62b5ebc54c407544c44e69faa08
1 /*
2  *   $Id: scanner.l,v 1.20 2010/12/14 11:58:21 psavola Exp $
3  *
4  *   Authors:
5  *    Pedro Roque               <roque@di.fc.ul.pt>
6  *    Lars Fenneberg            <lf@elemental.net>
7  *
8  *   This software is Copyright 1996-2000 by the above mentioned author(s),
9  *   All Rights Reserved.
10  *
11  *   The license which is distributed with this software in the file COPYRIGHT
12  *   applies to this software. If your distribution is missing this file, you
13  *   may request it from <pekkas@netcore.fi>.
14  *
15  */
16 %option noyywrap
19 #include <string.h>
20 #include "config.h"
21 #include "includes.h"
22 #include "radvd.h"
23 #include "gram.h"
25 extern char *conf_file;
27 int num_lines = 1;
29 #define YY_NO_INPUT
32 digit           [0-9]
33 number          ({digit})+
34 snum            -?({digit})+
35 decimal         ({number}"."{number})
36 hexdigit        ([a-f]|[A-F]|[0-9])
37 addr1           {hexdigit}{1,4}":"({hexdigit}{1,4}":")*(":"{hexdigit}{1,4})+
38 addr2           {hexdigit}{1,4}(":"{hexdigit}{1,4})*"::"
39 addr3           ({hexdigit}{1,4}":"){7}{hexdigit}{1,4}
40 addr            ({addr1}|{addr2}|{addr3}|"::")
41 whitespace      ([ \t])+
42 string          ([a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\])+
45 #.*$                    {/* ignore comments */}
46 \n                      {num_lines++;}
47 {whitespace}            {}
49 interface               { return T_INTERFACE; }
50 prefix                  { return T_PREFIX; }
51 route                   { return T_ROUTE; }
52 RDNSS                   { return T_RDNSS; }
53 DNSSL                   { return T_DNSSL; }
54 clients                 { return T_CLIENTS; }
56 IgnoreIfMissing         { return T_IgnoreIfMissing; }
57 AdvSendAdvert           { return T_AdvSendAdvert; }
58 MaxRtrAdvInterval       { return T_MaxRtrAdvInterval; }
59 MinRtrAdvInterval       { return T_MinRtrAdvInterval; }
60 AdvManagedFlag          { return T_AdvManagedFlag; }
61 AdvOtherConfigFlag      { return T_AdvOtherConfigFlag; }
62 AdvLinkMTU              { return T_AdvLinkMTU; }
63 AdvReachableTime        { return T_AdvReachableTime; }
64 AdvRetransTimer         { return T_AdvRetransTimer; }
65 AdvCurHopLimit          { return T_AdvCurHopLimit; }
66 AdvDefaultLifetime      { return T_AdvDefaultLifetime; }
67 AdvDefaultPreference    { return T_AdvDefaultPreference; }
68 AdvSourceLLAddress      { return T_AdvSourceLLAddress; }
70 AdvOnLink               { return T_AdvOnLink; }
71 AdvAutonomous           { return T_AdvAutonomous; }
72 AdvValidLifetime        { return T_AdvValidLifetime; }
73 AdvPreferredLifetime    { return T_AdvPreferredLifetime; }
75 AdvRouterAddr           { return T_AdvRouterAddr; }
76 AdvHomeAgentFlag        { return T_AdvHomeAgentFlag; }
77 AdvIntervalOpt          { return T_AdvIntervalOpt; }
78 AdvHomeAgentInfo        { return T_AdvHomeAgentInfo; }
79 UnicastOnly             { return T_UnicastOnly; }
81 Base6to4Interface       { return T_Base6to4Interface; }
83 HomeAgentPreference     { return T_HomeAgentPreference; }
84 HomeAgentLifetime       { return T_HomeAgentLifetime; }
86 AdvRoutePreference      { return T_AdvRoutePreference; }
87 AdvRouteLifetime        { return T_AdvRouteLifetime; }
89 AdvRDNSSPreference      { return T_AdvRDNSSPreference; }
90 AdvRDNSSOpen            { return T_AdvRDNSSOpenFlag; }
91 AdvRDNSSLifetime        { return T_AdvRDNSSLifetime; }
93 AdvDNSSLLifetime        { return T_AdvDNSSLLifetime; }
95 MinDelayBetweenRAs      { return T_MinDelayBetweenRAs; }
97 AdvMobRtrSupportFlag    { return T_AdvMobRtrSupportFlag; }
99 {addr}          {
100                         static struct in6_addr addr;
101                         if (inet_pton(AF_INET6, yytext, &addr) < 1) {
102                                 flog(LOG_ERR, "invalid address in %s, line %d", conf_file,
103                                         num_lines);
104                                 return T_BAD_TOKEN;
105                         }
107                         yylval.addr = &addr;
108                         return IPV6ADDR;
109                 }
111 {number}        {
112                         unsigned long lnum;
113                         char *endp;
114                         lnum = strtoul(yytext, &endp, 10);
115                         if (*yytext == '\0' || *endp != '\0')
116                                 return T_BAD_TOKEN;
117                         if (lnum > 0xFFFFFFFFUL)
118                                 return T_BAD_TOKEN;     /* XXX */
119                         yylval.num = lnum;
120                         return NUMBER;
121                 }
123 {snum}          { yylval.snum = atoi(yytext); return SIGNEDNUMBER; }
125 {decimal}       { yylval.dec = atof(yytext); return DECIMAL; }
127 infinity        { return INFINITY; }
129 on                      { yylval.num = 1; return SWITCH; }
131 off                     { yylval.num = 0; return SWITCH; }
133 low             { yylval.snum = -1; return SIGNEDNUMBER; }
135 medium          { yylval.snum = 0; return SIGNEDNUMBER; }
137 high            { yylval.snum = 1; return SIGNEDNUMBER; }
139 {string}        {
140                         static char string[256];
142                         strncpy(string, yytext, sizeof(string));
143                         string[sizeof(string)-1] = '\0';
144                         yylval.str = string;
145                         return STRING;
146                 }
148 "{"|"}"|";"|"/" { return *yytext; }
150 .               { return T_BAD_TOKEN; }