IB/core: Introduce drop flow specification
This flow steering specification identifies flow for drop by the HW. If user create a flow only with the drop specification, then all the packets that hit this flow will be dropped, otherwise the HW will drop only the packets that match the other L2/L3/L4 specifications. Signed-off-by: Slava Shwartsman <slavash@mellanox.com> Reviewed-by: Maor Gottlieb <maorg@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Родитель
19cc75249a
Коммит
483a3966b5
|
@ -233,6 +233,7 @@ struct ib_uverbs_flow_spec {
|
|||
struct ib_uverbs_flow_spec_tcp_udp tcp_udp;
|
||||
struct ib_uverbs_flow_spec_ipv6 ipv6;
|
||||
struct ib_uverbs_flow_spec_action_tag flow_tag;
|
||||
struct ib_uverbs_flow_spec_action_drop drop;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -2689,6 +2689,13 @@ static int kern_spec_to_ib_spec_action(struct ib_uverbs_flow_spec *kern_spec,
|
|||
ib_spec->flow_tag.size = sizeof(struct ib_flow_spec_action_tag);
|
||||
ib_spec->flow_tag.tag_id = kern_spec->flow_tag.tag_id;
|
||||
break;
|
||||
case IB_FLOW_SPEC_ACTION_DROP:
|
||||
if (kern_spec->drop.size !=
|
||||
sizeof(struct ib_uverbs_flow_spec_action_drop))
|
||||
return -EINVAL;
|
||||
|
||||
ib_spec->drop.size = sizeof(struct ib_flow_spec_action_drop);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
|
@ -1679,6 +1679,7 @@ enum ib_flow_spec_type {
|
|||
IB_FLOW_SPEC_INNER = 0x100,
|
||||
/* Actions */
|
||||
IB_FLOW_SPEC_ACTION_TAG = 0x1000,
|
||||
IB_FLOW_SPEC_ACTION_DROP = 0x1001,
|
||||
};
|
||||
#define IB_FLOW_SPEC_LAYER_MASK 0xF0
|
||||
#define IB_FLOW_SPEC_SUPPORT_LAYERS 8
|
||||
|
@ -1807,6 +1808,11 @@ struct ib_flow_spec_action_tag {
|
|||
u32 tag_id;
|
||||
};
|
||||
|
||||
struct ib_flow_spec_action_drop {
|
||||
enum ib_flow_spec_type type;
|
||||
u16 size;
|
||||
};
|
||||
|
||||
union ib_flow_spec {
|
||||
struct {
|
||||
u32 type;
|
||||
|
@ -1819,6 +1825,7 @@ union ib_flow_spec {
|
|||
struct ib_flow_spec_ipv6 ipv6;
|
||||
struct ib_flow_spec_tunnel tunnel;
|
||||
struct ib_flow_spec_action_tag flow_tag;
|
||||
struct ib_flow_spec_action_drop drop;
|
||||
};
|
||||
|
||||
struct ib_flow_attr {
|
||||
|
|
|
@ -947,6 +947,17 @@ struct ib_uverbs_flow_spec_action_tag {
|
|||
__u32 reserved1;
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_spec_action_drop {
|
||||
union {
|
||||
struct ib_uverbs_flow_spec_hdr hdr;
|
||||
struct {
|
||||
__u32 type;
|
||||
__u16 size;
|
||||
__u16 reserved;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_tunnel_filter {
|
||||
__be32 tunnel_id;
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче