Deleted Added
full compact
pfvar.h (240736) pfvar.h (257186)
1/*
2 * Copyright (c) 2001 Daniel Hartmeier
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *

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

22 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * $OpenBSD: pfvar.h,v 1.282 2009/01/29 15:12:28 pyr Exp $
1/*
2 * Copyright (c) 2001 Daniel Hartmeier
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *

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

22 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
24 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * $OpenBSD: pfvar.h,v 1.282 2009/01/29 15:12:28 pyr Exp $
30 * $FreeBSD: head/sys/net/pfvar.h 240736 2012-09-20 06:52:05Z glebius $
30 * $FreeBSD: head/sys/net/pfvar.h 257186 2013-10-26 18:59:58Z glebius $
31 */
32
33#ifndef _NET_PFVAR_H_
34#define _NET_PFVAR_H_
35
36#include <sys/param.h>
37#include <sys/queue.h>
38#include <sys/refcount.h>
39#include <sys/tree.h>
40
41#include <net/radix.h>
42#include <netinet/in.h>
43
31 */
32
33#ifndef _NET_PFVAR_H_
34#define _NET_PFVAR_H_
35
36#include <sys/param.h>
37#include <sys/queue.h>
38#include <sys/refcount.h>
39#include <sys/tree.h>
40
41#include <net/radix.h>
42#include <netinet/in.h>
43
44#include <net/pf.h>
45#include <net/pf_altq.h>
44#include <net/pf_mtag.h>
45
46#include <net/pf_mtag.h>
47
46#define PF_TCPS_PROXY_SRC ((TCP_NSTATES)+0)
47#define PF_TCPS_PROXY_DST ((TCP_NSTATES)+1)
48
49#define PF_MD5_DIGEST_LENGTH 16
50#ifdef MD5_DIGEST_LENGTH
51#if PF_MD5_DIGEST_LENGTH != MD5_DIGEST_LENGTH
52#error
53#endif
54#endif
55
56enum { PF_INOUT, PF_IN, PF_OUT };
57enum { PF_PASS, PF_DROP, PF_SCRUB, PF_NOSCRUB, PF_NAT, PF_NONAT,
58 PF_BINAT, PF_NOBINAT, PF_RDR, PF_NORDR, PF_SYNPROXY_DROP, PF_DEFER };
59enum { PF_RULESET_SCRUB, PF_RULESET_FILTER, PF_RULESET_NAT,
60 PF_RULESET_BINAT, PF_RULESET_RDR, PF_RULESET_MAX };
61enum { PF_OP_NONE, PF_OP_IRG, PF_OP_EQ, PF_OP_NE, PF_OP_LT,
62 PF_OP_LE, PF_OP_GT, PF_OP_GE, PF_OP_XRG, PF_OP_RRG };
63enum { PF_DEBUG_NONE, PF_DEBUG_URGENT, PF_DEBUG_MISC, PF_DEBUG_NOISY };
64enum { PF_CHANGE_NONE, PF_CHANGE_ADD_HEAD, PF_CHANGE_ADD_TAIL,
65 PF_CHANGE_ADD_BEFORE, PF_CHANGE_ADD_AFTER,
66 PF_CHANGE_REMOVE, PF_CHANGE_GET_TICKET };
67enum { PF_GET_NONE, PF_GET_CLR_CNTR };
68enum { PF_SK_WIRE, PF_SK_STACK, PF_SK_BOTH };
69
70/*
71 * Note about PFTM_*: real indices into pf_rule.timeout[] come before
72 * PFTM_MAX, special cases afterwards. See pf_state_expires().
73 */
74enum { PFTM_TCP_FIRST_PACKET, PFTM_TCP_OPENING, PFTM_TCP_ESTABLISHED,
75 PFTM_TCP_CLOSING, PFTM_TCP_FIN_WAIT, PFTM_TCP_CLOSED,
76 PFTM_UDP_FIRST_PACKET, PFTM_UDP_SINGLE, PFTM_UDP_MULTIPLE,
77 PFTM_ICMP_FIRST_PACKET, PFTM_ICMP_ERROR_REPLY,
78 PFTM_OTHER_FIRST_PACKET, PFTM_OTHER_SINGLE,
79 PFTM_OTHER_MULTIPLE, PFTM_FRAG, PFTM_INTERVAL,
80 PFTM_ADAPTIVE_START, PFTM_ADAPTIVE_END, PFTM_SRC_NODE,
81 PFTM_TS_DIFF, PFTM_MAX, PFTM_PURGE, PFTM_UNLINKED,
82 PFTM_UNTIL_PACKET };
83
84/* PFTM default values */
85#define PFTM_TCP_FIRST_PACKET_VAL 120 /* First TCP packet */
86#define PFTM_TCP_OPENING_VAL 30 /* No response yet */
87#define PFTM_TCP_ESTABLISHED_VAL 24*60*60/* Established */
88#define PFTM_TCP_CLOSING_VAL 15 * 60 /* Half closed */
89#define PFTM_TCP_FIN_WAIT_VAL 45 /* Got both FINs */
90#define PFTM_TCP_CLOSED_VAL 90 /* Got a RST */
91#define PFTM_UDP_FIRST_PACKET_VAL 60 /* First UDP packet */
92#define PFTM_UDP_SINGLE_VAL 30 /* Unidirectional */
93#define PFTM_UDP_MULTIPLE_VAL 60 /* Bidirectional */
94#define PFTM_ICMP_FIRST_PACKET_VAL 20 /* First ICMP packet */
95#define PFTM_ICMP_ERROR_REPLY_VAL 10 /* Got error response */
96#define PFTM_OTHER_FIRST_PACKET_VAL 60 /* First packet */
97#define PFTM_OTHER_SINGLE_VAL 30 /* Unidirectional */
98#define PFTM_OTHER_MULTIPLE_VAL 60 /* Bidirectional */
99#define PFTM_FRAG_VAL 30 /* Fragment expire */
100#define PFTM_INTERVAL_VAL 10 /* Expire interval */
101#define PFTM_SRC_NODE_VAL 0 /* Source tracking */
102#define PFTM_TS_DIFF_VAL 30 /* Allowed TS diff */
103
104enum { PF_NOPFROUTE, PF_FASTROUTE, PF_ROUTETO, PF_DUPTO, PF_REPLYTO };
105enum { PF_LIMIT_STATES, PF_LIMIT_SRC_NODES, PF_LIMIT_FRAGS,
106 PF_LIMIT_TABLE_ENTRIES, PF_LIMIT_MAX };
107#define PF_POOL_IDMASK 0x0f
108enum { PF_POOL_NONE, PF_POOL_BITMASK, PF_POOL_RANDOM,
109 PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN };
110enum { PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL,
111 PF_ADDR_TABLE, PF_ADDR_URPFFAILED,
112 PF_ADDR_RANGE };
113#define PF_POOL_TYPEMASK 0x0f
114#define PF_POOL_STICKYADDR 0x20
115#define PF_WSCALE_FLAG 0x80
116#define PF_WSCALE_MASK 0x0f
117
118#define PF_LOG 0x01
119#define PF_LOG_ALL 0x02
120#define PF_LOG_SOCKET_LOOKUP 0x04
121
122struct pf_addr {
123 union {
124 struct in_addr v4;
125 struct in6_addr v6;
126 u_int8_t addr8[16];
127 u_int16_t addr16[8];
128 u_int32_t addr32[4];
129 } pfa; /* 128-bit address */
130#define v4 pfa.v4
131#define v6 pfa.v6
132#define addr8 pfa.addr8
133#define addr16 pfa.addr16
134#define addr32 pfa.addr32
135};
136
48struct pf_addr {
49 union {
50 struct in_addr v4;
51 struct in6_addr v6;
52 u_int8_t addr8[16];
53 u_int16_t addr16[8];
54 u_int32_t addr32[4];
55 } pfa; /* 128-bit address */
56#define v4 pfa.v4
57#define v6 pfa.v6
58#define addr8 pfa.addr8
59#define addr16 pfa.addr16
60#define addr32 pfa.addr32
61};
62
137#define PF_TABLE_NAME_SIZE 32
138
139#define PFI_AFLAG_NETWORK 0x01
140#define PFI_AFLAG_BROADCAST 0x02
141#define PFI_AFLAG_PEER 0x04
142#define PFI_AFLAG_MODEMASK 0x07
143#define PFI_AFLAG_NOALIAS 0x08
144
145struct pf_addr_wrap {
146 union {

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

559#define PF_SKIP_SRC_ADDR 4
560#define PF_SKIP_SRC_PORT 5
561#define PF_SKIP_DST_ADDR 6
562#define PF_SKIP_DST_PORT 7
563#define PF_SKIP_COUNT 8
564 union pf_rule_ptr skip[PF_SKIP_COUNT];
565#define PF_RULE_LABEL_SIZE 64
566 char label[PF_RULE_LABEL_SIZE];
63#define PFI_AFLAG_NETWORK 0x01
64#define PFI_AFLAG_BROADCAST 0x02
65#define PFI_AFLAG_PEER 0x04
66#define PFI_AFLAG_MODEMASK 0x07
67#define PFI_AFLAG_NOALIAS 0x08
68
69struct pf_addr_wrap {
70 union {

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

483#define PF_SKIP_SRC_ADDR 4
484#define PF_SKIP_SRC_PORT 5
485#define PF_SKIP_DST_ADDR 6
486#define PF_SKIP_DST_PORT 7
487#define PF_SKIP_COUNT 8
488 union pf_rule_ptr skip[PF_SKIP_COUNT];
489#define PF_RULE_LABEL_SIZE 64
490 char label[PF_RULE_LABEL_SIZE];
567#define PF_QNAME_SIZE 64
568 char ifname[IFNAMSIZ];
569 char qname[PF_QNAME_SIZE];
570 char pqname[PF_QNAME_SIZE];
571#define PF_TAG_NAME_SIZE 64
572 char tagname[PF_TAG_NAME_SIZE];
573 char match_tagname[PF_TAG_NAME_SIZE];
574
575 char overload_tblname[PF_TABLE_NAME_SIZE];

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

1190 u_int8_t sidx; /* key index for source */
1191 u_int8_t didx; /* key index for destination */
1192};
1193
1194/* flags for RDR options */
1195#define PF_DPORT_RANGE 0x01 /* Dest port uses range */
1196#define PF_RPORT_RANGE 0x02 /* RDR'ed port uses range */
1197
491 char ifname[IFNAMSIZ];
492 char qname[PF_QNAME_SIZE];
493 char pqname[PF_QNAME_SIZE];
494#define PF_TAG_NAME_SIZE 64
495 char tagname[PF_TAG_NAME_SIZE];
496 char match_tagname[PF_TAG_NAME_SIZE];
497
498 char overload_tblname[PF_TABLE_NAME_SIZE];

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

1113 u_int8_t sidx; /* key index for source */
1114 u_int8_t didx; /* key index for destination */
1115};
1116
1117/* flags for RDR options */
1118#define PF_DPORT_RANGE 0x01 /* Dest port uses range */
1119#define PF_RPORT_RANGE 0x02 /* RDR'ed port uses range */
1120
1198/* Reasons code for passing/dropping a packet */
1199#define PFRES_MATCH 0 /* Explicit match of a rule */
1200#define PFRES_BADOFF 1 /* Bad offset for pull_hdr */
1201#define PFRES_FRAG 2 /* Dropping following fragment */
1202#define PFRES_SHORT 3 /* Dropping short packet */
1203#define PFRES_NORM 4 /* Dropping by normalizer */
1204#define PFRES_MEMORY 5 /* Dropped due to lacking mem */
1205#define PFRES_TS 6 /* Bad TCP Timestamp (RFC1323) */
1206#define PFRES_CONGEST 7 /* Congestion (of ipintrq) */
1207#define PFRES_IPOPTIONS 8 /* IP option */
1208#define PFRES_PROTCKSUM 9 /* Protocol checksum invalid */
1209#define PFRES_BADSTATE 10 /* State mismatch */
1210#define PFRES_STATEINS 11 /* State insertion failure */
1211#define PFRES_MAXSTATES 12 /* State limit */
1212#define PFRES_SRCLIMIT 13 /* Source node/conn limit */
1213#define PFRES_SYNPROXY 14 /* SYN proxy */
1214#define PFRES_MAX 15 /* total+1 */
1215
1216#define PFRES_NAMES { \
1217 "match", \
1218 "bad-offset", \
1219 "fragment", \
1220 "short", \
1221 "normalize", \
1222 "memory", \
1223 "bad-timestamp", \
1224 "congestion", \
1225 "ip-option", \
1226 "proto-cksum", \
1227 "state-mismatch", \
1228 "state-insert", \
1229 "state-limit", \
1230 "src-limit", \
1231 "synproxy", \
1232 NULL \
1233}
1234
1235/* Counters for other things we want to keep track of */
1236#define LCNT_STATES 0 /* states */
1237#define LCNT_SRCSTATES 1 /* max-src-states */
1238#define LCNT_SRCNODES 2 /* max-src-nodes */
1239#define LCNT_SRCCONN 3 /* max-src-conn */
1240#define LCNT_SRCCONNRATE 4 /* max-src-conn-rate */
1241#define LCNT_OVERLOAD_TABLE 5 /* entry added to overload table */
1242#define LCNT_OVERLOAD_FLUSH 6 /* state entries flushed */

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

1317 u_int32_t src_nodes;
1318 u_int32_t since;
1319 u_int32_t debug;
1320 u_int32_t hostid;
1321 char ifname[IFNAMSIZ];
1322 u_int8_t pf_chksum[PF_MD5_DIGEST_LENGTH];
1323};
1324
1121/* Counters for other things we want to keep track of */
1122#define LCNT_STATES 0 /* states */
1123#define LCNT_SRCSTATES 1 /* max-src-states */
1124#define LCNT_SRCNODES 2 /* max-src-nodes */
1125#define LCNT_SRCCONN 3 /* max-src-conn */
1126#define LCNT_SRCCONNRATE 4 /* max-src-conn-rate */
1127#define LCNT_OVERLOAD_TABLE 5 /* entry added to overload table */
1128#define LCNT_OVERLOAD_FLUSH 6 /* state entries flushed */

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

