.TH filter ematch "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.
