Deleted Added
full compact
iplang_l.l (34739) iplang_l.l (37074)
1%e 1500
2%p 4000
3%a 4000
4%o 6000
5%{
6/*
7 * Copyright (C) 1997 by Darren Reed.
8 *
9 * Redistribution and use in source and binary forms are permitted
10 * provided that this notice is preserved and due credit is given
11 * to the original author and the contributors.
12 *
1%{
2/*
3 * Copyright (C) 1997 by Darren Reed.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that this notice is preserved and due credit is given
7 * to the original author and the contributors.
8 *
13 * $Id: iplang_l.l,v 2.0.2.15.2.2 1997/12/10 09:54:15 darrenr Exp $
9 * $Id: iplang_l.l,v 2.0.2.15.2.5 1997/12/28 01:32:13 darrenr Exp $
14 */
15#include <stdio.h>
16#include <string.h>
17#include <sys/param.h>
18#if defined(__SVR4) || defined(__sysv__)
19#include <sys/stream.h>
20#endif
21#include <sys/types.h>

--- 19 unchanged lines hidden (view full) ---

41void yyerror __P((char *));
42void push_proto __P((void));
43void pop_proto __P((void));
44int next_state __P((int, int));
45int next_item __P((int));
46int save_token __P((void));
47void swallow __P((void));
48int yylex __P((void));
10 */
11#include <stdio.h>
12#include <string.h>
13#include <sys/param.h>
14#if defined(__SVR4) || defined(__sysv__)
15#include <sys/stream.h>
16#endif
17#include <sys/types.h>

--- 19 unchanged lines hidden (view full) ---

37void yyerror __P((char *));
38void push_proto __P((void));
39void pop_proto __P((void));
40int next_state __P((int, int));
41int next_item __P((int));
42int save_token __P((void));
43void swallow __P((void));
44int yylex __P((void));
49%}
50
45
46struct wordtab {
47 char *word;
48 int state;
49 int next;
50};
51
52struct wordtab words[] = {
53 { "interface", IL_INTERFACE, -1 },
54 { "iface", IL_INTERFACE, -1 },
55 { "name", IL_IFNAME, IL_TOKEN },
56 { "ifname", IL_IFNAME, IL_TOKEN },
57 { "router", IL_DEFROUTER, IL_TOKEN },
58 { "mtu", IL_MTU, IL_NUMBER },
59 { "eaddr", IL_EADDR, IL_TOKEN },
60 { "v4addr", IL_V4ADDR, IL_TOKEN },
61 { "ipv4", IL_IPV4, -1 },
62 { "v", IL_V4V, IL_TOKEN },
63 { "proto", IL_V4PROTO, IL_TOKEN },
64 { "hl", IL_V4HL, IL_TOKEN },
65 { "id", IL_V4ID, IL_TOKEN },
66 { "ttl", IL_V4TTL, IL_TOKEN },
67 { "tos", IL_V4TOS, IL_TOKEN },
68 { "src", IL_V4SRC, IL_TOKEN },
69 { "dst", IL_V4DST, IL_TOKEN },
70 { "opt", IL_OPT, -1 },
71 { "len", IL_LEN, IL_TOKEN },
72 { "off", IL_OFF, IL_TOKEN },
73 { "sum", IL_SUM, IL_TOKEN },
74 { "tcp", IL_TCP, -1 },
75 { "sport", IL_SPORT, IL_TOKEN },
76 { "dport", IL_DPORT, IL_TOKEN },
77 { "seq", IL_TCPSEQ, IL_TOKEN },
78 { "ack", IL_TCPACK, IL_TOKEN },
79 { "flags", IL_TCPFL, IL_TOKEN },
80 { "urp", IL_TCPURP, IL_TOKEN },
81 { "win", IL_TCPWIN, IL_TOKEN },
82 { "udp", IL_UDP, -1 },
83 { "send", IL_SEND, -1 },
84 { "via", IL_VIA, IL_TOKEN },
85 { "arp", IL_ARP, -1 },
86 { "data", IL_DATA, -1 },
87 { "value", IL_DVALUE, IL_TOKEN },
88 { "file", IL_DFILE, IL_TOKEN },
89 { "nop", IL_IPO_NOP, -1 },
90 { "eol", IL_IPO_EOL, -1 },
91 { "rr", IL_IPO_RR, -1 },
92 { "zsu", IL_IPO_ZSU, -1 },
93 { "mtup", IL_IPO_MTUP, -1 },
94 { "mtur", IL_IPO_MTUR, -1 },
95 { "encode", IL_IPO_ENCODE, -1 },
96 { "ts", IL_IPO_TS, -1 },
97 { "tr", IL_IPO_TR, -1 },
98 { "sec", IL_IPO_SEC, -1 },
99 { "secclass", IL_IPO_SECCLASS, IL_TOKEN },
100 { "lsrr", IL_IPO_LSRR, -1 },
101 { "esec", IL_IPO_ESEC, -1 },
102 { "cipso", IL_IPO_CIPSO, -1 },
103 { "satid", IL_IPO_SATID, -1 },
104 { "ssrr", IL_IPO_SSRR, -1 },
105 { "addext", IL_IPO_ADDEXT, -1 },
106 { "visa", IL_IPO_VISA, -1 },
107 { "imitd", IL_IPO_IMITD, -1 },
108 { "eip", IL_IPO_EIP, -1 },
109 { "finn", IL_IPO_FINN, -1 },
110 { "mss", IL_TCPO_MSS, IL_TOKEN },
111 { "wscale", IL_TCPO_WSCALE, IL_TOKEN },
112 { "reserv-4", IL_IPS_RESERV4, -1 },
113 { "topsecret", IL_IPS_TOPSECRET, -1 },
114 { "secret", IL_IPS_SECRET, -1 },
115 { "reserv-3", IL_IPS_RESERV3, -1 },
116 { "confid", IL_IPS_CONFID, -1 },
117 { "unclass", IL_IPS_UNCLASS, -1 },
118 { "reserv-2", IL_IPS_RESERV2, -1 },
119 { "reserv-1", IL_IPS_RESERV1, -1 },
120 { "icmp", IL_ICMP, -1 },
121 { "type", IL_ICMPTYPE, -1 },
122 { "code", IL_ICMPCODE, -1 },
123 { "echorep", IL_ICMP_ECHOREPLY, -1 },
124 { "unreach", IL_ICMP_UNREACH, -1 },
125 { "squench", IL_ICMP_SOURCEQUENCH, -1 },
126 { "redir", IL_ICMP_REDIRECT, -1 },
127 { "echo", IL_ICMP_ECHO, -1 },
128 { "routerad", IL_ICMP_ROUTERADVERT, -1 },
129 { "routersol", IL_ICMP_ROUTERSOLICIT, -1 },
130 { "timex", IL_ICMP_TIMXCEED, -1 },
131 { "paramprob", IL_ICMP_PARAMPROB, -1 },
132 { "timest", IL_ICMP_TSTAMP, -1 },
133 { "timestrep", IL_ICMP_TSTAMPREPLY, -1 },
134 { "inforeq", IL_ICMP_IREQ, -1 },
135 { "inforep", IL_ICMP_IREQREPLY, -1 },
136 { "maskreq", IL_ICMP_MASKREQ, -1 },
137 { "maskrep", IL_ICMP_MASKREPLY, -1 },
138 { "net-unr", IL_ICMP_UNREACH_NET, -1 },
139 { "host-unr", IL_ICMP_UNREACH_HOST, -1 },
140 { "proto-unr", IL_ICMP_UNREACH_PROTOCOL, -1 },
141 { "port-unr", IL_ICMP_UNREACH_PORT, -1 },
142 { "needfrag", IL_ICMP_UNREACH_NEEDFRAG, -1 },
143 { "srcfail", IL_ICMP_UNREACH_SRCFAIL, -1 },
144 { "net-unk", IL_ICMP_UNREACH_NET_UNKNOWN, -1 },
145 { "host-unk", IL_ICMP_UNREACH_HOST_UNKNOWN, -1 },
146 { "isolate", IL_ICMP_UNREACH_ISOLATED, -1 },
147 { "net-prohib", IL_ICMP_UNREACH_NET_PROHIB, -1 },
148 { "host-prohib", IL_ICMP_UNREACH_HOST_PROHIB, -1 },
149 { "net-tos", IL_ICMP_UNREACH_TOSNET, -1 },
150 { "host-tos", IL_ICMP_UNREACH_TOSHOST, -1 },
151 { "filter-prohib", IL_ICMP_UNREACH_FILTER_PROHIB, -1 },
152 { "host-preced", IL_ICMP_UNREACH_HOST_PRECEDENCE, -1 },
153 { "cutoff-preced", IL_ICMP_UNREACH_PRECEDENCE_CUTOFF, -1 },
154 { "net-redir", IL_ICMP_REDIRECT_NET, -1 },
155 { "host-redir", IL_ICMP_REDIRECT_HOST, -1 },
156 { "tos-net-redir", IL_ICMP_REDIRECT_TOSNET, -1 },
157 { "tos-host-redir", IL_ICMP_REDIRECT_TOSHOST, -1 },
158 { "intrans", IL_ICMP_TIMXCEED_INTRANS, -1 },
159 { "reass", IL_ICMP_TIMXCEED_REASS, -1 },
160 { "optabsent", IL_ICMP_PARAMPROB_OPTABSENT, -1 },
161 { "otime", IL_ICMP_OTIME, -1 },
162 { "rtime", IL_ICMP_RTIME, -1 },
163 { "ttime", IL_ICMP_TTIME, -1 },
164 { "icmpseq", IL_ICMP_SEQ, -1 },
165 { "icmpid", IL_ICMP_SEQ, -1 },
166 { ".", IL_DOT, -1 },
167 { NULL, 0, 0 }
168};
169%}
170white [ \t\r]+
51%%
171%%
52[ \t\r] ;
172{white} ;
53\n { lineNum++; swallow(); }
173\n { lineNum++; swallow(); }
54interface |
55iface { return next_state(IL_INTERFACE, -1); }
56name |
57ifname { return next_state(IL_IFNAME, IL_TOKEN); }
58router { return next_state(IL_DEFROUTER, IL_TOKEN); }
59mtu { return next_state(IL_MTU, IL_NUMBER); }
60eaddr { return next_state(IL_EADDR, IL_TOKEN); }
61v4addr { return next_state(IL_V4ADDR, IL_TOKEN); }
62ipv4 { return next_state(IL_IPV4, -1); }
63v { return next_state(IL_V4V, IL_TOKEN); }
64proto { return next_state(IL_V4PROTO, IL_TOKEN); }
65hl { return next_state(IL_V4HL, IL_TOKEN); }
66id { return next_state(IL_V4ID, IL_TOKEN); }
67ttl { return next_state(IL_V4TTL, IL_TOKEN); }
68tos { return next_state(IL_V4TOS, IL_TOKEN); }
69src { return next_state(IL_V4SRC, IL_TOKEN); }
70dst { return next_state(IL_V4DST, IL_TOKEN); }
71opt { return next_state(IL_OPT, -1); }
72len { return next_state(IL_LEN, IL_TOKEN); }
73off { return next_state(IL_OFF, IL_TOKEN); }
74sum { return next_state(IL_SUM, IL_TOKEN); }
75tcp { return next_state(IL_TCP, -1); }
76sport { return next_state(IL_SPORT, IL_TOKEN); }
77dport { return next_state(IL_DPORT, IL_TOKEN); }
78seq { return next_state(IL_TCPSEQ, IL_TOKEN); }
79ack { return next_state(IL_TCPACK, IL_TOKEN); }
80flags { return next_state(IL_TCPFL, IL_TOKEN); }
81urp { return next_state(IL_TCPURP, IL_TOKEN); }
82win { return next_state(IL_TCPWIN, IL_TOKEN); }
83udp { return next_state(IL_UDP, -1); }
84send { return next_state(IL_SEND, -1); }
85via { return next_state(IL_VIA, IL_TOKEN); }
86arp { return next_state(IL_ARP, -1); }
87data { return next_state(IL_DATA, -1); }
88value { return next_state(IL_DVALUE, IL_TOKEN); }
89file { return next_state(IL_DFILE, IL_TOKEN); }
90nop { return next_state(IL_IPO_NOP, -1); }
91eol { return next_state(IL_IPO_EOL, -1); }
92rr { return next_state(IL_IPO_RR, -1); }
93zsu { return next_state(IL_IPO_ZSU, -1); }
94mtup { return next_state(IL_IPO_MTUP, -1); }
95mtur { return next_state(IL_IPO_MTUR, -1); }
96encode { return next_state(IL_IPO_ENCODE, -1); }
97ts { return next_state(IL_IPO_TS, -1); }
98tr { return next_state(IL_IPO_TR, -1); }
99sec { return next_state(IL_IPO_SEC, -1); }
100secclass { return next_state(IL_IPO_SECCLASS, IL_TOKEN); }
101lsrr { return next_state(IL_IPO_LSRR, -1); }
102esec { return next_state(IL_IPO_ESEC, -1); }
103cipso { return next_state(IL_IPO_CIPSO, -1); }
104satid { return next_state(IL_IPO_SATID, -1); }
105ssrr { return next_state(IL_IPO_SSRR, -1); }
106addext { return next_state(IL_IPO_ADDEXT, -1); }
107visa { return next_state(IL_IPO_VISA, -1); }
108imitd { return next_state(IL_IPO_IMITD, -1); }
109eip { return next_state(IL_IPO_EIP, -1); }
110finn { return next_state(IL_IPO_FINN, -1); }
111mss { return next_state(IL_TCPO_MSS, IL_TOKEN); }
112wscale { return next_state(IL_TCPO_MSS, IL_TOKEN); }
113reserv-4 { return next_state(IL_IPS_RESERV4, -1); }
114topsecret { return next_state(IL_IPS_TOPSECRET, -1); }
115secret { return next_state(IL_IPS_SECRET, -1); }
116reserv-3 { return next_state(IL_IPS_RESERV3, -1); }
117confid { return next_state(IL_IPS_CONFID, -1); }
118unclass { return next_state(IL_IPS_UNCLASS, -1); }
119reserv-2 { return next_state(IL_IPS_RESERV2, -1); }
120reserv-1 { return next_state(IL_IPS_RESERV1, -1); }
121icmp { return next_state(IL_ICMP, -1); }
122type { return next_state(IL_ICMPTYPE, -1); }
123code { return next_state(IL_ICMPCODE, -1); }
124echorep { return next_state(IL_ICMP_ECHOREPLY, -1); }
125unreach { return next_state(IL_ICMP_UNREACH, -1); }
126squench { return next_state(IL_ICMP_SOURCEQUENCH, -1); }
127redir { return next_state(IL_ICMP_REDIRECT, -1); }
128echo { return next_state(IL_ICMP_ECHO, -1); }
129routerad { return next_state(IL_ICMP_ROUTERADVERT, -1); }
130routersol { return next_state(IL_ICMP_ROUTERSOLICIT, -1); }
131timex { return next_state(IL_ICMP_TIMXCEED, -1); }
132paramprob { return next_state(IL_ICMP_PARAMPROB, -1); }
133timest { return next_state(IL_ICMP_TSTAMP, -1); }
134timestrep { return next_state(IL_ICMP_TSTAMPREPLY, -1); }
135inforeq { return next_state(IL_ICMP_IREQ, -1); }
136inforep { return next_state(IL_ICMP_IREQREPLY, -1); }
137maskreq { return next_state(IL_ICMP_MASKREQ, -1); }
138maskrep { return next_state(IL_ICMP_MASKREPLY, -1); }
139net-unr { return next_state(IL_ICMP_UNREACH_NET, -1); }
140host-unr { return next_state(IL_ICMP_UNREACH_HOST, -1); }
141proto-unr { return next_state(IL_ICMP_UNREACH_PROTOCOL, -1); }
142port-unr { return next_state(IL_ICMP_UNREACH_PORT, -1); }
143needfrag { return next_state(IL_ICMP_UNREACH_NEEDFRAG, -1); }
144srcfail { return next_state(IL_ICMP_UNREACH_SRCFAIL, -1); }
145net-unk { return next_state(IL_ICMP_UNREACH_NET_UNKNOWN, -1); }
146host-unk { return next_state(IL_ICMP_UNREACH_HOST_UNKNOWN, -1); }
147isolate { return next_state(IL_ICMP_UNREACH_ISOLATED, -1); }
148net-prohib { return next_state(IL_ICMP_UNREACH_NET_PROHIB, -1); }
149host-prohib { return next_state(IL_ICMP_UNREACH_HOST_PROHIB, -1); }
150net-tos { return next_state(IL_ICMP_UNREACH_TOSNET, -1); }
151host-tos { return next_state(IL_ICMP_UNREACH_TOSHOST, -1); }
152filter-prohib { return next_state(IL_ICMP_UNREACH_FILTER_PROHIB, -1); }
153host-preced { return next_state(IL_ICMP_UNREACH_HOST_PRECEDENCE, -1); }
154cutoff-preced { return next_state(IL_ICMP_UNREACH_PRECEDENCE_CUTOFF, -1); }
155net-redir { return next_state(IL_ICMP_REDIRECT_NET, -1); }
156host-redir { return next_state(IL_ICMP_REDIRECT_HOST, -1); }
157tos-net-redir { return next_state(IL_ICMP_REDIRECT_TOSNET, -1); }
158tos-host-redir { return next_state(IL_ICMP_REDIRECT_TOSHOST, -1); }
159intrans { return next_state(IL_ICMP_TIMXCEED_INTRANS, -1); }
160reass { return next_state(IL_ICMP_TIMXCEED_REASS, -1); }
161optabsent { return next_state(IL_ICMP_PARAMPROB_OPTABSENT, -1); }
162otime { return next_state(IL_ICMP_OTIME, -1); }
163rtime { return next_state(IL_ICMP_RTIME, -1); }
164ttime { return next_state(IL_ICMP_TTIME, -1); }
165icmpseq { return next_state(IL_ICMP_SEQ, -1); }
166icmpid { return next_state(IL_ICMP_SEQ, -1); }
167\377 { return 0; } /* EOF */
168\{ { push_proto(); return next_item('{'); }
169\} { pop_proto(); return next_item('}'); }
174\{ { push_proto(); return next_item('{'); }
175\} { pop_proto(); return next_item('}'); }
170\. { return next_item(IL_DOT); }
171; { return next_item(';'); }
172[0-9]+ { return next_item(IL_NUMBER); }
173[0-9a-fA-F] { return next_item(IL_HEXDIGIT); }
174: { return next_item(IL_COLON); }
175#[^\n]* { return next_item(IL_COMMENT); }
176; { return next_item(';'); }
177[0-9]+ { return next_item(IL_NUMBER); }
178[0-9a-fA-F] { return next_item(IL_HEXDIGIT); }
179: { return next_item(IL_COLON); }
180#[^\n]* { return next_item(IL_COMMENT); }
176[^ {}\n\t;]* { return next_item(IL_TOKEN); }
181[^ \{\}\n\t;:{}]* { return next_item(IL_TOKEN); }
177\"[^\"]*\" { return next_item(IL_TOKEN); }
178%%
179void yyerror(msg)
180char *msg;
181{
182 fprintf(stderr, "%s error at \"%s\", line %d\n", msg, yytext,
183 lineNum + 1);
184 exit(1);

--- 30 unchanged lines hidden (view full) ---

215 yylval.str = strdup(yytext);
216 return IL_TOKEN;
217}
218
219
220int next_item(nstate)
221int nstate;
222{
182\"[^\"]*\" { return next_item(IL_TOKEN); }
183%%
184void yyerror(msg)
185char *msg;
186{
187 fprintf(stderr, "%s error at \"%s\", line %d\n", msg, yytext,
188 lineNum + 1);
189 exit(1);

--- 30 unchanged lines hidden (view full) ---

220 yylval.str = strdup(yytext);
221 return IL_TOKEN;
222}
223
224
225int next_item(nstate)
226int nstate;
227{
228 struct wordtab *wt;
229
230 if (opts & OPT_DEBUG)
231 printf("text=[%s] id=%d next=%d\n", yytext, nstate, next);
223 if (next == IL_TOKEN) {
224 next = -1;
225 return save_token();
226 }
232 if (next == IL_TOKEN) {
233 next = -1;
234 return save_token();
235 }
236 token++;
237
238 for (wt = words; wt->word; wt++)
239 if (!strcasecmp(wt->word, yytext))
240 return next_state(wt->state, wt->next);
241 if (opts & OPT_DEBUG)
242 printf("unknown keyword=[%s]\n", yytext);
227 next = -1;
228 if (nstate == IL_NUMBER)
229 yylval.num = atoi(yytext);
230 token++;
231 return nstate;
232}
233
234
235int next_state(nstate, fornext)
236int nstate, fornext;
237{
243 next = -1;
244 if (nstate == IL_NUMBER)
245 yylval.num = atoi(yytext);
246 token++;
247 return nstate;
248}
249
250
251int next_state(nstate, fornext)
252int nstate, fornext;
253{
238 token++;
239
240 if (next == IL_TOKEN) {
241 next = -1;
242 return save_token();
243 }
244
245 next = fornext;
246
247 switch (nstate)
248 {
249 case IL_IPV4 :
250 case IL_TCP :
251 case IL_UDP :
252 case IL_ICMP :

--- 59 unchanged lines hidden ---
254 next = fornext;
255
256 switch (nstate)
257 {
258 case IL_IPV4 :
259 case IL_TCP :
260 case IL_UDP :
261 case IL_ICMP :

--- 59 unchanged lines hidden ---