mirror of https://gitee.com/openkylin/linux.git
nfp: flower: refactor shared ip header in match offload
Refactored shared ip header code for IPv4 and IPv6 in match offload. Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: Simon Horman <simon.horman@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
90c00f8154
commit
07e1671cfc
|
@ -260,6 +260,13 @@ struct nfp_flower_tp_ports {
|
|||
__be16 port_dst;
|
||||
};
|
||||
|
||||
struct nfp_flower_ip_ext {
|
||||
u8 tos;
|
||||
u8 proto;
|
||||
u8 ttl;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
/* L3 IPv4 details (3W/12B)
|
||||
* 3 2 1
|
||||
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
|
||||
|
@ -272,10 +279,7 @@ struct nfp_flower_tp_ports {
|
|||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
*/
|
||||
struct nfp_flower_ipv4 {
|
||||
u8 tos;
|
||||
u8 proto;
|
||||
u8 ttl;
|
||||
u8 flags;
|
||||
struct nfp_flower_ip_ext ip_ext;
|
||||
__be32 ipv4_src;
|
||||
__be32 ipv4_dst;
|
||||
};
|
||||
|
@ -284,7 +288,7 @@ struct nfp_flower_ipv4 {
|
|||
* 3 2 1
|
||||
* 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | DSCP |ECN| protocol | reserved |
|
||||
* | DSCP |ECN| protocol | ttl | flags |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
* | ipv6_exthdr | res | ipv6_flow_label |
|
||||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
@ -306,10 +310,7 @@ struct nfp_flower_ipv4 {
|
|||
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
*/
|
||||
struct nfp_flower_ipv6 {
|
||||
u8 tos;
|
||||
u8 proto;
|
||||
u8 ttl;
|
||||
u8 reserved;
|
||||
struct nfp_flower_ip_ext ip_ext;
|
||||
__be32 ipv6_flow_label_exthdr;
|
||||
struct in6_addr ipv6_src;
|
||||
struct in6_addr ipv6_dst;
|
||||
|
|
|
@ -146,26 +146,15 @@ nfp_flower_compile_tport(struct nfp_flower_tp_ports *frame,
|
|||
}
|
||||
|
||||
static void
|
||||
nfp_flower_compile_ipv4(struct nfp_flower_ipv4 *frame,
|
||||
struct tc_cls_flower_offload *flow,
|
||||
bool mask_version)
|
||||
nfp_flower_compile_ip_ext(struct nfp_flower_ip_ext *frame,
|
||||
struct tc_cls_flower_offload *flow,
|
||||
bool mask_version)
|
||||
{
|
||||
struct fl_flow_key *target = mask_version ? flow->mask : flow->key;
|
||||
struct flow_dissector_key_ipv4_addrs *addr;
|
||||
struct flow_dissector_key_basic *basic;
|
||||
|
||||
memset(frame, 0, sizeof(struct nfp_flower_ipv4));
|
||||
|
||||
if (dissector_uses_key(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_IPV4_ADDRS)) {
|
||||
addr = skb_flow_dissector_target(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_IPV4_ADDRS,
|
||||
target);
|
||||
frame->ipv4_src = addr->src;
|
||||
frame->ipv4_dst = addr->dst;
|
||||
}
|
||||
|
||||
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
|
||||
struct flow_dissector_key_basic *basic;
|
||||
|
||||
basic = skb_flow_dissector_target(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_BASIC,
|
||||
target);
|
||||
|
@ -203,6 +192,28 @@ nfp_flower_compile_ipv4(struct nfp_flower_ipv4 *frame,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
nfp_flower_compile_ipv4(struct nfp_flower_ipv4 *frame,
|
||||
struct tc_cls_flower_offload *flow,
|
||||
bool mask_version)
|
||||
{
|
||||
struct fl_flow_key *target = mask_version ? flow->mask : flow->key;
|
||||
struct flow_dissector_key_ipv4_addrs *addr;
|
||||
|
||||
memset(frame, 0, sizeof(struct nfp_flower_ipv4));
|
||||
|
||||
if (dissector_uses_key(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_IPV4_ADDRS)) {
|
||||
addr = skb_flow_dissector_target(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_IPV4_ADDRS,
|
||||
target);
|
||||
frame->ipv4_src = addr->src;
|
||||
frame->ipv4_dst = addr->dst;
|
||||
}
|
||||
|
||||
nfp_flower_compile_ip_ext(&frame->ip_ext, flow, mask_version);
|
||||
}
|
||||
|
||||
static void
|
||||
nfp_flower_compile_ipv6(struct nfp_flower_ipv6 *frame,
|
||||
struct tc_cls_flower_offload *flow,
|
||||
|
@ -210,7 +221,6 @@ nfp_flower_compile_ipv6(struct nfp_flower_ipv6 *frame,
|
|||
{
|
||||
struct fl_flow_key *target = mask_version ? flow->mask : flow->key;
|
||||
struct flow_dissector_key_ipv6_addrs *addr;
|
||||
struct flow_dissector_key_basic *basic;
|
||||
|
||||
memset(frame, 0, sizeof(struct nfp_flower_ipv6));
|
||||
|
||||
|
@ -223,22 +233,7 @@ nfp_flower_compile_ipv6(struct nfp_flower_ipv6 *frame,
|
|||
frame->ipv6_dst = addr->dst;
|
||||
}
|
||||
|
||||
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_BASIC)) {
|
||||
basic = skb_flow_dissector_target(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_BASIC,
|
||||
target);
|
||||
frame->proto = basic->ip_proto;
|
||||
}
|
||||
|
||||
if (dissector_uses_key(flow->dissector, FLOW_DISSECTOR_KEY_IP)) {
|
||||
struct flow_dissector_key_ip *flow_ip;
|
||||
|
||||
flow_ip = skb_flow_dissector_target(flow->dissector,
|
||||
FLOW_DISSECTOR_KEY_IP,
|
||||
target);
|
||||
frame->tos = flow_ip->tos;
|
||||
frame->ttl = flow_ip->ttl;
|
||||
}
|
||||
nfp_flower_compile_ip_ext(&frame->ip_ext, flow, mask_version);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in New Issue