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 --- |