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