1*41d03d6aShenning /* $OpenBSD: pfctl_parser.h,v 1.25 2002/06/25 08:13:26 henning Exp $ */ 214a9b182Skjell 314a9b182Skjell /* 4fd3c3a0cSderaadt * Copyright (c) 2001 Daniel Hartmeier 514a9b182Skjell * All rights reserved. 614a9b182Skjell * 714a9b182Skjell * Redistribution and use in source and binary forms, with or without 814a9b182Skjell * modification, are permitted provided that the following conditions 914a9b182Skjell * are met: 1014a9b182Skjell * 1114a9b182Skjell * - Redistributions of source code must retain the above copyright 1214a9b182Skjell * notice, this list of conditions and the following disclaimer. 1314a9b182Skjell * - Redistributions in binary form must reproduce the above 1414a9b182Skjell * copyright notice, this list of conditions and the following 1514a9b182Skjell * disclaimer in the documentation and/or other materials provided 1614a9b182Skjell * with the distribution. 1714a9b182Skjell * 1814a9b182Skjell * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1914a9b182Skjell * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2014a9b182Skjell * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 2114a9b182Skjell * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 225974bd37Sdhartmei * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 2314a9b182Skjell * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 2414a9b182Skjell * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 2514a9b182Skjell * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 2614a9b182Skjell * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2714a9b182Skjell * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 2814a9b182Skjell * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2914a9b182Skjell * POSSIBILITY OF SUCH DAMAGE. 3014a9b182Skjell * 3114a9b182Skjell */ 3214a9b182Skjell 33a6d3c168Sdhartmei #ifndef _PFCTL_PARSER_H_ 34a6d3c168Sdhartmei #define _PFCTL_PARSER_H_ 3514a9b182Skjell 36533ca421Smarkus #define PF_OPT_DISABLE 0x0001 37533ca421Smarkus #define PF_OPT_ENABLE 0x0002 38533ca421Smarkus #define PF_OPT_VERBOSE 0x0004 39533ca421Smarkus #define PF_OPT_NOACTION 0x0008 40533ca421Smarkus #define PF_OPT_QUIET 0x0010 41455ef0c1Sdhartmei #define PF_OPT_CLRRULECTRS 0x0020 420eed2997Sdhartmei #define PF_OPT_USEDNS 0x0040 43533ca421Smarkus 44bc795af0Shugh #define PF_TH_ALL 0xFF 45bc795af0Shugh 46e4b04189Sdhartmei #define PF_NAT_PROXY_PORT_LOW 50001 47e4b04189Sdhartmei #define PF_NAT_PROXY_PORT_HIGH 65535 48e4b04189Sdhartmei 49c474e331Shenning #define FCNT_NAMES { \ 50c474e331Shenning "searches", \ 51c474e331Shenning "inserts", \ 52c474e331Shenning "removals", \ 53c474e331Shenning NULL \ 54c474e331Shenning } 55c474e331Shenning 56ff352a37Smarkus struct pfctl { 57ff352a37Smarkus int dev; 58ff352a37Smarkus int opts; 59928dece9Sdhartmei u_int16_t rule_nr; 60ff352a37Smarkus struct pfioc_rule *prule; 61ff352a37Smarkus struct pfioc_nat *pnat; 62a3e657d0Sjasoni struct pfioc_binat *pbinat; 63ff352a37Smarkus struct pfioc_rdr *prdr; 64ff352a37Smarkus }; 65ff352a37Smarkus 66ff352a37Smarkus int pfctl_add_rule(struct pfctl *, struct pf_rule *); 67ff352a37Smarkus int pfctl_add_nat(struct pfctl *, struct pf_nat *); 68a3e657d0Sjasoni int pfctl_add_binat(struct pfctl *, struct pf_binat *); 69ff352a37Smarkus int pfctl_add_rdr(struct pfctl *, struct pf_rdr *); 70ff352a37Smarkus 71*41d03d6aShenning int pfctl_set_timeout(struct pfctl *, const char *, int); 72*41d03d6aShenning int pfctl_set_optimization(struct pfctl *, const char *); 73*41d03d6aShenning int pfctl_set_limit(struct pfctl *, const char *, unsigned int); 74*41d03d6aShenning int pfctl_set_logif(struct pfctl *, char *); 75*41d03d6aShenning 76ff352a37Smarkus int parse_rules(FILE *, struct pfctl *); 77ff352a37Smarkus int parse_flags(char *); 78ff352a37Smarkus 7981a15e5dSderaadt void print_rule(struct pf_rule *); 8081a15e5dSderaadt void print_nat(struct pf_nat *); 81a3e657d0Sjasoni void print_binat(struct pf_binat *); 8281a15e5dSderaadt void print_rdr(struct pf_rdr *); 8381a15e5dSderaadt void print_status(struct pf_status *); 8414a9b182Skjell 8592d58610Shenning int unmask(struct pf_addr *, u_int8_t); 8692d58610Shenning 87ff352a37Smarkus struct icmptypeent { 88ff352a37Smarkus char *name; 89ff352a37Smarkus u_int8_t type; 90ff352a37Smarkus }; 91ff352a37Smarkus 92ff352a37Smarkus struct icmpcodeent { 93ff352a37Smarkus char *name; 94ff352a37Smarkus u_int8_t type; 95ff352a37Smarkus u_int8_t code; 96ff352a37Smarkus }; 97ff352a37Smarkus 987d27d81aSdhartmei const struct icmptypeent *geticmptypebynumber(u_int8_t, u_int8_t); 997d27d81aSdhartmei const struct icmptypeent *geticmptypebyname(char *, u_int8_t); 1007d27d81aSdhartmei const struct icmpcodeent *geticmpcodebynumber(u_int8_t, u_int8_t, u_int8_t); 1017d27d81aSdhartmei const struct icmpcodeent *geticmpcodebyname(u_long, char *, u_int8_t); 102ff352a37Smarkus 103cc5f0329Sdhartmei struct pf_timeout { 104cc5f0329Sdhartmei const char *name; 105cc5f0329Sdhartmei int timeout; 106cc5f0329Sdhartmei }; 107cc5f0329Sdhartmei 108afc6663eSkjell #define PFCTL_FLAG_ALL 0x01 109afc6663eSkjell #define PFCTL_FLAG_FILTER 0x02 110afc6663eSkjell #define PFCTL_FLAG_NAT 0x04 111*41d03d6aShenning #define PFCTL_FLAG_OPTION 0x08 112afc6663eSkjell 113cc5f0329Sdhartmei extern const struct pf_timeout pf_timeouts[]; 114cc5f0329Sdhartmei 115a6d3c168Sdhartmei #endif /* _PFCTL_PARSER_H_ */ 116