From: Pieter Jansen van Vuuren <[email protected]>

Refactored shared ip header code for IPv4 and IPv6 in match offload.

Signed-off-by: Pieter Jansen van Vuuren <[email protected]>
Reviewed-by: Jakub Kicinski <[email protected]>
Signed-off-by: Simon Horman <[email protected]>
---
 drivers/net/ethernet/netronome/nfp/flower/cmsg.h  | 19 +++----
 drivers/net/ethernet/netronome/nfp/flower/match.c | 61 +++++++++++------------
 2 files changed, 38 insertions(+), 42 deletions(-)

diff --git a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h 
b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h
index 28c1cd5b823b..db32f129aded 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h
+++ b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h
@@ -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;
diff --git a/drivers/net/ethernet/netronome/nfp/flower/match.c 
b/drivers/net/ethernet/netronome/nfp/flower/match.c
index b3bc8279d4fb..26110670ba13 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/match.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/match.c
@@ -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);
@@ -204,13 +193,34 @@ 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,
                        bool mask_version)
 {
        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
-- 
2.11.0

Reply via email to