Flow steering is a model which steers network flows based on flow specifications to specific QPs. Those flows can be either unicast or multicast network flows. In order to maintain flexibility, domains and priorities are used. Flow steering uses a methodology of flow attribute, which is a combination of L@-L4 flow specifications, a destination QP and a priority. Flow steering rules may be inserted either by using ethtool or by using InfiniBand verbs. The verbs abstraction uses a different terminology from the flow attribute (ibv_flow_attr), defined by a combination of specifications (struct ibv_flow_spec_*).
Flow Steering Experimental vs. RDMA-Core Verbs and Capabilities
Experimental Verbs | RDMA-Core | ||
---|---|---|---|
Verbs | |||
ibv_exp_create_flow | ibv_create_flow | ||
IBV_EXP_FLOW_ATTR_* | IBV_FLOW_ATTR | ||
IBV_EXP_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK | IBV_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK | ||
IBV_EXP_FLOW_SPEC_ETH | IBV_FLOW_SPEC_ETH | ||
IBV_EXP_FLOW_SPEC_IB | Not supported by RDMA-CORE | ||
IBV_EXP_FLOW_SPEC_IPV4 | IBV_FLOW_SPEC_IPV4 | ||
IBV_EXP_FLOW_SPEC_IPV6 | IBV_FLOW_SPEC_IPV6 | ||
IBV_EXP_FLOW_SPEC_IPV4_EXT | IBV_FLOW_SPEC_IPV4_EXT | ||
IBV_EXP_FLOW_SPEC_IPV6_EXT | IBV_FLOW_SPEC_IPV6 | ||
IBV_EXP_FLOW_SPEC_TCP | IBV_EXP_FLOW_SPEC_TCP | ||
IBV_EXP_FLOW_SPEC_UDP | IBV_FLOW_SPEC_UDP | ||
IBV_EXP_FLOW_SPEC_VXLAN_TUNNEL | IBV_FLOW_SPEC_VXLAN_TUNNEL | ||
IBV_EXP_FLOW_SPEC_INNER | IBV_FLOW_SPEC_INNER | ||
IBV_EXP_FLOW_SPEC_ACTION_TAG | IBV_FLOW_SPEC_ACTION_TAG | ||
IBV_EXP_FLOW_SPEC_ACTION_DROP | IBV_FLOW_SPEC_ACTION_DROP | ||
Ibv_exp_flow_spec_* | Ibv_flow_spec_* | ||
Ibv_exp_destroy_flow | Ibv_destroy_flow | ||
Capabilities | |||
IBV_EXP_DEVICE_MANAGED_FLOW_STEERING | IBV_DEVICE_MANAGED_FLOW_STEERING |
Relevant Man Pages
ibv_create_flow: https://github.com/linux-rdma/rdma-core/blob/master/libibverbs/man/ibv_create_flow.3
Example
https://github.com/linux-rdma/rdma-core/blob/master/libibverbs/man/ibv_create_flow.3