.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
.in +8
.ti -8
.B "tc filter add .. basic match"
.RI EXPR
.B .. flowid ..
.sp

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

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

.ti -8
.IR MATCH " := " module " '(' " ARGS " ')' "

.ti -8
.IR ARGS " := " ARG1 " " ARG2 " ..

.SH MATCHES

.SS cmp
Simple comparison ematch: arithmetic compare of packet data to a given value.
.ti
.IR cmp "( " ALIGN " at " OFFSET " [ " ATTRS " ] { " eq " | " lt " | " gt " } " VALUE " )

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

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

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

.SS meta
Metadata ematch
.ti
.IR meta "( " OBJECT " { " eq " | " lt " |" gt " } " OBJECT " )

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

.ti
.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
.ti
.IR nbyte "( " NEEDLE  " at " OFFSET " [ layer " LAYER " ] )

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

.ti
.IR OFFSET  " := " int

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

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

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

.SS ipset
test packet against ipset membership
.ti
.IR ipset "( " SETNAME " " FLAGS " )

.ti
.IR SETNAME " := " string

.ti
.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.
