• Amir Vadai's avatar
    net/act_pedit: Support using offset relative to the conventional network headers · 71d0ed70
    Amir Vadai authored
    Extend pedit to enable the user setting offset relative to network
    headers. This change would enable to work with more complex header
    schemes (vs the simple IPv4 case) where setting a fixed offset relative
    to the network header is not enough.
    
    After this patch, the action has information about the exact header type
    and field inside this header. This information could be used later on
    for hardware offloading of pedit.
    
    Backward compatibility was being kept:
    1. Old kernel <-> new userspace
    2. New kernel <-> old userspace
    3. add rule using new userspace <-> dump using old userspace
    4. add rule using old userspace <-> dump using new userspace
    
    When using the extended api, new netlink attributes are being used. This
    way, operation will fail in (1) and (3) - and no malformed rule be added
    or dumped. Of course, new user space that doesn't need the new
    functionality can use the old netlink attributes and operation will
    succeed.
    Since action can support both api's, (2) should work, and it is easy to
    write the new user space to have (4) work.
    
    The action is having a strict check that only header types and commands
    it can handle are accepted. This way future additions will be much
    easier.
    
    Usage example:
    $ tc filter add dev enp0s9 protocol ip parent ffff: \
      flower \
        ip_proto tcp \
        dst_port 80 \
      action pedit munge tcp dport set 8080 pipe \
      action mirred egress redirect dev veth0
    
    Will forward tcp port whose original dest port is 80, while modifying
    the destination port to 8080.
    Signed-off-by: default avatarAmir Vadai <amir@vadai.me>
    Reviewed-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    71d0ed70
act_pedit.c 10.2 KB