ex
Use extended pedit. EXTENDED_LAYERED_OP and the
add/decrement CMD_SPEC are allowed only in this mode.
offset
OFFSET { u32
| u16
| u8
}
Specify the offset at which to change data. OFFSET is a
signed integer, it's base is automatically chosen (e.g.
hex if prefixed by 0x
or octal if prefixed by 0
). The
second argument specifies the length of data to change,
that is four bytes (u32
), two bytes (u16
) or a single byte
(u8
).
at
AT offmask
MASK shift
SHIFT
This is an optional part of RAW_OP which allows to have a
variable OFFSET depending on packet data at offset AT,
which is binary ANDed with MASK and right-shifted by SHIFT
before adding it to OFFSET.
eth
ETHHDR_FIELD
Change an ETH header field. The supported keywords for
ETHHDR_FIELD are:
src
dst
Source or destination MAC address in the standard
format: XX:XX:XX:XX:XX:XX
type
Ether-type in numeric value
ip
IPHDR_FIELD
Change an IPv4 header field. The supported keywords for
IPHDR_FIELD are:
src
dst
Source or destination IP address, a four-byte
value.
tos
dsfield
precedence
Type Of Service field, an eight-bit value.
ihl
Change the IP Header Length field, a four-bit
value.
protocol
Next-layer Protocol field, an eight-bit value.
nofrag
firstfrag
ce
df
mf
Change IP header flags. Note that the value to pass
to the set
command is not just a bit value, but the
full byte including the flags field. Though only
the relevant bits of that value are respected, the
rest ignored.
ip
BEYOND_IPHDR_FIELD
Supported only for non-extended layered op. It is passed
to the kernel as offsets relative to the beginning of the
IP header and assumes the IP header is of minimum size (20
bytes). The supported keywords for BEYOND_IPHDR_FIELD are:
dport
sport
Destination or source port numbers, a 16-bit value.
Indeed, IPv4 headers don't contain this
information. Instead, this will set an offset which
suits at least TCP and UDP if the IP header is of
minimum size (20 bytes). If not, this will do
unexpected things.
icmp_type
icmp_code
Again, this allows to change data past the actual
IP header itself. It assumes an ICMP header is
present immediately following the (minimal sized)
IP header. If it is not or the latter is bigger
than the minimum of 20 bytes, this will do
unexpected things. These fields are eight-bit
values.
ip
EX_IPHDR_FIELD
Supported only when ex is used. The supported keywords for
EX_IPHDR_FIELD are:
ttl
ip6
IP6HDR_FIELD
The supported keywords for IP6HDR_FIELD are:
src
dst
traffic_class
flow_lbl
payload_len
nexthdr
hoplimit
tcp
TCPHDR_FIELD
The supported keywords for TCPHDR_FIELD are:
sport
dport
Source or destination TCP port number, a 16-bit
value.
flags
udp
UDPHDR_FIELD
The supported keywords for UDPHDR_FIELD are:
sport
dport
Source or destination TCP port number, a 16-bit
value.
clear
Clear the addressed data (i.e., set it to zero).
invert
Swap every bit in the addressed data.
set
VAL
Set the addressed data to a specific value. The size of
VAL is defined by either one of the u32
, u16
or u8
keywords in RAW_OP, or the size of the addressed header
field in LAYERED_OP.
add
VAL
Add the addressed data by a specific value. The size of
VAL is defined by the size of the addressed header field
in EXTENDED_LAYERED_OP. This operation is supported only
for extended layered op.
decrement
Decrease the addressed data by one. This operation is
supported only for ip ttl
and ip6 hoplimit
.
preserve
Keep the addressed data as is.
retain
RVAL
This optional extra part of CMD_SPEC allows to exclude
bits from being changed. Supported only for 32 bits fields
or smaller.
CONTROL
The following keywords allow to control how the tree of
qdisc, classes, filters and actions is further traversed
after this action.
reclassify
Restart with the first filter in the current list.
pipe
Continue with the next action attached to the same
filter.
drop
shot
Drop the packet.
continue
Continue classification with the next filter in
line.
pass
Finish classification process and return to calling
qdisc for further packet processing. This is the
default.