• Mark Bloch's avatar
    RDMA/mlx5: Expose steering anchor to userspace · 0c6ab0ca
    Mark Bloch authored
    Expose a steering anchor per priority to allow users to re-inject
    packets back into default NIC pipeline for additional processing.
    
    MLX5_IB_METHOD_STEERING_ANCHOR_CREATE returns a flow table ID which
    a user can use to re-inject packets at a specific priority.
    
    A FTE (flow table entry) can be created and the flow table ID
    used as a destination.
    
    When a packet is taken into a RDMA-controlled steering domain (like
    software steering) there may be a need to insert the packet back into
    the default NIC pipeline. This exposes a flow table ID to the user that can
    be used as a destination in a flow table entry.
    
    With this new method priorities that are exposed to users via
    MLX5_IB_METHOD_FLOW_MATCHER_CREATE can be reached from a non-zero UID.
    
    As user-created flow tables (via RDMA DEVX) are created with a non-zero UID
    thus it's impossible to point to a NIC core flow table (core driver flow tables
    are created with UID value of zero) from userspace.
    Create flow tables that are exposed to users with the shared UID, this
    allows users to point to default NIC flow tables.
    
    Steering loops are prevented at FW level as FW enforces that no flow
    table at level X can point to a table at level lower than X.
    
    Link: https://lore.kernel.org/all/20220703205407.110890-6-saeed@kernel.org/Signed-off-by: default avatarMark Bloch <mbloch@nvidia.com>
    Reviewed-by: default avatarYishai Hadas <yishaih@nvidia.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
    0c6ab0ca
mlx5_ib.h 42.7 KB