Deleted Added
full compact
pfvar.h (130397) pfvar.h (130613)
1/* $FreeBSD: head/sys/contrib/pf/net/pfvar.h 130397 2004-06-13 01:36:31Z mlaier $ */
2/* $OpenBSD: pfvar.h,v 1.170 2003/08/22 21:50:34 david Exp $ */
1/* $FreeBSD: head/sys/contrib/pf/net/pfvar.h 130613 2004-06-16 23:24:02Z mlaier $ */
2/* $OpenBSD: pfvar.h,v 1.187 2004/03/22 04:54:18 mcbride Exp $ */
3
4/*
5 * Copyright (c) 2001 Daniel Hartmeier
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:

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

62#include <netinet/tcp_fsm.h>
63
64struct ip;
65
66#define PF_TCPS_PROXY_SRC ((TCP_NSTATES)+0)
67#define PF_TCPS_PROXY_DST ((TCP_NSTATES)+1)
68
69enum { PF_INOUT, PF_IN, PF_OUT };
3
4/*
5 * Copyright (c) 2001 Daniel Hartmeier
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:

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

62#include <netinet/tcp_fsm.h>
63
64struct ip;
65
66#define PF_TCPS_PROXY_SRC ((TCP_NSTATES)+0)
67#define PF_TCPS_PROXY_DST ((TCP_NSTATES)+1)
68
69enum { PF_INOUT, PF_IN, PF_OUT };
70enum { PF_LAN_EXT, PF_EXT_GWY, PF_ID };
70enum { PF_PASS, PF_DROP, PF_SCRUB, PF_NAT, PF_NONAT,
71 PF_BINAT, PF_NOBINAT, PF_RDR, PF_NORDR, PF_SYNPROXY_DROP };
72enum { PF_RULESET_SCRUB, PF_RULESET_FILTER, PF_RULESET_NAT,
73 PF_RULESET_BINAT, PF_RULESET_RDR, PF_RULESET_MAX };
74enum { PF_OP_NONE, PF_OP_IRG, PF_OP_EQ, PF_OP_NE, PF_OP_LT,
75 PF_OP_LE, PF_OP_GT, PF_OP_GE, PF_OP_XRG, PF_OP_RRG };
76enum { PF_DEBUG_NONE, PF_DEBUG_URGENT, PF_DEBUG_MISC, PF_DEBUG_NOISY };
77enum { PF_CHANGE_NONE, PF_CHANGE_ADD_HEAD, PF_CHANGE_ADD_TAIL,

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

82 * PFTM_MAX, special cases afterwards. See pf_state_expires().
83 */
84enum { PFTM_TCP_FIRST_PACKET, PFTM_TCP_OPENING, PFTM_TCP_ESTABLISHED,
85 PFTM_TCP_CLOSING, PFTM_TCP_FIN_WAIT, PFTM_TCP_CLOSED,
86 PFTM_UDP_FIRST_PACKET, PFTM_UDP_SINGLE, PFTM_UDP_MULTIPLE,
87 PFTM_ICMP_FIRST_PACKET, PFTM_ICMP_ERROR_REPLY,
88 PFTM_OTHER_FIRST_PACKET, PFTM_OTHER_SINGLE,
89 PFTM_OTHER_MULTIPLE, PFTM_FRAG, PFTM_INTERVAL,
71enum { PF_PASS, PF_DROP, PF_SCRUB, PF_NAT, PF_NONAT,
72 PF_BINAT, PF_NOBINAT, PF_RDR, PF_NORDR, PF_SYNPROXY_DROP };
73enum { PF_RULESET_SCRUB, PF_RULESET_FILTER, PF_RULESET_NAT,
74 PF_RULESET_BINAT, PF_RULESET_RDR, PF_RULESET_MAX };
75enum { PF_OP_NONE, PF_OP_IRG, PF_OP_EQ, PF_OP_NE, PF_OP_LT,
76 PF_OP_LE, PF_OP_GT, PF_OP_GE, PF_OP_XRG, PF_OP_RRG };
77enum { PF_DEBUG_NONE, PF_DEBUG_URGENT, PF_DEBUG_MISC, PF_DEBUG_NOISY };
78enum { PF_CHANGE_NONE, PF_CHANGE_ADD_HEAD, PF_CHANGE_ADD_TAIL,

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

83 * PFTM_MAX, special cases afterwards. See pf_state_expires().
84 */
85enum { PFTM_TCP_FIRST_PACKET, PFTM_TCP_OPENING, PFTM_TCP_ESTABLISHED,
86 PFTM_TCP_CLOSING, PFTM_TCP_FIN_WAIT, PFTM_TCP_CLOSED,
87 PFTM_UDP_FIRST_PACKET, PFTM_UDP_SINGLE, PFTM_UDP_MULTIPLE,
88 PFTM_ICMP_FIRST_PACKET, PFTM_ICMP_ERROR_REPLY,
89 PFTM_OTHER_FIRST_PACKET, PFTM_OTHER_SINGLE,
90 PFTM_OTHER_MULTIPLE, PFTM_FRAG, PFTM_INTERVAL,
90 PFTM_ADAPTIVE_START, PFTM_ADAPTIVE_END, PFTM_MAX,
91 PFTM_PURGE, PFTM_UNTIL_PACKET };
91 PFTM_ADAPTIVE_START, PFTM_ADAPTIVE_END, PFTM_SRC_NODE,
92 PFTM_MAX, PFTM_PURGE, PFTM_UNTIL_PACKET };
92enum { PF_NOPFROUTE, PF_FASTROUTE, PF_ROUTETO, PF_DUPTO, PF_REPLYTO };
93enum { PF_NOPFROUTE, PF_FASTROUTE, PF_ROUTETO, PF_DUPTO, PF_REPLYTO };
93enum { PF_LIMIT_STATES, PF_LIMIT_FRAGS, PF_LIMIT_MAX };
94enum { PF_LIMIT_STATES, PF_LIMIT_SRC_NODES, PF_LIMIT_FRAGS, PF_LIMIT_MAX };
94#define PF_POOL_IDMASK 0x0f
95enum { PF_POOL_NONE, PF_POOL_BITMASK, PF_POOL_RANDOM,
96 PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN };
97enum { PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL,
98 PF_ADDR_TABLE };
99#define PF_POOL_TYPEMASK 0x0f
95#define PF_POOL_IDMASK 0x0f
96enum { PF_POOL_NONE, PF_POOL_BITMASK, PF_POOL_RANDOM,
97 PF_POOL_SRCHASH, PF_POOL_ROUNDROBIN };
98enum { PF_ADDR_ADDRMASK, PF_ADDR_NOROUTE, PF_ADDR_DYNIFTL,
99 PF_ADDR_TABLE };
100#define PF_POOL_TYPEMASK 0x0f
101#define PF_POOL_STICKYADDR 0x20
100#define PF_WSCALE_FLAG 0x80
101#define PF_WSCALE_MASK 0x0f
102
103struct pf_addr {
104 union {
105 struct in_addr v4;
106 struct in6_addr v6;
107 u_int8_t addr8[16];

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

112#define v6 pfa.v6
113#define addr8 pfa.addr8
114#define addr16 pfa.addr16
115#define addr32 pfa.addr32
116};
117
118#define PF_TABLE_NAME_SIZE 32
119
102#define PF_WSCALE_FLAG 0x80
103#define PF_WSCALE_MASK 0x0f
104
105struct pf_addr {
106 union {
107 struct in_addr v4;
108 struct in6_addr v6;
109 u_int8_t addr8[16];

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

114#define v6 pfa.v6
115#define addr8 pfa.addr8
116#define addr16 pfa.addr16
117#define addr32 pfa.addr32
118};
119
120#define PF_TABLE_NAME_SIZE 32
121
122#define PFI_AFLAG_NETWORK 0x01
123#define PFI_AFLAG_BROADCAST 0x02
124#define PFI_AFLAG_PEER 0x04
125#define PFI_AFLAG_MODEMASK 0x07
126#define PFI_AFLAG_NOALIAS 0x08
127
120struct pf_addr_wrap {
121 union {
122 struct {
123 struct pf_addr addr;
124 struct pf_addr mask;
125 } a;
126 char ifname[IFNAMSIZ];
127 char tblname[PF_TABLE_NAME_SIZE];
128 } v;
129 union {
128struct pf_addr_wrap {
129 union {
130 struct {
131 struct pf_addr addr;
132 struct pf_addr mask;
133 } a;
134 char ifname[IFNAMSIZ];
135 char tblname[PF_TABLE_NAME_SIZE];
136 } v;
137 union {
130 struct pf_addr_dyn *dyn;
138 struct pfi_dynaddr *dyn;
131 struct pfr_ktable *tbl;
139 struct pfr_ktable *tbl;
140 int dyncnt;
132 int tblcnt;
133 } p;
134 u_int8_t type; /* PF_ADDR_* */
141 int tblcnt;
142 } p;
143 u_int8_t type; /* PF_ADDR_* */
144 u_int8_t iflags; /* PFI_AFLAG_* */
135};
136
137#ifdef _KERNEL
138
145};
146
147#ifdef _KERNEL
148
139struct pf_addr_dyn {
140 char ifname[IFNAMSIZ];
141 struct ifnet *ifp;
142 struct pf_addr *addr;
143 sa_family_t af;
144#ifdef __FreeBSD__
145 eventhandler_tag hook_cookie;
146#else
147 void *hook_cookie;
148#endif
149 u_int8_t undefined;
149struct pfi_dynaddr {
150 struct pf_addr pfid_addr4;
151 struct pf_addr pfid_mask4;
152 struct pf_addr pfid_addr6;
153 struct pf_addr pfid_mask6;
154 struct pfr_ktable *pfid_kt;
155 struct pfi_kif *pfid_kif;
156 void *pfid_hook_cookie;
157 int pfid_net; /* optional mask, or 128 */
158 int pfid_acnt4; /* address count, IPv4 */
159 int pfid_acnt6; /* address count, IPv6 */
160 sa_family_t pfid_af; /* rule address family */
161 u_int8_t pfid_iflags; /* PFI_AFLAG_* */
150};
151
152/*
153 * Address manipulation macros
154 */
155
156#ifdef __FreeBSD__
157#define splsoftnet() splnet()

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

207#define PFSYNC_MODVER 1
208
209#define PFLOG_MINVER 1
210#define PFLOG_PREFVER PFLOG_MODVER
211#define PFLOG_MAXVER 1
212#define PFSYNC_MINVER 1
213#define PFSYNC_PREFVER PFSYNC_MODVER
214#define PFSYNC_MAXVER 1
162};
163
164/*
165 * Address manipulation macros
166 */
167
168#ifdef __FreeBSD__
169#define splsoftnet() splnet()

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

219#define PFSYNC_MODVER 1
220
221#define PFLOG_MINVER 1
222#define PFLOG_PREFVER PFLOG_MODVER
223#define PFLOG_MAXVER 1
224#define PFSYNC_MINVER 1
225#define PFSYNC_PREFVER PFSYNC_MODVER
226#define PFSYNC_MAXVER 1
215#endif
216
227
228/* prototyped for pf_subr.c */
229struct hook_desc {
230 TAILQ_ENTRY(hook_desc) hd_list;
231 void (*hd_fn)(void *);
232 void *hd_arg;
233};
234TAILQ_HEAD(hook_desc_head, hook_desc);
235
236void *hook_establish(struct hook_desc_head *, int, void (*)(void *), void *);
237void hook_disestablish(struct hook_desc_head *, void *);
238void dohooks(struct hook_desc_head *, int);
239
240#define HOOK_REMOVE 0x01
241#define HOOK_FREE 0x02
242#endif /* __FreeBSD__ */
243
217#ifdef INET
218#ifndef INET6
219#define PF_INET_ONLY
220#endif /* ! INET6 */
221#endif /* INET */
222
223#ifdef INET6
224#ifndef INET

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

345
346#define PF_MISMATCHAW(aw, x, af, not) \
347 ( \
348 (((aw)->type == PF_ADDR_NOROUTE && \
349 pf_routable((x), (af))) || \
350 ((aw)->type == PF_ADDR_TABLE && \
351 !pfr_match_addr((aw)->p.tbl, (x), (af))) || \
352 ((aw)->type == PF_ADDR_DYNIFTL && \
244#ifdef INET
245#ifndef INET6
246#define PF_INET_ONLY
247#endif /* ! INET6 */
248#endif /* INET */
249
250#ifdef INET6
251#ifndef INET

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

372
373#define PF_MISMATCHAW(aw, x, af, not) \
374 ( \
375 (((aw)->type == PF_ADDR_NOROUTE && \
376 pf_routable((x), (af))) || \
377 ((aw)->type == PF_ADDR_TABLE && \
378 !pfr_match_addr((aw)->p.tbl, (x), (af))) || \
379 ((aw)->type == PF_ADDR_DYNIFTL && \
353 ((aw)->p.dyn->undefined || \
354 (!PF_AZERO(&(aw)->v.a.mask, (af)) && \
355 !PF_MATCHA(0, &(aw)->v.a.addr, \
356 &(aw)->v.a.mask, (x), (af))))) || \
380 !pfi_match_addr((aw)->p.dyn, (x), (af))) || \
357 ((aw)->type == PF_ADDR_ADDRMASK && \
358 !PF_AZERO(&(aw)->v.a.mask, (af)) && \
359 !PF_MATCHA(0, &(aw)->v.a.addr, \
360 &(aw)->v.a.mask, (x), (af)))) != \
361 (not) \
362 )
363
364struct pf_rule_uid {

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

377 u_int8_t not;
378 u_int8_t port_op;
379};
380
381struct pf_pooladdr {
382 struct pf_addr_wrap addr;
383 TAILQ_ENTRY(pf_pooladdr) entries;
384 char ifname[IFNAMSIZ];
381 ((aw)->type == PF_ADDR_ADDRMASK && \
382 !PF_AZERO(&(aw)->v.a.mask, (af)) && \
383 !PF_MATCHA(0, &(aw)->v.a.addr, \
384 &(aw)->v.a.mask, (x), (af)))) != \
385 (not) \
386 )
387
388struct pf_rule_uid {

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

401 u_int8_t not;
402 u_int8_t port_op;
403};
404
405struct pf_pooladdr {
406 struct pf_addr_wrap addr;
407 TAILQ_ENTRY(pf_pooladdr) entries;
408 char ifname[IFNAMSIZ];
385 struct ifnet *ifp;
409 struct pfi_kif *kif;
386};
387
388TAILQ_HEAD(pf_palist, pf_pooladdr);
389
390struct pf_poolhashkey {
391 union {
392 u_int8_t key8[16];
393 u_int16_t key16[8];

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

526#define PF_SKIP_SRC_ADDR 4
527#define PF_SKIP_SRC_PORT 5
528#define PF_SKIP_DST_ADDR 6
529#define PF_SKIP_DST_PORT 7
530#define PF_SKIP_COUNT 8
531 union pf_rule_ptr skip[PF_SKIP_COUNT];
532#define PF_RULE_LABEL_SIZE 64
533 char label[PF_RULE_LABEL_SIZE];
410};
411
412TAILQ_HEAD(pf_palist, pf_pooladdr);
413
414struct pf_poolhashkey {
415 union {
416 u_int8_t key8[16];
417 u_int16_t key16[8];

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

550#define PF_SKIP_SRC_ADDR 4
551#define PF_SKIP_SRC_PORT 5
552#define PF_SKIP_DST_ADDR 6
553#define PF_SKIP_DST_PORT 7
554#define PF_SKIP_COUNT 8
555 union pf_rule_ptr skip[PF_SKIP_COUNT];
556#define PF_RULE_LABEL_SIZE 64
557 char label[PF_RULE_LABEL_SIZE];
534 u_int32_t timeout[PFTM_MAX];
535#define PF_QNAME_SIZE 16
536 char ifname[IFNAMSIZ];
537 char qname[PF_QNAME_SIZE];
538 char pqname[PF_QNAME_SIZE];
539#define PF_ANCHOR_NAME_SIZE 16
540 char anchorname[PF_ANCHOR_NAME_SIZE];
541#define PF_TAG_NAME_SIZE 16
542 char tagname[PF_TAG_NAME_SIZE];
543 char match_tagname[PF_TAG_NAME_SIZE];
544
545 TAILQ_ENTRY(pf_rule) entries;
546 struct pf_pool rpool;
547
548 u_int64_t evaluations;
549 u_int64_t packets;
550 u_int64_t bytes;
551
558#define PF_QNAME_SIZE 16
559 char ifname[IFNAMSIZ];
560 char qname[PF_QNAME_SIZE];
561 char pqname[PF_QNAME_SIZE];
562#define PF_ANCHOR_NAME_SIZE 16
563 char anchorname[PF_ANCHOR_NAME_SIZE];
564#define PF_TAG_NAME_SIZE 16
565 char tagname[PF_TAG_NAME_SIZE];
566 char match_tagname[PF_TAG_NAME_SIZE];
567
568 TAILQ_ENTRY(pf_rule) entries;
569 struct pf_pool rpool;
570
571 u_int64_t evaluations;
572 u_int64_t packets;
573 u_int64_t bytes;
574
552 struct ifnet *ifp;
575 struct pfi_kif *kif;
553 struct pf_anchor *anchor;
554
555 pf_osfp_t os_fingerprint;
576 struct pf_anchor *anchor;
577
578 pf_osfp_t os_fingerprint;
579
580 u_int32_t timeout[PFTM_MAX];
556 u_int32_t states;
557 u_int32_t max_states;
581 u_int32_t states;
582 u_int32_t max_states;
583 u_int32_t src_nodes;
584 u_int32_t max_src_nodes;
585 u_int32_t max_src_states;
558 u_int32_t qid;
559 u_int32_t pqid;
560 u_int32_t rt_listid;
561 u_int32_t nr;
562
563 u_int16_t return_icmp;
564 u_int16_t return_icmp6;
565 u_int16_t max_mss;

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

596};
597
598/* rule flags */
599#define PFRULE_DROP 0x0000
600#define PFRULE_RETURNRST 0x0001
601#define PFRULE_FRAGMENT 0x0002
602#define PFRULE_RETURNICMP 0x0004
603#define PFRULE_RETURN 0x0008
586 u_int32_t qid;
587 u_int32_t pqid;
588 u_int32_t rt_listid;
589 u_int32_t nr;
590
591 u_int16_t return_icmp;
592 u_int16_t return_icmp6;
593 u_int16_t max_mss;

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

624};
625
626/* rule flags */
627#define PFRULE_DROP 0x0000
628#define PFRULE_RETURNRST 0x0001
629#define PFRULE_FRAGMENT 0x0002
630#define PFRULE_RETURNICMP 0x0004
631#define PFRULE_RETURN 0x0008
632#define PFRULE_NOSYNC 0x0010
633#define PFRULE_SRCTRACK 0x0020 /* track source states */
634#define PFRULE_RULESRCTRACK 0x0040 /* per rule */
604
605/* scrub flags */
606#define PFRULE_NODF 0x0100
607#define PFRULE_FRAGCROP 0x0200 /* non-buffering frag cache */
608#define PFRULE_FRAGDROP 0x0400 /* drop funny fragments */
609#define PFRULE_RANDOMID 0x0800
610#define PFRULE_REASSEMBLE_TCP 0x1000
611
635
636/* scrub flags */
637#define PFRULE_NODF 0x0100
638#define PFRULE_FRAGCROP 0x0200 /* non-buffering frag cache */
639#define PFRULE_FRAGDROP 0x0400 /* drop funny fragments */
640#define PFRULE_RANDOMID 0x0800
641#define PFRULE_REASSEMBLE_TCP 0x1000
642
643/* rule flags again */
644#define PFRULE_IFBOUND 0x00010000 /* if-bound */
645#define PFRULE_GRBOUND 0x00020000 /* group-bound */
646
612#define PFSTATE_HIWAT 10000 /* default state table size */
613
647#define PFSTATE_HIWAT 10000 /* default state table size */
648
649struct pf_src_node {
650 RB_ENTRY(pf_src_node) entry;
651 struct pf_addr addr;
652 struct pf_addr raddr;
653 union pf_rule_ptr rule;
654 struct pfi_kif *kif;
655 u_int32_t bytes;
656 u_int32_t packets;
657 u_int32_t states;
658 u_int32_t creation;
659 u_int32_t expire;
660 sa_family_t af;
661 u_int8_t ruletype;
662};
614
663
664#define PFSNODE_HIWAT 10000 /* default source node table size */
665
615struct pf_state_scrub {
616 u_int16_t pfss_flags;
617#define PFSS_TIMESTAMP 0x0001 /* modulate timestamp */
618 u_int8_t pfss_ttl; /* stashed TTL */
619 u_int8_t pad;
620 u_int32_t pfss_ts_mod; /* timestamp modulation */
621};
622

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

632 u_int32_t seqdiff; /* Sequence number modulator */
633 u_int16_t max_win; /* largest window (pre scaling) */
634 u_int8_t state; /* active state level */
635 u_int8_t wscale; /* window scaling factor */
636 u_int16_t mss; /* Maximum segment size option */
637 struct pf_state_scrub *scrub; /* state is scrubbed */
638};
639
666struct pf_state_scrub {
667 u_int16_t pfss_flags;
668#define PFSS_TIMESTAMP 0x0001 /* modulate timestamp */
669 u_int8_t pfss_ttl; /* stashed TTL */
670 u_int8_t pad;
671 u_int32_t pfss_ts_mod; /* timestamp modulation */
672};
673

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

683 u_int32_t seqdiff; /* Sequence number modulator */
684 u_int16_t max_win; /* largest window (pre scaling) */
685 u_int8_t state; /* active state level */
686 u_int8_t wscale; /* window scaling factor */
687 u_int16_t mss; /* Maximum segment size option */
688 struct pf_state_scrub *scrub; /* state is scrubbed */
689};
690
691TAILQ_HEAD(pf_state_queue, pf_state);
692
640struct pf_state {
693struct pf_state {
694 u_int64_t id;
695 union {
696 struct {
697 RB_ENTRY(pf_state) entry_lan_ext;
698 RB_ENTRY(pf_state) entry_ext_gwy;
699 RB_ENTRY(pf_state) entry_id;
700 TAILQ_ENTRY(pf_state) entry_updates;
701 struct pfi_kif *kif;
702 } s;
703 char ifname[IFNAMSIZ];
704 } u;
641 struct pf_state_host lan;
642 struct pf_state_host gwy;
643 struct pf_state_host ext;
644 struct pf_state_peer src;
645 struct pf_state_peer dst;
646 union pf_rule_ptr rule;
647 union pf_rule_ptr anchor;
648 union pf_rule_ptr nat_rule;
649 struct pf_addr rt_addr;
705 struct pf_state_host lan;
706 struct pf_state_host gwy;
707 struct pf_state_host ext;
708 struct pf_state_peer src;
709 struct pf_state_peer dst;
710 union pf_rule_ptr rule;
711 union pf_rule_ptr anchor;
712 union pf_rule_ptr nat_rule;
713 struct pf_addr rt_addr;
650 struct ifnet *rt_ifp;
714 struct pfi_kif *rt_kif;
715 struct pf_src_node *src_node;
716 struct pf_src_node *nat_src_node;
651 u_int32_t creation;
652 u_int32_t expire;
717 u_int32_t creation;
718 u_int32_t expire;
719 u_int32_t pfsync_time;
653 u_int32_t packets[2];
654 u_int32_t bytes[2];
720 u_int32_t packets[2];
721 u_int32_t bytes[2];
722 u_int32_t creatorid;
655 sa_family_t af;
656 u_int8_t proto;
657 u_int8_t direction;
658 u_int8_t log;
659 u_int8_t allow_opts;
660 u_int8_t timeout;
723 sa_family_t af;
724 u_int8_t proto;
725 u_int8_t direction;
726 u_int8_t log;
727 u_int8_t allow_opts;
728 u_int8_t timeout;
661 u_int8_t pad[2];
729 u_int8_t sync_flags;
730#define PFSTATE_NOSYNC 0x01
731#define PFSTATE_FROMSYNC 0x02
732 u_int8_t pad;
662};
663
733};
734
664struct pf_tree_node {
665 RB_ENTRY(pf_tree_node) entry;
666 struct pf_state *state;
667 struct pf_addr addr[2];
668 u_int16_t port[2];
669 sa_family_t af;
670 u_int8_t proto;
671};
672
673TAILQ_HEAD(pf_rulequeue, pf_rule);
674
675struct pf_anchor;
676
677struct pf_ruleset {
678 TAILQ_ENTRY(pf_ruleset) entries;
679#define PF_RULESET_NAME_SIZE 16
680 char name[PF_RULESET_NAME_SIZE];
681 struct {
682 struct pf_rulequeue queues[2];
683 struct {
684 struct pf_rulequeue *ptr;
685 u_int32_t ticket;
735TAILQ_HEAD(pf_rulequeue, pf_rule);
736
737struct pf_anchor;
738
739struct pf_ruleset {
740 TAILQ_ENTRY(pf_ruleset) entries;
741#define PF_RULESET_NAME_SIZE 16
742 char name[PF_RULESET_NAME_SIZE];
743 struct {
744 struct pf_rulequeue queues[2];
745 struct {
746 struct pf_rulequeue *ptr;
747 u_int32_t ticket;
748 int open;
686 } active, inactive;
687 } rules[PF_RULESET_MAX];
688 struct pf_anchor *anchor;
689 u_int32_t tticket;
690 int tables;
691 int topen;
692};
693
694TAILQ_HEAD(pf_rulesetqueue, pf_ruleset);
695
696struct pf_anchor {
697 TAILQ_ENTRY(pf_anchor) entries;
698 char name[PF_ANCHOR_NAME_SIZE];
699 struct pf_rulesetqueue rulesets;
700 int tables;
701};
702
703TAILQ_HEAD(pf_anchorqueue, pf_anchor);
704
749 } active, inactive;
750 } rules[PF_RULESET_MAX];
751 struct pf_anchor *anchor;
752 u_int32_t tticket;
753 int tables;
754 int topen;
755};
756
757TAILQ_HEAD(pf_rulesetqueue, pf_ruleset);
758
759struct pf_anchor {
760 TAILQ_ENTRY(pf_anchor) entries;
761 char name[PF_ANCHOR_NAME_SIZE];
762 struct pf_rulesetqueue rulesets;
763 int tables;
764};
765
766TAILQ_HEAD(pf_anchorqueue, pf_anchor);
767
768#define PF_RESERVED_ANCHOR "_pf"
769#define PF_INTERFACE_RULESET "_if"
770
705#define PFR_TFLAG_PERSIST 0x00000001
706#define PFR_TFLAG_CONST 0x00000002
707#define PFR_TFLAG_ACTIVE 0x00000004
708#define PFR_TFLAG_INACTIVE 0x00000008
709#define PFR_TFLAG_REFERENCED 0x00000010
710#define PFR_TFLAG_REFDANCHOR 0x00000020
711#define PFR_TFLAG_USRMASK 0x00000003
712#define PFR_TFLAG_SETMASK 0x0000003C

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

783 struct pfr_tstats pfrkt_ts;
784 RB_ENTRY(pfr_ktable) pfrkt_tree;
785 SLIST_ENTRY(pfr_ktable) pfrkt_workq;
786 struct radix_node_head *pfrkt_ip4;
787 struct radix_node_head *pfrkt_ip6;
788 struct pfr_ktable *pfrkt_shadow;
789 struct pfr_ktable *pfrkt_root;
790 struct pf_ruleset *pfrkt_rs;
771#define PFR_TFLAG_PERSIST 0x00000001
772#define PFR_TFLAG_CONST 0x00000002
773#define PFR_TFLAG_ACTIVE 0x00000004
774#define PFR_TFLAG_INACTIVE 0x00000008
775#define PFR_TFLAG_REFERENCED 0x00000010
776#define PFR_TFLAG_REFDANCHOR 0x00000020
777#define PFR_TFLAG_USRMASK 0x00000003
778#define PFR_TFLAG_SETMASK 0x0000003C

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

849 struct pfr_tstats pfrkt_ts;
850 RB_ENTRY(pfr_ktable) pfrkt_tree;
851 SLIST_ENTRY(pfr_ktable) pfrkt_workq;
852 struct radix_node_head *pfrkt_ip4;
853 struct radix_node_head *pfrkt_ip6;
854 struct pfr_ktable *pfrkt_shadow;
855 struct pfr_ktable *pfrkt_root;
856 struct pf_ruleset *pfrkt_rs;
857 long pfrkt_larg;
791 int pfrkt_nflags;
792};
793#define pfrkt_t pfrkt_ts.pfrts_t
794#define pfrkt_name pfrkt_t.pfrt_name
858 int pfrkt_nflags;
859};
860#define pfrkt_t pfrkt_ts.pfrts_t
861#define pfrkt_name pfrkt_t.pfrt_name
795#define pfrkt_anchor pfrkt_t.pfrt_anchor
796#define pfrkt_ruleset pfrkt_t.pfrt_ruleset
862#define pfrkt_anchor pfrkt_t.pfrt_anchor
863#define pfrkt_ruleset pfrkt_t.pfrt_ruleset
797#define pfrkt_flags pfrkt_t.pfrt_flags
798#define pfrkt_cnt pfrkt_ts.pfrts_cnt
799#define pfrkt_refcnt pfrkt_ts.pfrts_refcnt
800#define pfrkt_packets pfrkt_ts.pfrts_packets
801#define pfrkt_bytes pfrkt_ts.pfrts_bytes
802#define pfrkt_match pfrkt_ts.pfrts_match
803#define pfrkt_nomatch pfrkt_ts.pfrts_nomatch
804#define pfrkt_tzero pfrkt_ts.pfrts_tzero
805
864#define pfrkt_flags pfrkt_t.pfrt_flags
865#define pfrkt_cnt pfrkt_ts.pfrts_cnt
866#define pfrkt_refcnt pfrkt_ts.pfrts_refcnt
867#define pfrkt_packets pfrkt_ts.pfrts_packets
868#define pfrkt_bytes pfrkt_ts.pfrts_bytes
869#define pfrkt_match pfrkt_ts.pfrts_match
870#define pfrkt_nomatch pfrkt_ts.pfrts_nomatch
871#define pfrkt_tzero pfrkt_ts.pfrts_tzero
872
873RB_HEAD(pf_state_tree_lan_ext, pf_state);
874RB_PROTOTYPE(pf_state_tree_lan_ext, pf_state,
875 u.s.entry_lan_ext, pf_state_compare_lan_ext);
876
877RB_HEAD(pf_state_tree_ext_gwy, pf_state);
878RB_PROTOTYPE(pf_state_tree_ext_gwy, pf_state,
879 u.s.entry_ext_gwy, pf_state_compare_ext_gwy);
880
881struct pfi_if {
882 char pfif_name[IFNAMSIZ];
883 u_int64_t pfif_packets[2][2][2];
884 u_int64_t pfif_bytes[2][2][2];
885 u_int64_t pfif_addcnt;
886 u_int64_t pfif_delcnt;
887 long pfif_tzero;
888 int pfif_states;
889 int pfif_rules;
890 int pfif_flags;
891};
892
893TAILQ_HEAD(pfi_grouphead, pfi_kif);
894TAILQ_HEAD(pfi_statehead, pfi_kif);
895RB_HEAD(pfi_ifhead, pfi_kif);
896struct pfi_kif {
897 struct pfi_if pfik_if;
898 RB_ENTRY(pfi_kif) pfik_tree;
899 struct pf_state_tree_lan_ext pfik_lan_ext;
900 struct pf_state_tree_ext_gwy pfik_ext_gwy;
901 struct pfi_grouphead pfik_grouphead;
902 TAILQ_ENTRY(pfi_kif) pfik_instances;
903 TAILQ_ENTRY(pfi_kif) pfik_w_states;
904 struct hook_desc_head *pfik_ah_head;
905 void *pfik_ah_cookie;
906 struct pfi_kif *pfik_parent;
907 struct ifnet *pfik_ifp;
908 int pfik_states;
909 int pfik_rules;
910};
911#define pfik_name pfik_if.pfif_name
912#define pfik_packets pfik_if.pfif_packets
913#define pfik_bytes pfik_if.pfif_bytes
914#define pfik_tzero pfik_if.pfif_tzero
915#define pfik_flags pfik_if.pfif_flags
916#define pfik_addcnt pfik_if.pfif_addcnt
917#define pfik_delcnt pfik_if.pfif_delcnt
918#define pfik_states pfik_if.pfif_states
919#define pfik_rules pfik_if.pfif_rules
920
921#define PFI_IFLAG_GROUP 0x0001 /* group of interfaces */
922#define PFI_IFLAG_INSTANCE 0x0002 /* single instance */
923#define PFI_IFLAG_CLONABLE 0x0010 /* clonable group */
924#define PFI_IFLAG_DYNAMIC 0x0020 /* dynamic group */
925#define PFI_IFLAG_ATTACHED 0x0040 /* interface attached */
926#define PFI_IFLAG_PLACEHOLDER 0x8000 /* placeholder group/interface */
927
806struct pf_pdesc {
807 u_int64_t tot_len; /* Make Mickey money */
808 union {
809 struct tcphdr *tcp;
810 struct udphdr *udp;
811 struct icmp *icmp;
812#ifdef INET6
813 struct icmp6_hdr *icmp6;
814#endif /* INET6 */
815 void *any;
816 } hdr;
928struct pf_pdesc {
929 u_int64_t tot_len; /* Make Mickey money */
930 union {
931 struct tcphdr *tcp;
932 struct udphdr *udp;
933 struct icmp *icmp;
934#ifdef INET6
935 struct icmp6_hdr *icmp6;
936#endif /* INET6 */
937 void *any;
938 } hdr;
939 struct pf_addr baddr; /* address before translation */
940 struct pf_addr naddr; /* address after translation */
941 struct pf_rule *nat_rule; /* nat/rdr rule applied to packet */
817 struct pf_addr *src;
818 struct pf_addr *dst;
819 u_int16_t *ip_sum;
820 u_int32_t p_len; /* total length of payload */
821 u_int16_t flags; /* Let SCRUB trigger behavior in
822 * state code. Easier than tags */
823#define PFDESC_TCP_NORM 0x0001 /* TCP shall be statefully scrubbed */
824 sa_family_t af;

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

877 NULL \
878}
879
880#define FCNT_STATE_SEARCH 0
881#define FCNT_STATE_INSERT 1
882#define FCNT_STATE_REMOVALS 2
883#define FCNT_MAX 3
884
942 struct pf_addr *src;
943 struct pf_addr *dst;
944 u_int16_t *ip_sum;
945 u_int32_t p_len; /* total length of payload */
946 u_int16_t flags; /* Let SCRUB trigger behavior in
947 * state code. Easier than tags */
948#define PFDESC_TCP_NORM 0x0001 /* TCP shall be statefully scrubbed */
949 sa_family_t af;

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

1002 NULL \
1003}
1004
1005#define FCNT_STATE_SEARCH 0
1006#define FCNT_STATE_INSERT 1
1007#define FCNT_STATE_REMOVALS 2
1008#define FCNT_MAX 3
1009
1010#define SCNT_SRC_NODE_SEARCH 0
1011#define SCNT_SRC_NODE_INSERT 1
1012#define SCNT_SRC_NODE_REMOVALS 2
1013#define SCNT_MAX 3
885
886#define ACTION_SET(a, x) \
887 do { \
888 if ((a) != NULL) \
889 *(a) = (x); \
890 } while (0)
891
892#define REASON_SET(a, x) \
893 do { \
894 if ((a) != NULL) \
895 *(a) = (x); \
896 if (x < PFRES_MAX) \
897 pf_status.counters[x]++; \
898 } while (0)
899
900struct pf_status {
901 u_int64_t counters[PFRES_MAX];
902 u_int64_t fcounters[FCNT_MAX];
1014
1015#define ACTION_SET(a, x) \
1016 do { \
1017 if ((a) != NULL) \
1018 *(a) = (x); \
1019 } while (0)
1020
1021#define REASON_SET(a, x) \
1022 do { \
1023 if ((a) != NULL) \
1024 *(a) = (x); \
1025 if (x < PFRES_MAX) \
1026 pf_status.counters[x]++; \
1027 } while (0)
1028
1029struct pf_status {
1030 u_int64_t counters[PFRES_MAX];
1031 u_int64_t fcounters[FCNT_MAX];
1032 u_int64_t scounters[SCNT_MAX];
903 u_int64_t pcounters[2][2][3];
904 u_int64_t bcounters[2][2];
1033 u_int64_t pcounters[2][2][3];
1034 u_int64_t bcounters[2][2];
1035 u_int64_t stateid;
905 u_int32_t running;
906 u_int32_t states;
1036 u_int32_t running;
1037 u_int32_t states;
1038 u_int32_t src_nodes;
907 u_int32_t since;
908 u_int32_t debug;
1039 u_int32_t since;
1040 u_int32_t debug;
1041 u_int32_t hostid;
909 char ifname[IFNAMSIZ];
910};
911
912struct cbq_opts {
913 u_int minburst;
914 u_int maxburst;
915 u_int pktsize;
916 u_int maxpktsize;

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

1032};
1033
1034struct pfioc_state_kill {
1035 /* XXX returns the number of states killed in psk_af */
1036 sa_family_t psk_af;
1037 int psk_proto;
1038 struct pf_rule_addr psk_src;
1039 struct pf_rule_addr psk_dst;
1042 char ifname[IFNAMSIZ];
1043};
1044
1045struct cbq_opts {
1046 u_int minburst;
1047 u_int maxburst;
1048 u_int pktsize;
1049 u_int maxpktsize;

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

1165};
1166
1167struct pfioc_state_kill {
1168 /* XXX returns the number of states killed in psk_af */
1169 sa_family_t psk_af;
1170 int psk_proto;
1171 struct pf_rule_addr psk_src;
1172 struct pf_rule_addr psk_dst;
1173 char psk_ifname[IFNAMSIZ];
1040};
1041
1042struct pfioc_states {
1043 int ps_len;
1044 union {
1045 caddr_t psu_buf;
1046 struct pf_state *psu_states;
1047 } ps_u;
1048#define ps_buf ps_u.psu_buf
1049#define ps_states ps_u.psu_states
1050};
1051
1174};
1175
1176struct pfioc_states {
1177 int ps_len;
1178 union {
1179 caddr_t psu_buf;
1180 struct pf_state *psu_states;
1181 } ps_u;
1182#define ps_buf ps_u.psu_buf
1183#define ps_states ps_u.psu_states
1184};
1185
1186struct pfioc_src_nodes {
1187 int psn_len;
1188 union {
1189 caddr_t psu_buf;
1190 struct pf_src_node *psu_src_nodes;
1191 } psn_u;
1192#define psn_buf psn_u.psu_buf
1193#define psn_src_nodes psn_u.psu_src_nodes
1194};
1195
1052struct pfioc_if {
1053 char ifname[IFNAMSIZ];
1054};
1055
1056struct pfioc_tm {
1057 int timeout;
1058 int seconds;
1059};

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

1084};
1085
1086struct pfioc_ruleset {
1087 u_int32_t nr;
1088 char anchor[PF_ANCHOR_NAME_SIZE];
1089 char name[PF_RULESET_NAME_SIZE];
1090};
1091
1196struct pfioc_if {
1197 char ifname[IFNAMSIZ];
1198};
1199
1200struct pfioc_tm {
1201 int timeout;
1202 int seconds;
1203};

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

