.TH ematch 8 "6 August 2012" iproute2 Linux
.
.SH NAME
ematch \- extended matches for use with "basic" or "flow" filters
.
.SH SYNOPSIS
.sp
.ad l
.B "tc filter add .. basic match"
.RI EXPR
.B .. flowid ..
.sp

.IR EXPR " := " TERM " [ { "
.B and | or
}
.IR EXPR
]

.IR TERM " := [ " \fBnot " ] { " MATCH " | '(' " EXPR " ')' } "

.IR MATCH " := " module " '(' " ARGS " ')' "

.IR ARGS " := " ARG1 " " ARG2 " ..

.SH MATCHES

.SS cmp
Simple comparison ematch: arithmetic compare of packet data to a given value.

.IR cmp "( " ALIGN " at " OFFSET " [ " ATTRS " ] { " eq " | " lt " | " gt " } " VALUE " )

.IR ALIGN " := { " u8 " | " u16 " | " u32 " } "

.IR ATTRS " := [ layer " LAYER " ] [ mask " MASK " ] [ trans ]

.IR LAYER " := { " link " | " network " | " transport " | " 0..2 " }

.SS meta
Metadata ematch

.IR meta "( " OBJECT " { " eq " | " lt " |" gt " } " OBJECT " )

.IR OBJECT " := { " META_ID " |  " VALUE " }

.IR META_ID " := " id " [ shift " SHIFT " ] [ mask " MASK " ]

.TP
meta attributes:

\fBrandom\fP 32 bit random value

\fBloadavg_1\fP Load average in last 5 minutes

\fBnf_mark\fP Netfilter mark

\fBvlan\fP Vlan tag

\fBsk_rcvbuf\fP Receive buffer size

\fBsk_snd_queue\fP Send queue length

.PP
A full list of meta attributes can be obtained via

# tc filter add dev eth1 basic match 'meta(list)'

.SS nbyte
match packet data byte sequence

.IR nbyte "( " NEEDLE  " at " OFFSET " [ layer " LAYER " ] )

.IR NEEDLE  " := { " string " | " c-escape-sequence "  } "

.IR OFFSET  " := " int

.IR LAYER " := { " link " | " network " | " transport " | " 0..2 " }

.SS u32
u32 ematch

.IR u32 "( " ALIGN " " VALUE " " MASK " at [ nexthdr+ ] " OFFSET " )

.IR ALIGN " := { " u8 " | " u16 " | " u32 " }

.SS ipset
test packet against ipset membership

.IR ipset "( " SETNAME " " FLAGS " )

.IR SETNAME " := " string

.IR FLAGS " := { " FLAG " [, " FLAGS "] }

The flag options are the same as those used by the iptables "set" match.

When using the ipset ematch with the "ip_set_hash:net,iface" set type,
the interface can be queried using "src,dst (source ip address, outgoing interface) or
"src,src" (source ip address, incoming interface) syntax.

.SH CAVEATS

The ematch syntax uses '(' and ')' to group expressions. All braces need to be
escaped properly to prevent shell commandline from interpreting these directly.

When using the ipset ematch with the "ifb" device, the outgoing device will be the
ifb device itself, e.g. "ifb0".
The original interface (i.e. the device the packet arrived on) is treated as the incoming interface.

.SH EXAMPLE & USAGE

# tc filter add .. basic match ...

# 'cmp(u16 at 3 layer 2 mask 0xff00 gt 20)'

# 'meta(nfmark gt 24)' and 'meta(tcindex mask 0xf0 eq 0xf0)'

# 'nbyte("ababa" at 12 layer 1)'

# 'u32(u16 0x1122 0xffff at nexthdr+4)'

Check if packet source ip address is member of set named \fBbulk\fP:

# 'ipset(bulk src)'

Check if packet source ip and the interface the packet arrived on is member of "hash:net,iface" set named \fBinteractive\fP:

# 'ipset(interactive src,src)'

.SH "AUTHOR"

The extended match infrastructure was added by Thomas Graf.
