Import man pages for pf(4), pflog(4) and pfsync(4) devices.
authorSimon Schubert <corecode@dragonflybsd.org>
Thu, 24 Mar 2005 01:15:59 +0000 (01:15 +0000)
committerSimon Schubert <corecode@dragonflybsd.org>
Thu, 24 Mar 2005 01:15:59 +0000 (01:15 +0000)
These are not the latest versions, but those that seem to suit
best with our version of pf.

Reminded-By: "Alexander 'alxl' Lobachov" <alxl@alxl.info>
Obtained-From: OpenBSD

share/man/man4/Makefile
share/man/man4/pf.4 [new file with mode: 0644]
share/man/man4/pflog.4 [new file with mode: 0644]
share/man/man4/pfsync.4 [new file with mode: 0644]

index e7d81c1..8f04215 100644 (file)
@@ -1,6 +1,6 @@
 #      @(#)Makefile    8.1 (Berkeley) 6/18/93
 # $FreeBSD: src/share/man/man4/Makefile,v 1.83.2.66 2003/06/04 17:10:30 sam Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/18/93
 # $FreeBSD: src/share/man/man4/Makefile,v 1.83.2.66 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/share/man/man4/Makefile,v 1.17 2005/03/06 18:25:11 dillon Exp $
+# $DragonFly: src/share/man/man4/Makefile,v 1.18 2005/03/24 01:15:59 corecode Exp $
 
 MAN=   aac.4 \
        adv.4 \
 
 MAN=   aac.4 \
        adv.4 \
@@ -144,6 +144,9 @@ MAN=        aac.4 \
        pcm.4 \
        pcn.4 \
        pcvt.4 \
        pcm.4 \
        pcn.4 \
        pcvt.4 \
+       pf.4 \
+       pflog.4 \
+       pfsync.4 \
        pim.4 \
        polling.4 \
        ppbus.4 \
        pim.4 \
        polling.4 \
        ppbus.4 \
