@@ -52,6 +52,7 @@ enum ibv_flow_flags {
.in +8
IBV_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK = 1 << 0, /* Apply the rules on packets that were sent from the attached QP through loopback */
IBV_FLOW_ATTR_FLAGS_DONT_TRAP = 1 << 1, /* Rule doesn't trap received packets, allowing them to match lower prioritized rules */
+IBV_FLOW_ATTR_FLAGS_EGRESS = 1 << 2, /* Match sent packets against EGRESS rules and carry associated actions if required */
.in -8
};
.fi
@@ -87,6 +88,10 @@ struct ibv_flow_xxx_filter mask; /* Defines which bits from the filter value are
.PP
Each spec struct holds the relevant network layer parameters for matching. To enforce the match, the user sets a mask for each parameter.
.br
+Packets coming from the wire are matched against the flow specification. If a match is found, the associated flow actions are executed on the packet.
+.br
+In ingress flows, the QP parameter is treated as another action of scattering the packet to the respected QP.
+.br
If the bit is set in the mask, the corresponding bit in the value should be matched.
.br
Note that most vendors support either full mask (all "1"s) or zero mask (all "0"s).
@@ -142,6 +147,8 @@ or
.br
5. No specifications are needed for IBV_FLOW_ATTR_SNIFFER rule type.
.br
+6. When IBV_FLOW_ATTR_FLAGS_EGRESS flag is set, the qp parameter is used only as a mean to get the device.
+.br
.PP
.SH EXAMPLE
.br
@@ -1357,6 +1357,7 @@ struct ibv_ah {
enum ibv_flow_flags {
IBV_FLOW_ATTR_FLAGS_ALLOW_LOOP_BACK = 1 << 0,
IBV_FLOW_ATTR_FLAGS_DONT_TRAP = 1 << 1,
+ IBV_FLOW_ATTR_FLAGS_EGRESS = 1 << 2,
};
enum ibv_flow_attr_type {