static void hclge_fd_get_flow_tuples(const struct flow_keys *fkeys,
                                     struct hclge_fd_rule_tuples *tuples)
 {
+#define flow_ip6_src fkeys->addrs.v6addrs.src.in6_u.u6_addr32
+#define flow_ip6_dst fkeys->addrs.v6addrs.dst.in6_u.u6_addr32
+
        tuples->ether_proto = be16_to_cpu(fkeys->basic.n_proto);
        tuples->ip_proto = fkeys->basic.ip_proto;
        tuples->dst_port = be16_to_cpu(fkeys->ports.dst);
                tuples->src_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.src);
                tuples->dst_ip[3] = be32_to_cpu(fkeys->addrs.v4addrs.dst);
        } else {
-               memcpy(tuples->src_ip,
-                      fkeys->addrs.v6addrs.src.in6_u.u6_addr32,
-                      sizeof(tuples->src_ip));
-               memcpy(tuples->dst_ip,
-                      fkeys->addrs.v6addrs.dst.in6_u.u6_addr32,
-                      sizeof(tuples->dst_ip));
+               int i;
+
+               for (i = 0; i < IPV6_SIZE; i++) {
+                       tuples->src_ip[i] = be32_to_cpu(flow_ip6_src[i]);
+                       tuples->dst_ip[i] = be32_to_cpu(flow_ip6_dst[i]);
+               }
        }
 }