Update rte_table_action_ipv6_header and rte_table_action_nat_params to
use the recently added IPv6 address structure instead of uint8_t[16]
arrays.

Signed-off-by: Robin Jarry <rja...@redhat.com>
---
 examples/ip_pipeline/cli.c      | 12 +++++------
 lib/pipeline/rte_table_action.c | 36 +++++++++++++--------------------
 lib/pipeline/rte_table_action.h |  7 ++++---
 3 files changed, 24 insertions(+), 31 deletions(-)

diff --git a/examples/ip_pipeline/cli.c b/examples/ip_pipeline/cli.c
index e8269ea90c11..66fdeac8f501 100644
--- a/examples/ip_pipeline/cli.c
+++ b/examples/ip_pipeline/cli.c
@@ -3540,8 +3540,8 @@ parse_table_action_encap(char **tokens,
                                parser_read_uint8(&hop_limit, tokens[5]))
                                return 0;
 
-                       memcpy(a->encap.vxlan.ipv6.sa, sa.s6_addr, 16);
-                       memcpy(a->encap.vxlan.ipv6.da, da.s6_addr, 16);
+                       memcpy(&a->encap.vxlan.ipv6.sa, sa.s6_addr, 16);
+                       memcpy(&a->encap.vxlan.ipv6.da, da.s6_addr, 16);
                        a->encap.vxlan.ipv6.flow_label = flow_label;
                        a->encap.vxlan.ipv6.dscp = dscp;
                        a->encap.vxlan.ipv6.hop_limit = hop_limit;
