forked from radvd-project/radvd
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscanner.l
164 lines (130 loc) · 4.48 KB
/
scanner.l
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/*
*
* Authors:
* Pedro Roque <roque@di.fc.ul.pt>
* Lars Fenneberg <lf@elemental.net>
*
* This software is Copyright 1996-2000 by the above mentioned author(s),
* All Rights Reserved.
*
* The license which is distributed with this software in the file COPYRIGHT
* applies to this software. If your distribution is missing this file, you
* may request it from <reubenhwk@gmail.com>.
*
*/
%option nounput noinput noyywrap yylineno
%{
#include "config.h"
#include "includes.h"
#include "log.h"
#include "gram.h"
int num_lines;
%}
digit [0-9]
number ({digit})+
snum -?({digit})+
decimal ({number}"."{number})
hexdigit ([a-f]|[A-F]|[0-9])
addr1 {hexdigit}{1,4}":"({hexdigit}{1,4}":")*(":"{hexdigit}{1,4})+
addr2 {hexdigit}{1,4}(":"{hexdigit}{1,4})*"::"
addr3 ({hexdigit}{1,4}":"){7}{hexdigit}{1,4}
addr ({addr1}|{addr2}|{addr3}|"::")
whitespace ([ \t])+
string [a-zA-Z0-9`~!@#$%\^&*()_\-+=:\[\]<>,\.?\\]+
%%
#.*$ {/* ignore comments */}
\n {num_lines++;}
{whitespace} {}
interface { return T_INTERFACE; }
prefix { return T_PREFIX; }
route { return T_ROUTE; }
RDNSS { return T_RDNSS; }
DNSSL { return T_DNSSL; }
clients { return T_CLIENTS; }
lowpanco { return T_LOWPANCO; }
abro { return T_ABRO; }
IgnoreIfMissing { return T_IgnoreIfMissing; }
AdvSendAdvert { return T_AdvSendAdvert; }
MaxRtrAdvInterval { return T_MaxRtrAdvInterval; }
MinRtrAdvInterval { return T_MinRtrAdvInterval; }
AdvManagedFlag { return T_AdvManagedFlag; }
AdvOtherConfigFlag { return T_AdvOtherConfigFlag; }
AdvLinkMTU { return T_AdvLinkMTU; }
AdvReachableTime { return T_AdvReachableTime; }
AdvRetransTimer { return T_AdvRetransTimer; }
AdvCurHopLimit { return T_AdvCurHopLimit; }
AdvDefaultLifetime { return T_AdvDefaultLifetime; }
AdvDefaultPreference { return T_AdvDefaultPreference; }
AdvSourceLLAddress { return T_AdvSourceLLAddress; }
AdvOnLink { return T_AdvOnLink; }
AdvAutonomous { return T_AdvAutonomous; }
AdvValidLifetime { return T_AdvValidLifetime; }
AdvPreferredLifetime { return T_AdvPreferredLifetime; }
DeprecatePrefix { return T_DeprecatePrefix; }
DecrementLifetimes { return T_DecrementLifetimes; }
AdvRouterAddr { return T_AdvRouterAddr; }
AdvHomeAgentFlag { return T_AdvHomeAgentFlag; }
AdvIntervalOpt { return T_AdvIntervalOpt; }
AdvHomeAgentInfo { return T_AdvHomeAgentInfo; }
UnicastOnly { return T_UnicastOnly; }
Base6Interface { return T_Base6Interface; }
Base6to4Interface { return T_Base6to4Interface; }
HomeAgentPreference { return T_HomeAgentPreference; }
HomeAgentLifetime { return T_HomeAgentLifetime; }
AdvRoutePreference { return T_AdvRoutePreference; }
AdvRouteLifetime { return T_AdvRouteLifetime; }
RemoveRoute { return T_RemoveRoute; }
AdvRDNSSPreference { return T_AdvRDNSSPreference; }
AdvRDNSSOpen { return T_AdvRDNSSOpenFlag; }
AdvRDNSSLifetime { return T_AdvRDNSSLifetime; }
FlushRDNSS { return T_FlushRDNSS; }
AdvDNSSLLifetime { return T_AdvDNSSLLifetime; }
FlushDNSSL { return T_FlushDNSSL; }
MinDelayBetweenRAs { return T_MinDelayBetweenRAs; }
AdvMobRtrSupportFlag { return T_AdvMobRtrSupportFlag; }
AdvContextLength { return T_AdvContextLength; }
AdvContextCompressionFlag { return T_AdvContextCompressionFlag; }
AdvContextID { return T_AdvContextID; }
AdvLifeTime { return T_AdvLifeTime; }
AdvContextPrefix { return T_AdvContextPrefix; }
AdvVersionLow { return T_AdvVersionLow; }
AdvVersionHigh { return T_AdvVersionHigh; }
AdvValidLifeTime { return T_AdvValidLifeTime; }
Adv6LBRaddress { return T_Adv6LBRaddress; }
{addr} {
static struct in6_addr addr;
if (inet_pton(AF_INET6, yytext, &addr) < 1) {
return T_BAD_TOKEN;
}
yylval.addr = &addr;
return IPV6ADDR;
}
{number} {
unsigned long lnum;
char *endp;
lnum = strtoul(yytext, &endp, 10);
if (*yytext == '\0' || *endp != '\0')
return T_BAD_TOKEN;
if (lnum > 0xFFFFFFFFUL)
return T_BAD_TOKEN; /* XXX */
yylval.num = lnum;
return NUMBER;
}
{snum} { yylval.snum = atoi(yytext); return SIGNEDNUMBER; }
{decimal} { yylval.dec = atof(yytext); return DECIMAL; }
infinity { return INFINITY; }
on { yylval.num = 1; return SWITCH; }
off { yylval.num = 0; return SWITCH; }
low { yylval.snum = -1; return SIGNEDNUMBER; }
medium { yylval.snum = 0; return SIGNEDNUMBER; }
high { yylval.snum = 1; return SIGNEDNUMBER; }
{string} {
static char string[256];
strncpy(string, yytext, sizeof(string));
string[sizeof(string)-1] = '\0';
yylval.str = string;
return STRING;
}
"{"|"}"|";"|"/" { return *yytext; }
. { return T_BAD_TOKEN; }
%%