универсальный 32-битный фильтр управления трафиком (universal 32bit traffic control filter)
Селекторы (Selectors)
Basically the only real selector is u32 . All others merely
provide a higher level syntax and are internally translated into
u32 .
u32 VAL_MASK_32
u16 VAL_MASK_16
u8 VAL_MASK_8
Match packet data to a given value. The selector name
defines the sample length to extract (32bits for u32,
16bits for u16 and 8bits for u8). Before comparing, the
sample is binary AND'ed with the given mask. This way
uninteresting bits can be cleared before comparison. The
position of the sample is defined by the offset specified
in AT.
ip IP
ip6 IP6
Assume packet starts with an IPv4 ( ip) or IPv6 ( ip6)
header. IP/IP6 then allows to match various header
fields:
src ADDR
dst ADDR
Compare Source or Destination Address fields
against the value of ADDR. The reserved words
default, any and all effectively match any address.
Otherwise an IP address of the particular protocol
is expected, optionally suffixed by a prefix length
to match whole subnets. In case of IPv4 a netmask
may also be given.
dsfield VAL_MASK_8
IPv4 only. Match the packet header's DSCP/ECN
field. Synonyms to this are tos and precedence.
ihl VAL_MASK_8
IPv4 only. Match the Internet Header Length field.
Note that the value's unit is 32bits, so to match a
packet with 24byte header length u8_value has to be
6.
protocol VAL_MASK_8
Match the Protocol (IPv4) or Next Header (IPv6)
field value, e.g. 6 for TCP.
icmp_type VAL_MASK_8
icmp_code VAL_MASK_8
Assume a next-header protocol of icmp or ipv6-icmp
and match Type or Code field values. This is
dangerous, as the code assumes minimal header size
for IPv4 and lack of extension headers for IPv6.
sport VAL_MASK_16
dport VAL_MASK_16
Match layer four source or destination ports. This
is dangerous as well, as it assumes a suitable
layer four protocol is present (which has Source
and Destination Port fields right at the start of
the header and 16bit in size). Also minimal header
size for IPv4 and lack of IPv6 extension headers is
assumed.
nofrag
firstfrag
df
mf IPv4 only, check certain flags and fragment offset
values. Match if the packet is not a fragment
(nofrag), the first fragment (firstfrag), if Don't
Fragment (df) or More Fragments (mf) bits are set.
priority VAL_MASK_8
IPv6 only. Match the header's Traffic Class field,
which has the same purpose and semantics of IPv4's
ToS field since RFC 3168: upper six bits are DSCP,
the lower two ECN.
flowlabel VAL_MASK_32
IPv6 only. Match the Flow Label field's value. Note
that Flow Label itself is only 20bytes long, which
are the least significant ones here. The remaining
upper 12bytes match Version and Traffic Class
fields.
tcp TCPUDP
udp TCPUDP
Match fields of next header of protocol TCP or UDP. The
possible values for TCPDUP are:
src VAL_MASK_16
Match on Source Port field value.
dst VALMASK_16
Match on Destination Port field value.
icmp ICMP
Match fields of next header of protocol ICMP. The possible
values for ICMP are:
type VAL_MASK_8
Match on ICMP Type field.
code VAL_MASK_8
Match on ICMP Code field.
mark VAL_MASK_32
Match on netfilter fwmark value.
ether ETHER
Match on ethernet header fields. Possible values for ETHER
are:
src ether_address AT
dst ether_address AT
Match on source or destination ethernet address.
This is dangerous: It assumes an ethernet header is
present at the start of the packet. This will
probably lead to unexpected things if used with
layer three interfaces like e.g. tun or ppp.