forked from luck/tmp_suning_uos_patched
IB/core: Add IPv6 support to flow steering
Add IPv6 flow specification support. Signed-off-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:
parent
89ea94a7b6
commit
4c2aae712c
|
@ -226,6 +226,7 @@ struct ib_uverbs_flow_spec {
|
|||
struct ib_uverbs_flow_spec_eth eth;
|
||||
struct ib_uverbs_flow_spec_ipv4 ipv4;
|
||||
struct ib_uverbs_flow_spec_tcp_udp tcp_udp;
|
||||
struct ib_uverbs_flow_spec_ipv6 ipv6;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -3105,6 +3105,15 @@ static int kern_spec_to_ib_spec(struct ib_uverbs_flow_spec *kern_spec,
|
|||
memcpy(&ib_spec->ipv4.mask, &kern_spec->ipv4.mask,
|
||||
sizeof(struct ib_flow_ipv4_filter));
|
||||
break;
|
||||
case IB_FLOW_SPEC_IPV6:
|
||||
ib_spec->ipv6.size = sizeof(struct ib_flow_spec_ipv6);
|
||||
if (ib_spec->ipv6.size != kern_spec->ipv6.size)
|
||||
return -EINVAL;
|
||||
memcpy(&ib_spec->ipv6.val, &kern_spec->ipv6.val,
|
||||
sizeof(struct ib_flow_ipv6_filter));
|
||||
memcpy(&ib_spec->ipv6.mask, &kern_spec->ipv6.mask,
|
||||
sizeof(struct ib_flow_ipv6_filter));
|
||||
break;
|
||||
case IB_FLOW_SPEC_TCP:
|
||||
case IB_FLOW_SPEC_UDP:
|
||||
ib_spec->tcp_udp.size = sizeof(struct ib_flow_spec_tcp_udp);
|
||||
|
|
|
@ -1569,6 +1569,7 @@ enum ib_flow_spec_type {
|
|||
IB_FLOW_SPEC_IB = 0x22,
|
||||
/* L3 header*/
|
||||
IB_FLOW_SPEC_IPV4 = 0x30,
|
||||
IB_FLOW_SPEC_IPV6 = 0x31,
|
||||
/* L4 headers*/
|
||||
IB_FLOW_SPEC_TCP = 0x40,
|
||||
IB_FLOW_SPEC_UDP = 0x41
|
||||
|
@ -1630,6 +1631,18 @@ struct ib_flow_spec_ipv4 {
|
|||
struct ib_flow_ipv4_filter mask;
|
||||
};
|
||||
|
||||
struct ib_flow_ipv6_filter {
|
||||
u8 src_ip[16];
|
||||
u8 dst_ip[16];
|
||||
};
|
||||
|
||||
struct ib_flow_spec_ipv6 {
|
||||
enum ib_flow_spec_type type;
|
||||
u16 size;
|
||||
struct ib_flow_ipv6_filter val;
|
||||
struct ib_flow_ipv6_filter mask;
|
||||
};
|
||||
|
||||
struct ib_flow_tcp_udp_filter {
|
||||
__be16 dst_port;
|
||||
__be16 src_port;
|
||||
|
@ -1651,6 +1664,7 @@ union ib_flow_spec {
|
|||
struct ib_flow_spec_ib ib;
|
||||
struct ib_flow_spec_ipv4 ipv4;
|
||||
struct ib_flow_spec_tcp_udp tcp_udp;
|
||||
struct ib_flow_spec_ipv6 ipv6;
|
||||
};
|
||||
|
||||
struct ib_flow_attr {
|
||||
|
|
|
@ -867,6 +867,24 @@ struct ib_uverbs_flow_spec_tcp_udp {
|
|||
struct ib_uverbs_flow_tcp_udp_filter mask;
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_ipv6_filter {
|
||||
__u8 src_ip[16];
|
||||
__u8 dst_ip[16];
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_spec_ipv6 {
|
||||
union {
|
||||
struct ib_uverbs_flow_spec_hdr hdr;
|
||||
struct {
|
||||
__u32 type;
|
||||
__u16 size;
|
||||
__u16 reserved;
|
||||
};
|
||||
};
|
||||
struct ib_uverbs_flow_ipv6_filter val;
|
||||
struct ib_uverbs_flow_ipv6_filter mask;
|
||||
};
|
||||
|
||||
struct ib_uverbs_flow_attr {
|
||||
__u32 type;
|
||||
__u16 size;
|
||||
|
|
Loading…
Reference in New Issue
Block a user