@@ -3615,7 +3615,7 @@ parse_table_action_nat(char **tokens,
                        return 0;
 
                a->nat.ip_version = 0;
-               memcpy(a->nat.addr.ipv6, addr.s6_addr, 16);
+               memcpy(&a->nat.addr.ipv6, addr.s6_addr, 16);
                a->nat.port = port;
                a->action_mask |= 1 << RTE_TABLE_ACTION_NAT;
                return 4;
@@ -4956,9 +4956,9 @@ table_rule_show(const char *pipeline_name,
                                                
(uint32_t)a->encap.vxlan.ipv4.ttl);
                                } else {
                                        fprintf(f, " ipv6 ");
-                                       ipv6_addr_show(f, 
a->encap.vxlan.ipv6.sa);
+                                       ipv6_addr_show(f, 
a->encap.vxlan.ipv6.sa.a);
                                        fprintf(f, " ");
-                                       ipv6_addr_show(f, 
a->encap.vxlan.ipv6.da);
+                                       ipv6_addr_show(f, 
a->encap.vxlan.ipv6.da.a);
                                        fprintf(f, " %u %u %u ",
                                                a->encap.vxlan.ipv6.flow_label,
                                                
(uint32_t)a->encap.vxlan.ipv6.dscp,
@@ -4980,7 +4980,7 @@ table_rule_show(const char *pipeline_name,
                        if (a->nat.ip_version)
                                ipv4_addr_show(f, a->nat.addr.ipv4);
                        else
-                               ipv6_addr_show(f, a->nat.addr.ipv6);
+                               ipv6_addr_show(f, a->nat.addr.ipv6.a);
                        fprintf(f, " %u ", (uint32_t)(a->nat.port));
                }
 
diff --git a/lib/pipeline/rte_table_action.c b/lib/pipeline/rte_table_action.c
index a04d5121e1f0..8479f984e4ea 100644
--- a/lib/pipeline/rte_table_action.c
+++ b/lib/pipeline/rte_table_action.c
@@ -872,12 +872,8 @@ encap_vxlan_apply(void *data,
                        d->ipv6.payload_len = 0; /* not pre-computed */
                        d->ipv6.proto = IP_PROTO_UDP;
                        d->ipv6.hop_limits = p->vxlan.ipv6.hop_limit;
-                       memcpy(&d->ipv6.src_addr,
-                               p->vxlan.ipv6.sa,
-                               sizeof(p->vxlan.ipv6.sa));
-                       memcpy(&d->ipv6.dst_addr,
-                               p->vxlan.ipv6.da,
-                               sizeof(p->vxlan.ipv6.da));
+                       rte_ipv6_addr_cpy(&d->ipv6.src_addr, &p->vxlan.ipv6.sa);
+                       rte_ipv6_addr_cpy(&d->ipv6.dst_addr, &p->vxlan.ipv6.da);
 
                        /* UDP */
                        d->udp.src_port = rte_htons(p->vxlan.udp.sp);
@@ -907,12 +903,8 @@ encap_vxlan_apply(void *data,
                        d->ipv6.payload_len = 0; /* not pre-computed */
                        d->ipv6.proto = IP_PROTO_UDP;
                        d->ipv6.hop_limits = p->vxlan.ipv6.hop_limit;
-                       memcpy(&d->ipv6.src_addr,
-                               p->vxlan.ipv6.sa,
-                               sizeof(p->vxlan.ipv6.sa));
-                       memcpy(&d->ipv6.dst_addr,
-                               p->vxlan.ipv6.da,
-                               sizeof(p->vxlan.ipv6.da));
+                       rte_ipv6_addr_cpy(&d->ipv6.src_addr, &p->vxlan.ipv6.sa);
+                       rte_ipv6_addr_cpy(&d->ipv6.dst_addr, &p->vxlan.ipv6.da);
 
                        /* UDP */
                        d->udp.src_port = rte_htons(p->vxlan.udp.sp);
@@ -1211,7 +1203,7 @@ struct nat_ipv4_data {
 } __rte_packed;
 
 struct nat_ipv6_data {
-       uint8_t addr[16];
+       struct rte_ipv6_addr addr;
        uint16_t port;
 } __rte_packed;
 
@@ -1258,7 +1250,7 @@ nat_apply(void *data,
        } else {
                struct nat_ipv6_data *d = data;
 
-               memcpy(d->addr, p->addr.ipv6, sizeof(d->addr));
+               rte_ipv6_addr_cpy(&d->addr, &p->addr.ipv6);
                d->port = rte_htons(p->port);
        }
 
@@ -1438,11 +1430,11 @@ pkt_ipv6_work_nat(struct rte_ipv6_hdr *ip,
 
                        tcp_cksum = nat_ipv6_tcp_udp_checksum_update(tcp->cksum,
                                (uint16_t *)&ip->src_addr,
-                               (uint16_t *)data->addr,
+                               (uint16_t *)&data->addr,
                                tcp->src_port,
                                data->port);
 
-                       rte_memcpy(&ip->src_addr, data->addr, 16);
+                       rte_ipv6_addr_cpy(&ip->src_addr, &data->addr);
                        tcp->src_port = data->port;
                        tcp->cksum = tcp_cksum;
                } else {
@@ -1451,11 +1443,11 @@ pkt_ipv6_work_nat(struct rte_ipv6_hdr *ip,
 
                        udp_cksum = 
nat_ipv6_tcp_udp_checksum_update(udp->dgram_cksum,
                                (uint16_t *)&ip->src_addr,
-                               (uint16_t *)data->addr,
+                               (uint16_t *)&data->addr,
                                udp->src_port,
                                data->port);
 
-                       rte_memcpy(&ip->src_addr, data->addr, 16);
+                       rte_ipv6_addr_cpy(&ip->src_addr, &data->addr);
                        udp->src_port = data->port;
                        udp->dgram_cksum = udp_cksum;
                }
@@ -1466,11 +1458,11 @@ pkt_ipv6_work_nat(struct rte_ipv6_hdr *ip,
 
                        tcp_cksum = nat_ipv6_tcp_udp_checksum_update(tcp->cksum,
                                (uint16_t *)&ip->dst_addr,
-                               (uint16_t *)data->addr,
+                               (uint16_t *)&data->addr,
                                tcp->dst_port,
                                data->port);
 
-                       rte_memcpy(&ip->dst_addr, data->addr, 16);
+                       rte_ipv6_addr_cpy(&ip->dst_addr, &data->addr);
                        tcp->dst_port = data->port;
                        tcp->cksum = tcp_cksum;
                } else {
@@ -1479,11 +1471,11 @@ pkt_ipv6_work_nat(struct rte_ipv6_hdr *ip,
 
                        udp_cksum = 
nat_ipv6_tcp_udp_checksum_update(udp->dgram_cksum,
                                (uint16_t *)&ip->dst_addr.a,
-                               (uint16_t *)data->addr,
+                               (uint16_t *)&data->addr,
                                udp->dst_port,
                                data->port);
 
-                       rte_memcpy(&ip->dst_addr, data->addr, 16);
+                       rte_ipv6_addr_cpy(&ip->dst_addr, &data->addr);
                        udp->dst_port = data->port;
                        udp->dgram_cksum = udp_cksum;
                }
diff --git a/lib/pipeline/rte_table_action.h b/lib/pipeline/rte_table_action.h
index 5dffbeb70031..b119ac03dc6e 100644
--- a/lib/pipeline/rte_table_action.h
+++ b/lib/pipeline/rte_table_action.h
@@ -60,6 +60,7 @@ extern "C" {
 
 #include <rte_compat.h>
 #include <rte_ether.h>
+#include <rte_ip6.h>
 #include <rte_meter.h>
 #include <rte_table_hash.h>
 
@@ -419,8 +420,8 @@ struct rte_table_action_ipv4_header {
 
 /** Pre-computed IPv6 header fields for encapsulation action. */
 struct rte_table_action_ipv6_header {
-       uint8_t sa[16]; /**< Source address. */
-       uint8_t da[16]; /**< Destination address. */
+       struct rte_ipv6_addr sa; /**< Source address. */
+       struct rte_ipv6_addr da; /**< Destination address. */
        uint32_t flow_label; /**< Flow label. */
        uint8_t dscp; /**< DiffServ Code Point (DSCP). */
        uint8_t hop_limit; /**< Hop Limit (HL). */
@@ -597,7 +598,7 @@ struct rte_table_action_nat_params {
                uint32_t ipv4;
 
                /** IPv6 address; only valid when *ip_version* is set to 0. */
-               uint8_t ipv6[16];
+               struct rte_ipv6_addr ipv6;
        } addr;
 
        /** Port. */
-- 
2.46.0

Reply via email to