xref: /netbsd-src/usr.sbin/pf/pfs/token.l (revision 5b79cac715ce154b9589ce675d4241610435d169)
1*5b79cac7Sjoerg /* $NetBSD: token.l,v 1.2 2011/05/24 13:41:53 joerg Exp $ */
2ca38e323Sdegroote 
3ca38e323Sdegroote /*-
4ca38e323Sdegroote  * Copyright (c) 2010 The NetBSD Foundation, Inc.
5ca38e323Sdegroote  * All rights reserved.
6ca38e323Sdegroote  *
7ca38e323Sdegroote  * Redistribution and use in source and binary forms, with or without
8ca38e323Sdegroote  * modification, are permitted provided that the following conditions
9ca38e323Sdegroote  * are met:
10ca38e323Sdegroote  * 1. Redistributions of source code must retain the above copyright
11ca38e323Sdegroote  *    notice, this list of conditions and the following disclaimer.
12ca38e323Sdegroote  * 2. Redistributions in binary form must reproduce the above copyright
13ca38e323Sdegroote  *    notice, this list of conditions and the following disclaimer in the
14ca38e323Sdegroote  *    documentation and/or other materials provided with the distribution.
15ca38e323Sdegroote  *
16ca38e323Sdegroote  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17ca38e323Sdegroote  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18ca38e323Sdegroote  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19ca38e323Sdegroote  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20ca38e323Sdegroote  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21ca38e323Sdegroote  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22ca38e323Sdegroote  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23ca38e323Sdegroote  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24ca38e323Sdegroote  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25ca38e323Sdegroote  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26ca38e323Sdegroote  * POSSIBILITY OF SUCH DAMAGE.
27ca38e323Sdegroote  */
28ca38e323Sdegroote 
29ca38e323Sdegroote 
30ca38e323Sdegroote %{
31ca38e323Sdegroote #include <sys/cdefs.h>
32ca38e323Sdegroote 
33ca38e323Sdegroote #ifndef lint
34*5b79cac7Sjoerg __RCSID("$NetBSD: token.l,v 1.2 2011/05/24 13:41:53 joerg Exp $");
35ca38e323Sdegroote #endif
36ca38e323Sdegroote 
37ca38e323Sdegroote #include <stdlib.h>
38ca38e323Sdegroote #include <limits.h>
39ca38e323Sdegroote #include <inttypes.h>
40ca38e323Sdegroote #include <string.h>
41ca38e323Sdegroote #include <errno.h>
42ca38e323Sdegroote 
43ca38e323Sdegroote #include <net/if.h>
44ca38e323Sdegroote #include <netinet/in.h>
45ca38e323Sdegroote #include <net/pfvar.h>
46ca38e323Sdegroote 
47ca38e323Sdegroote #include "parse.h"
48ca38e323Sdegroote #include "parser.h"
49ca38e323Sdegroote 
50ca38e323Sdegroote %}
51ca38e323Sdegroote 
52ca38e323Sdegroote %option nounput
53*5b79cac7Sjoerg %option noinput
54ca38e323Sdegroote 
55ca38e323Sdegroote %%
56ca38e323Sdegroote 
57ca38e323Sdegroote state		{ return STATE;}
58ca38e323Sdegroote on			{ return ON;}
59ca38e323Sdegroote out			{ return OUT;}
60ca38e323Sdegroote in			{ return IN;}
61ca38e323Sdegroote proto   	{ return PROTO;}
62ca38e323Sdegroote from		{ return FROM;}
63ca38e323Sdegroote to			{ return TO;}
64ca38e323Sdegroote using   	{ return USING;}
65ca38e323Sdegroote id			{ return ID;}
66ca38e323Sdegroote cid			{ return CID;}
67ca38e323Sdegroote expire  	{ return EXPIRE;}
68ca38e323Sdegroote timeout     { return TIMEOUT;}
69ca38e323Sdegroote src			{ return SRC;}
70ca38e323Sdegroote dst			{ return DST;}
71ca38e323Sdegroote seq			{ return SEQ;}
72ca38e323Sdegroote max_win 	{ return MAX_WIN;}
73ca38e323Sdegroote wscale		{ return WSCALE;}
74ca38e323Sdegroote mss			{ return MSS;}
75ca38e323Sdegroote no-scrub	{ return NOSCRUB;}
76ca38e323Sdegroote scrub		{ return SCRUB;}
77ca38e323Sdegroote flags		{ return FLAGS;}
78ca38e323Sdegroote ttl			{ return TTL;}
79ca38e323Sdegroote mode		{ return MODE;}
80ca38e323Sdegroote [0-9]+		{ char *ep;
81ca38e323Sdegroote 			  errno = 0;
82ca38e323Sdegroote 			  yylval.num = strtoumax(yytext, &ep, 10);
83ca38e323Sdegroote 			  if (errno == ERANGE && yylval.num == UINTMAX_MAX)
84ca38e323Sdegroote 					yyfatal("Number out of range");
85ca38e323Sdegroote 			  return NUMBER;
86ca38e323Sdegroote 			}
87ca38e323Sdegroote 
88ca38e323Sdegroote [A-Za-z0-9:\[][A-Za-z0-9\[\]_:%\.-]* { yylval.str = strdup(yytext);
89ca38e323Sdegroote 							    if (yylval.str == NULL)
90ca38e323Sdegroote 									yyfatal("Not enough memory");
91ca38e323Sdegroote 								return STRING;
92ca38e323Sdegroote 							  }
93ca38e323Sdegroote 
94ca38e323Sdegroote 
95ca38e323Sdegroote \n			{ lineno ++; }
96ca38e323Sdegroote 
97ca38e323Sdegroote %%
98ca38e323Sdegroote 
99ca38e323Sdegroote 
100ca38e323Sdegroote void
101ca38e323Sdegroote yyfatal(const char *s)
102ca38e323Sdegroote {
103ca38e323Sdegroote 	yyerror(s);
104ca38e323Sdegroote 	exit(EXIT_FAILURE);
105ca38e323Sdegroote }
106ca38e323Sdegroote 
107ca38e323Sdegroote void
108ca38e323Sdegroote yyerror(const char *s)
109ca38e323Sdegroote {
110ca38e323Sdegroote 	printf("line %d: %s at [%s]\n", lineno, s, yytext);
111ca38e323Sdegroote }
112ca38e323Sdegroote 
113ca38e323Sdegroote 
114ca38e323Sdegroote int
115ca38e323Sdegroote parse(FILE *fp, struct pfioc_states* s)
116ca38e323Sdegroote {
117ca38e323Sdegroote 	yyin = fp;
118ca38e323Sdegroote 
119ca38e323Sdegroote 	lineno = 1;
120ca38e323Sdegroote 
121ca38e323Sdegroote 	states = s;
122ca38e323Sdegroote 	allocated = 0;
123ca38e323Sdegroote 	memset(s, 0, sizeof(*s));
124ca38e323Sdegroote 
125ca38e323Sdegroote 	if (yyparse()) {
126ca38e323Sdegroote 		printf("parse failed, line %d.\n", lineno);
127ca38e323Sdegroote 		return(-1);
128ca38e323Sdegroote 	}
129ca38e323Sdegroote 
130ca38e323Sdegroote 	return(0);
131ca38e323Sdegroote }
132