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.