универсальный 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.