1/*
2 * Copyright (c) 1982, 1986, 1993
3 *	The Regents of the University of California.  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 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 *    must display the following acknowledgement:
15 *	This product includes software developed by the University of
16 *	California, Berkeley and its contributors.
17 * 4. Neither the name of the University nor the names of its contributors
18 *    may be used to endorse or promote products derived from this software
19 *    without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 */
33
34/*
35 * pflog headers, at least as they exist now.
36 */
37#define PFLOG_IFNAMSIZ		16
38#define PFLOG_RULESET_NAME_SIZE	16
39
40/*
41 * Direction values.
42 */
43#define PF_INOUT	0
44#define PF_IN		1
45#define PF_OUT		2
46#if defined(__OpenBSD__)
47#define PF_FWD		3
48#endif
49
50/*
51 * Reason values.
52 */
53#define PFRES_MATCH	0
54#define PFRES_BADOFF	1
55#define PFRES_FRAG	2
56#define PFRES_SHORT	3
57#define PFRES_NORM	4
58#define PFRES_MEMORY	5
59#define PFRES_TS	6
60#define PFRES_CONGEST	7
61#define PFRES_IPOPTIONS 8
62#define PFRES_PROTCKSUM 9
63#define PFRES_BADSTATE	10
64#define PFRES_STATEINS	11
65#define PFRES_MAXSTATES	12
66#define PFRES_SRCLIMIT	13
67#define PFRES_SYNPROXY	14
68#if defined(__FreeBSD__)
69#define PFRES_MAPFAILED	15
70#elif defined(__NetBSD__)
71#define PFRES_STATELOCKED 15
72#elif defined(__OpenBSD__)
73#define PFRES_TRANSLATE	15
74#define PFRES_NOROUTE	16
75#elif defined(__APPLE__)
76#define PFRES_DUMMYNET  15
77#endif
78
79/*
80 * Action values.
81 */
82#define PF_PASS			0
83#define PF_DROP			1
84#define PF_SCRUB		2
85#define PF_NOSCRUB		3
86#define PF_NAT			4
87#define PF_NONAT		5
88#define PF_BINAT		6
89#define PF_NOBINAT		7
90#define PF_RDR			8
91#define PF_NORDR		9
92#define PF_SYNPROXY_DROP	10
93#if defined(__FreeBSD__)
94#define PF_DEFER		11
95#elif defined(__OpenBSD__)
96#define PF_DEFER		11
97#define PF_MATCH		12
98#define PF_DIVERT		13
99#define PF_RT			14
100#define PF_AFRT			15
101#elif defined(__APPLE__)
102#define PF_DUMMYNET		11
103#define PF_NODUMMYNET		12
104#define PF_NAT64		13
105#define PF_NONAT64		14
106#endif
107
108struct pf_addr {
109	union {
110		nd_ipv4		v4;
111		nd_ipv6		v6;
112	} pfa;		    /* 128-bit address */
113#define v4	pfa.v4
114#define v6	pfa.v6
115};
116
117struct pfloghdr {
118	uint8_t		length;
119	uint8_t		af;
120	uint8_t		action;
121	uint8_t		reason;
122	char		ifname[PFLOG_IFNAMSIZ];
123	char		ruleset[PFLOG_RULESET_NAME_SIZE];
124	uint32_t	rulenr;
125	uint32_t	subrulenr;
126	uint32_t	uid;
127	int32_t		pid;
128	uint32_t	rule_uid;
129	int32_t		rule_pid;
130	uint8_t		dir;
131#if defined(__OpenBSD__)
132	uint8_t		rewritten;
133	uint8_t		naf;
134	uint8_t		pad[1];
135#else
136	uint8_t		pad[3];
137#endif
138#if defined(__FreeBSD__)
139	uint32_t	ridentifier;
140	uint8_t		reserve;
141	uint8_t		pad2[3];
142#elif defined(__OpenBSD__)
143	struct pf_addr	saddr;
144	struct pf_addr	daddr;
145	uint16_t	sport;
146	uint16_t	dport;
147#endif
148};
149
150
151
152