1203 u_int32_t src_nodes;
1204 u_int32_t since;
1205 u_int32_t debug;
1206 u_int32_t hostid;
1207 char ifname[IFNAMSIZ];
1208 u_int8_t pf_chksum[PF_MD5_DIGEST_LENGTH];
1209};
1210
1325struct cbq_opts {
1326 u_int minburst;
1327 u_int maxburst;
1328 u_int pktsize;
1329 u_int maxpktsize;
1330 u_int ns_per_byte;
1331 u_int maxidle;
1332 int minidle;
1333 u_int offtime;
1334 int flags;
1335};
1336
1337struct priq_opts {
1338 int flags;
1339};
1340
1341struct hfsc_opts {
1342 /* real-time service curve */
1343 u_int rtsc_m1; /* slope of the 1st segment in bps */
1344 u_int rtsc_d; /* the x-projection of m1 in msec */
1345 u_int rtsc_m2; /* slope of the 2nd segment in bps */
1346 /* link-sharing service curve */
1347 u_int lssc_m1;
1348 u_int lssc_d;
1349 u_int lssc_m2;
1350 /* upper-limit service curve */
1351 u_int ulsc_m1;
1352 u_int ulsc_d;
1353 u_int ulsc_m2;
1354 int flags;
1355};
1356
1357struct pf_altq {
1358 char ifname[IFNAMSIZ];
1359
1360 void *altq_disc; /* discipline-specific state */
1361 TAILQ_ENTRY(pf_altq) entries;
1362
1363 /* scheduler spec */
1364 u_int8_t scheduler; /* scheduler type */
1365 u_int16_t tbrsize; /* tokenbucket regulator size */
1366 u_int32_t ifbandwidth; /* interface bandwidth */
1367
1368 /* queue spec */
1369 char qname[PF_QNAME_SIZE]; /* queue name */
1370 char parent[PF_QNAME_SIZE]; /* parent name */
1371 u_int32_t parent_qid; /* parent queue id */
1372 u_int32_t bandwidth; /* queue bandwidth */
1373 u_int8_t priority; /* priority */
1374 u_int8_t local_flags; /* dynamic interface */
1375#define PFALTQ_FLAG_IF_REMOVED 0x01
1376
1377 u_int16_t qlimit; /* queue size limit */
1378 u_int16_t flags; /* misc flags */
1379 union {
1380 struct cbq_opts cbq_opts;
1381 struct priq_opts priq_opts;
1382 struct hfsc_opts hfsc_opts;
1383 } pq_u;
1384
1385 u_int32_t qid; /* return value */
1386};
1387
1388struct pf_divert {
1389 union {
1390 struct in_addr ipv4;
1391 struct in6_addr ipv6;
1392 } addr;
1393 u_int16_t port;
1394};
1395

--- 548 unchanged lines hidden ---
1211struct pf_divert {
1212 union {
1213 struct in_addr ipv4;
1214 struct in6_addr ipv6;
1215 } addr;
1216 u_int16_t port;
1217};
1218

--- 548 unchanged lines hidden ---