• Y
    skbuff: Add the offload_mr_fwd_mark field · abf4bb6b
    Yotam Gigi 提交于
    Similarly to the offload_fwd_mark field, the offload_mr_fwd_mark field is
    used to allow partial offloading of MFC multicast routes.
    
    Switchdev drivers can offload MFC multicast routes to the hardware by
    registering to the FIB notification chain. When one of the route output
    interfaces is not offload-able, i.e. has different parent ID, the route
    cannot be fully offloaded by the hardware. Examples to non-offload-able
    devices are a management NIC, dummy device, pimreg device, etc.
    
    Similar problem exists in the bridge module, as one bridge can hold
    interfaces with different parent IDs. At the bridge, the problem is solved
    by the offload_fwd_mark skb field.
    
    Currently, when a route cannot go through full offload, the only solution
    for a switchdev driver is not to offload it at all and let the packet go
    through slow path.
    
    Using the offload_mr_fwd_mark field, a driver can indicate that a packet
    was already forwarded by hardware to all the devices with the same parent
    ID as the input device. Further patches in this patch-set are going to
    enhance ipmr to skip multicast forwarding to devices with the same parent
    ID if a packets is marked with that field.
    
    The reason why the already existing "offload_fwd_mark" bit cannot be used
    is that a switchdev driver would want to make the distinction between a
    packet that has already gone through L2 forwarding but did not go through
    multicast forwarding, and a packet that has already gone through both L2
    and multicast forwarding.
    
    For example: when a packet is ingressing from a switchport enslaved to a
    bridge, which is configured with multicast forwarding, the following
    scenarios are possible:
     - The packet can be trapped to the CPU due to exception while multicast
       forwarding (for example, MTU error). In that case, it had already gone
       through L2 forwarding in the hardware, thus A switchdev driver would
       want to set the skb->offload_fwd_mark and not the
       skb->offload_mr_fwd_mark.
     - The packet can also be trapped due to a pimreg/dummy device used as one
       of the output interfaces. In that case, it can go through both L2 and
       (partial) multicast forwarding inside the hardware, thus a switchdev
       driver would want to set both the skb->offload_fwd_mark and
       skb->offload_mr_fwd_mark.
    Signed-off-by: NYotam Gigi <yotamg@mellanox.com>
    Reviewed-by: NIdo Schimmel <idosch@mellaox.com>
    Signed-off-by: NJiri Pirko <jiri@mellanox.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    abf4bb6b
skbuff.h 116.9 KB