1228};
1229
1230struct pfioc_ruleset {
1231 u_int32_t nr;
1232 char anchor[PF_ANCHOR_NAME_SIZE];
1233 char name[PF_RULESET_NAME_SIZE];
1234};
1235
1236#define PF_RULESET_ALTQ (PF_RULESET_MAX)
1237#define PF_RULESET_TABLE (PF_RULESET_MAX+1)
1238struct pfioc_trans {
1239 int size; /* number of elements */
1240 int esize; /* size of each element in bytes */
1241 struct pfioc_trans_e {
1242 int rs_num;
1243 char anchor[PF_ANCHOR_NAME_SIZE];
1244 char ruleset[PF_RULESET_NAME_SIZE];
1245 u_int32_t ticket;
1246 } *array;
1247};
1248
1092#define PFR_FLAG_ATOMIC 0x00000001
1093#define PFR_FLAG_DUMMY 0x00000002
1094#define PFR_FLAG_FEEDBACK 0x00000004
1095#define PFR_FLAG_CLSTATS 0x00000008
1096#define PFR_FLAG_ADDRSTOO 0x00000010
1097#define PFR_FLAG_REPLACE 0x00000020
1098#define PFR_FLAG_ALLRSETS 0x00000040
1099#define PFR_FLAG_ALLMASK 0x0000007F
1249#define PFR_FLAG_ATOMIC 0x00000001
1250#define PFR_FLAG_DUMMY 0x00000002
1251#define PFR_FLAG_FEEDBACK 0x00000004
1252#define PFR_FLAG_CLSTATS 0x00000008
1253#define PFR_FLAG_ADDRSTOO 0x00000010
1254#define PFR_FLAG_REPLACE 0x00000020
1255#define PFR_FLAG_ALLRSETS 0x00000040
1256#define PFR_FLAG_ALLMASK 0x0000007F
1257#ifdef _KERNEL
1258#define PFR_FLAG_USERIOCTL 0x10000000
1259#endif
1100
1101struct pfioc_table {
1102 struct pfr_table pfrio_table;
1103 void *pfrio_buffer;
1104 int pfrio_esize;
1105 int pfrio_size;
1106 int pfrio_size2;
1107 int pfrio_nadd;

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

1113#define pfrio_exists pfrio_nadd
1114#define pfrio_nzero pfrio_nadd
1115#define pfrio_nmatch pfrio_nadd
1116#define pfrio_naddr pfrio_size2
1117#define pfrio_setflag pfrio_size2
1118#define pfrio_clrflag pfrio_nadd
1119
1120
1260
1261struct pfioc_table {
1262 struct pfr_table pfrio_table;
1263 void *pfrio_buffer;
1264 int pfrio_esize;
1265 int pfrio_size;
1266 int pfrio_size2;
1267 int pfrio_nadd;

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

1273#define pfrio_exists pfrio_nadd
1274#define pfrio_nzero pfrio_nadd
1275#define pfrio_nmatch pfrio_nadd
1276#define pfrio_naddr pfrio_size2
1277#define pfrio_setflag pfrio_size2
1278#define pfrio_clrflag pfrio_nadd
1279
1280
1281#define PFI_FLAG_GROUP 0x0001 /* gets groups of interfaces */
1282#define PFI_FLAG_INSTANCE 0x0002 /* gets single interfaces */
1283#define PFI_FLAG_ALLMASK 0x0003
1284
1285struct pfioc_iface {
1286 char pfiio_name[IFNAMSIZ];
1287 void *pfiio_buffer;
1288 int pfiio_esize;
1289 int pfiio_size;
1290 int pfiio_nzero;
1291 int pfiio_flags;
1292};
1293
1294
1121/*
1122 * ioctl operations
1123 */
1124
1125#define DIOCSTART _IO ('D', 1)
1126#define DIOCSTOP _IO ('D', 2)
1127#define DIOCBEGINRULES _IOWR('D', 3, struct pfioc_rule)
1128#define DIOCADDRULE _IOWR('D', 4, struct pfioc_rule)
1129#define DIOCCOMMITRULES _IOWR('D', 5, struct pfioc_rule)
1130#define DIOCGETRULES _IOWR('D', 6, struct pfioc_rule)
1131#define DIOCGETRULE _IOWR('D', 7, struct pfioc_rule)
1132/* XXX cut 8 - 17 */
1295/*
1296 * ioctl operations
1297 */
1298
1299#define DIOCSTART _IO ('D', 1)
1300#define DIOCSTOP _IO ('D', 2)
1301#define DIOCBEGINRULES _IOWR('D', 3, struct pfioc_rule)
1302#define DIOCADDRULE _IOWR('D', 4, struct pfioc_rule)
1303#define DIOCCOMMITRULES _IOWR('D', 5, struct pfioc_rule)
1304#define DIOCGETRULES _IOWR('D', 6, struct pfioc_rule)
1305#define DIOCGETRULE _IOWR('D', 7, struct pfioc_rule)
1306/* XXX cut 8 - 17 */
1133#define DIOCCLRSTATES _IO ('D', 18)
1307#define DIOCCLRSTATES _IOWR('D', 18, struct pfioc_state_kill)
1134#define DIOCGETSTATE _IOWR('D', 19, struct pfioc_state)
1135#define DIOCSETSTATUSIF _IOWR('D', 20, struct pfioc_if)
1136#define DIOCGETSTATUS _IOWR('D', 21, struct pf_status)
1137#define DIOCCLRSTATUS _IO ('D', 22)
1138#define DIOCNATLOOK _IOWR('D', 23, struct pfioc_natlook)
1139#define DIOCSETDEBUG _IOWR('D', 24, u_int32_t)
1140#define DIOCGETSTATES _IOWR('D', 25, struct pfioc_states)
1141#define DIOCCHANGERULE _IOWR('D', 26, struct pfioc_rule)

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

1181#define DIOCRTSTADDRS _IOWR('D', 73, struct pfioc_table)
1182#define DIOCRSETTFLAGS _IOWR('D', 74, struct pfioc_table)
1183#define DIOCRINABEGIN _IOWR('D', 75, struct pfioc_table)
1184#define DIOCRINACOMMIT _IOWR('D', 76, struct pfioc_table)
1185#define DIOCRINADEFINE _IOWR('D', 77, struct pfioc_table)
1186#define DIOCOSFPFLUSH _IO('D', 78)
1187#define DIOCOSFPADD _IOWR('D', 79, struct pf_osfp_ioctl)
1188#define DIOCOSFPGET _IOWR('D', 80, struct pf_osfp_ioctl)
1308#define DIOCGETSTATE _IOWR('D', 19, struct pfioc_state)
1309#define DIOCSETSTATUSIF _IOWR('D', 20, struct pfioc_if)
1310#define DIOCGETSTATUS _IOWR('D', 21, struct pf_status)
1311#define DIOCCLRSTATUS _IO ('D', 22)
1312#define DIOCNATLOOK _IOWR('D', 23, struct pfioc_natlook)
1313#define DIOCSETDEBUG _IOWR('D', 24, u_int32_t)
1314#define DIOCGETSTATES _IOWR('D', 25, struct pfioc_states)
1315#define DIOCCHANGERULE _IOWR('D', 26, struct pfioc_rule)

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

1355#define DIOCRTSTADDRS _IOWR('D', 73, struct pfioc_table)
1356#define DIOCRSETTFLAGS _IOWR('D', 74, struct pfioc_table)
1357#define DIOCRINABEGIN _IOWR('D', 75, struct pfioc_table)
1358#define DIOCRINACOMMIT _IOWR('D', 76, struct pfioc_table)
1359#define DIOCRINADEFINE _IOWR('D', 77, struct pfioc_table)
1360#define DIOCOSFPFLUSH _IO('D', 78)
1361#define DIOCOSFPADD _IOWR('D', 79, struct pf_osfp_ioctl)
1362#define DIOCOSFPGET _IOWR('D', 80, struct pf_osfp_ioctl)
1363#define DIOCXBEGIN _IOWR('D', 81, struct pfioc_trans)
1364#define DIOCXCOMMIT _IOWR('D', 82, struct pfioc_trans)
1365#define DIOCXROLLBACK _IOWR('D', 83, struct pfioc_trans)
1366#define DIOCGETSRCNODES _IOWR('D', 84, struct pfioc_src_nodes)
1367#define DIOCCLRSRCNODES _IO('D', 85)
1368#define DIOCSETHOSTID _IOWR('D', 86, u_int32_t)
1369#define DIOCIGETIFACES _IOWR('D', 87, struct pfioc_iface)
1370#define DIOCICLRISTATS _IOWR('D', 88, struct pfioc_iface)
1189#ifdef __FreeBSD__
1190struct pf_ifspeed {
1191 char ifname[IFNAMSIZ];
1192 u_int32_t baudrate;
1193};
1371#ifdef __FreeBSD__
1372struct pf_ifspeed {
1373 char ifname[IFNAMSIZ];
1374 u_int32_t baudrate;
1375};
1194#define DIOCGIFSPEED _IOWR('D', 81, struct pf_ifspeed)
1376#define DIOCGIFSPEED _IOWR('D', 89, struct pf_ifspeed)
1195#endif
1196
1197#ifdef _KERNEL
1377#endif
1378
1379#ifdef _KERNEL
1198RB_HEAD(pf_state_tree, pf_tree_node);
1199RB_PROTOTYPE(pf_state_tree, pf_tree_node, entry, pf_state_compare);
1200extern struct pf_state_tree tree_lan_ext, tree_ext_gwy;
1380RB_HEAD(pf_src_tree, pf_src_node);
1381RB_PROTOTYPE(pf_src_tree, pf_src_node, entry, pf_src_compare);
1382extern struct pf_src_tree tree_src_tracking;
1201
1383
1202extern struct pf_anchorqueue pf_anchors;
1203extern struct pf_ruleset pf_main_ruleset;
1384RB_HEAD(pf_state_tree_id, pf_state);
1385RB_PROTOTYPE(pf_state_tree_id, pf_state,
1386 entry_id, pf_state_compare_id);
1387extern struct pf_state_tree_id tree_id;
1388extern struct pf_state_queue state_updates;
1389
1390extern struct pf_anchorqueue pf_anchors;
1391extern struct pf_ruleset pf_main_ruleset;
1204TAILQ_HEAD(pf_poolqueue, pf_pool);
1392TAILQ_HEAD(pf_poolqueue, pf_pool);
1205extern struct pf_poolqueue pf_pools[2];
1393extern struct pf_poolqueue pf_pools[2];
1206TAILQ_HEAD(pf_altqqueue, pf_altq);
1394TAILQ_HEAD(pf_altqqueue, pf_altq);
1207extern struct pf_altqqueue pf_altqs[2];
1208extern struct pf_palist pf_pabuf;
1395extern struct pf_altqqueue pf_altqs[2];
1396extern struct pf_palist pf_pabuf;
1397extern struct pfi_kif **pfi_index2kif;
1209
1398
1210
1211extern u_int32_t ticket_altqs_active;
1212extern u_int32_t ticket_altqs_inactive;
1399extern u_int32_t ticket_altqs_active;
1400extern u_int32_t ticket_altqs_inactive;
1401extern int altqs_inactive_open;
1213extern u_int32_t ticket_pabuf;
1214extern struct pf_altqqueue *pf_altqs_active;
1215extern struct pf_altqqueue *pf_altqs_inactive;
1216extern struct pf_poolqueue *pf_pools_active;
1217extern struct pf_poolqueue *pf_pools_inactive;
1218extern int pf_tbladdr_setup(struct pf_ruleset *,
1219 struct pf_addr_wrap *);
1220extern void pf_tbladdr_remove(struct pf_addr_wrap *);
1221extern void pf_tbladdr_copyout(struct pf_addr_wrap *);
1402extern u_int32_t ticket_pabuf;
1403extern struct pf_altqqueue *pf_altqs_active;
1404extern struct pf_altqqueue *pf_altqs_inactive;
1405extern struct pf_poolqueue *pf_pools_active;
1406extern struct pf_poolqueue *pf_pools_inactive;
1407extern int pf_tbladdr_setup(struct pf_ruleset *,
1408 struct pf_addr_wrap *);
1409extern void pf_tbladdr_remove(struct pf_addr_wrap *);
1410extern void pf_tbladdr_copyout(struct pf_addr_wrap *);
1222extern int pf_dynaddr_setup(struct pf_addr_wrap *,
1223 sa_family_t);
1224extern void pf_dynaddr_copyout(struct pf_addr_wrap *);
1225extern void pf_dynaddr_remove(struct pf_addr_wrap *);
1226extern void pf_calc_skip_steps(struct pf_rulequeue *);
1411extern void pf_calc_skip_steps(struct pf_rulequeue *);
1227extern void pf_rule_set_qid(struct pf_rulequeue *);
1228extern u_int32_t pf_qname_to_qid(char *);
1229extern void pf_update_anchor_rules(void);
1230#ifdef __FreeBSD__
1412extern void pf_update_anchor_rules(void);
1413#ifdef __FreeBSD__
1231extern uma_zone_t pf_tree_pl, pf_rule_pl, pf_addr_pl;
1414extern uma_zone_t pf_src_tree_pl, pf_rule_pl;
1232extern uma_zone_t pf_state_pl, pf_altq_pl, pf_pooladdr_pl;
1233extern uma_zone_t pfr_ktable_pl, pfr_kentry_pl;
1234extern uma_zone_t pf_cache_pl, pf_cent_pl;
1235extern uma_zone_t pf_state_scrub_pl;
1415extern uma_zone_t pf_state_pl, pf_altq_pl, pf_pooladdr_pl;
1416extern uma_zone_t pfr_ktable_pl, pfr_kentry_pl;
1417extern uma_zone_t pf_cache_pl, pf_cent_pl;
1418extern uma_zone_t pf_state_scrub_pl;
1419extern uma_zone_t pfi_addr_pl;
1236#else
1420#else
1237extern struct pool pf_tree_pl, pf_rule_pl, pf_addr_pl;
1421extern struct pool pf_src_tree_pl, pf_rule_pl;
1238extern struct pool pf_state_pl, pf_altq_pl, pf_pooladdr_pl;
1239extern struct pool pf_state_scrub_pl;
1240#endif
1241extern void pf_purge_timeout(void *);
1422extern struct pool pf_state_pl, pf_altq_pl, pf_pooladdr_pl;
1423extern struct pool pf_state_scrub_pl;
1424#endif
1425extern void pf_purge_timeout(void *);
1426extern void pf_purge_expired_src_nodes(void);
1242extern void pf_purge_expired_states(void);
1427extern void pf_purge_expired_states(void);
1243extern int pf_insert_state(struct pf_state *);
1244extern struct pf_state *pf_find_state(struct pf_state_tree *,
1245 struct pf_tree_node *);
1428extern int pf_insert_state(struct pfi_kif *,
1429 struct pf_state *);
1430extern int pf_insert_src_node(struct pf_src_node **,
1431 struct pf_rule *, struct pf_addr *,
1432 sa_family_t);
1433void pf_src_tree_remove_state(struct pf_state *);
1434extern struct pf_state *pf_find_state_byid(struct pf_state *);
1435extern struct pf_state *pf_find_state_all(struct pf_state *key,
1436 u_int8_t tree, int *more);
1246extern struct pf_anchor *pf_find_anchor(const char *);
1247extern struct pf_ruleset *pf_find_ruleset(char *, char *);
1437extern struct pf_anchor *pf_find_anchor(const char *);
1438extern struct pf_ruleset *pf_find_ruleset(char *, char *);
1248extern struct pf_ruleset *pf_find_or_create_ruleset(char *, char *);
1439extern struct pf_ruleset *pf_find_or_create_ruleset(
1440 char[PF_ANCHOR_NAME_SIZE],
1441 char[PF_RULESET_NAME_SIZE]);
1249extern void pf_remove_if_empty_ruleset(
1250 struct pf_ruleset *);
1251
1442extern void pf_remove_if_empty_ruleset(
1443 struct pf_ruleset *);
1444
1252extern struct ifnet *status_ifp;
1445extern struct ifnet *sync_ifp;
1253extern struct pf_rule pf_default_rule;
1254extern void pf_addrcpy(struct pf_addr *, struct pf_addr *,
1255 u_int8_t);
1256void pf_rm_rule(struct pf_rulequeue *,
1257 struct pf_rule *);
1258
1259#ifdef INET
1260int pf_test(int, struct ifnet *, struct mbuf **);

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

1265void pf_poolmask(struct pf_addr *, struct pf_addr*,
1266 struct pf_addr *, struct pf_addr *, u_int8_t);
1267void pf_addr_inc(struct pf_addr *, sa_family_t);
1268#endif /* INET6 */
1269
1270void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, u_short *,
1271 sa_family_t);
1272void pf_change_a(void *, u_int16_t *, u_int32_t, u_int8_t);
1446extern struct pf_rule pf_default_rule;
1447extern void pf_addrcpy(struct pf_addr *, struct pf_addr *,
1448 u_int8_t);
1449void pf_rm_rule(struct pf_rulequeue *,
1450 struct pf_rule *);
1451
1452#ifdef INET
1453int pf_test(int, struct ifnet *, struct mbuf **);

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

1458void pf_poolmask(struct pf_addr *, struct pf_addr*,
1459 struct pf_addr *, struct pf_addr *, u_int8_t);
1460void pf_addr_inc(struct pf_addr *, sa_family_t);
1461#endif /* INET6 */
1462
1463void *pf_pull_hdr(struct mbuf *, int, void *, int, u_short *, u_short *,
1464 sa_family_t);
1465void pf_change_a(void *, u_int16_t *, u_int32_t, u_int8_t);
1273int pflog_packet(struct ifnet *, struct mbuf *, sa_family_t, u_int8_t,
1466int pflog_packet(struct pfi_kif *, struct mbuf *, sa_family_t, u_int8_t,
1274 u_int8_t, struct pf_rule *, struct pf_rule *, struct pf_ruleset *);
1275int pf_match_addr(u_int8_t, struct pf_addr *, struct pf_addr *,
1276 struct pf_addr *, sa_family_t);
1277int pf_match(u_int8_t, u_int32_t, u_int32_t, u_int32_t);
1278int pf_match_port(u_int8_t, u_int16_t, u_int16_t, u_int16_t);
1279int pf_match_uid(u_int8_t, uid_t, uid_t, uid_t);
1280int pf_match_gid(u_int8_t, gid_t, gid_t, gid_t);
1281
1282void pf_normalize_init(void);
1467 u_int8_t, struct pf_rule *, struct pf_rule *, struct pf_ruleset *);
1468int pf_match_addr(u_int8_t, struct pf_addr *, struct pf_addr *,
1469 struct pf_addr *, sa_family_t);
1470int pf_match(u_int8_t, u_int32_t, u_int32_t, u_int32_t);
1471int pf_match_port(u_int8_t, u_int16_t, u_int16_t, u_int16_t);
1472int pf_match_uid(u_int8_t, uid_t, uid_t, uid_t);
1473int pf_match_gid(u_int8_t, gid_t, gid_t, gid_t);
1474
1475void pf_normalize_init(void);
1283int pf_normalize_ip(struct mbuf **, int, struct ifnet *, u_short *);
1284int pf_normalize_ip6(struct mbuf **, int, struct ifnet *, u_short *);
1285int pf_normalize_tcp(int, struct ifnet *, struct mbuf *, int, int, void *,
1476int pf_normalize_ip(struct mbuf **, int, struct pfi_kif *, u_short *);
1477int pf_normalize_ip6(struct mbuf **, int, struct pfi_kif *, u_short *);
1478int pf_normalize_tcp(int, struct pfi_kif *, struct mbuf *, int, int, void *,
1286 struct pf_pdesc *);
1287void pf_normalize_tcp_cleanup(struct pf_state *);
1288int pf_normalize_tcp_init(struct mbuf *, int, struct pf_pdesc *,
1289 struct tcphdr *, struct pf_state_peer *, struct pf_state_peer *);
1290int pf_normalize_tcp_stateful(struct mbuf *, int, struct pf_pdesc *,
1291 u_short *, struct tcphdr *, struct pf_state_peer *,
1292 struct pf_state_peer *, int *);
1293u_int32_t
1294 pf_state_expires(const struct pf_state *);
1295void pf_purge_expired_fragments(void);
1296int pf_routable(struct pf_addr *addr, sa_family_t af);
1297void pfr_initialize(void);
1298int pfr_match_addr(struct pfr_ktable *, struct pf_addr *, sa_family_t);
1299void pfr_update_stats(struct pfr_ktable *, struct pf_addr *, sa_family_t,
1300 u_int64_t, int, int, int);
1301int pfr_pool_get(struct pfr_ktable *, int *, struct pf_addr *,
1302 struct pf_addr **, struct pf_addr **, sa_family_t);
1479 struct pf_pdesc *);
1480void pf_normalize_tcp_cleanup(struct pf_state *);
1481int pf_normalize_tcp_init(struct mbuf *, int, struct pf_pdesc *,
1482 struct tcphdr *, struct pf_state_peer *, struct pf_state_peer *);
1483int pf_normalize_tcp_stateful(struct mbuf *, int, struct pf_pdesc *,
1484 u_short *, struct tcphdr *, struct pf_state_peer *,
1485 struct pf_state_peer *, int *);
1486u_int32_t
1487 pf_state_expires(const struct pf_state *);
1488void pf_purge_expired_fragments(void);
1489int pf_routable(struct pf_addr *addr, sa_family_t af);
1490void pfr_initialize(void);
1491int pfr_match_addr(struct pfr_ktable *, struct pf_addr *, sa_family_t);
1492void pfr_update_stats(struct pfr_ktable *, struct pf_addr *, sa_family_t,
1493 u_int64_t, int, int, int);
1494int pfr_pool_get(struct pfr_ktable *, int *, struct pf_addr *,
1495 struct pf_addr **, struct pf_addr **, sa_family_t);
1496void pfr_dynaddr_update(struct pfr_ktable *, struct pfi_dynaddr *);
1303struct pfr_ktable *
1304 pfr_attach_table(struct pf_ruleset *, char *);
1305void pfr_detach_table(struct pfr_ktable *);
1306int pfr_clr_tables(struct pfr_table *, int *, int);
1307int pfr_add_tables(struct pfr_table *, int, int *, int);
1308int pfr_del_tables(struct pfr_table *, int, int *, int);
1309int pfr_get_tables(struct pfr_table *, struct pfr_table *, int *, int);
1310int pfr_get_tstats(struct pfr_table *, struct pfr_tstats *, int *, int);

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

1319 int *, int *, int *, int);
1320int pfr_get_addrs(struct pfr_table *, struct pfr_addr *, int *, int);
1321int pfr_get_astats(struct pfr_table *, struct pfr_astats *, int *, int);
1322int pfr_clr_astats(struct pfr_table *, struct pfr_addr *, int, int *,
1323 int);
1324int pfr_tst_addrs(struct pfr_table *, struct pfr_addr *, int, int *,
1325 int);
1326int pfr_ina_begin(struct pfr_table *, u_int32_t *, int *, int);
1497struct pfr_ktable *
1498 pfr_attach_table(struct pf_ruleset *, char *);
1499void pfr_detach_table(struct pfr_ktable *);
1500int pfr_clr_tables(struct pfr_table *, int *, int);
1501int pfr_add_tables(struct pfr_table *, int, int *, int);
1502int pfr_del_tables(struct pfr_table *, int, int *, int);
1503int pfr_get_tables(struct pfr_table *, struct pfr_table *, int *, int);
1504int pfr_get_tstats(struct pfr_table *, struct pfr_tstats *, int *, int);

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

