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