Blame man/man8/tc-ematch.8

Packit d3f73b
.TH ematch 8 "6 August 2012" iproute2 Linux
Packit d3f73b
.
Packit d3f73b
.SH NAME
Packit d3f73b
ematch \- extended matches for use with "basic" or "flow" filters
Packit d3f73b
.
Packit d3f73b
.SH SYNOPSIS
Packit d3f73b
.sp
Packit d3f73b
.ad l
Packit d3f73b
.B "tc filter add .. basic match"
Packit d3f73b
.RI EXPR
Packit d3f73b
.B .. flowid ..
Packit d3f73b
.sp
Packit d3f73b
Packit d3f73b
.IR EXPR " := " TERM " [ { "
Packit d3f73b
.B and | or
Packit d3f73b
}
Packit d3f73b
.IR EXPR
Packit d3f73b
]
Packit d3f73b
Packit d3f73b
.IR TERM " := [ " \fBnot " ] { " MATCH " | '(' " EXPR " ')' } "
Packit d3f73b
Packit d3f73b
.IR MATCH " := " module " '(' " ARGS " ')' "
Packit d3f73b
Packit d3f73b
.IR ARGS " := " ARG1 " " ARG2 " ..
Packit d3f73b
Packit d3f73b
.SH MATCHES
Packit d3f73b
Packit d3f73b
.SS cmp
Packit d3f73b
Simple comparison ematch: arithmetic compare of packet data to a given value.
Packit d3f73b
Packit d3f73b
.IR cmp "( " ALIGN " at " OFFSET " [ " ATTRS " ] { " eq " | " lt " | " gt " } " VALUE " )
Packit d3f73b
Packit d3f73b
.IR ALIGN " := { " u8 " | " u16 " | " u32 " } "
Packit d3f73b
Packit d3f73b
.IR ATTRS " := [ layer " LAYER " ] [ mask " MASK " ] [ trans ]
Packit d3f73b
Packit d3f73b
.IR LAYER " := { " link " | " network " | " transport " | " 0..2 " }
Packit d3f73b
Packit d3f73b
.SS meta
Packit d3f73b
Metadata ematch
Packit d3f73b
Packit d3f73b
.IR meta "( " OBJECT " { " eq " | " lt " |" gt " } " OBJECT " )
Packit d3f73b
Packit d3f73b
.IR OBJECT " := { " META_ID " |  " VALUE " }
Packit d3f73b
Packit d3f73b
.IR META_ID " := " id " [ shift " SHIFT " ] [ mask " MASK " ]
Packit d3f73b
Packit d3f73b
.TP
Packit d3f73b
meta attributes:
Packit d3f73b
Packit d3f73b
\fBrandom\fP 32 bit random value
Packit d3f73b
Packit d3f73b
\fBloadavg_1\fP Load average in last 5 minutes
Packit d3f73b
Packit d3f73b
\fBnf_mark\fP Netfilter mark
Packit d3f73b
Packit d3f73b
\fBvlan\fP Vlan tag
Packit d3f73b
Packit d3f73b
\fBsk_rcvbuf\fP Receive buffer size
Packit d3f73b
Packit d3f73b
\fBsk_snd_queue\fP Send queue length
Packit d3f73b
Packit d3f73b
.PP
Packit d3f73b
A full list of meta attributes can be obtained via
Packit d3f73b
Packit d3f73b
# tc filter add dev eth1 basic match 'meta(list)'
Packit d3f73b
Packit d3f73b
.SS nbyte
Packit d3f73b
match packet data byte sequence
Packit d3f73b
Packit d3f73b
.IR nbyte "( " NEEDLE  " at " OFFSET " [ layer " LAYER " ] )
Packit d3f73b
Packit d3f73b
.IR NEEDLE  " := { " string " | " c-escape-sequence "  } "
Packit d3f73b
Packit d3f73b
.IR OFFSET  " := " int
Packit d3f73b
Packit d3f73b
.IR LAYER " := { " link " | " network " | " transport " | " 0..2 " }
Packit d3f73b
Packit d3f73b
.SS u32
Packit d3f73b
u32 ematch
Packit d3f73b
Packit d3f73b
.IR u32 "( " ALIGN " " VALUE " " MASK " at [ nexthdr+ ] " OFFSET " )
Packit d3f73b
Packit d3f73b
.IR ALIGN " := { " u8 " | " u16 " | " u32 " }
Packit d3f73b
Packit d3f73b
.SS ipset
Packit d3f73b
test packet against ipset membership
Packit d3f73b
Packit d3f73b
.IR ipset "( " SETNAME " " FLAGS " )
Packit d3f73b
Packit d3f73b
.IR SETNAME " := " string
Packit d3f73b
Packit d3f73b
.IR FLAGS " := { " FLAG " [, " FLAGS "] }
Packit d3f73b
Packit d3f73b
The flag options are the same as those used by the iptables "set" match.
Packit d3f73b
Packit d3f73b
When using the ipset ematch with the "ip_set_hash:net,iface" set type,
Packit d3f73b
the interface can be queried using "src,dst (source ip address, outgoing interface) or
Packit d3f73b
"src,src" (source ip address, incoming interface) syntax.
Packit d3f73b
Packit d3f73b
.SS ipt
Packit d3f73b
test packet against xtables matches
Packit d3f73b
Packit d3f73b
.IR ipt "( " [-6] " "-m " " MATCH_NAME " " FLAGS " )
Packit d3f73b
Packit d3f73b
.IR MATCH_NAME " := " string
Packit d3f73b
Packit d3f73b
.IR FLAGS " := { " FLAG " [, " FLAGS "] }
Packit d3f73b
Packit d3f73b
The flag options are the same as those used by the xtable match used.
Packit d3f73b
Packit d3f73b
.SH CAVEATS
Packit d3f73b
Packit d3f73b
The ematch syntax uses '(' and ')' to group expressions. All braces need to be
Packit d3f73b
escaped properly to prevent shell commandline from interpreting these directly.
Packit d3f73b
Packit d3f73b
When using the ipset ematch with the "ifb" device, the outgoing device will be the
Packit d3f73b
ifb device itself, e.g. "ifb0".
Packit d3f73b
The original interface (i.e. the device the packet arrived on) is treated as the incoming interface.
Packit d3f73b
Packit d3f73b
.SH EXAMPLE & USAGE
Packit d3f73b
Packit d3f73b
# tc filter add .. basic match ...
Packit d3f73b
Packit d3f73b
# 'cmp(u16 at 3 layer 2 mask 0xff00 gt 20)'
Packit d3f73b
Packit d3f73b
# 'meta(nfmark gt 24)' and 'meta(tcindex mask 0xf0 eq 0xf0)'
Packit d3f73b
Packit d3f73b
# 'nbyte("ababa" at 12 layer 1)'
Packit d3f73b
Packit d3f73b
# 'u32(u16 0x1122 0xffff at nexthdr+4)'
Packit d3f73b
Packit d3f73b
Check if packet source ip address is member of set named \fBbulk\fP:
Packit d3f73b
Packit d3f73b
# 'ipset(bulk src)'
Packit d3f73b
Packit d3f73b
Check if packet source ip and the interface the packet arrived on is member of "hash:net,iface" set named \fBinteractive\fP:
Packit d3f73b
Packit d3f73b
# 'ipset(interactive src,src)'
Packit d3f73b
Packit d3f73b
Check if packet matches an IPSec state with reqid 1:
Packit d3f73b
Packit d3f73b
# 'ipt(-m policy --dir in --pol ipsec --reqid 1)'
Packit d3f73b
Packit d3f73b
.SH "AUTHOR"
Packit d3f73b
Packit d3f73b
The extended match infrastructure was added by Thomas Graf.