1513 int *, int *, int *, int);
1514int pfr_get_addrs(struct pfr_table *, struct pfr_addr *, int *, int);
1515int pfr_get_astats(struct pfr_table *, struct pfr_astats *, int *, int);
1516int pfr_clr_astats(struct pfr_table *, struct pfr_addr *, int, int *,
1517 int);
1518int pfr_tst_addrs(struct pfr_table *, struct pfr_addr *, int, int *,
1519 int);
1520int pfr_ina_begin(struct pfr_table *, u_int32_t *, int *, int);
1521int pfr_ina_rollback(struct pfr_table *, u_int32_t, int *, int);
1327int pfr_ina_commit(struct pfr_table *, u_int32_t, int *, int *, int);
1328int pfr_ina_define(struct pfr_table *, struct pfr_addr *, int, int *,
1329 int *, u_int32_t, int);
1330
1522int pfr_ina_commit(struct pfr_table *, u_int32_t, int *, int *, int);
1523int pfr_ina_define(struct pfr_table *, struct pfr_addr *, int, int *,
1524 int *, u_int32_t, int);
1525
1526void pfi_initialize(void);
1527#ifdef __FreeBSD__
1528void pfi_cleanup(void);
1529#endif
1530void pfi_attach_clone(struct if_clone *);
1531void pfi_attach_ifnet(struct ifnet *);
1532void pfi_detach_ifnet(struct ifnet *);
1533struct pfi_kif *pfi_lookup_create(const char *);
1534struct pfi_kif *pfi_lookup_if(const char *);
1535int pfi_maybe_destroy(struct pfi_kif *);
1536struct pfi_kif *pfi_attach_rule(const char *);
1537void pfi_detach_rule(struct pfi_kif *);
1538void pfi_attach_state(struct pfi_kif *);
1539void pfi_detach_state(struct pfi_kif *);
1540int pfi_dynaddr_setup(struct pf_addr_wrap *, sa_family_t);
1541void pfi_dynaddr_copyout(struct pf_addr_wrap *);
1542void pfi_dynaddr_remove(struct pf_addr_wrap *);
1543void pfi_fill_oldstatus(struct pf_status *);
1544int pfi_clr_istats(const char *, int *, int);
1545int pfi_get_ifaces(const char *, struct pfi_if *, int *, int);
1546int pfi_match_addr(struct pfi_dynaddr *, struct pf_addr *,
1547 sa_family_t);
1548
1549extern struct pfi_statehead pfi_statehead;
1550
1331u_int16_t pf_tagname2tag(char *);
1332void pf_tag2tagname(u_int16_t, char *);
1333void pf_tag_unref(u_int16_t);
1334int pf_tag_packet(struct mbuf *, struct pf_tag *, int);
1551u_int16_t pf_tagname2tag(char *);
1552void pf_tag2tagname(u_int16_t, char *);
1553void pf_tag_unref(u_int16_t);
1554int pf_tag_packet(struct mbuf *, struct pf_tag *, int);
1555u_int32_t pf_qname2qid(char *);
1556void pf_qid2qname(u_int32_t, char *);
1557void pf_qid_unref(u_int32_t);
1335
1336extern struct pf_status pf_status;
1337
1338#ifdef __FreeBSD__
1339extern uma_zone_t pf_frent_pl, pf_frag_pl;
1340#else
1341extern struct pool pf_frent_pl, pf_frag_pl;
1342#endif

--- 64 unchanged lines hidden ---
1558
1559extern struct pf_status pf_status;
1560
1561#ifdef __FreeBSD__
1562extern uma_zone_t pf_frent_pl, pf_frag_pl;
1563#else
1564extern struct pool pf_frent_pl, pf_frag_pl;
1565#endif

--- 64 unchanged lines hidden ---