On Thu, Jul 21, 2022 at 10:25:09PM +0100, Jason McIntyre wrote:
...
> it looks like the "set limit" text in pf.conf(5) might need some small
> adjustments:
> 
> - as well as the "anchors" limit, it does not document "pktdelay-pkts"
> 
> - for entries where defaults are not documented, it is not clear whether
>   this is an omission or they are just not limited by default (in the
>   same way that things like table numbers are limited). those affected
>   seem to be src-nodes and pktdelay-pkts

All of these limits have defaults that are sometimes set in the
kernel or with the first pfctl invocation during boot:

/usr/src/sbin/pfctl.c:
1726         pf->limit[PF_LIMIT_SRC_NODES] = PFSNODE_HIWAT;
...
1729         pf->limit[PF_LIMIT_PKTDELAY_PKTS] = PF_PKTDELAY_MAXPKTS;

/usr/include/net/pfvar.h:
#define PFSNODE_HIWAT           10000   /* default source node table size */
...
#define PF_PKTDELAY_MAXPKTS     10000   /* max # of pkts held in delay queue */


> - the two entries for "table-entries" are confusing. it seems to be that
>   machines with less than a specific amount of memory have their entries
>   limited to the value of _SMALL. but the way it's documented makes that
>   unclear. i'm not sure whether the reader needs the names such as
>   PFSTATE_HIWAT. i think it's just confusing to list it this way. we
>   should probably have one item, table-entries, and say what the default
>   is normally, and what it is for lesser memory setups.

/usr/src/sbin/pfctl.c:
1737         if (mem <= 100*1024*1024)
1738                 pf->limit[PF_LIMIT_TABLE_ENTRIES] = PFR_KENTRY_HIWAT_SMALL;

If the machine has less than 100MB physical memory, ..._SMALL is set for
PF_LIMIT_TABLE_ENTRIES.

> - i think the whole section should just be reduced to a simple list of
>   what can be set, and any default values.
> 
> here's a stab at tidying up. i've inserted a couple of XXX for where i
> came unstuck.
> 
> thoughts? help?

I appreciate where this is going.

mbuhl

> jmc
> 
> Index: pf.conf.5
> ===================================================================
> RCS file: /cvs/src/share/man/man5/pf.conf.5,v
> retrieving revision 1.596
> diff -u -p -r1.596 pf.conf.5
> --- pf.conf.5 27 May 2022 15:45:02 -0000      1.596
> +++ pf.conf.5 21 Jul 2022 21:22:08 -0000
> @@ -1236,65 +1236,56 @@ See
>  .Xr pool 9
>  for an explanation of memory pools.
>  .Pp
> -For example,
> -to set the maximum number of entries in the memory pool used by state table
> -entries (generated by
> +Limits can be set on the following:
> +.Bl -tag -width pktdelay_pkts
> +.It Cm states
> +Set the maximum number of entries in the memory pool used by state table
> +entries (those generated by
>  .Ic pass
>  rules which do not specify
> -.Cm no state )
> -to 20000:
> -.Pp
> -.Dl set limit states 20000
> -.Pp
> -To set the maximum number of entries in the memory pool used for fragment
> -reassembly to 2000:
> -.Pp
> -.Dl set limit frags 2000
> -.Pp
> -This maximum may not exceed, and should be well below, the maximum number
> -of mbuf clusters
> -.Pq sysctl kern.maxclusters
> -in the system.
> -.Pp
> -To set the maximum number of entries in the memory pool used for tracking
> +.Cm no state ) .
> +The default is 100000.
> +.It Cm src-nodes
> +Set the maximum number of entries in the memory pool used for tracking
>  source IP addresses (generated by the
>  .Cm sticky-address
>  and
>  .Cm src.track
> -options) to 2000:
> -.Pp
> -.Dl set limit src-nodes 2000
> -.Pp
> -To set limits on the memory pools used by tables:
> -.Bd -literal -offset indent
> -set limit tables 1000
> -set limit table-entries 100000
> -.Ed
> -.Pp
> -The first limits the number of tables that can exist to 1000.
> -The second limits the overall number of addresses that can be stored
> -in tables to 100000.
> -.Pp
> -Various limits can be combined on a single line:
> -.Bd -literal -offset indent
> -set limit { states 20000, frags 2000, src-nodes 2000 }
> -.Ed
> -.Pp
> -.Xr pf 4
> -has the following defaults:
> -.Bl -column table-entries PFR_KENTRY_HIWAT_SMALL platform_dependent
> -.It states Ta Dv PFSTATE_HIWAT Ta Pq 100000
> -.It tables Ta Dv PFR_KTABLE_HIWAT Ta Pq 1000
> -.It table-entries Ta Dv PFR_KENTRY_HIWAT Ta Pq 200000
> -.It table-entries Ta Dv PFR_KENTRY_HIWAT_SMALL Ta Pq 100000
> -.It frags Ta Dv NMBCLUSTERS Ns /32 Ta Pq platform dependent
> -.El
> -.Pp
> +options).
> +The default is
> +.\" XXX
> +.It Cm frags
> +Set the maximum number of entries in the memory pool used for fragment
> +reassembly.
> +The maximum may not exceed, and should be well below,
> +the maximum number of mbuf clusters
> +.Pq sysctl kern.maxclusters
> +in the system.
> +The default is NMBCLUSTERS/32.
>  .Dv NMBCLUSTERS
>  defines the total number of packets which can exist in-system at any one 
> time.
>  Refer to
>  .In machine/param.h
>  for the platform-specific value.
> +.It Cm tables
> +Set the number of tables that can exist.
> +The default is 1000.
> +.It Cm table-entries
> +Set the number of addresses that can be stored in tables.
> +The default is 200000, or 100000 on machines with
> +lower amounts of physical memory.
> +.\" XXX how much memory triggers _SMALL?
> +.It Cm pktdelay_pkts
> +.\" XXX what is this?
> +.It Cm anchors
> +Set the number of anchors that can exist.
> +The default is 512.
> +.El
> +.Pp
> +Multiple limits can be combined on a single line:
> +.Bd -literal -offset indent
> +set limit { states 20000, frags 2000, src-nodes 2000 }
> +.Ed
>  .It Ic set Cm loginterface Ar interface | Cm none
>  Enable collection of packet and byte count statistics for the given
>  interface or interface group.
> 

Reply via email to