Generic packet editor action in tc(8) Linux (NAME) tc-pedit - (SYNOPSIS) tc ... action pedit [ex] munge { RAW_OP | LAYERED_OP | EXTENDED_LAYERED_OP } [ CONTROL ] RAW_OP := offset OFFSET { u8 | u16 | u32 } [ AT_SPEC ] CMD_SPEC AT_SPEC := at AT offmask MASK shift SHIFT LAYERED_OP := { ip IPHDR_FIELD | ip BEYOND_IPHDR_FIELD } CMD_SPEC EXTENDED_LAYERED_OP := { eth ETHHDR_FIELD | ip IPHDR_FIELD | ip EX_IPHDR_FIELD | ip6 IP6HDR_FIELD | tcp TCPHDR_FIELD | udp UDPHDR_FIELD } CMD_SPEC ETHHDR_FIELD := { src | dst | type } IPHDR_FIELD := { src | dst | tos | dsfield | ihl | protocol | precedence | nofrag | firstfrag | ce | df } BEYOND_IPHDR_FIELD := { dport | sport | icmp_type | icmp_code } EX_IPHDR_FIELD := { ttl } IP6HDR_FIELD := { src | dst | traffic_class | flow_lbl | payload_len | nexthdr | hoplimit } TCPHDR_FIELD := { sport | dport | flags } UDPHDR_FIELD := { sport | dport } CMD_SPEC := { clear | invert | set VAL | add VAL | decrement | preserve } [ retain RVAL ] CONTROL := { reclassify | pipe | drop | shot | continue | pass | goto chain CHAIN_INDEX } (DESCRIPTION) pedit . RAW_OP (header) . (OPTIONS) ex pedit. EXTENDED_LAYERED_OP add/decrement CMD_SPEC . offset OFFSET { u32 | u16 | u8 } () . OFFSET ( 0x 0). (u32) (u16) (u8). at AT offmask MASK shift SHIFT RAW_OP OFFSET AT MASK AND OFFSET SHIFT . eth ETHHDR_FIELD (ETH). ETHHDR_FIELD : src dst MAC : XX:XX:XX:XX:XX:XX type (Ether-type). ip IPHDR_FIELD IPv4. IPHDR_FIELD : src dst IP . tos dsfield precedence (Type Of Service) . ihl (IP Header Length) . protocol (Next-layer Protocol) . nofrag firstfrag ce df mf IP. set . ip BEYOND_IPHDR_FIELD (non-extended) . IP IP ( ) . BEYOND_IPHDR_FIELD : dport sport . IPv4 IP ( ) TCP UDP . . icmp_type icmp_code IP . ICMP IP ( ) . IP . . ip EX_IPHDR_FIELD ex . EX_IPHDR_FIELD : ttl ip6 IP6HDR_FIELD IP6HDR_FIELD : src dst traffic_class flow_lbl payload_len nexthdr hoplimit tcp TCPHDR_FIELD TCPHDR_FIELD : sport dport TCP . flags udp UDPHDR_FIELD UDPHDR_FIELD : sport dport UDP . clear ( ). invert . set VAL . VAL u32 u16 u8 RAW_OP LAYERED_OP . add VAL . VAL EXTENDED_LAYERED_OP . (extended layered op) . decrement . ip ttl ip6 hoplimit. . preserve . retain RVAL CMD_SPEC . . CONTROL qdisc . reclassify . pipe . drop shot . continue . pass qdisc . . (EXAMPLES) (port redirection). : qdisc . qdisc ingress qdisc (HTB ) : tc qdisc replace dev eth0 root handle 1: htb tc qdisc add dev eth0 ingress handle ffff: pedit . u32 pedit : tc filter add dev eth0 parent 1: u32 \ match ip dport 23 0xffff \ action pedit pedit munge ip dport set 22 tc filter add dev eth0 parent ffff: u32 \ match ip sport 22 0xffff \ action pedit pedit munge ip sport set 23 tc filter add dev eth0 parent ffff: u32 \ match ip sport 22 0xffff \ action pedit ex munge ip dst set 192.168.1.199 tc filter add dev eth0 parent ffff: u32 \ match ip sport 22 0xffff \ action pedit ex munge ip6 dst set fe80::dacb:8aff:fec7:320e tc filter add dev eth0 parent ffff: u32 \ match ip sport 22 0xffff \ action pedit ex munge eth dst set 11:22:33:44:55:66 tc filter add dev eth0 parent ffff: u32 \ match ip dport 23 0xffff \ action pedit ex munge tcp dport set 22 retain . DSCP dsfield $DSCP ECN: tc filter add dev eth0 ingress flower ... \ action pedit ex munge ip dsfield set $((DSCP << 2)) retain 0xfc ECN 1 DSCP: tc filter add dev eth0 ingress flower ... \ action pedit ex munge ip dsfield set 1 retain 0x3 (SEE ALSO) tc(8), tc-htb(8), tc-u32(8) iproute2 12 Jan 2015 Generic packet editor action in tc(8)