1/*-
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (c) 2023 Alexander V. Chernikov <melifaro@FreeBSD.org>
5 * Copyright (c) 2023 Rubicon Communications, LLC (Netgate)
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 */
29
30#ifndef _NETPFIL_PF_PF_NL_H_
31#define _NETPFIL_PF_PF_NL_H_
32
33/* Genetlink family */
34#define PFNL_FAMILY_NAME "pfctl"
35
36/* available commands */
37enum {
38 PFNL_CMD_UNSPEC = 0,
39 PFNL_CMD_GETSTATES = 1,
40 PFNL_CMD_GETCREATORS = 2,
41 PFNL_CMD_START = 3,
42 PFNL_CMD_STOP = 4,
43 PFNL_CMD_ADDRULE = 5,
44 PFNL_CMD_GETRULES = 6,
45 PFNL_CMD_GETRULE = 7,
46 PFNL_CMD_CLRSTATES = 8,
47 PFNL_CMD_KILLSTATES = 9,
48 PFNL_CMD_SET_STATUSIF = 10,
49 PFNL_CMD_GET_STATUS = 11,
50 PFNL_CMD_CLEAR_STATUS = 12,
51 PFNL_CMD_NATLOOK = 13,
52 PFNL_CMD_SET_DEBUG = 14,
53 PFNL_CMD_SET_TIMEOUT = 15,
54 PFNL_CMD_GET_TIMEOUT = 16,
55 PFNL_CMD_SET_LIMIT = 17,
56 PFNL_CMD_GET_LIMIT = 18,
57 PFNL_CMD_BEGIN_ADDRS = 19,
58 PFNL_CMD_ADD_ADDR = 20,
59 PFNL_CMD_GET_ADDRS = 21,
60 PFNL_CMD_GET_ADDR = 22,
61 PFNL_CMD_GET_RULESETS = 23,
62 PFNL_CMD_GET_RULESET = 24,
63 PFNL_CMD_GET_SRCNODES = 25,
64 PFNL_CMD_CLEAR_TABLES = 26,
65 PFNL_CMD_ADD_TABLE = 27,
66 PFNL_CMD_DEL_TABLE = 28,
67 PFNL_CMD_GET_TSTATS = 29,
68 PFNL_CMD_CLR_TSTATS = 30,
69 PFNL_CMD_CLR_ADDRS = 31,
70 PFNL_CMD_TABLE_ADD_ADDR = 32,
71 PFNL_CMD_TABLE_DEL_ADDR = 33,
72 __PFNL_CMD_MAX,
73};
74#define PFNL_CMD_MAX (__PFNL_CMD_MAX -1)
75
76enum pfstate_key_type_t {
77 PF_STK_UNSPEC,
78 PF_STK_ADDR0 = 1, /* ip */
79 PF_STK_ADDR1 = 2, /* ip */
80 PF_STK_PORT0 = 3, /* u16 */
81 PF_STK_PORT1 = 4, /* u16 */
82 PF_STK_AF = 5, /* u8 */
83 PF_STK_PROTO = 6, /* u16 */
84};
85
86enum pfstate_peer_type_t {
87 PF_STP_UNSPEC,
88 PF_STP_PFSS_FLAGS = 1, /* u16 */
89 PF_STP_PFSS_TTL = 2, /* u8 */
90 PF_STP_SCRUB_FLAG = 3, /* u8 */
91 PF_STP_PFSS_TS_MOD = 4, /* u32 */
92 PF_STP_SEQLO = 5, /* u32 */
93 PF_STP_SEQHI = 6, /* u32 */
94 PF_STP_SEQDIFF = 7, /* u32 */
95 PF_STP_MAX_WIN = 8, /* u16 */
96 PF_STP_MSS = 9, /* u16 */
97 PF_STP_STATE = 10, /* u8 */
98 PF_STP_WSCALE = 11, /* u8 */
99};
100
101enum pfstate_type_t {
102 PF_ST_UNSPEC,
103 PF_ST_ID = 1, /* u32, state id */
104 PF_ST_CREATORID = 2, /* u32, */
105 PF_ST_IFNAME = 3, /* string */
106 PF_ST_ORIG_IFNAME = 4, /* string */
107 PF_ST_KEY_WIRE = 5, /* nested, pfstate_key_type_t */
108 PF_ST_KEY_STACK = 6, /* nested, pfstate_key_type_t */
109 PF_ST_PEER_SRC = 7, /* nested, pfstate_peer_type_t*/
110 PF_ST_PEER_DST = 8, /* nested, pfstate_peer_type_t */
111 PF_ST_RT_ADDR = 9, /* ip */
112 PF_ST_RULE = 10, /* u32 */
113 PF_ST_ANCHOR = 11, /* u32 */
114 PF_ST_NAT_RULE = 12, /* u32 */
115 PF_ST_CREATION = 13, /* u32 */
116 PF_ST_EXPIRE = 14, /* u32 */
117 PF_ST_PACKETS0 = 15, /* u64 */
118 PF_ST_PACKETS1 = 16, /* u64 */
119 PF_ST_BYTES0 = 17, /* u64 */
120 PF_ST_BYTES1 = 18, /* u64 */
121 PF_ST_AF = 19, /* u8 */
122 PF_ST_PROTO = 21, /* u8 */
123 PF_ST_DIRECTION = 22, /* u8 */
124 PF_ST_LOG = 23, /* u8 */
125 PF_ST_TIMEOUT = 24, /* u8 */
126 PF_ST_STATE_FLAGS = 25, /* u8 */
127 PF_ST_SYNC_FLAGS = 26, /* u8 */
128 PF_ST_UPDATES = 27, /* u8 */
129 PF_ST_VERSION = 28, /* u64 */
130 PF_ST_FILTER_ADDR = 29, /* in6_addr */
131 PF_ST_FILTER_MASK = 30, /* in6_addr */
132 PF_ST_RTABLEID = 31, /* i32 */
133 PF_ST_MIN_TTL = 32, /* u8 */
134 PF_ST_MAX_MSS = 33, /* u16 */
135 PF_ST_DNPIPE = 34, /* u16 */
136 PF_ST_DNRPIPE = 35, /* u16 */
137 PF_ST_RT = 36, /* u8 */
138 PF_ST_RT_IFNAME = 37, /* string */
139 PF_ST_SRC_NODE_FLAGS = 38, /* u8 */
140 PF_ST_RT_AF = 39, /* u8 */
141};
142
143enum pf_addr_type_t {
144 PF_AT_UNSPEC,
145 PF_AT_ADDR = 1, /* in6_addr */
146 PF_AT_MASK = 2, /* in6_addr */
147 PF_AT_IFNAME = 3, /* string */
148 PF_AT_TABLENAME = 4, /* string */
149 PF_AT_TYPE = 5, /* u8 */
150 PF_AT_IFLAGS = 6, /* u8 */
151 PF_AT_TBLCNT = 7, /* u32 */
152 PF_AT_DYNCNT = 8, /* u32 */
153};
154
155enum pfrule_addr_type_t {
156 PF_RAT_UNSPEC,
157 PF_RAT_ADDR = 1, /* nested, pf_addr_type_t */
158 PF_RAT_SRC_PORT = 2, /* u16 */
159 PF_RAT_DST_PORT = 3, /* u16 */
160 PF_RAT_NEG = 4, /* u8 */
161 PF_RAT_OP = 5, /* u8 */
162};
163
164enum pf_labels_type_t {
165 PF_LT_UNSPEC,
166 PF_LT_LABEL = 1, /* string */
167};
168
169enum pf_mape_portset_type_t
170{
171 PF_MET_UNSPEC,
172 PF_MET_OFFSET = 1, /* u8 */
173 PF_MET_PSID_LEN = 2, /* u8 */
174 PF_MET_PSID = 3, /* u16 */
175};
176
177enum pf_rpool_type_t
178{
179 PF_PT_UNSPEC,
180 PF_PT_KEY = 1, /* bytes, sizeof(struct pf_poolhashkey) */
181 PF_PT_COUNTER = 2, /* in6_addr */
182 PF_PT_TBLIDX = 3, /* u32 */
183 PF_PT_PROXY_SRC_PORT = 4, /* u16 */
184 PF_PT_PROXY_DST_PORT = 5, /* u16 */
185 PF_PT_OPTS = 6, /* u8 */
186 PF_PT_MAPE = 7, /* nested, pf_mape_portset_type_t */
187};
188
189enum pf_timeout_type_t {
190 PF_TT_UNSPEC,
191 PF_TT_TIMEOUT = 1, /* u32 */
192};
193
194enum pf_rule_uid_type_t {
195 PF_RUT_UNSPEC,
196 PF_RUT_UID_LOW = 1, /* u32 */
197 PF_RUT_UID_HIGH = 2, /* u32 */
198 PF_RUT_OP = 3, /* u8 */
199};
200
201enum pf_rule_type_t {
202 PF_RT_UNSPEC,
203 PF_RT_SRC = 1, /* nested, pf_rule_addr_type_t */
204 PF_RT_DST = 2, /* nested, pf_rule_addr_type_t */
205 PF_RT_RIDENTIFIER = 3, /* u32 */
206 PF_RT_LABELS = 4, /* nested, pf_labels_type_t */
207 PF_RT_IFNAME = 5, /* string */
208 PF_RT_QNAME = 6, /* string */
209 PF_RT_PQNAME = 7, /* string */
210 PF_RT_TAGNAME = 8, /* string */
211 PF_RT_MATCH_TAGNAME = 9, /* string */
212 PF_RT_OVERLOAD_TBLNAME = 10, /* string */
213 PF_RT_RPOOL_RDR = 11, /* nested, pf_rpool_type_t */
214 PF_RT_OS_FINGERPRINT = 12, /* u32 */
215 PF_RT_RTABLEID = 13, /* u32 */
216 PF_RT_TIMEOUT = 14, /* nested, pf_timeout_type_t */
217 PF_RT_MAX_STATES = 15, /* u32 */
218 PF_RT_MAX_SRC_NODES = 16, /* u32 */
219 PF_RT_MAX_SRC_STATES = 17, /* u32 */
220 PF_RT_MAX_SRC_CONN_RATE_LIMIT = 18, /* u32 */
221 PF_RT_MAX_SRC_CONN_RATE_SECS = 19, /* u32 */
222 PF_RT_DNPIPE = 20, /* u16 */
223 PF_RT_DNRPIPE = 21, /* u16 */
224 PF_RT_DNFLAGS = 22, /* u32 */
225 PF_RT_NR = 23, /* u32 */
226 PF_RT_PROB = 24, /* u32 */
227 PF_RT_CUID = 25, /* u32 */
228 PF_RT_CPID = 26, /* u32 */
229 PF_RT_RETURN_ICMP = 27, /* u16 */
230 PF_RT_RETURN_ICMP6 = 28, /* u16 */
231 PF_RT_MAX_MSS = 29, /* u16 */
232 PF_RT_SCRUB_FLAGS = 30, /* u16 */
233 PF_RT_UID = 31, /* nested, pf_rule_uid_type_t */
234 PF_RT_GID = 32, /* nested, pf_rule_uid_type_t */
235 PF_RT_RULE_FLAG = 33, /* u32 */
236 PF_RT_ACTION = 34, /* u8 */
237 PF_RT_DIRECTION = 35, /* u8 */
238 PF_RT_LOG = 36, /* u8 */
239 PF_RT_LOGIF = 37, /* u8 */
240 PF_RT_QUICK = 38, /* u8 */
241 PF_RT_IF_NOT = 39, /* u8 */
242 PF_RT_MATCH_TAG_NOT = 40, /* u8 */
243 PF_RT_NATPASS = 41, /* u8 */
244 PF_RT_KEEP_STATE = 42, /* u8 */
245 PF_RT_AF = 43, /* u8 */
246 PF_RT_PROTO = 44, /* u8 */
247 PF_RT_TYPE = 45, /* u8 */
248 PF_RT_CODE = 46, /* u8 */
249 PF_RT_FLAGS = 47, /* u8 */
250 PF_RT_FLAGSET = 48, /* u8 */
251 PF_RT_MIN_TTL = 49, /* u8 */
252 PF_RT_ALLOW_OPTS = 50, /* u8 */
253 PF_RT_RT = 51, /* u8 */
254 PF_RT_RETURN_TTL = 52, /* u8 */
255 PF_RT_TOS = 53, /* u8 */
256 PF_RT_SET_TOS = 54, /* u8 */
257 PF_RT_ANCHOR_RELATIVE = 55, /* u8 */
258 PF_RT_ANCHOR_WILDCARD = 56, /* u8 */
259 PF_RT_FLUSH = 57, /* u8 */
260 PF_RT_PRIO = 58, /* u8 */
261 PF_RT_SET_PRIO = 59, /* u8 */
262 PF_RT_SET_PRIO_REPLY = 60, /* u8 */
263 PF_RT_DIVERT_ADDRESS = 61, /* in6_addr */
264 PF_RT_DIVERT_PORT = 62, /* u16 */
265 PF_RT_PACKETS_IN = 63, /* u64 */
266 PF_RT_PACKETS_OUT = 64, /* u64 */
267 PF_RT_BYTES_IN = 65, /* u64 */
268 PF_RT_BYTES_OUT = 66, /* u64 */
269 PF_RT_EVALUATIONS = 67, /* u64 */
270 PF_RT_TIMESTAMP = 68, /* u64 */
271 PF_RT_STATES_CUR = 69, /* u64 */
272 PF_RT_STATES_TOTAL = 70, /* u64 */
273 PF_RT_SRC_NODES = 71, /* u64 */
274 PF_RT_ANCHOR_CALL = 72, /* string */
275 PF_RT_RCV_IFNAME = 73, /* string */
276 PF_RT_MAX_SRC_CONN = 74, /* u32 */
277 PF_RT_RPOOL_NAT = 75, /* nested, pf_rpool_type_t */
278 PF_RT_NAF = 76, /* u8 */
279 PF_RT_RPOOL_RT = 77, /* nested, pf_rpool_type_t */
280 PF_RT_RCV_IFNOT = 78, /* bool */
281 PF_RT_SRC_NODES_LIMIT = 79, /* u64 */
282 PF_RT_SRC_NODES_NAT = 80, /* u64 */
283 PF_RT_SRC_NODES_ROUTE = 81, /* u64 */
284 PF_RT_PKTRATE = 82, /* nested, pf_threshold_type_t */
285 PF_RT_MAX_PKT_SIZE = 83, /* u16 */
286 PF_RT_TYPE_2 = 84, /* u16 */
287 PF_RT_CODE_2 = 85, /* u16 */
288};
289
290enum pf_addrule_type_t {
291 PF_ART_UNSPEC,
292 PF_ART_TICKET = 1, /* u32 */
293 PF_ART_POOL_TICKET = 2, /* u32 */
294 PF_ART_ANCHOR = 3, /* string */
295 PF_ART_ANCHOR_CALL = 4, /* string */
296 PF_ART_RULE = 5, /* nested, pfrule_type_t */
297};
298
299enum pf_getrules_type_t {
300 PF_GR_UNSPEC,
301 PF_GR_ANCHOR = 1, /* string */
302 PF_GR_ACTION = 2, /* u8 */
303 PF_GR_NR = 3, /* u32 */
304 PF_GR_TICKET = 4, /* u32 */
305 PF_GR_CLEAR = 5, /* u8 */
306};
307
308enum pf_clear_states_type_t {
309 PF_CS_UNSPEC,
310 PF_CS_CMP_ID = 1, /* u64 */
311 PF_CS_CMP_CREATORID = 2, /* u32 */
312 PF_CS_CMP_DIR = 3, /* u8 */
313 PF_CS_AF = 4, /* u8 */
314 PF_CS_PROTO = 5, /* u8 */
315 PF_CS_SRC = 6, /* nested, pf_addr_wrap */
316 PF_CS_DST = 7, /* nested, pf_addr_wrap */
317 PF_CS_RT_ADDR = 8, /* nested, pf_addr_wrap */
318 PF_CS_IFNAME = 9, /* string */
319 PF_CS_LABEL = 10, /* string */
320 PF_CS_KILL_MATCH = 11, /* bool */
321 PF_CS_NAT = 12, /* bool */
322 PF_CS_KILLED = 13, /* u32 */
323};
324
325enum pf_set_statusif_types_t {
326 PF_SS_UNSPEC,
327 PF_SS_IFNAME = 1, /* string */
328};
329
330enum pf_counter_types_t {
331 PF_C_UNSPEC,
332 PF_C_COUNTER = 1, /* u64 */
333 PF_C_NAME = 2, /* string */
334 PF_C_ID = 3, /* u32 */
335};
336
337enum pf_get_status_types_t {
338 PF_GS_UNSPEC,
339 PF_GS_IFNAME = 1, /* string */
340 PF_GS_RUNNING = 2, /* bool */
341 PF_GS_SINCE = 3, /* u32 */
342 PF_GS_DEBUG = 4, /* u32 */
343 PF_GS_HOSTID = 5, /* u32 */
344 PF_GS_STATES = 6, /* u32 */
345 PF_GS_SRC_NODES = 7, /* u32 */
346 PF_GS_REASSEMBLE = 8, /* u32 */
347 PF_GS_SYNCOOKIES_ACTIVE = 9, /* bool */
348 PF_GS_COUNTERS = 10, /* nested, */
349 PF_GS_LCOUNTERS = 11, /* nested, */
350 PF_GS_FCOUNTERS = 12, /* nested, */
351 PF_GS_SCOUNTERS = 13, /* nested, */
352 PF_GS_CHKSUM = 14, /* byte array */
353 PF_GS_PCOUNTERS = 15, /* u64 array */
354 PF_GS_BCOUNTERS = 16, /* u64 array */
355};
356
357enum pf_natlook_types_t {
358 PF_NL_UNSPEC,
359 PF_NL_AF = 1, /* u8 */
360 PF_NL_DIRECTION = 2, /* u8 */
361 PF_NL_PROTO = 3, /* u8 */
362 PF_NL_SRC_ADDR = 4, /* in6_addr */
363 PF_NL_DST_ADDR = 5, /* in6_addr */
364 PF_NL_SRC_PORT = 6, /* u16 */
365 PF_NL_DST_PORT = 7, /* u16 */
366};
367
368enum pf_set_debug_types_t {
369 PF_SD_UNSPEC,
370 PF_SD_LEVEL = 1, /* u32 */
371};
372
373enum pf_timeout_types_t {
374 PF_TO_UNSPEC,
375 PF_TO_TIMEOUT = 1, /* u32 */
376 PF_TO_SECONDS = 2, /* u32 */
377};
378
379enum pf_limit_types_t {
380 PF_LI_UNSPEC,
381 PF_LI_INDEX = 1, /* u32 */
382 PF_LI_LIMIT = 2, /* u32 */
383};
384
385enum pf_begin_addrs_types_t {
386 PF_BA_UNSPEC,
387 PF_BA_TICKET = 1, /* u32 */
388};
389
390enum pf_pool_addr_types_t {
391 PF_PA_UNSPEC,
392 PF_PA_ADDR = 1, /* nested, pf_addr_wrap */
393 PF_PA_IFNAME = 2, /* string */
394};
395
396enum pf_add_addr_types_t {
397 PF_AA_UNSPEC,
398 PF_AA_ACTION = 1, /* u32 */
399 PF_AA_TICKET = 2, /* u32 */
400 PF_AA_NR = 3, /* u32 */
401 PF_AA_R_NUM = 4, /* u32 */
402 PF_AA_R_ACTION = 5, /* u8 */
403 PF_AA_R_LAST = 6, /* u8 */
404 PF_AA_AF = 7, /* u8 */
405 PF_AA_ANCHOR = 8, /* string */
406 PF_AA_ADDR = 9, /* nested, pf_pooladdr */
407 PF_AA_WHICH = 10, /* u32 */
408};
409
410enum pf_get_rulesets_types_t {
411 PF_RS_UNSPEC,
412 PF_RS_PATH = 1, /* string */
413 PF_RS_NR = 2, /* u32 */
414 PF_RS_NAME = 3, /* string */
415};
416
417enum pf_threshold_types_t {
418 PF_TH_UNSPEC,
419 PF_TH_LIMIT = 1, /* u32 */
420 PF_TH_SECONDS = 2, /* u32 */
421 PF_TH_COUNT = 3, /* u32 */
422 PF_TH_LAST = 4, /* u32 */
423};
424
425enum pf_srcnodes_types_t {
426 PF_SN_UNSPEC,
427 PF_SN_ADDR = 1, /* nested, pf_addr */
428 PF_SN_RADDR = 2, /* nested, pf_addr */
429 PF_SN_RULE_NR = 3, /* u32 */
430 PF_SN_BYTES_IN = 4, /* u64 */
431 PF_SN_BYTES_OUT = 5, /* u64 */
432 PF_SN_PACKETS_IN = 6, /* u64 */
433 PF_SN_PACKETS_OUT = 7, /* u64 */
434 PF_SN_STATES = 8, /* u32 */
435 PF_SN_CONNECTIONS = 9, /* u32 */
436 PF_SN_AF = 10, /* u8 */
437 PF_SN_RULE_TYPE = 11, /* u8 */
438 PF_SN_CREATION = 12, /* u64 */
439 PF_SN_EXPIRE = 13, /* u64 */
440 PF_SN_CONNECTION_RATE = 14, /* nested, pf_threshold */
441 PF_SN_RAF = 15, /* u8 */
442 PF_SN_NODE_TYPE = 16, /* u8 */
443};
444
445enum pf_tables_t {
446 PF_T_UNSPEC,
447 PF_T_ANCHOR = 1, /* string */
448 PF_T_NAME = 2, /* string */
449 PF_T_TABLE_FLAGS = 3, /* u32 */
450 PF_T_FLAGS = 4, /* u32 */
451 PF_T_NBR_DELETED = 5, /* u32 */
452 PF_T_NBR_ADDED = 6, /* u32 */
453};
454
455enum pf_tstats_t {
456 PF_TS_UNSPEC,
457 PF_TS_TABLE = 1, /* nested, pfr_table */
458 PF_TS_PACKETS = 2, /* u64 array */
459 PF_TS_BYTES = 3, /* u64 array */
460 PF_TS_MATCH = 4, /* u64 */
461 PF_TS_NOMATCH = 5, /* u64 */
462 PF_TS_TZERO = 6, /* u64 */
463 PF_TS_CNT = 7, /* u64 */
464 PF_TS_REFCNT = 8, /* u64 array */
465 PF_TS_NZERO = 9, /* u64 */
466};
467
468enum pfr_addr_t {
469 PFR_A_UNSPEC,
470 PFR_A_AF = 1, /* uint8_t */
471 PFR_A_NET = 2, /* uint8_t */
472 PFR_A_NOT = 3, /* bool */
473 PFR_A_ADDR = 4, /* in6_addr */
474};
475
476enum pf_table_addrs_t {
477 PF_TA_UNSPEC,
478 PF_TA_TABLE = 1, /* nested, pf_table_t */
479 PF_TA_ADDR = 2, /* nested, pfr_addr_t */
480 PF_TA_FLAGS = 3, /* u32 */
481 PF_TA_NBR_ADDED = 4, /* u32 */
482 PF_TA_NBR_DELETED = 5, /* u32 */
483};
484
485#ifdef _KERNEL
486
487void pf_nl_register(void);
488void pf_nl_unregister(void);
489
490#endif
491
492#endif