diff --git a/share/man/man4/pf.4 b/share/man/man4/pf.4
new file mode 100644 (file)
index 0000000..d6edf74
--- /dev/null
@@ -0,0 +1,839 @@
+.\"    $OpenBSD: pf.4,v 1.46 2004/02/19 21:29:51 cedric Exp $
+.\"    $DragonFly: src/share/man/man4/pf.4,v 1.1 2005/03/24 01:15:59 corecode Exp $
+.\"
+.\" Copyright (C) 2001, Kjell Wooding.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the project nor the names of its contributors
+.\"    may be used to endorse or promote products derived from this software
+.\"    without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.Dd June 24, 2001
+.Dt PF 4
+.Os
+.Sh NAME
+.Nm pf
+.Nd packet filter
+.Sh SYNOPSIS
+.Cd "device pf"
+.Sh DESCRIPTION
+Packet filtering takes place in the kernel.
+A pseudo-device,
+.Pa /dev/pf ,
+allows userland processes to control the
+behavior of the packet filter through an
+.Xr ioctl 2
+interface.
+There are commands to enable and disable the filter, load rulesets,
+add and remove individual rules or state table entries,
+and retrieve statistics.
+The most commonly used functions are covered by
+.Xr pfctl 8 .
+.Pp
+Manipulations like loading a ruleset that involve more than a single
+ioctl call require a so-called ticket, which prevents the occurrence of
+multiple concurrent manipulations.
+.Pp
+Fields of ioctl parameter structures that refer to packet data (like
+addresses and ports) are generally expected in network byte-order.
+.Sh FILES
+.Bl -tag -width /dev/pf -compact
+.It Pa /dev/pf
+packet filtering device.
+.El
+.Sh IOCTL INTERFACE
+pf supports the following
+.Xr ioctl 2
+commands:
+.Bl -tag -width xxxxxx
+.It Dv DIOCSTART
+Starts the packet filter.
+.It Dv DIOCSTOP
+Stops the packet filter.
+.It Dv DIOCSTARTALTQ
+Starts the ALTQ bandwidth control system.
+.It Dv DIOCSTOPALTQ
+Stops the ALTQ bandwidth control system.
+.It Dv DIOCBEGINADDRS  Fa "struct pfioc_pooladdr"
+.Bd -literal
+struct pfioc_pooladdr {
+       u_int32_t               action;
+       u_int32_t               ticket;
+       u_int32_t               nr;
+       u_int32_t               r_num;
+       u_int8_t                r_action;
+       u_int8_t                r_last;
+       u_int8_t                af;
+       char                    anchor[PF_ANCHOR_NAME_SIZE];
+       char                    ruleset[PF_RULESET_NAME_SIZE];
+       struct pf_pooladdr      addr;
+};
+.Ed
+.Pp
+Clears the buffer address pool
+and returns a
+.Va ticket
+for subsequent DIOCADDADDR, DIOCADDRULE and DIOCCHANGERULE calls.
+.It Dv DIOCADDADDR     Fa "struct pfioc_pooladdr"
+.Pp
+Adds pool address
+.Va addr
+to the buffer address pool to be used in the following
+DIOCADDRULE or DIOCCHANGERULE call.
+All other members of the structure are ignored.
+.It Dv DIOCADDRULE     Fa "struct pfioc_rule"
+.Bd -literal
+struct pfioc_rule {
+       u_int32_t       action;
+       u_int32_t       ticket;
+       u_int32_t       pool_ticket;
+       u_int32_t       nr;
+       char            anchor[PF_ANCHOR_NAME_SIZE];
+       char            ruleset[PF_RULESET_NAME_SIZE];
+       struct pf_rule  rule;
+};
+.Ed
+.Pp
+Adds
+.Va rule
+at the end of the inactive ruleset.
+Requires
+.Va ticket
+obtained through preceding DIOCXBEGIN call, and
+.Va pool_ticket
+obtained through DIOCBEGINADDRS call.
+DIOCADDADDR must also be called if any pool addresses are required.
+The optional
+.Va anchor
+and
+.Va ruleset
+names indicate the anchor and ruleset in which to append the rule.
+.Va nr
+and
+.Va action
+are ignored.
+.It Dv DIOCADDALTQ     Fa "struct pfioc_altq"
+Adds
+.Bd -literal
+struct pfioc_altq {
+       u_int32_t       action;
+       u_int32_t       ticket;
+       u_int32_t       nr;
+       struct pf_altq   altq;
+};
+.Ed
+.It Dv DIOCGETRULES    Fa "struct pfioc_rule"
+Returns
+.Va ticket
+for subsequent DIOCGETRULE calls and
+.Va nr
+of rules in the active ruleset.
+.It Dv DIOCGETRULE     Fa "struct pfioc_rule"
+Returns
+.Va rule
+number
+.Va nr
+using
+.Va ticket
+obtained through a preceding DIOCGETRULES call.
+.It Dv DIOCGETADDRS    Fa "struct pfioc_pooladdr"
+Returns
+.Va ticket
+for subsequent DIOCGETADDR calls and
+.Va nr
+of pool addresses in the rule specified with
+.Va r_action ,
+.Va r_num ,
+.Va anchor
+and
+.Va ruleset .
+.It Dv DIOCGETADDR     Fa "struct pfioc_pooladdr"
+Returns pool address
+.Va addr
+number
+.Va nr
+from the rule specified with
+.Va r_action ,
+.Va r_num ,
+.Va anchor
+and
+.Va ruleset
+using
+.Va ticket
+obtained through a preceding DIOCGETADDRS call.
+.It Dv DIOCGETALTQS    Fa "struct pfioc_altq"
+Returns
+.Va ticket
+for subsequent DIOCGETALTQ calls and
+.Va nr
+of queues in the active list.
+.It Dv DIOCGETALTQ     Fa "struct pfioc_altq"
+Returns
+.Va altq
+number
+.Va nr
+using
+.Va ticket
+obtained through a preceding DIOCGETALTQS call.
+.It Dv DIOCGETQSTATS   Fa "struct pfioc_qstats"
+Returns statistics on a queue.
+.Bd -literal
+struct pfioc_qstats {
+       u_int32_t        ticket;
+       u_int32_t        nr;
+       void            *buf;
+       int              nbytes;
+       u_int8_t         scheduler;
+};
+.Ed
+.Pp
+A pointer to a buffer of statistics
+.Va buf
+of length
+.Va nbytes
+for the queue specified by
+.Va nr .
+.It Dv DIOCADDSTATE    Fa "struct pfioc_state"
+Adds a state entry.
+.It Dv DIOCGETSTATE    Fa "struct pfioc_state"
+.Bd -literal
+struct pfioc_state {
+       u_int32_t        nr;
+       struct pf_state  state;
+};
+.Ed
+.Pp
+Extracts the entry with the specified number from the state table.
+.It Dv DIOCKILLSTATES  Fa "struct pfioc_state_kill"
+Removes matching entries from the state table.
+Returns the number of killed states in psk_af.
+.Bd -literal
+struct pfioc_state_kill {
+       int                     psk_af;
+       int                     psk_proto;
+       struct pf_rule_addr     psk_src;
+       struct pf_rule_addr     psk_dst;
+       char                    psk_ifname[IFNAMSIZ];
+};
+.Ed
+.It Dv DIOCCLRSTATES  Fa "struct pfioc_state_kill"
+Clears all states.
+It works like
+.Dv DIOCKILLSTATES ,
+but ignores the psk_af, psk_proto, psk_src and psk_dst fields of the
+.Fa pfioc_state_kill
+structure.
+.It Dv DIOCSETSTATUSIF Fa "struct pfioc_if"
+.Bd -literal
+struct pfioc_if {
+       char             ifname[IFNAMSIZ];
+};
+.Ed
+.Pp
+Specifies the interface for which statistics are accumulated.
+.It Dv DIOCGETSTATUS   Fa "struct pf_status"
+.Bd -literal
+struct pf_status {
+       u_int64_t       counters[PFRES_MAX];
+       u_int64_t       fcounters[FCNT_MAX];
+       u_int64_t       scounters[SCNT_MAX];
+       u_int64_t       pcounters[2][2][3];
+       u_int64_t       bcounters[2][2];
+       u_int32_t       running;
+       u_int32_t       states;
+       u_int32_t       src_nodes;
+       u_int32_t       since;
+       u_int32_t       debug;
+       char            ifname[IFNAMSIZ];
+};
+.Ed
+.Pp
+Gets the internal packet filter statistics.
+.It Dv DIOCCLRSTATUS
+Clears the internal packet filter statistics.
+.It Dv DIOCNATLOOK     Fa "struct pfioc_natlook"
+Looks up a state table entry by source and destination addresses and ports.
+.Bd -literal
+struct pfioc_natlook {
+       struct pf_addr   saddr;
+       struct pf_addr   daddr;
+       struct pf_addr   rsaddr;
+       struct pf_addr   rdaddr;
+       u_int16_t        sport;
+       u_int16_t        dport;
+       u_int16_t        rsport;
+       u_int16_t        rdport;
+       sa_family_t      af;
+       u_int8_t         proto;
+       u_int8_t         direction;
+};
+.Ed
+.It Dv DIOCSETDEBUG    Fa "u_int32_t"
+Sets the debug level.
+.Bd -literal
+enum   { PF_DEBUG_NONE=0, PF_DEBUG_URGENT=1, PF_DEBUG_MISC=2 };
+.Ed
+.It Dv DIOCGETSTATES   Fa "struct pfioc_states"
+.Bd -literal
+struct pfioc_states {
+       int     ps_len;
+       union {
+               caddr_t psu_buf;
+               struct pf_state *psu_states;
+       } ps_u;
+#define ps_buf         ps_u.psu_buf
+#define ps_states      ps_u.psu_states
+};
+.Ed
+.It Dv DIOCCHANGERULE  Fa "struct pfioc_rule"
+Adds or removes the
+.Va rule
+in the ruleset specified by
+.Va rule.action .
+.Bd -literal
+enum   { PF_CHANGE_ADD_HEAD=1, PF_CHANGE_ADD_TAIL=2,
+         PF_CHANGE_ADD_BEFORE=3, PF_CHANGE_ADD_AFTER=4,
+         PF_CHANGE_REMOVE=5, PF_CHANGE_GET_TICKET=6 };
+.Ed
+.Pp
+The type of operation to be performed is indicated by
+.Va action .
+.Pp
+.Va ticket
+must be set to the value obtained with PF_CHANGE_GET_TICKET
+for all actions except PF_CHANGE_GET_TICKET.
+.Va pool_ticket
+must be set to the value obtained with the DIOCBEGINADDRS call
+for all actions except PF_CHANGE_REMOVE and PF_CHANGE_GET_TICKET.
+.Pp
+.Va anchor
+and
+.Va ruleset
+indicate which anchor and ruleset the operation applies to.
+.Va nr
+indicates the rule number against which PF_CHANGE_ADD_BEFORE,
+PF_CHANGE_ADD_AFTER or PF_CHANGE_REMOVE actions are applied.
+.It Dv DIOCCHANGEADDR  Fa "struct pfioc_pooladdr"
+Adds or removes a pool address
+.Va addr
+from a rule specified with
+.Va r_action ,
+.Va r_num ,
+.Va anchor
+and
+.Va ruleset .
+.It Dv DIOCSETTIMEOUT  Fa "struct pfioc_tm"
+.Bd -literal
+struct pfioc_tm {
+       int              timeout;
+       int              seconds;
+};
+.Ed
+.It Dv DIOCGETTIMEOUT  Fa "struct pfioc_tm"
+.It Dv DIOCCLRRULECTRS
+Clear per-rule statistics.
+.It Dv DIOCSETLIMIT   Fa "struct pfioc_limit"
+Sets hard limits on the memory pools used by the packet filter.
+.Bd -literal
+struct pfioc_limit {
+       int             index;
+       unsigned        limit;
+};
+.Ed
+.It Dv DIOCGETLIMIT   Fa "struct pfioc_limit"
+.It Dv DIOCRCLRTABLES Fa "struct pfioc_table"
+Clear all tables.
+All the IOCTLs that manipulate radix tables
+use the same structure described below.
+For
+.Dv DIOCRCLRTABLES, pfrio_ndel contains on exit the number
+of tables deleted.
+.Bd -literal
+struct pfioc_table {
+        struct pfr_table         pfrio_table;
+        void                    *pfrio_buffer;
+        int                      pfrio_esize;
+        int                      pfrio_size;
+        int                      pfrio_size2;
+        int                      pfrio_nadd;
+        int                      pfrio_ndel;
+        int                      pfrio_nchange;
+        int                      pfrio_flags;
+        int                      pfrio_ticket;
+};
+#define pfrio_exists    pfrio_nadd
+#define pfrio_nzero     pfrio_nadd
+#define pfrio_nmatch    pfrio_nadd
+#define pfrio_naddr     pfrio_size2
+#define pfrio_setflag   pfrio_size2
+#define pfrio_clrflag   pfrio_nadd
+.Ed
+.It Dv DIOCRADDTABLES Fa "struct pfioc_table"
+Creates one or more tables.
+On entry, pfrio_buffer[pfrio_size] contains a table of pfr_table structures.
+On exit, pfrio_nadd contains the number of tables effectively created.
+.Bd -literal
+struct pfr_table {
+        char                     pfrt_anchor[PF_ANCHOR_NAME_SIZE];
+        char                     pfrt_ruleset[PF_RULESET_NAME_SIZE];
+        char                     pfrt_name[PF_TABLE_NAME_SIZE];
+        u_int32_t                pfrt_flags;
+        u_int8_t                 pfrt_fback;
+};
+.Ed
+.It Dv DIOCRDELTABLES Fa "struct pfioc_table"
+Deletes one or more tables.
+On entry, pfrio_buffer[pfrio_size] contains a table of pfr_table structures.
+On exit, pfrio_nadd contains the number of tables effectively deleted.
+.It Dv DIOCRGETTABLES Fa "struct pfioc_table"
+Get the list of all tables.
+On entry, pfrio_buffer[pfrio_size] contains a valid writeable buffer for
+pfr_table structures.
+On exit, pfrio_size contains the number of tables written into the buffer.
+If the buffer is too small, the kernel does not store anything but just
+returns the required buffer size, without error.
+.It Dv DIOCRGETTSTATS Fa "struct pfioc_table"
+Like
+.Dv DIOCRGETTABLES ,
+but returns an array of pfr_tstats structures.
+.Bd -literal
+struct pfr_tstats {
+        struct pfr_table pfrts_t;
+        u_int64_t        pfrts_packets
+                             [PFR_DIR_MAX][PFR_OP_TABLE_MAX];
+        u_int64_t        pfrts_bytes
+                             [PFR_DIR_MAX][PFR_OP_TABLE_MAX];
+        u_int64_t        pfrts_match;
+        u_int64_t        pfrts_nomatch;
+        long             pfrts_tzero;
+        int              pfrts_cnt;
+        int              pfrts_refcnt[PFR_REFCNT_MAX];
+};
+#define pfrts_name      pfrts_t.pfrt_name
+#define pfrts_flags     pfrts_t.pfrt_flags
+.Ed
+.It Dv DIOCRCLRTSTATS Fa "struct pfioc_table"
+Clears the statistics of one or more tables.
+On entry, pfrio_buffer[pfrio_size] contains a table of pfr_table structures.
+On exit, pfrio_nzero contains the number of tables effectively cleared.
+.It Dv DIOCRCLRADDRS Fa "struct pfioc_table"
+Clear all addresses in a table.
+On entry, pfrio_table contains the table to clear.
+On exit, pfrio_ndel contains the number of addresses removed.
+.It Dv DIOCRADDADDRS Fa "struct pfioc_table"
+Add one or more addresses to a table.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains the list of pfr_addr structures to add.
+On exit, pfrio_nadd contains the number of addresses effectively added.
+.Bd -literal
+struct pfr_addr {
+        union {
+                struct in_addr   _pfra_ip4addr;
+                struct in6_addr  _pfra_ip6addr;
+        }                pfra_u;
+        u_int8_t         pfra_af;
+        u_int8_t         pfra_net;
+        u_int8_t         pfra_not;
+        u_int8_t         pfra_fback;
+};
+#define pfra_ip4addr    pfra_u._pfra_ip4addr
+#define pfra_ip6addr    pfra_u._pfra_ip6addr
+.Ed
+.It Dv DIOCRDELADDRS Fa "struct pfioc_table"
+Delete one or more addresses from a table.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains the list of pfr_addr structures to delete.
+On exit, pfrio_ndel contains the number of addresses effectively deleted.
+.It Dv DIOCRSETADDRS Fa "struct pfioc_table"
+Replace the content of a table by a new address list.
+This is the most complicated command, which uses all the structure members.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains the new list of pfr_addr structures.
+In addition to that, if size2 is nonzero, pfrio_buffer[pfrio_size..pfrio_size2]
+must be a writeable buffer, into which the kernel can copy the addresses that
+have been deleted during the replace operation.
+On exit, pfrio_ndel, pfrio_nadd and pfrio_nchange contain the number of
+addresses deleted, added and changed by the kernel.
+If pfrio_size2 was set on
+entry, pfrio_size2 will point to the size of the buffer used, exactly like
+.Dv DIOCRGETADDRS .
+.It Dv DIOCRGETADDRS Fa "struct pfioc_table"
+Get all the addresses of a table.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains a valid writeable buffer for pfr_addr structures.
+On exit, pfrio_size contains the number of addresses written into the buffer.
+If the buffer was too small, the kernel does not store anything but just
+return the required buffer size, without returning an error.
+.It Dv DIOCRGETASTATS Fa "struct pfioc_table"
+Like
+.Dv DIOCRGETADDRS ,
+but returns an array of pfr_astats structures.
+.Bd -literal
+struct pfr_astats {
+        struct pfr_addr  pfras_a;
+        u_int64_t        pfras_packets
+                             [PFR_DIR_MAX][PFR_OP_ADDR_MAX];
+        u_int64_t        pfras_bytes
+                             [PFR_DIR_MAX][PFR_OP_ADDR_MAX];
+        long             pfras_tzero;
+};
+.Ed
+.It Dv DIOCRCLRASTATS Fa "struct pfioc_table"
+Clears the statistics of one or more addresses.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains a table of pfr_addr structures to clear.
+On exit, pfrio_nzero contains the number of addresses effectively cleared.
+.It Dv DIOCRTSTADDRS Fa "struct pfioc_table"
+Test if the given addresses match a table.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains a table of pfr_addr structures to test.
+On exit, the kernel updates the pfr_addr table by setting the pfra_fback
+member appropriately.
+.It Dv DIOCRSETTFLAGS Fa "struct pfioc_table"
+Change the
+.Va const
+or
+.Va persist
+flag of a table.
+On entry, pfrio_buffer[pfrio_size] contains a table of pfr_table structures,
+and pfrio_setflag contains the flags to add, while pfrio_clrflag contains the
+flags to remove.
+On exit, pfrio_nchange and pfrio_ndel contain the number of tables altered
+or deleted by the kernel.
+Yes, tables can be deleted if one removes the
+.Va persist
+flag of an unreferenced table.
+.It Dv DIOCRINADEFINE Fa "struct pfioc_table"
+Defines a table in the inactive set.
+On entry, pfrio_table contains the table id and pfrio_buffer[pfrio_size]
+contains the list of pfr_addr structures to put in the table.
+A valid ticket must also be supplied to pfrio_ticket.
+On exit, pfrio_nadd contains 0 if the table was already defined in the
+inactive list, or 1 if a new table has been created.
+pfrio_naddr contains the number of addresses effectively put in the table.
+.It Dv DIOCXBEGIN Fa "struct pfioc_trans"
+.Bd -literal
+#define PF_RULESET_ALTQ         (PF_RULESET_MAX)
+#define PF_RULESET_TABLE        (PF_RULESET_MAX+1)
+struct pfioc_trans {
+        int              size;  /* number of elements */
+        int              esize; /* size of each element in bytes */
+        struct pfioc_trans_e {
+                int             rs_num;
+                char            anchor[PF_ANCHOR_NAME_SIZE];
+                char            ruleset[PF_RULESET_NAME_SIZE];
+                u_int32_t       ticket;
+        }               *array;
+};
+.Ed
+.Pp
+Clears all the inactive rulesets specified in the
+.Fa "struct pfioc_trans_e"
+array.
+For each ruleset, a ticket is returned for subsequent "add rule" IOCTLs,
+as well as for the
+.Dv DIOCXCOMMIT
+and
+.Dv DIOCXROLLBACK
+calls.
+.It Dv DIOCXCOMMIT Fa "struct pfioc_trans"
+Atomically switch a vector of inactive rulesets to the active rulesets.
+Implemented as a standard 2-phase commit, which will either fail for all
+rulesets or completely succeed.
+All tickets need to be valid.
+Returns
+.Dv EBUSY
+if a concurrent process is trying to update some of the same rulesets
+concurrently.
+.It Dv DIOCXROLLBACK Fa "struct pfioc_trans"
+Clean up the kernel by undoing all changes that have taken place on the
+inactive rulesets since the last
+.Dv DIOCXBEGIN .
+.Dv DIOCXROLLBACK
+will silently ignore rulesets for which the ticket is invalid.
+.It Dv DIOCFPFLUSH
+Flush the passive OS fingerprint table.
+.It Dv DIOCFPADD Fa "struct pf_osfp_ioctl"
+.Bd -literal
+struct pf_osfp_ioctl {
+       struct pf_osfp_entry {
+               SLIST_ENTRY(pf_osfp_entry) fp_entry;
+               pf_osfp_t               fp_os;
+               char                    fp_class_nm[PF_OSFP_LEN];
+               char                    fp_version_nm[PF_OSFP_LEN];
+               char                    fp_subtype_nm[PF_OSFP_LEN];
+       }                       fp_os;
+       u_int16_t               fp_mss;
+       u_int16_t               fp_wsize;
+       u_int16_t               fp_psize;
+       u_int8_t                fp_ttl;
+       u_int8_t                fp_wscale;
+       u_int8_t                fp_flags;
+       int                     fp_getnum;
+};
+.Ed
+.Pp
+Add a passive OS fingerprint to the table.
+Set
+.Va fp_os.fp_os
+to the packed fingerprint,
+.Va fp_os.fp_class_nm
+to the name of the class (Linux, Windows, etc),
+.Va fp_os.fp_version_nm
+to the name of the version (NT, 95, 98), and
+.Va fp_os.fp_subtype_nm
+to the name of the subtype or patchlevel.
+The members
+.Va fp_mss ,
+.Va fp_wsize ,
+.Va fp_psize ,
+.Va fp_ttl ,
+and
+.Va fp_wscale
+are set to the TCP MSS, the TCP window size, the IP length and the IP TTL of
+the TCP SYN packet respectively.
+The
+.Va fp_flags
+member is filled according to the net/pfvar.h include file PF_OSFP_* defines.
+The
+.Va fp_getnum
+is not used with this ioctl.
+.Pp
+The structure's slack space must be zeroed for correct operation; memset
+the whole structure to zero before filling and sending to the kernel.
+.It Dv DIOCFPGET Fa "struct pf_osfp_ioctl"
+.Bd -literal
+struct pf_osfp_ioctl {
+       struct pf_osfp_entry {
+               SLIST_ENTRY(pf_osfp_entry) fp_entry;
+               pf_osfp_t               fp_os;
+               char                    fp_class_nm[PF_OSFP_LEN];
+               char                    fp_version_nm[PF_OSFP_LEN];
+               char                    fp_subtype_nm[PF_OSFP_LEN];
+       }                       fp_os;
+       u_int16_t               fp_mss;
+       u_int16_t               fp_wsize;
+       u_int16_t               fp_psize;
+       u_int8_t                fp_ttl;
+       u_int8_t                fp_wscale;
+       u_int8_t                fp_flags;
+       int                     fp_getnum;
+};
+.Ed
+.Pp
+Get the passive OS fingerprint number
+.Va fp_getnum
+from the kernel's fingerprint list.
+The rest of the structure members will come back filled.
+Get the whole list by repeatedly incrementing the
+.Va fp_getnum
+number until the ioctl returns EBUSY.
+.It Dv DIOCGETSRCNODES Fa "struct pfioc_src_nodes"
+.Bd -literal
+struct pfioc_src_nodes {
+        int     psn_len;
+        union {
+                caddr_t          psu_buf;
+                struct pf_src_node      *psu_src_nodes;
+        } psn_u;
+#define psn_buf         psn_u.psu_buf
+#define psn_src_nodes   psn_u.psu_src_nodes
+};
+.Ed
+.Pp
+Get the list of source nodes kept by the
+.Ar sticky-address
+and
+.Ar source-track
+options.
+The ioctl must be called once with
+.Va psn_len
+set to 0.
+If the ioctl returns without error,
+.Va psn_len
+will be set to the size of the buffer required to hold all the
+.Va pf_src_node
+structures held in the table.
+A buffer of this size should then be allocated, and a pointer to this buffer
+placed in
+.Va psn_buf .
+The ioctl must then be called again to fill this buffer with the actual
+source node data.
+After the ioctl call
+.Va psn_len
+will be set to the length of the buffer actually used.
+.It Dv DIOCCLRSRCNODES Fa "struct pfioc_table"
+Clear the tree of source tracking nodes.
+.It Dv DIOCIGETIFACES Fa "struct pfioc_iface"
+Gets the list of interfaces and interface drivers known to
+.Nm .
+All the IOCTLs that manipulate interfaces
+use the same structure described below:
+.Bd -literal
+struct pfioc_iface {
+        char                     pfiio_name[IFNAMSIZ];
+        void                    *pfiio_buffer;
+        int                      pfiio_esize;
+        int                      pfiio_size;
+        int                      pfiio_nzero;
+        int                      pfiio_flags;
+};
+
+#define PFI_FLAG_GROUP     0x0001  /* gets groups of interfaces */
+#define PFI_FLAG_INSTANCE  0x0002  /* gets single interfaces */
+#define PFI_FLAG_ALLMASK   0x0003
+.Ed
+.Pp
+If not empty,
+.Va pfiio_name
+can be used to restrict the search to a specific interface or driver.
+.Va pfiio_buffer[pfiio_size]
+is the user-supplied buffer for returning the data.
+On entry,
+.Va pfiio_size
+represents the number of
+.Va pfi_if
+entries that can fit into the buffer.
+The kernel will replace this value by the real number of entries it wants
+to return.
+.Va pfiio_esize
+should be set to sizeof(struct pfi_if).
+.Va pfiio_flags
+should be set to
+.Dv PFI_FLAG_GROUP , PFI_FLAG_INSTANCE ,
+or both to tell the kernel to return a group of interfaces
+(drivers, like "fxp"), real interface instances (like "fxp1") or both.
+The data is returned in the
+.Va pfi_if
+structure described below:
+.Bd -literal
+struct pfi_if {
+        char                             pfif_name[IFNAMSIZ];
+        u_int64_t                        pfif_packets[2][2][2];
+        u_int64_t                        pfif_bytes[2][2][2];
+        u_int64_t                        pfif_addcnt;
+        u_int64_t                        pfif_delcnt;
+        long                             pfif_tzero;
+        int                              pfif_states;
+        int                              pfif_rules;
+        int                              pfif_flags;
+};
+
+#define PFI_IFLAG_GROUP         0x0001  /* group of interfaces */
+#define PFI_IFLAG_INSTANCE      0x0002  /* single instance */
+#define PFI_IFLAG_CLONABLE      0x0010  /* clonable group */
+#define PFI_IFLAG_DYNAMIC       0x0020  /* dynamic group */
+#define PFI_IFLAG_ATTACHED      0x0040  /* interface attached */
+#define PFI_IFLAG_REFERENCED    0x0080  /* referenced by rules */
+.Ed
+.It Dv DIOCICLRISTATS Fa "struct pfioc_iface"
+Clear the statistics counters of one or more interfaces.
+.Va pfiio_name
+and
+.Va pfrio_flags
+can be used to select which interfaces need to be cleared.
+The filtering process is the same as for
+.Dv DIOCIGETIFACES .
+.Va pfiio_nzero
+will be set by the kernel to the number of interfaces and drivers
+that have been cleared.
+.El
+.Sh EXAMPLES
+The following example demonstrates how to use the DIOCNATLOOK command
+to find the internal host/port of a NATed connection.
+.Bd -literal
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <sys/fcntl.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <net/pfvar.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+u_int32_t
+read_address(const char *s)
+{
+       int a, b, c, d;
+
+       sscanf(s, "%i.%i.%i.%i", &a, &b, &c, &d);
+       return htonl(a << 24 | b << 16 | c << 8 | d);
+}
+
+void
+print_address(u_int32_t a)
+{
+       a = ntohl(a);
+       printf("%d.%d.%d.%d", a >> 24 & 255, a >> 16 & 255,
+           a >> 8 & 255, a & 255);
+}
+
+int
+main(int argc, char *argv[])
+{
+       struct pfioc_natlook nl;
+       int dev;
+
+       if (argc != 5) {
+               printf("%s <gwy addr> <gwy port> <ext addr> <ext port>\\n",
+                   argv[0]);
+               return 1;
+       }
+
+       dev = open("/dev/pf", O_RDWR);
+       if (dev == -1)
+               err(1, "open(\\"/dev/pf\\") failed");
+
+       memset(&nl, 0, sizeof(struct pfioc_natlook));
+       nl.saddr.v4.s_addr      = read_address(argv[1]);
+       nl.sport                = htons(atoi(argv[2]));
+       nl.daddr.v4.s_addr      = read_address(argv[3]);
+       nl.dport                = htons(atoi(argv[4]));
+       nl.af                   = AF_INET;
+       nl.proto                = IPPROTO_TCP;
+       nl.direction            = PF_IN;
+
+       if (ioctl(dev, DIOCNATLOOK, &nl))
+               err(1, "DIOCNATLOOK");
+
+       printf("internal host ");
+       print_address(nl.rsaddr.v4.s_addr);
+       printf(":%u\\n", ntohs(nl.rsport));
+       return 0;
+}
+.Ed
+.Sh SEE ALSO
+.Xr ioctl 2 ,
+.Xr bridge 4 ,
+.Xr pflog 4 ,
+.Xr pfsync 4 ,
+.Xr pfctl 8
+.Sh HISTORY
+The
+.Nm
+packet filtering mechanism first appeared in
+.Ox 3.0
+and was imported into
+.Dx 1.1
+by Devon H. O'Dell and Simon Schubert.
diff --git a/share/man/man4/pflog.4 b/share/man/man4/pflog.4
new file mode 100644 (file)
index 0000000..dd337a8
--- /dev/null
@@ -0,0 +1,93 @@
+.\"    $OpenBSD: pflog.4,v 1.7 2004/03/21 19:47:59 miod Exp $
+.\"    $DragonFly: src/share/man/man4/pflog.4,v 1.1 2005/03/24 01:15:59 corecode Exp $
+.\"
+.\" Copyright (c) 2001 Tobias Weingartner
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd December 10, 2001
+.Dt PFLOG 4
+.Os
+.Sh NAME
+.Nm pflog
+.Nd packet filter logging interface
+.Sh SYNOPSIS
+.Cd "device pflog"
+.Sh DESCRIPTION
+The
+.Nm pflog
+interface is a pseudo-device which makes visible all packets logged by
+the packet filter,
+.Xr pf 4 .
+Logged packets can easily be monitored in real
+time by invoking
+.Xr tcpdump 8
+on the
+.Nm
+interface, or stored to disk using
+.Xr pflogd 8 .
+.Pp
+Each packet retrieved on this interface has a header associated
+with it of length
+.Dv PFLOG_HDRLEN .
+This header documents the address family, interface name, rule
+number, reason, action, and direction of the packet that was logged.
+This structure, defined in
+.Aq Pa net/if_pflog.h
+looks like
+.Bd -literal -offset indent
+struct pfloghdr {
+       u_int8_t        length;
+       sa_family_t     af;
+       u_int8_t        action;
+       u_int8_t        reason;
+       char            ifname[IFNAMSIZ];
+       char            ruleset[PF_RULESET_NAME_SIZE];
+       u_int32_t       rulenr;
+       u_int32_t       subrulenr;
+       u_int8_t        dir;
+       u_int8_t        pad[3];
+};
+.Ed
+.Sh EXAMPLES
+.Bd -literal -offset indent
+# ifconfig pflog0 up
+# tcpdump -n -e -ttt -i pflog0
+.Ed
+.Sh SEE ALSO
+.Xr inet 4 ,
+.Xr inet6 4 ,
+.Xr netintro 4 ,
+.Xr pf 4 ,
+.Xr ifconfig 8 ,
+.Xr pflogd 8 ,
+.Xr tcpdump 8
+.Sh HISTORY
+The
+.Nm
+device first appeared in
+.Ox 3.0
+and was then integrated into
+.Dx 1.1
+by Devon H. O'Dell and Simon Schubert.
+.\" .Sh BUGS
+.\" Anything here?
diff --git a/share/man/man4/pfsync.4 b/share/man/man4/pfsync.4
new file mode 100644 (file)
index 0000000..9d64251
--- /dev/null
@@ -0,0 +1,149 @@
+.\"    $OpenBSD: pfsync.4,v 1.14 2004/03/21 19:47:59 miod Exp $
+.\"    $DragonFly: src/share/man/man4/pfsync.4,v 1.1 2005/03/24 01:15:59 corecode Exp $
+.\"
+.\" Copyright (c) 2002 Michael Shalayeff
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF MIND,
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd November 29, 2002
+.Dt PFSYNC 4
+.Os
+.Sh NAME
+.Nm pfsync
+.Nd packet filter states table logging interface
+.Sh SYNOPSIS
+.Cd "device pfsync"
+.Sh DESCRIPTION
+The
+.Nm
+interface is a pseudo-device which exposes certain changes to the state
+table used by
+.Xr pf 4 .
+State changes can be viewed by invoking
+.Xr tcpdump 8
+on the
+.Nm
+interface.
+If configured with a physical synchronisation interface,
+.Nm
+will also send state changes out on that interface using IP multicast,
+and insert state changes received on that interface from other systems
+into the state table.
+.Pp
+By default, all local changes to the state table are exposed via
+.Nm .
+However, state changes from packets received by
+.Nm
+over the network are not rebroadcast.
+States created by a rule marked with the
+.Ar no-sync
+keyword are omitted from the
+.Nm
+interface (see
+.Xr pf.conf 5
+for details).
+.Pp
+The
+.Nm
+interface will attempt to collapse multiple updates of the same
+state into one message where possible.
+The maximum number of times this can be done before the update is sent out
+is controlled by the
+.Ar maxupd
+to ifconfig.
+(see
+.Xr ifconfig 8
+and the example below for more details)
+.Pp
+Each packet retrieved on this interface has a header associated
+with it of length
+.Dv PFSYNC_HDRLEN .
+The header indicates the version of the protocol, address family,
+action taken on the following states and the number of state
+table entries attached in this packet.
+This structure, defined in
+.Aq Pa net/if_pfsync.h
+looks like:
+.Bd -literal -offset indent
+struct pfsync_header {
+       u_int8_t version;
+       u_int8_t af;
+       u_int8_t action;
+       u_int8_t count;
+};
+.Ed
+.Sh NETWORK SYNCHRONISATION
+States can be synchronised between two or more firewalls using this
+interface, by specifying a synchronisation interface using
+.Xr ifconfig 8 .
+For example, the following command sets fxp0 as the synchronisation
+interface.
+.Bd -literal -offset indent
+# ifconfig pfsync0 syncif fxp0
+.Ed
+.Pp
+State change messages are sent out on the synchronisation
+interface using IP multicast packets.
+The protocol is IP protocol 240, PFSYNC, and the multicast group
+used is 224.0.0.240.
+.Pp
+It is important that the synchronisation interface be on a trusted
+network as there is no authentication on the protocol and it would
+be trivial to spoof packets which create states, bypassing the pf ruleset.
+Ideally, this is a network dedicated to pfsync messages,
+i.e. a crossover cable between two firewalls.
+.Pp
+There is a one-to-one correspondence between packets seen by
+.Xr bpf 4
+on the
+.Nm
+interface, and packets sent out on the synchronisation interface, i.e.\&
+a packet with 4 state deletion messages on
+.Nm
+means that the same 4 deletions were sent out on the synchronisation
+interface.
+However, the actual packet contents may differ as the messages
+sent over the network are "compressed" where possible, containing
+only the necessary information.
+.Sh EXAMPLES
+.Bd -literal -offset indent
+# ifconfig pfsync0 up syncif fxp0 maxupd 64
+# tcpdump -s1500 -evtni pfsync0
+.Ed
+.Sh SEE ALSO
+.Xr bpf 4 ,
+.Xr inet 4 ,
+.Xr inet6 4 ,
+.Xr netintro 4 ,
+.Xr pf 4 ,
+.Xr pf.conf 5 ,
+.Xr protocols 5 ,
+.Xr ifconfig 8 ,
+.Xr tcpdump 8
+.Sh HISTORY
+The
+.Nm
+device first appeared in
+.Ox 3.3
+and was imported into
+.Dx 1.1
+by Devon H. O'Dell and Simon Schubert.