I think this is a good enough start, as-is.  A big improvement.

Further iterations can refine the few funny sentences where tcpdump and
pcap-filter diverge.  I'm not worried about them, they just come off
as strange wording, or irrelevancies.

Jason McIntyre <j...@kerhand.co.uk> wrote:

> On Sun, Sep 05, 2021 at 04:43:34PM +0200, Denis Fondras wrote:
> > Le Sat, Sep 04, 2021 at 09:57:10PM +0100, Jason McIntyre a ?crit :
> > > the diff looks ok to me. but run any doc changes through "mandoc
> > > -Tlint", and look at any issues your diff may have introduced. in this
> > > case it's just trailing whitespace, but it's super helpful to check your
> > > work.
> > > 
> > 
> > Thank you Jason. There is still a warning in tcpdump.8.
> > 
> > Here is a new version including changes to pcap-filter.5 and tcpdump.8
> > I did not change the examples though as tcpdump examples are broader than
> > filters.
> > 
> 
> hi.
> 
> the warning in tcpdump is fine.
> 
> the diff reads ok to me, but let's wait for a technical ok ;)
> 
> jmc
> 
> > Index: lib/libpcap/pcap-filter.5
> > ===================================================================
> > RCS file: /cvs/src/lib/libpcap/pcap-filter.5,v
> > retrieving revision 1.9
> > diff -u -p -r1.9 pcap-filter.5
> > --- lib/libpcap/pcap-filter.5       2 Sep 2021 10:59:13 -0000       1.9
> > +++ lib/libpcap/pcap-filter.5       5 Sep 2021 13:35:41 -0000
> > @@ -40,27 +40,31 @@ or
> >  .Pp
> >  The filter expression consists of one or more
> >  .Em primitives .
> > -Primitives usually consist of an ID (name or number)
> > +Primitives usually consist of an
> > +.Ar id
> > +.Pq name or number
> >  preceded by one or more qualifiers.
> >  There are three different kinds of qualifier:
> >  .Bl -tag -width "proto"
> > -.It type
> > -Type qualifiers say what kind of thing the ID name or number refers to.
> > +.It Ar type
> > +Specify which kind of address component the
> > +.Ar id
> > +name or number refers to.
> >  Possible types are
> >  .Cm host ,
> > -.Cm net ,
> > +.Cm net
> >  and
> >  .Cm port .
> > -For example,
> > +E.g.,
> >  .Dq host foo ,
> >  .Dq net 128.3 ,
> > -and
> >  .Dq port 20 .
> >  If there is no type qualifier,
> >  .Cm host
> >  is assumed.
> > -.It dir
> > -Dir qualifiers specify a particular transfer direction to and/or from an 
> > ID.
> > +.It Ar dir
> > +Specify a particular transfer direction to and/or from
> > +.Ar id .
> >  Possible directions are
> >  .Cm src ,
> >  .Cm dst ,
> > @@ -73,11 +77,13 @@ Possible directions are
> >  .Cm addr3 ,
> >  and
> >  .Cm addr4 .
> > -For example,
> > -.Cm src foo ,
> > -.Cm dst net 128.3 ,
> > -.Cm src or dst port ftp-data .
> > -If there is no dir qualifier,
> > +E.g.,
> > +.Dq src foo ,
> > +.Dq dst net 128.3 ,
> > +.Dq src or dst port ftp-data .
> > +If there is no
> > +.Ar dir
> > +qualifier,
> >  .Cm src or dst
> >  is assumed.
> >  The
> > @@ -89,57 +95,85 @@ The
> >  and
> >  .Cm addr4
> >  qualifiers are only valid for IEEE 802.11 Wireless LAN link layers.
> > -For some link layers, such as SLIP and the "cooked" Linux capture mode
> > -used for the "any" device and for some other device types, the
> > +For null link layers (i.e., point-to-point protocols such as SLIP
> > +.Pq Serial Line Internet Protocol
> > +or the
> > +.Xr pflog 4
> > +header), the
> >  .Cm inbound
> >  and
> >  .Cm outbound
> >  qualifiers can be used to specify a desired direction.
> > -.It proto
> > -Proto qualifiers restrict the match to a particular protocol.
> > -Possible
> > -protos are:
> > +.It Ar proto
> > +Restrict the match to a particular protocol.
> > +Possible protocols are:
> > +.Cm ah ,
> > +.Cm arp ,
> > +.Cm atalk ,
> > +.Cm decnet ,
> > +.Cm esp ,
> >  .Cm ether ,
> >  .Cm fddi ,
> > -.Cm tr ,
> > -.Cm wlan ,
> > +.Cm icmp ,
> > +.Cm icmp6 ,
> > +.Cm igmp ,
> > +.Cm igrp ,
> >  .Cm ip ,
> >  .Cm ip6 ,
> > -.Cm arp ,
> > +.Cm lat ,
> > +.Cm mopdl ,
> > +.Cm moprc ,
> > +.Cm pim ,
> >  .Cm rarp ,
> > -.Cm decnet ,
> > +.Cm sca ,
> > +.Cm stp ,
> >  .Cm tcp ,
> > +.Cm udp ,
> >  and
> > -.Cm udp .
> > -For example,
> > +.Cm wlan .
> > +E.g.,
> >  .Dq ether src foo ,
> >  .Dq arp net 128.3 ,
> >  .Dq tcp port 21 ,
> >  and
> >  .Dq wlan addr2 0:2:3:4:5:6 .
> > -If there is no proto qualifier,
> > +If there is no protocol qualifier,
> >  all protocols consistent with the type are assumed.
> > -For example,
> > +E.g.,
> >  .Dq src foo
> >  means
> > -.Dq (ip or arp or rarp) src foo
> > -(except the latter is not legal syntax);
> > +.Do
> > +.Pq ip or arp or rarp
> > +src foo
> > +.Dc
> > +.Pq except the latter is not legal syntax ;
> >  .Dq net bar
> >  means
> > -.Dq (ip or arp or rarp) net bar ;
> > +.Do
> > +.Pq ip or arp or rarp
> > +net bar
> > +.Dc ;
> >  and
> >  .Dq port 53
> >  means
> > -.Dq (tcp or udp) port 53 .
> > +.Do
> > +.Pq TCP or UDP
> > +port 53
> > +.Dc .
> >  .Pp
> >  .Cm fddi
> >  is actually an alias for
> >  .Cm ether ;
> >  the parser treats them identically as meaning
> > -"the data link level used on the specified network interface".
> > -FDDI headers contain Ethernet-like source and destination addresses,
> > +.Qo
> > +the data link level used on the specified network interface
> > +.Qc .
> > +FDDI
> > +.Pq Fiber Distributed Data Interface
> > +headers contain Ethernet-like source and destination addresses,
> >  and often contain Ethernet-like packet types,
> > -so it's possible to filter these FDDI fields just as with the analogous 
> > Ethernet fields.
> > +so it's possible to filter these FDDI fields just as with the analogous
> > +Ethernet fields.
> >  FDDI headers also contain other fields,
> >  but they cannot be named explicitly in a filter expression.
> >  .Pp
> > @@ -156,8 +190,8 @@ and the source address is the SA field;
> >  the BSSID, RA, and TA fields aren't tested.
> >  .El
> >  .Pp
> > -In addition to the above,
> > -there are some special primitives that don't follow the pattern:
> > +In addition to the above, there are some special primitive
> > +keywords that don't follow the pattern:
> >  .Cm gateway ,
> >  .Cm broadcast ,
> >  .Cm less ,
> > @@ -170,14 +204,18 @@ More complex filter expressions are buil
> >  .Cm or ,
> >  and
> >  .Cm not
> > -to combine primitives.
> > -For example,
> > -.Dq host foo and not port ftp and not port ftp-data .
> > -To save typing, identical qualifier lists can be omitted,
> > -so that
> > +to combine primitives
> > +e.g.,
> > +.Do
> > +host foo and not port ftp and not port ftp-data
> > +.Dc .
> > +To save typing, identical qualifier lists can be omitted
> > +e.g.,
> >  .Dq tcp dst port ftp or ftp-data or domain
> >  is exactly the same as
> > -.Dq tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain .
> > +.Do
> > +tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain
> > +.Dc .
> >  .Pp
> >  Allowable primitives are:
> >  .Bl -tag -width "ether proto proto"
> > @@ -192,7 +230,9 @@ True if the IPv4/v6 source field of the 
> >  True if either the IPv4/v6 source or destination of the packet is
> >  .Ar host .
> >  .Pp
> > -Any of the above host expressions can be prepended with the keywords,
> > +Any of the above
> > +.Ar host
> > +expressions can be prepended with the keywords,
> >  .Cm ip , arp , rarp ,
> >  or
> >  .Cm ip6 ,
> > @@ -210,35 +250,33 @@ which is equivalent to:
> >  .Pp
> >  If
> >  .Ar host
> > -is a name with multiple IP addresses,
> > -each address will be checked for a match.
> > +is a name with multiple IP addresses, each address will be checked for a 
> > match.
> >  .It Cm ether dst Ar ehost
> >  True if the Ethernet destination address is
> > -.Ar ehost ,
> > -which may be either a name from
> > +.Ar ehost .
> > +.Ar ehost
> > +may be either a name from
> >  .Pa /etc/ethers
> >  or a number (see
> >  .Xr ether_aton 3
> > -for numeric format).
> > +for a numeric format).
> >  .It Cm ether src Ar ehost
> >  True if the Ethernet source address is
> >  .Ar ehost .
> >  .It Cm ether host Ar ehost
> >  True if either the Ethernet source or destination address is
> >  .Ar ehost .
> > -.It Cm gateway host
> > +.It Cm gateway Ar host
> >  True if the packet used
> >  .Ar host
> > -as a gateway.
> > -That is,
> > -the Ethernet source or destination address was
> > +as a gateway; i.e., the Ethernet source or destination address was
> >  .Ar host
> >  but neither the IP source nor the IP destination was
> >  .Ar host .
> >  .Ar host
> > -must be a name and must be found both by the machine's 
> > host-name-to-IP-address resolution
> > -mechanisms (host name file, DNS, NIS, etc.) and by the machine's
> > -host-name-to-Ethernet-address resolution mechanism
> > +must be a name and must be found both by the machine's
> > +host-name-to-IP-address resolution mechanisms (host name file, DNS, NIS,
> > +etc.) and by the machine's host-name-to-Ethernet-address resolution 
> > mechanism
> >  (such as
> >  .Pa /etc/ethers ) .
> >  An equivalent expression is:
> > @@ -267,7 +305,7 @@ the netmask is 255.255.255.255 for a dot
> >  255.255.255.0 for a dotted triple, 255.255.0.0 for a dotted pair,
> >  or 255.0.0.0 for a single number.
> >  An IPv6 network number must be written out fully;
> > -the netmask is ff:ff:ff:ff:ff:ff:ff:ff,
> > +the netmask is ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,
> >  so IPv6 "network" matches are really always host matches,
> >  and a network match requires a netmask length.
> >  .It Cm src net Ar net
> > @@ -323,16 +361,29 @@ True if the packet has a source port val
> >  .It Cm port Ar port
> >  True if either the source or destination port of the packet is
> >  .Ar port .
> > +.Pp
> > +Any of the above port expressions can be prepended with the keywords
> > +.Cm tcp
> > +or
> > +.Cm udp ,
> > +as in:
> > +.Pp
> > +.D1 Cm tcp src port Ar port
> > +.Pp
> > +which matches only TCP packets whose source port is
> > +.Ar port .
> >  .It Cm less Ar length
> >  True if the packet has a length less than or equal to
> >  .Ar length .
> > -This is equivalent to
> > -.Cm len <= Ar length .
> > +This is equivalent to:
> > +.Pp
> > +.D1 Cm len <= Ar length
> >  .It Cm greater Ar length
> >  True if the packet has a length greater than or equal to
> >  .Ar length .
> > -This is equivalent to
> > -.Cm len >= Ar length .
> > +This is equivalent to:
> > +.Pp
> > +.D1 Cm len >= Ar length
> >  .It Cm sample Ar samplerate
> >  True if the packet has been randomly selected or sampled at a rate of 1 per
> >  .Ar samplerate .
> > @@ -342,7 +393,9 @@ True if the packet is an IPv4 packet (se
> >  of protocol type
> >  .Ar protocol .
> >  .Ar protocol
> > -can be a number, or one of the names
> > +can be a number, or one of the names from
> > +.Xr protocols 5 ,
> > +such as
> >  .Cm icmp ,
> >  .Cm icmp6 ,
> >  .Cm igmp ,
> > @@ -402,21 +455,34 @@ can be a number, or one of the names
> >  .Cm arp ,
> >  .Cm rarp ,
> >  .Cm atalk ,
> > +.Cm atalkarp ,
> >  .Cm decnet ,
> > -.Cm sca ,
> > +.Cm decdts ,
> > +.Cm decdns ,
> > +.Cm lanbridge ,
> >  .Cm lat ,
> > -or
> > -.Cm stp .
> > -Note these identifiers are also keywords
> > -and must be escaped using a backslash character
> > -.Pq \e .
> > -.Pp
> > -In the case of FDDI (such as "fddi protocol arp")
> > -and IEEE 802.11 wireless LANS (such as "wlan protocol arp"),
> > +.Cm mopdl ,
> > +.Cm moprc ,
> > +.Cm pup ,
> > +.Cm sca ,
> > +.Cm sprite ,
> > +.Cm stp ,
> > +.Cm vexp ,
> > +.Cm vprod ,
> > +or
> > +.Cm xns .
> > +These identifiers are also keywords and must be escaped
> > +using a backslash character
> > +.Pq Sq \e .
> > +.Pp
> > +In the case of FDDI (e.g.,
> > +.Dq fddi protocol arp ) ,
> > +and IEEE 802.11 wireless LANS (such as
> > +.Dq wlan protocol arp ) ,
> >  for most of those protocols
> > -the protocol identification comes from
> > -the 802.2 Logical Link Control (LLC) header,
> > -which is usually layered on top of the FDDI or 802.11 header.
> > +the protocol identification comes from the 802.2 Logical Link Control
> > +.Pq LLC
> > +header, which is usually layered on top of the FDDI or 802.11 header.
> >  .Pp
> >  When filtering for most protocol identifiers on FDDI or 802.11,
> >  the filter checks only the protocol ID field of an LLC header
> > @@ -449,9 +515,11 @@ for a SNAP-format packet as it does for 
> >  .It Cm decnet src Ar host
> >  True if the DECNET source address is
> >  .Ar host ,
> > -which may be an address of the form "10.123", or a DECNET hostname.
> > -DECNET hostname support is only available on ULTRIX systems
> > -that are configured to run DECNET.
> > +which may be an address of the form
> > +.Dq 10.123 ,
> > +or a DECNET host name.
> > +DECNET host name support is only available on systems that are
> > +configured to run DECNET.
> >  .It Cm decnet dst Ar host
> >  True if the DECNET destination address is
> >  .Ar host .
> > @@ -468,24 +536,33 @@ Synonymous with the
> >  modifier.
> >  .It Cm rnr Ar num
> >  True if the packet was logged as matching the specified PF rule number
> > -(applies only to packets logged by
> > -.Xr pf  4 ) .
> > +in the main ruleset (applies only to packets logged by
> > +.Xr pf 4 ) .
> >  .It Cm rulenum Ar num
> >  Synonymous with the
> >  .Cm rnr
> >  modifier.
> >  .It Cm reason Ar code
> >  True if the packet was logged with the specified PF reason code.
> > -The known codes are:
> > +Known codes are:
> >  .Cm match ,
> >  .Cm bad-offset ,
> >  .Cm fragment ,
> >  .Cm short ,
> >  .Cm normalize ,
> > +.Cm memory ,
> > +.Cm bad-timestamp ,
> > +.Cm congestion ,
> > +.Cm ip-option ,
> > +.Cm proto-cksum ,
> > +.Cm state-mismatch ,
> > +.Cm state-insert ,
> > +.Cm state-limit ,
> > +.Cm src-limit ,
> >  and
> > -.Cm memory
> > +.Cm synproxy
> >  (applies only to packets logged by
> > -.Xr pf  4 ) .
> > +.Xr pf 4 ) .
> >  .It Cm rset Ar name
> >  True if the packet was logged as matching the specified PF ruleset
> >  name of an anchored ruleset (applies only to packets logged by
> > @@ -497,7 +574,7 @@ modifier.
> >  .It Cm srnr Ar num
> >  True if the packet was logged as matching the specified PF rule number
> >  of an anchored ruleset (applies only to packets logged by
> > -.Xr pf  4 ) .
> > +.Xr pf 4 ) .
> >  .It Cm subrulenum Ar num
> >  Synonymous with the
> >  .Cm srnr
> > @@ -507,12 +584,11 @@ True if PF took the specified action whe
> >  Known actions are:
> >  .Cm pass
> >  and
> > -.Cm block
> > -and, with later versions of
> > -.Xr pf 4 ,
> > +.Cm block ,
> >  .Cm nat ,
> >  .Cm rdr ,
> > -.Cm binat
> > +.Cm binat ,
> > +.Cm match
> >  and
> >  .Cm scrub
> >  (applies only to packets logged by
> > @@ -531,15 +607,52 @@ where
> >  is one of the above protocols.
> >  Note that not all applications using
> >  .Xr pcap_open_live 3
> > -currently know how to parse these protocols.
> > +currently know how to parse these protocols (ie.
> > +.Xr tcpdump 8 ) .
> > +.It Xo
> > +.Cm ah ,
> > +.Cm esp ,
> > +.Cm icmp ,
> > +.Cm icmp6 ,
> > +.Cm igmp ,
> > +.Cm igrp ,
> > +.Cm pim ,
> > +.Cm tcp ,
> > +.Cm udp
> > +.Xc
> > +Abbreviations for
> > +.Cm ip proto Ar p
> > +or
> > +.Cm ip6 proto Ar p ,
> > +where
> > +.Ar p
> > +is one of the above protocols.
> > +.It Cm wlan addr1 Ar ehost
> > +True if the first IEEE 802.11 address is
> > +.Ar ehost .
> > +.It Cm wlan addr2 Ar ehost
> > +True if the second IEEE 802.11 address is
> > +.Ar ehost .
> > +.It Cm wlan addr3 Ar ehost
> > +True if the third IEEE 802.11 address is
> > +.Ar ehost .
> > +.It Cm wlan addr4 Ar ehost
> > +True if the fourth IEEE 802.11 address is
> > +.Ar ehost .
> > +The fourth address field is only used for
> > +WDS (Wireless Distribution System) frames.
> > +.It Cm wlan host Ar ehost
> > +True if either the first, second, third, or fourth
> > +IEEE 802.11 address is
> > +.Ar ehost .
> >  .It Cm type Ar wlan_type
> >  True if the IEEE 802.11 frame type matches the specified
> >  .Ar wlan_type .
> >  Valid types are:
> >  .Cm mgt ,
> >  .Cm ctl ,
> > -and
> > -.Cm data .
> > +.Cm data ,
> > +or a numeric value.
> >  .It Cm type Ar wlan_type Cm subtype Ar wlan_subtype
> >  True if the IEEE 802.11 frame type matches the specified
> >  .Ar wlan_type
> > @@ -643,7 +756,7 @@ To filter IPv4 protocols encapsulated in
> >  higher order VLAN:
> >  .Pp
> >  .Dl vlan && vlan 300 && ip
> > -.It mpls Op Ar label
> > +.It Cm mpls Op Ar label
> >  True if the packet is an MPLS (Multi-Protocol Label Switching) packet.
> >  If
> >  .Ar label
> > @@ -666,14 +779,6 @@ to filter on MPLS label 42 first and req
> >  To filter on network 192.0.2.0/24 transported inside packets with label 42:
> >  .Pp
> >  .Dl mpls 42 && net 192.0.2.0/24
> > -.It Cm tcp , udp , icmp
> > -Abbreviations for
> > -.Cm ip proto Ar p
> > -or
> > -.Cm ip6 proto Ar p ,
> > -where
> > -.Ar p
> > -is one of the above protocols.
> >  .It Ar expr relop expr
> >  True if the relation holds, where
> >  .Ar relop
> > @@ -744,10 +849,10 @@ The byte offset, relative to the indicat
> >  is optional and indicates the number of bytes in the field of interest;
> >  it can be either one, two, or four, and defaults to one.
> >  The length operator, indicated by the keyword
> > -.Ar len ,
> > +.Cm len ,
> >  gives the length of the packet.
> >  The random operator, indicated by the keyword
> > -.Ar random ,
> > +.Cm random ,
> >  generates a random number.
> >  .Pp
> >  For example,
> > @@ -767,8 +872,7 @@ and
> >  index operations.
> >  For instance,
> >  .Dq tcp[0]
> > -always means the first byte of the TCP
> > -.Ar header ,
> > +always means the first byte of the TCP header,
> >  and never means the first byte of an intervening fragment.
> >  .Pp
> >  Some offsets and field values may be expressed as names rather than
> > @@ -811,6 +915,7 @@ The following TCP flags field values are
> >  Primitives may be combined using
> >  a parenthesized group of primitives and operators.
> >  Parentheses are special to the shell and must be escaped.
> > +Allowable primitives and operators are:
> >  .Bd -ragged -offset indent
> >  Negation
> >  .Po
> > @@ -837,7 +942,7 @@ or
> >  Negation has highest precedence.
> >  Alternation and concatenation have equal precedence and associate
> >  left to right.
> > -Note that explicit
> > +Explicit
> >  .Cm and
> >  tokens, not juxtaposition,
> >  are now required for concatenation.
> > @@ -845,11 +950,27 @@ are now required for concatenation.
> >  If an identifier is given without a keyword, the most recent keyword
> >  is assumed.
> >  For example,
> > -.Dq not host vs and ace
> > +For example,
> > +.Bd -ragged -offset indent
> > +.Cm not host
> > +vs
> > +.Cm and
> > +ace
> > +.Ed
> > +.Pp
> >  is short for
> > -.Dq not host vs and host ace ,
> > -which shouldn't be confused with
> > -.Dq not (\& host vs or ace )\& .
> > +.Bd -ragged -offset indent
> > +.Cm not host
> > +vs
> > +.Cm and host
> > +ace
> > +.Ed
> > +.Pp
> > +which should not be confused with
> > +.Bd -ragged -offset indent
> > +.Cm not
> > +.Pq Cm host No vs Cm or No ace
> > +.Ed
> >  .Sh EXAMPLES
> >  To select all packets arriving at or departing from
> >  .Dq sundown :
> > @@ -914,7 +1035,8 @@ that were not sent via Ethernet broadcas
> >  .Pp
> >  .Dl ether[0] & 1 = 0 and ip[16] >= 224
> >  .Pp
> > -To select all ICMP packets that are not echo requests/replies (i.e. not 
> > ping packets):
> > +To select all ICMP packets that are not echo requests/replies
> > +(i.e. not ping packets):
> >  .Pp
> >  .Dl icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply
> >  .Sh SEE ALSO
> > Index: usr.sbin/tcpdump/tcpdump.8
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/tcpdump/tcpdump.8,v
> > retrieving revision 1.111
> > diff -u -p -r1.111 tcpdump.8
> > --- usr.sbin/tcpdump/tcpdump.8      17 Aug 2020 06:29:29 -0000      1.111
> > +++ usr.sbin/tcpdump/tcpdump.8      5 Sep 2021 13:35:43 -0000
> > @@ -336,14 +336,13 @@ Otherwise, only packets satisfying
> >  .Ar expression
> >  will be dumped.
> >  .Pp
> > -The
> > -.Ar expression
> > -consists of one or more primitives.
> > +The filter expression consists of one or more
> > +.Em primitives .
> >  Primitives usually consist of an
> >  .Ar id
> >  .Pq name or number
> >  preceded by one or more qualifiers.
> > -There are three different kinds of qualifiers:
> > +There are three different kinds of qualifier:
> >  .Bl -tag -width "proto"
> >  .It Ar type
> >  Specify which kind of address component the
> > @@ -369,6 +368,8 @@ Possible directions are
> >  .Cm dst ,
> >  .Cm src or dst ,
> >  .Cm src and dst ,
> > +.Cm ra ,
> > +.Cm ta ,
> >  .Cm addr1 ,
> >  .Cm addr2 ,
> >  .Cm addr3 ,
> > @@ -384,6 +385,8 @@ qualifier,
> >  .Cm src or dst
> >  is assumed.
> >  The
> > +.Cm ra ,
> > +.Cm ta ,
> >  .Cm addr1 ,
> >  .Cm addr2 ,
> >  .Cm addr3 ,
> > @@ -430,7 +433,8 @@ E.g.,
> >  .Dq ether src foo ,
> >  .Dq arp net 128.3 ,
> >  .Dq tcp port 21 ,
> > -.Dq wlan addr1 0:2:3:4:5:6 .
> > +and
> > +.Dq wlan addr2 0:2:3:4:5:6 .
> >  If there is no protocol qualifier,
> >  all protocols consistent with the type are assumed.
> >  E.g.,
> > @@ -466,10 +470,22 @@ FDDI
> >  .Pq Fiber Distributed Data Interface
> >  headers contain Ethernet-like source and destination addresses,
> >  and often contain Ethernet-like packet types,
> > -so you can filter on these FDDI fields just as with the analogous
> > +so it's possible to filter these FDDI fields just as with the analogous
> >  Ethernet fields.
> >  FDDI headers also contain other fields,
> > -but you cannot name them explicitly in a filter expression.
> > +but they cannot be named explicitly in a filter expression.
> > +.Pp
> > +Similarly,
> > +.Cm tr
> > +and
> > +.Cm wlan
> > +are aliases for
> > +.Cm ether ;
> > +the previous paragraph's statements about FDDI headers also apply to Token 
> > Ring
> > +and 802.11 wireless LAN headers.
> > +For 802.11 headers, the destination address is the DA field
> > +and the source address is the SA field;
> > +the BSSID, RA, and TA fields aren't tested.
> >  .El
> >  .Pp
> >  In addition to the above, there are some special primitive
> > @@ -502,23 +518,22 @@ tcp dst port ftp or tcp dst port ftp-dat
> >  Allowable primitives are:
> >  .Bl -tag -width "ether proto proto"
> >  .It Cm dst host Ar host
> > -True if the IP destination field of the packet is
> > +True if the IPv4/v6 destination field of the packet is
> >  .Ar host ,
> >  which may be either an address or a name.
> >  .It Cm src host Ar host
> > -True if the IP source field of the packet is
> > +True if the IPv4/v6 source field of the packet is
> >  .Ar host .
> >  .It Cm host Ar host
> > -True if either the IP source or destination of the packet is
> > +True if either the IPv4/v6 source or destination of the packet is
> >  .Ar host .
> >  .Pp
> >  Any of the above
> >  .Ar host
> >  expressions can be prepended with the keywords,
> > -.Cm ip ,
> > -.Cm arp ,
> > +.Cm ip , arp , rarp ,
> >  or
> > -.Cm rarp
> > +.Cm ip6 ,
> >  as in:
> >  .Pp
> >  .D1 Cm ip host Ar host
> > @@ -557,11 +572,12 @@ as a gateway; i.e., the Ethernet source 
> >  but neither the IP source nor the IP destination was
> >  .Ar host .
> >  .Ar host
> > -must be a name and must be found in both
> > -.Pa /etc/hosts
> > -and
> > -.Pa /etc/ethers .
> > -An equivalent expression is
> > +must be a name and must be found both by the machine's
> > +host-name-to-IP-address resolution mechanisms (host name file, DNS, NIS,
> > +etc.) and by the machine's host-name-to-Ethernet-address resolution 
> > mechanism
> > +(such as
> > +.Pa /etc/ethers ) .
> > +An equivalent expression is:
> >  .Bd -ragged -offset indent
> >  .Cm ether host
> >  .Ar ehost
> > @@ -569,42 +585,74 @@ An equivalent expression is
> >  .Ar host
> >  .Ed
> >  .Pp
> > -which can be used with either names or numbers for
> > -.Ar host Ns / Ns Ar ehost .
> > +which can be used with either names or numbers for host/ehost.
> > +This syntax does not work in an IPv6-enabled configuration at this moment.
> >  .It Cm dst net Ar net
> > -True if the IP destination address of the packet has a network number of
> > -.Ar net .
> > -.Ar net
> > -may be either a name from
> > -.Pa /etc/hosts
> > -or a network number (see
> > -.Xr hosts 5
> > -for details).
> > +True if the IPv4/v6 destination address of the packet has a network
> > +number of
> > +.Ar net ,
> > +which may be either a name from the networks database
> > +(such as
> > +.Pa /etc/networks )
> > +or a network number.
> > +An IPv4 network number can be written as a dotted quad (e.g. 192.168.1.0),
> > +dotted triple (e.g. 192.168.1), dotted pair (e.g 172.16),
> > +or single number (e.g. 10);
> > +the netmask is 255.255.255.255 for a dotted quad
> > +(which means that it's really a host match),
> > +255.255.255.0 for a dotted triple, 255.255.0.0 for a dotted pair,
> > +or 255.0.0.0 for a single number.
> > +An IPv6 network number must be written out fully;
> > +the netmask is ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff,
> > +so IPv6 "network" matches are really always host matches,
> > +and a network match requires a netmask length.
> >  .It Cm src net Ar net
> > -True if the IP source address of the packet has a network number of
> > +True if the IPv4/v6 source address of the packet has a network number of
> >  .Ar net .
> >  .It Cm net Ar net
> > -True if either the IP source or destination address of the packet
> > +True if either the IPv4/v6 source or destination address of the packet
> >  has a network number of
> >  .Ar net .
> > +.It Cm net Ar net Cm mask Ar netmask
> > +True if the IPv4 address matches
> > +.Ar net
> > +with the specific
> > +.Ar netmask .
> > +May be qualified with
> > +.Cm src
> > +or
> > +.Cm dst .
> > +Note that this syntax is not valid for IPv6 networks.
> > +.It Cm net Ar net Ns / Ns Ar len
> > +True if the IPv4/v6 address matches
> > +.Ar net
> > +with a netmask
> > +.Ar len
> > +bits wide.
> > +May be qualified with
> > +.Cm src
> > +or
> > +.Cm dst .
> >  .It Cm dst port Ar port
> > -True if the packet is IP/TCP or IP/UDP and has a destination port value of
> > +True if the packet is IP/TCP, IP/UDP, IP6/TCP or IP6/UDP
> > +and has a destination port value of
> >  .Ar port .
> >  The
> >  .Ar port
> > -can be a number or name from
> > -.Xr services 5
> > +can be a number or a name used in
> > +.Pa /etc/services
> >  (see
> >  .Xr tcp 4
> >  and
> >  .Xr udp 4 ) .
> >  If a name is used, both the port number and protocol are checked.
> > -If a number or ambiguous name is used, only the port number is checked;
> > -e.g.,
> > -.Dq Cm dst port No 513
> > -will print both TCP/login traffic and UDP/who traffic, and
> > -.Dq Cm dst port No domain
> > -will print both TCP/domain and UDP/domain traffic.
> > +If a number or ambiguous name is used,
> > +only the port number is checked (e.g.\&
> > +.Dq dst port 513
> > +will print both
> > +TCP/login traffic and UDP/who traffic, and
> > +.Dq port domain
> > +will print both TCP/domain and UDP/domain traffic).
> >  .It Cm src port Ar port
> >  True if the packet has a source port value of
> >  .Ar port .
> > @@ -634,47 +682,72 @@ True if the packet has a length greater 
> >  This is equivalent to:
> >  .Pp
> >  .D1 Cm len >= Ar length
> > -.It Cm ip proto Ar proto
> > -True if the packet is an IP packet (see
> > +.It Cm sample Ar samplerate
> > +True if the packet has been randomly selected or sampled at a rate of 1 per
> > +.Ar samplerate .
> > +.It Cm ip proto Ar protocol
> > +True if the packet is an IPv4 packet (see
> >  .Xr ip 4 )
> >  of protocol type
> > -.Ar proto .
> > -.Ar proto
> > -can be a number or name from
> > +.Ar protocol .
> > +.Ar protocol
> > +can be a number, or one of the names from
> >  .Xr protocols 5 ,
> >  such as
> >  .Cm icmp ,
> > +.Cm icmp6 ,
> > +.Cm igmp ,
> > +.Cm igrp ,
> > +.Cm pim ,
> > +.Cm ah ,
> > +.Cm esp ,
> > +.Cm vrrp ,
> >  .Cm udp ,
> >  or
> >  .Cm tcp .
> > -These identifiers are also keywords and must be escaped
> > -using a backslash character
> > -.Pq Sq \e .
> > +Note that the identifiers
> > +.Cm tcp ,
> > +.Cm udp ,
> > +and
> > +.Cm icmp
> > +are also keywords and must be escaped using a backslash character
> > +.Pq \e .
> > +Note that this primitive does not chase the protocol header chain.
> > +.It Cm ip6 proto Ar protocol
> > +True if the packet is an IPv6 packet of protocol type
> > +.Ar protocol .
> > +Note that this primitive does not chase the protocol header chain.
> >  .It Cm ether broadcast
> >  True if the packet is an Ethernet broadcast packet.
> >  The
> >  .Cm ether
> >  keyword is optional.
> >  .It Cm ip broadcast
> > -True if the packet is an IP broadcast packet.
> > -It checks for both the all-zeroes and all-ones broadcast conventions
> > -and looks up the local subnet mask.
> > +True if the packet is an IPv4 broadcast packet.
> > +It checks for both the all-zeroes and all-ones broadcast conventions,
> > +and looks up the subnet mask on the interface on which the capture is
> > +being done.
> > +.Pp
> > +If the subnet mask of the interface on which the capture is being done
> > +is not known, a value of PCAP_NETMASK_UNKNOWN can be supplied;
> > +tests for IPv4 broadcast addresses will fail to compile,
> > +but all other tests in the filter program will be OK.
> >  .It Cm ether multicast
> >  True if the packet is an Ethernet multicast packet.
> >  The
> >  .Cm ether
> >  keyword is optional.
> >  This is shorthand for
> > -.Do
> > -.Cm ether Ns [0] & 1 != 0
> > -.Dc .
> > +.Dq ether[0] & 1 != 0 .
> >  .It Cm ip multicast
> > -True if the packet is an IP multicast packet.
> > -.It Cm ether proto Ar proto
> > +True if the packet is an IPv4 multicast packet.
> > +.It Cm ip6 multicast
> > +True if the packet is an IPv6 multicast packet.
> > +.It Cm ether proto Ar protocol
> >  True if the packet is of ether type
> > -.Ar proto .
> > -.Ar proto
> > -can be a number or one of the names
> > +.Ar protocol .
> > +.Ar protocol
> > +can be a number, or one of the names
> >  .Cm ip ,
> >  .Cm ip6 ,
> >  .Cm arp ,
> > @@ -699,14 +772,44 @@ or
> >  These identifiers are also keywords and must be escaped
> >  using a backslash character
> >  .Pq Sq \e .
> > +.Pp
> >  In the case of FDDI (e.g.,
> > -.Dq Cm fddi protocol arp ) ,
> > +.Dq fddi protocol arp ) ,
> > +and IEEE 802.11 wireless LANS (such as
> > +.Dq wlan protocol arp ) ,
> > +for most of those protocols
> >  the protocol identification comes from the 802.2 Logical Link Control
> >  .Pq LLC
> > -header, which is usually layered on top of the FDDI header.
> > -.Nm
> > -assumes, when filtering on the protocol identifier, that all FDDI packets
> > -include an LLC header, and that the LLC header is in so-called SNAP format.
> > +header, which is usually layered on top of the FDDI or 802.11 header.
> > +.Pp
> > +When filtering for most protocol identifiers on FDDI or 802.11,
> > +the filter checks only the protocol ID field of an LLC header
> > +in so-called SNAP format with an Organizational Unit Identifier (OUI) of
> > +0x000000, for encapsulated Ethernet; it doesn't check whether the packet
> > +is in SNAP format with an OUI of 0x000000.
> > +The exceptions are:
> > +.Bl -tag -width "atalk"
> > +.It iso
> > +The filter checks the DSAP (Destination Service Access Point) and
> > +SSAP (Source Service Access Point) fields of the LLC header.
> > +.It stp
> > +The filter checks the DSAP of the LLC header.
> > +.It atalk
> > +The filter checks for a SNAP-format packet with an OUI of 0x080007
> > +and the AppleTalk etype.
> > +.El
> > +.Pp
> > +In the case of Ethernet, the filter checks the Ethernet type field
> > +for most of those protocols.
> > +The exceptions are:
> > +.Bl -tag -width "iso and stp"
> > +.It iso and stp
> > +The filter checks for an 802.3 frame and then checks the LLC header as
> > +it does for FDDI and 802.11.
> > +.It atalk
> > +The filter checks both for the AppleTalk etype in an Ethernet frame and
> > +for a SNAP-format packet as it does for FDDI, Token Ring, and 802.11.
> > +.El
> >  .It Cm decnet src Ar host
> >  True if the DECNET source address is
> >  .Ar host ,
> > @@ -727,7 +830,7 @@ True if the packet was logged as coming 
> >  .Xr pf 4 ) .
> >  .It Cm on Ar interface
> >  Synonymous with the
> > -.Ar ifname
> > +.Cm ifname
> >  modifier.
> >  .It Cm rnr Ar num
> >  True if the packet was logged as matching the specified PF rule number
> > @@ -735,27 +838,27 @@ in the main ruleset (applies only to pac
> >  .Xr pf 4 ) .
> >  .It Cm rulenum Ar num
> >  Synonymous with the
> > -.Ar rnr
> > +.Cm rnr
> >  modifier.
> >  .It Cm reason Ar code
> >  True if the packet was logged with the specified PF reason code.
> > -The known codes are:
> > -.Ar match ,
> > -.Ar bad-offset ,
> > -.Ar fragment ,
> > -.Ar short ,
> > -.Ar normalize ,
> > -.Ar memory ,
> > -.Ar bad-timestamp ,
> > -.Ar congestion ,
> > -.Ar ip-option ,
> > -.Ar proto-cksum ,
> > -.Ar state-mismatch ,
> > -.Ar state-insert ,
> > -.Ar state-limit ,
> > -.Ar src-limit ,
> > +Known codes are:
> > +.Cm match ,
> > +.Cm bad-offset ,
> > +.Cm fragment ,
> > +.Cm short ,
> > +.Cm normalize ,
> > +.Cm memory ,
> > +.Cm bad-timestamp ,
> > +.Cm congestion ,
> > +.Cm ip-option ,
> > +.Cm proto-cksum ,
> > +.Cm state-mismatch ,
> > +.Cm state-insert ,
> > +.Cm state-limit ,
> > +.Cm src-limit ,
> >  and
> > -.Ar synproxy
> > +.Cm synproxy
> >  (applies only to packets logged by
> >  .Xr pf 4 ) .
> >  .It Cm rset Ar name
> > @@ -764,7 +867,7 @@ name of an anchored ruleset (applies onl
> >  .Xr pf 4 ) .
> >  .It Cm ruleset Ar name
> >  Synonymous with the
> > -.Ar rset
> > +.Cm rset
> >  modifier.
> >  .It Cm srnr Ar num
> >  True if the packet was logged as matching the specified PF rule number
> > @@ -772,17 +875,54 @@ of an anchored ruleset (applies only to 
> >  .Xr pf 4 ) .
> >  .It Cm subrulenum Ar num
> >  Synonymous with the
> > -.Ar srnr
> > +.Cm srnr
> >  modifier.
> >  .It Cm action Ar act
> >  True if PF took the specified action when the packet was logged.
> > -Valid actions are:
> > -.Ar pass ,
> > -.Ar block ,
> > +Known actions are:
> > +.Cm pass
> > +and
> > +.Cm block ,
> > +.Cm nat ,
> > +.Cm rdr ,
> > +.Cm binat ,
> > +.Cm match
> >  and
> > -.Ar match
> > +.Cm scrub
> >  (applies only to packets logged by
> >  .Xr pf 4 ) .
> > +.It Cm ip , ip6 , arp , rarp , atalk , decnet , iso , stp
> > +Abbreviations for
> > +.Cm ether proto Ar p ,
> > +where
> > +.Ar p
> > +is one of the above protocols.
> > +.It Cm lat , moprc , mopdl
> > +Abbreviations for
> > +.Cm ether proto Ar p ,
> > +where
> > +.Ar p
> > +is one of the above protocols.
> > +.Cm tcpdump
> > +does not currently know how to parse these.
> > +.It Xo
> > +.Cm ah ,
> > +.Cm esp ,
> > +.Cm icmp ,
> > +.Cm icmp6 ,
> > +.Cm igmp ,
> > +.Cm igrp ,
> > +.Cm pim ,
> > +.Cm tcp ,
> > +.Cm udp
> > +.Xc
> > +Abbreviations for
> > +.Cm ip proto Ar p
> > +or
> > +.Cm ip6 proto Ar p ,
> > +where
> > +.Ar p
> > +is one of the above protocols.
> >  .It Cm wlan addr1 Ar ehost
> >  True if the first IEEE 802.11 address is
> >  .Ar ehost .
> > @@ -801,120 +941,204 @@ WDS (Wireless Distribution System) frame
> >  True if either the first, second, third, or fourth
> >  IEEE 802.11 address is
> >  .Ar ehost .
> > -.It Cm type Ar type
> > +.It Cm type Ar wlan_type
> >  True if the IEEE 802.11 frame type matches the specified
> > -.Ar type .
> > +.Ar wlan_type .
> >  Valid types are:
> > -.Ar data ,
> > -.Ar mgt ,
> > -.Ar ctl ,
> > +.Cm mgt ,
> > +.Cm ctl ,
> > +.Cm data ,
> >  or a numeric value.
> > -.It Cm subtype Ar subtype
> > +.It Cm type Ar wlan_type Cm subtype Ar wlan_subtype
> > +True if the IEEE 802.11 frame type matches the specified
> > +.Ar wlan_type
> > +and frame subtype matches the specified
> > +.Ar wlan_subtype .
> > +.Pp
> > +If the specified
> > +.Ar wlan_type
> > +is
> > +.Cm mgtv ,
> > +then valid values for
> > +.Ar wlan_subtype
> > +are
> > +.Cm assoc-req ,
> > +.Cm assoc-resp ,
> > +.Cm reassoc-req ,
> > +.Cm reassoc-resp ,
> > +.Cm probe-req ,
> > +.Cm probe-resp ,
> > +.Cm beacon ,
> > +.Cm atim ,
> > +.Cm disassoc ,
> > +.Cm auth ,
> > +and
> > +.Cm deauth .
> > +.Pp
> > +If the specified
> > +.Ar wlan_type
> > +is
> > +.Cm ctl ,
> > +then valid values for
> > +.Ar wlan_subtype
> > +are
> > +.Cm ps-poll ,
> > +.Cm rts ,
> > +.Cm cts ,
> > +.Cm ack ,
> > +.Cm cf-end ,
> > +and
> > +.Cm cf-end-ack .
> > +.Pp
> > +If the specified
> > +.Ar wlan_type
> > +is
> > +.Cm data ,
> > +then valid values for
> > +.Ar wlan_subtype
> > +are
> > +.Cm data ,
> > +.Cm data-cf-ack ,
> > +.Cm data-cf-poll ,
> > +.Cm data-cf-ack-poll ,
> > +.Cm null ,
> > +.Cm cf-ack ,
> > +.Cm cf-poll ,
> > +.Cm cf-ack-poll ,
> > +.Cm qos-data ,
> > +.Cm qos-data-cf-ack ,
> > +.Cm qos-data-cf-poll ,
> > +.Cm qos-data-cf-ack-poll ,
> > +.Cm qos ,
> > +.Cm qos-cf-poll ,
> > +and
> > +.Cm qos-cf-ack-poll .
> > +.It Cm subtype Ar wlan_subtype
> >  True if the IEEE 802.11 frame subtype matches the specified
> > -.Ar subtype .
> > -Valid subtypes are:
> > -.Ar assocreq ,
> > -.Ar assocresp ,
> > -.Ar reassocreq ,
> > -.Ar reassocresp ,
> > -.Ar probereq ,
> > -.Ar proberesp ,
> > -.Ar beacon ,
> > -.Ar atim ,
> > -.Ar disassoc ,
> > -.Ar auth ,
> > -.Ar deauth ,
> > -.Ar data ,
> > -or a numeric value.
> > +.Ar wlan_subtype
> > +and frame has the type to which the specified
> > +.Ar wlan_subtype
> > +belongs.
> >  .It Cm dir Ar dir
> >  True if the IEEE 802.11 frame direction matches the specified
> > -.Ar dir .
> > +.Cm dir .
> >  Valid directions are:
> > -.Ar nods ,
> > -.Ar tods ,
> > -.Ar fromds ,
> > -.Ar dstods ,
> > +.Cm nods ,
> > +.Cm tods ,
> > +.Cm fromds ,
> > +.Cm dstods ,
> >  or a numeric value.
> > -.It Xo
> > -.Cm atalk ,
> > -.Cm ip ,
> > -.Cm ip6 ,
> > -.Cm arp ,
> > -.Cm decnet ,
> > -.Cm lat ,
> > -.Cm moprc ,
> > -.Cm mopdl ,
> > -.Cm rarp ,
> > -.Cm sca
> > -.Xc
> > -Abbreviations for:
> > -.Cm ether proto Ar p
> > -where
> > -.Ar p
> > -is one of the above protocols.
> > -.Nm
> > -does not currently know how to parse
> > -.Cm lat ,
> > -.Cm moprc ,
> > -or
> > -.Cm mopdl .
> > -.It Xo
> > -.Cm ah ,
> > -.Cm esp ,
> > -.Cm icmp ,
> > -.Cm icmp6 ,
> > -.Cm igmp ,
> > -.Cm igrp ,
> > -.Cm pim ,
> > -.Cm tcp ,
> > -.Cm udp
> > -.Xc
> > -Abbreviations for:
> > -.Cm ip proto Ar p
> > -where
> > -.Ar p
> > -is one of the above protocols.
> > +.It Cm vlan Op Ar vlan_id
> > +True if the packet is an IEEE 802.1Q VLAN packet.
> > +If
> > +.Ar vlan_id
> > +is specified, only true if the packet has the specified ID.
> > +Note that the first
> > +.Cm vlan
> > +keyword encountered in
> > +.Ar expression
> > +changes the decoding offsets for the remainder of
> > +.Ar expression
> > +on the assumption that the packet is a VLAN packet.
> > +This expression may be used more than once, to filter on VLAN hierarchies.
> > +Each use of that expression increments the filter offsets by 4.
> > +.Pp
> > +For example,
> > +to filter on VLAN 200 encapsulated within VLAN 100:
> > +.Pp
> > +.Dl vlan 100 && vlan 200
> > +.Pp
> > +To filter IPv4 protocols encapsulated in VLAN 300 encapsulated within any
> > +higher order VLAN:
> > +.Pp
> > +.Dl vlan && vlan 300 && ip
> > +.It Cm mpls Op Ar label
> > +True if the packet is an MPLS (Multi-Protocol Label Switching) packet.
> > +If
> > +.Ar label
> > +is specified, only true if the packet has the specified label.
> > +Note that the first
> > +.Cm mpls
> > +keyword encountered in
> > +.Ar expression
> > +changes the decoding offsets for the remainder of
> > +.Ar expression
> > +on the assumption that the packet is an MPLS packet.
> > +This expression may be used more than once, to filter on MPLS labels.
> > +Each use of that expression increments the filter offsets by 4.
> > +.Pp
> > +For example,
> > +to filter on MPLS label 42 first and requires the next label to be 12:
> > +.Pp
> > +.Dl mpls 42 && mpls 12
> > +.Pp
> > +To filter on network 192.0.2.0/24 transported inside packets with label 42:
> > +.Pp
> > +.Dl mpls 42 && net 192.0.2.0/24
> >  .It Ar expr relop expr
> >  True if the relation holds, where
> >  .Ar relop
> >  is one of
> > -.Ql > ,
> > -.Ql < ,
> > -.Ql >= ,
> > -.Ql <= ,
> > -.Ql = ,
> > -.Ql != ,
> > +.Sq > ,
> > +.Sq < ,
> > +.Sq >= ,
> > +.Sq <= ,
> > +.Sq = ,
> > +.Sq != ,
> >  and
> >  .Ar expr
> >  is an arithmetic expression composed of integer constants
> > -.Pq expressed in standard C syntax ,
> > -the normal binary operators
> > -.Ql ( + ,
> > -.Ql - ,
> > -.Ql * ,
> > -.Ql / ,
> > -.Ql & ,
> > -.Ql | ) ,
> > -a length operator, and special packet data accessors.
> > +(expressed in standard C syntax), the normal binary operators
> > +.Pf ( Sq + ,
> > +.Sq - ,
> > +.Sq * ,
> > +.Sq / ,
> > +.Sq & ,
> > +.Sq | ,
> > +.Sq << ,
> > +.Sq >> ) ,
> > +a length operator, a random operator, and special packet data accessors.
> > +Note that all comparisons are unsigned, so that, for example,
> > +0x80000000 and 0xffffffff are > 0.
> >  To access data inside the packet, use the following syntax:
> > -.Sm off
> > -.Bd -ragged -offset indent
> > -.Ar proto Op Ar expr : Ar size
> > -.Ed
> > -.Sm on
> > +.Pp
> > +.D1 Ar proto Ns Op Ar expr : Ns Ar size
> >  .Pp
> >  .Ar proto
> >  is one of
> >  .Cm ether ,
> >  .Cm fddi ,
> > +.Cm tr ,
> > +.Cm wlan ,
> > +.Cm ppp ,
> > +.Cm slip ,
> > +.Cm link ,
> >  .Cm ip ,
> >  .Cm arp ,
> >  .Cm rarp ,
> >  .Cm tcp ,
> >  .Cm udp ,
> > -or
> >  .Cm icmp ,
> > -and indicates the protocol layer for the index operation.
> > +.Cm ip6 ,
> > +or
> > +.Cm radio ,
> > +and indicates the protocol layer for the index operation
> > +.Pf ( Cm ether ,
> > +.Cm fddi ,
> > +.Cm wlan ,
> > +.Cm tr ,
> > +.Cm ppp ,
> > +.Cm slip ,
> > +and
> > +.Cm link
> > +all refer to the link layer;
> > +.Cm radio
> > +refers to the "radio header" added to some 802.11 captures).
> > +Note that
> > +.Cm tcp ,
> > +.Cm udp ,
> > +and other upper-layer protocol types only apply to IPv4, not IPv6
> > +(this will be fixed in the future).
> >  The byte offset, relative to the indicated protocol layer, is given by
> >  .Ar expr .
> >  .Ar size
> > @@ -923,29 +1147,69 @@ it can be either one, two, or four, and 
> >  The length operator, indicated by the keyword
> >  .Cm len ,
> >  gives the length of the packet.
> > +The random operator, indicated by the keyword
> > +.Cm random ,
> > +generates a random number.
> >  .Pp
> >  For example,
> > -.Dq Cm ether Ns [0] & 1 != 0
> > +.Dq ether[0] & 1 != 0
> >  catches all multicast traffic.
> >  The expression
> > -.Dq Cm ip Ns [0] & 0xf != 5
> > -catches all IP packets with options.
> > +.Dq ip[0] & 0xf != 5
> > +catches all IPv4 packets with options.
> >  The expression
> > -.Dq Cm ip Ns [6:2] & 0x1fff = 0
> > -catches only unfragmented datagrams and frag zero of fragmented datagrams.
> > +.Dq ip[6:2] & 0x1fff = 0
> > +catches only unfragmented IPv4 datagrams and frag zero of fragmented
> > +IPv4 datagrams.
> >  This check is implicitly applied to the
> >  .Cm tcp
> >  and
> >  .Cm udp
> >  index operations.
> >  For instance,
> > -.Dq Cm tcp Ns [0]
> > +.Dq tcp[0]
> >  always means the first byte of the TCP header,
> >  and never means the first byte of an intervening fragment.
> > +.Pp
> > +Some offsets and field values may be expressed as names rather than
> > +as numeric values.
> > +The following protocol header field offsets are available:
> > +.Cm icmptype
> > +(ICMP type field),
> > +.Cm icmpcode
> > +(ICMP code field), and
> > +.Cm tcpflags
> > +(TCP flags field).
> > +.Pp
> > +The following ICMP type field values are available:
> > +.Cm icmp-echoreply ,
> > +.Cm icmp-unreach ,
> > +.Cm icmp-sourcequench ,
> > +.Cm icmp-redirect ,
> > +.Cm icmp-echo ,
> > +.Cm icmp-routeradvert ,
> > +.Cm icmp-routersolicit ,
> > +.Cm icmp-timxceed ,
> > +.Cm icmp-paramprob ,
> > +.Cm icmp-tstamp ,
> > +.Cm icmp-tstampreply ,
> > +.Cm icmp-ireq ,
> > +.Cm icmp-ireqreply ,
> > +.Cm icmp-maskreq ,
> > +.Cm and
> > +.Cm icmp-maskreply .
> > +.Pp
> > +The following TCP flags field values are available:
> > +.Cm tcp-fin ,
> > +.Cm tcp-syn ,
> > +.Cm tcp-rst ,
> > +.Cm tcp-push ,
> > +.Cm tcp-ack ,
> > +.Cm tcp-urg .
> >  .El
> >  .Pp
> > -Primitives may be combined using a parenthesized group of primitives and
> > -operators.
> > +Primitives may be combined using
> > +a parenthesized group of primitives and operators.
> >  Parentheses are special to the shell and must be escaped.
> >  Allowable primitives and operators are:
> >  .Bd -ragged -offset indent
> > @@ -972,13 +1236,16 @@ or
> >  .Ed
> >  .Pp
> >  Negation has highest precedence.
> > -Alternation and concatenation have equal precedence and associate left to 
> > right.
> > +Alternation and concatenation have equal precedence and associate
> > +left to right.
> >  Explicit
> >  .Cm and
> >  tokens, not juxtaposition,
> >  are now required for concatenation.
> >  .Pp
> > -If an identifier is given without a keyword, the most recent keyword is 
> > assumed.
> > +If an identifier is given without a keyword, the most recent keyword
> > +is assumed.
> > +For example,
> >  For example,
> >  .Bd -ragged -offset indent
> >  .Cm not host
> > @@ -1000,14 +1267,6 @@ which should not be confused with
> >  .Cm not
> >  .Pq Cm host No vs Cm or No ace
> >  .Ed
> > -.Pp
> > -Expression arguments can be passed to
> > -.Nm
> > -as either a single argument or as multiple arguments,
> > -whichever is more convenient.
> > -Generally, if the expression contains shell metacharacters,
> > -it is easier to pass it as a single, quoted argument.
> > -Multiple arguments are concatenated with spaces before being parsed.
> >  .Sh EXAMPLES
> >  To print all packets arriving at or departing from sundown:
> >  .Pp
> > 
> 
 

Reply via email to