diff options
| author | Robin Jarry <[email protected]> | 2024-10-18 16:05:47 +0200 |
|---|---|---|
| committer | David Marchand <[email protected]> | 2024-10-18 17:47:16 +0200 |
| commit | 9ac91e2f7339e66658ef55b756a06b328e336fde (patch) | |
| tree | 2ec75cd19bdc404378da3f9cda472224d11bf062 /examples | |
| parent | 5ac1abdd37aa43692603cd8670111c354014766f (diff) | |
ipsec: use IPv6 address structure
Update rte_ipsec_sadv6_key to use rte_ipv6_addr structures instead of
uint8_t[16] arrays.
Signed-off-by: Robin Jarry <[email protected]>
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/ipsec-secgw/flow.c | 20 | ||||
| -rw-r--r-- | examples/ipsec-secgw/ipsec.c | 33 | ||||
| -rw-r--r-- | examples/ipsec-secgw/ipsec.h | 5 | ||||
| -rw-r--r-- | examples/ipsec-secgw/parser.c | 2 | ||||
| -rw-r--r-- | examples/ipsec-secgw/parser.h | 4 | ||||
| -rw-r--r-- | examples/ipsec-secgw/rt.c | 4 | ||||
| -rw-r--r-- | examples/ipsec-secgw/sa.c | 37 | ||||
| -rw-r--r-- | examples/ipsec-secgw/sad.h | 12 | ||||
| -rw-r--r-- | examples/ipsec-secgw/sp6.c | 154 |
9 files changed, 130 insertions, 141 deletions
diff --git a/examples/ipsec-secgw/flow.c b/examples/ipsec-secgw/flow.c index 3f7630f5fd..70742387c6 100644 --- a/examples/ipsec-secgw/flow.c +++ b/examples/ipsec-secgw/flow.c @@ -88,10 +88,10 @@ ipv6_hdr_print(struct rte_ipv6_hdr *hdr) } static int -ipv6_addr_cpy(uint8_t *spec, uint8_t *mask, char *token, +ipv6_addr_cpy(struct rte_ipv6_addr *spec, struct rte_ipv6_addr *mask, char *token, struct parse_status *status) { - struct in6_addr ip; + struct rte_ipv6_addr ip; uint32_t depth, i; APP_CHECK(parse_ipv6_addr(token, &ip, &depth) == 0, status, @@ -99,11 +99,11 @@ ipv6_addr_cpy(uint8_t *spec, uint8_t *mask, char *token, if (status->status < 0) return -1; - memcpy(mask, &rte_flow_item_ipv6_mask.hdr.src_addr, sizeof(ip)); - memcpy(spec, ip.s6_addr, sizeof(struct in6_addr)); + *mask = rte_flow_item_ipv6_mask.hdr.src_addr; + *spec = ip; - for (i = 0; i < depth && (i%8 <= sizeof(struct in6_addr)); i++) - mask[i/8] &= ~(1 << (7-i%8)); + for (i = 0; i < depth && (i%8 <= sizeof(*mask)); i++) + mask->a[i/8] &= ~(1 << (7-i%8)); return 0; } @@ -175,8 +175,8 @@ parse_flow_tokens(char **tokens, uint32_t n_tokens, INCREMENT_TOKEN_INDEX(ti, n_tokens, status); if (status->status < 0) return; - if (ipv6_addr_cpy(rule->ipv6.spec.hdr.src_addr.a, - rule->ipv6.mask.hdr.src_addr.a, + if (ipv6_addr_cpy(&rule->ipv6.spec.hdr.src_addr, + &rule->ipv6.mask.hdr.src_addr, tokens[ti], status)) return; } @@ -184,8 +184,8 @@ parse_flow_tokens(char **tokens, uint32_t n_tokens, INCREMENT_TOKEN_INDEX(ti, n_tokens, status); if (status->status < 0) return; - if (ipv6_addr_cpy(rule->ipv6.spec.hdr.dst_addr.a, - rule->ipv6.mask.hdr.dst_addr.a, + if (ipv6_addr_cpy(&rule->ipv6.spec.hdr.dst_addr, + &rule->ipv6.mask.hdr.dst_addr, tokens[ti], status)) return; } diff --git a/examples/ipsec-secgw/ipsec.c b/examples/ipsec-secgw/ipsec.c index ebde28639c..3b1e2a7109 100644 --- a/examples/ipsec-secgw/ipsec.c +++ b/examples/ipsec-secgw/ipsec.c @@ -41,12 +41,8 @@ set_ipsec_conf(struct ipsec_sa *sa, struct rte_security_ipsec_xform *ipsec) tunnel->ipv6.hlimit = IPDEFTTL; tunnel->ipv6.dscp = 0; tunnel->ipv6.flabel = 0; - - memcpy((uint8_t *)&tunnel->ipv6.src_addr, - (uint8_t *)&sa->src.ip.ip6.ip6_b, 16); - - memcpy((uint8_t *)&tunnel->ipv6.dst_addr, - (uint8_t *)&sa->dst.ip.ip6.ip6_b, 16); + memcpy(&tunnel->ipv6.src_addr, &sa->src.ip.ip6, 16); + memcpy(&tunnel->ipv6.dst_addr, &sa->dst.ip.ip6, 16); } /* TODO support for Transport */ } @@ -450,10 +446,8 @@ create_inline_session(struct socket_ctx *skt_ctx, struct ipsec_sa *sa, sess_conf.ipsec.tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV6; - memcpy(sess_conf.ipsec.tunnel.ipv6.src_addr.s6_addr, - sa->src.ip.ip6.ip6_b, 16); - memcpy(sess_conf.ipsec.tunnel.ipv6.dst_addr.s6_addr, - sa->dst.ip.ip6.ip6_b, 16); + memcpy(&sess_conf.ipsec.tunnel.ipv6.src_addr, &sa->src.ip.ip6, 16); + memcpy(&sess_conf.ipsec.tunnel.ipv6.dst_addr, &sa->dst.ip.ip6, 16); } } else if (IS_TUNNEL(sa->flags)) { sess_conf.ipsec.mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL; @@ -470,10 +464,8 @@ create_inline_session(struct socket_ctx *skt_ctx, struct ipsec_sa *sa, sess_conf.ipsec.tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV6; - memcpy(sess_conf.ipsec.tunnel.ipv6.src_addr.s6_addr, - sa->src.ip.ip6.ip6_b, 16); - memcpy(sess_conf.ipsec.tunnel.ipv6.dst_addr.s6_addr, - sa->dst.ip.ip6.ip6_b, 16); + memcpy(&sess_conf.ipsec.tunnel.ipv6.src_addr, &sa->src.ip.ip6, 16); + memcpy(&sess_conf.ipsec.tunnel.ipv6.dst_addr, &sa->dst.ip.ip6, 16); } else { RTE_LOG(ERR, IPSEC, "invalid tunnel type\n"); return -1; @@ -528,11 +520,8 @@ create_inline_session(struct socket_ctx *skt_ctx, struct ipsec_sa *sa, sa->pattern[1].mask = &rte_flow_item_ipv6_mask; sa->pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV6; sa->pattern[1].spec = &sa->ipv6_spec; - - memcpy(&sa->ipv6_spec.hdr.dst_addr, - sa->dst.ip.ip6.ip6_b, 16); - memcpy(&sa->ipv6_spec.hdr.src_addr, - sa->src.ip.ip6.ip6_b, 16); + sa->ipv6_spec.hdr.dst_addr = sa->dst.ip.ip6; + sa->ipv6_spec.hdr.src_addr = sa->src.ip.ip6; } else if (IS_IP4(sa->flags)) { sa->pattern[1].mask = &rte_flow_item_ipv4_mask; sa->pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV4; @@ -735,10 +724,8 @@ create_ipsec_esp_flow(struct ipsec_sa *sa) sa->pattern[1].mask = &rte_flow_item_ipv6_mask; sa->pattern[1].type = RTE_FLOW_ITEM_TYPE_IPV6; sa->pattern[1].spec = &sa->ipv6_spec; - memcpy(&sa->ipv6_spec.hdr.dst_addr, - sa->dst.ip.ip6.ip6_b, sizeof(sa->dst.ip.ip6.ip6_b)); - memcpy(&sa->ipv6_spec.hdr.src_addr, - sa->src.ip.ip6.ip6_b, sizeof(sa->src.ip.ip6.ip6_b)); + sa->ipv6_spec.hdr.dst_addr = sa->dst.ip.ip6; + sa->ipv6_spec.hdr.src_addr = sa->src.ip.ip6; sa->pattern[2].type = RTE_FLOW_ITEM_TYPE_ESP; sa->pattern[2].spec = &sa->esp_spec; sa->pattern[2].mask = &rte_flow_item_esp_mask; diff --git a/examples/ipsec-secgw/ipsec.h b/examples/ipsec-secgw/ipsec.h index 1fe6b97168..f12f57e2d5 100644 --- a/examples/ipsec-secgw/ipsec.h +++ b/examples/ipsec-secgw/ipsec.h @@ -65,10 +65,7 @@ typedef int32_t (*ipsec_xform_fn)(struct rte_mbuf *m, struct ipsec_sa *sa, struct ip_addr { union { uint32_t ip4; - union { - uint64_t ip6[2]; - uint8_t ip6_b[16]; - } ip6; + struct rte_ipv6_addr ip6; } ip; }; diff --git a/examples/ipsec-secgw/parser.c b/examples/ipsec-secgw/parser.c index 2bd6df335b..cb463c704f 100644 --- a/examples/ipsec-secgw/parser.c +++ b/examples/ipsec-secgw/parser.c @@ -75,7 +75,7 @@ parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask) } int -parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask) +parse_ipv6_addr(const char *token, struct rte_ipv6_addr *ipv6, uint32_t *mask) { char ip_str[256] = {0}; char *pch; diff --git a/examples/ipsec-secgw/parser.h b/examples/ipsec-secgw/parser.h index b5c5d0210f..63f7844ed8 100644 --- a/examples/ipsec-secgw/parser.h +++ b/examples/ipsec-secgw/parser.h @@ -11,6 +11,8 @@ #include <netinet/ip.h> #include <string.h> +#include <rte_ip6.h> + struct parse_status { int status; char parse_msg[256]; @@ -63,7 +65,7 @@ int parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask); int -parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask); +parse_ipv6_addr(const char *token, struct rte_ipv6_addr *ipv6, uint32_t *mask); int parse_range(const char *token, uint16_t *low, uint16_t *high); diff --git a/examples/ipsec-secgw/rt.c b/examples/ipsec-secgw/rt.c index 059fc0c8f2..132e200adb 100644 --- a/examples/ipsec-secgw/rt.c +++ b/examples/ipsec-secgw/rt.c @@ -89,7 +89,7 @@ parse_rt_tokens(char **tokens, uint32_t n_tokens, (uint32_t)ip.s_addr); route_ipv4->depth = (uint8_t)depth; } else { - struct in6_addr ip; + struct rte_ipv6_addr ip; uint32_t depth; APP_CHECK(parse_ipv6_addr(tokens[ti], @@ -99,7 +99,7 @@ parse_rt_tokens(char **tokens, uint32_t n_tokens, tokens[ti]); if (status->status < 0) return; - memcpy(&route_ipv6->ip, ip.s6_addr, 16); + route_ipv6->ip = ip; route_ipv6->depth = (uint8_t)depth; } } diff --git a/examples/ipsec-secgw/sa.c b/examples/ipsec-secgw/sa.c index 1a0afd2ed2..425bfbf590 100644 --- a/examples/ipsec-secgw/sa.c +++ b/examples/ipsec-secgw/sa.c @@ -32,7 +32,7 @@ #define IP4_FULL_MASK (sizeof(((struct ip_addr *)NULL)->ip.ip4) * CHAR_BIT) -#define IP6_FULL_MASK (sizeof(((struct ip_addr *)NULL)->ip.ip6.ip6) * CHAR_BIT) +#define IP6_FULL_MASK RTE_IPV6_MAX_DEPTH #define MBUF_NO_SEC_OFFLOAD(m) ((m->ol_flags & RTE_MBUF_F_RX_SEC_OFFLOAD) == 0) @@ -661,7 +661,7 @@ parse_sa_tokens(char **tokens, uint32_t n_tokens, rule->src.ip.ip4 = rte_bswap32( (uint32_t)ip.s_addr); } else if (IS_IP6_TUNNEL(rule->flags)) { - struct in6_addr ip; + struct rte_ipv6_addr ip; APP_CHECK(parse_ipv6_addr(tokens[ti], &ip, NULL) == 0, status, @@ -670,8 +670,8 @@ parse_sa_tokens(char **tokens, uint32_t n_tokens, tokens[ti]); if (status->status < 0) return; - memcpy(rule->src.ip.ip6.ip6_b, - ip.s6_addr, 16); + + rule->src.ip.ip6 = ip; } else if (IS_TRANSPORT(rule->flags)) { APP_CHECK(0, status, "unrecognized input " "\"%s\"", tokens[ti]); @@ -704,7 +704,7 @@ parse_sa_tokens(char **tokens, uint32_t n_tokens, rule->dst.ip.ip4 = rte_bswap32( (uint32_t)ip.s_addr); } else if (IS_IP6_TUNNEL(rule->flags)) { - struct in6_addr ip; + struct rte_ipv6_addr ip; APP_CHECK(parse_ipv6_addr(tokens[ti], &ip, NULL) == 0, status, @@ -713,7 +713,8 @@ parse_sa_tokens(char **tokens, uint32_t n_tokens, tokens[ti]); if (status->status < 0) return; - memcpy(rule->dst.ip.ip6.ip6_b, ip.s6_addr, 16); + + rule->dst.ip.ip6 = ip; } else if (IS_TRANSPORT(rule->flags)) { APP_CHECK(0, status, "unrecognized " "input \"%s\"", tokens[ti]); @@ -1010,19 +1011,9 @@ print_one_sa_rule(const struct ipsec_sa *sa, int inbound) break; case IP6_TUNNEL: printf("IP6Tunnel "); - for (i = 0; i < 16; i++) { - if (i % 2 && i != 15) - printf("%.2x:", sa->src.ip.ip6.ip6_b[i]); - else - printf("%.2x", sa->src.ip.ip6.ip6_b[i]); - } + printf(RTE_IPV6_ADDR_FMT, RTE_IPV6_ADDR_SPLIT(&sa->src.ip.ip6)); printf(" "); - for (i = 0; i < 16; i++) { - if (i % 2 && i != 15) - printf("%.2x:", sa->dst.ip.ip6.ip6_b[i]); - else - printf("%.2x", sa->dst.ip.ip6.ip6_b[i]); - } + printf(RTE_IPV6_ADDR_FMT, RTE_IPV6_ADDR_SPLIT(&sa->dst.ip.ip6)); break; case TRANSPORT: printf("Transport "); @@ -1220,10 +1211,8 @@ sa_add_address_inline_crypto(struct ipsec_sa *sa) sa->flags |= IP6_TRANSPORT; if (mask[0] == IP6_FULL_MASK && mask[1] == IP6_FULL_MASK && - (ip_addr[0].ip.ip6.ip6[0] != 0 || - ip_addr[0].ip.ip6.ip6[1] != 0) && - (ip_addr[1].ip.ip6.ip6[0] != 0 || - ip_addr[1].ip.ip6.ip6[1] != 0)) { + !rte_ipv6_addr_is_unspec(&ip_addr[0].ip.ip6) && + !rte_ipv6_addr_is_unspec(&ip_addr[1].ip.ip6)) { sa->src.ip.ip6 = ip_addr[0].ip.ip6; sa->dst.ip.ip6 = ip_addr[1].ip.ip6; @@ -1571,8 +1560,8 @@ ipsec_sa_init(struct ipsec_sa *lsa, struct rte_ipsec_sa *sa, uint32_t sa_size, }; if (IS_IP6_TUNNEL(lsa->flags)) { - memcpy(&v6.src_addr, lsa->src.ip.ip6.ip6_b, sizeof(v6.src_addr)); - memcpy(&v6.dst_addr, lsa->dst.ip.ip6.ip6_b, sizeof(v6.dst_addr)); + v6.src_addr = lsa->src.ip.ip6; + v6.dst_addr = lsa->dst.ip.ip6; } rc = fill_ipsec_sa_prm(&prm, lsa, &v4, &v6); diff --git a/examples/ipsec-secgw/sad.h b/examples/ipsec-secgw/sad.h index b619aa1034..328729b58c 100644 --- a/examples/ipsec-secgw/sad.h +++ b/examples/ipsec-secgw/sad.h @@ -8,6 +8,8 @@ #include <rte_ip.h> #include <rte_ipsec_sad.h> +#include "ipsec.h" + #define SA_CACHE_SZ 128 #define SPI2IDX(spi, mask) ((spi) & (mask)) @@ -38,8 +40,8 @@ cmp_sa_key(struct ipsec_sa *sa, int is_v4, struct rte_ipv4_hdr *ipv4, (sa->dst.ip.ip4 == ipv4->dst_addr)) || /* IPv6 check */ (!is_v4 && (sa_type == IP6_TUNNEL) && - (!memcmp(sa->src.ip.ip6.ip6, &ipv6->src_addr, 16)) && - (!memcmp(sa->dst.ip.ip6.ip6, &ipv6->dst_addr, 16)))) + (rte_ipv6_addr_eq(&sa->src.ip.ip6, &ipv6->src_addr)) && + (rte_ipv6_addr_eq(&sa->dst.ip.ip6, &ipv6->dst_addr)))) return 1; return 0; @@ -129,10 +131,8 @@ sad_lookup(struct ipsec_sad *sad, struct rte_mbuf *pkts[], } } v6[nb_v6].spi = esp->spi; - memcpy(v6[nb_v6].dip, &ipv6->dst_addr, - sizeof(ipv6->dst_addr)); - memcpy(v6[nb_v6].sip, &ipv6->src_addr, - sizeof(ipv6->src_addr)); + v6[nb_v6].dip = ipv6->dst_addr; + v6[nb_v6].sip = ipv6->src_addr; keys_v6[nb_v6] = (const union rte_ipsec_sad_key *) &v6[nb_v6]; v6_idxes[nb_v6++] = i; diff --git a/examples/ipsec-secgw/sp6.c b/examples/ipsec-secgw/sp6.c index cce4da7862..ebc47dfe49 100644 --- a/examples/ipsec-secgw/sp6.c +++ b/examples/ipsec-secgw/sp6.c @@ -17,36 +17,6 @@ #define INIT_ACL_RULE_NUM 128 -#define IPV6_FROM_SP(acr, fidx_low, fidx_high) \ - (((uint64_t)(acr).field[(fidx_high)].value.u32 << 32) | \ - (acr).field[(fidx_low)].value.u32) - -#define IPV6_DST_FROM_SP(addr, acr) do {\ - (addr).ip.ip6.ip6[0] = rte_cpu_to_be_64(IPV6_FROM_SP((acr), \ - IP6_DST1, IP6_DST0));\ - (addr).ip.ip6.ip6[1] = rte_cpu_to_be_64(IPV6_FROM_SP((acr), \ - IP6_DST3, IP6_DST2));\ - } while (0) - -#define IPV6_SRC_FROM_SP(addr, acr) do {\ - (addr).ip.ip6.ip6[0] = rte_cpu_to_be_64(IPV6_FROM_SP((acr), \ - IP6_SRC1, IP6_SRC0));\ - (addr).ip.ip6.ip6[1] = rte_cpu_to_be_64(IPV6_FROM_SP((acr), \ - IP6_SRC3, IP6_SRC2));\ - } while (0) - -#define IPV6_DST_MASK_FROM_SP(mask, acr) \ - ((mask) = (acr).field[IP6_DST0].mask_range.u32 + \ - (acr).field[IP6_DST1].mask_range.u32 + \ - (acr).field[IP6_DST2].mask_range.u32 + \ - (acr).field[IP6_DST3].mask_range.u32) - -#define IPV6_SRC_MASK_FROM_SP(mask, acr) \ - ((mask) = (acr).field[IP6_SRC0].mask_range.u32 + \ - (acr).field[IP6_SRC1].mask_range.u32 + \ - (acr).field[IP6_SRC2].mask_range.u32 + \ - (acr).field[IP6_SRC3].mask_range.u32) - enum { IP6_PROTO, IP6_SRC0, @@ -62,8 +32,6 @@ enum { IP6_NUM }; -#define IP6_ADDR_SIZE 16 - static struct rte_acl_field_def ip6_defs[IP6_NUM] = { { .type = RTE_ACL_FIELD_TYPE_BITMASK, @@ -154,6 +122,52 @@ static struct acl6_rules *acl6_rules_in; static uint32_t nb_acl6_rules_in; static uint32_t sp_in_sz; +static struct rte_ipv6_addr +ipv6_src_from_sp(const struct acl6_rules *rule) +{ + struct rte_ipv6_addr alignas(alignof(rte_be64_t)) addr = RTE_IPV6_ADDR_UNSPEC; + rte_be64_t *values = (rte_be64_t *)&addr; + + values[0] = rte_cpu_to_be_64((uint64_t)rule->field[IP6_SRC0].value.u32 << 32 | + rule->field[IP6_SRC1].value.u32); + values[1] = rte_cpu_to_be_64((uint64_t)rule->field[IP6_SRC2].value.u32 << 32 | + rule->field[IP6_SRC3].value.u32); + + return addr; +} + +static struct rte_ipv6_addr +ipv6_dst_from_sp(const struct acl6_rules *rule) +{ + struct rte_ipv6_addr alignas(alignof(rte_be64_t)) addr = RTE_IPV6_ADDR_UNSPEC; + rte_be64_t *values = (rte_be64_t *)&addr; + + values[0] = rte_cpu_to_be_64((uint64_t)rule->field[IP6_DST0].value.u32 << 32 | + rule->field[IP6_DST1].value.u32); + values[1] = rte_cpu_to_be_64((uint64_t)rule->field[IP6_DST2].value.u32 << 32 | + rule->field[IP6_DST3].value.u32); + + return addr; +} + +static uint32_t +ipv6_src_mask_from_sp(const struct acl6_rules *rule) +{ + return rule->field[IP6_SRC0].mask_range.u32 + + rule->field[IP6_SRC1].mask_range.u32 + + rule->field[IP6_SRC2].mask_range.u32 + + rule->field[IP6_SRC3].mask_range.u32; +} + +static uint32_t +ipv6_dst_mask_from_sp(const struct acl6_rules *rule) +{ + return rule->field[IP6_DST0].mask_range.u32 + + rule->field[IP6_DST1].mask_range.u32 + + rule->field[IP6_DST2].mask_range.u32 + + rule->field[IP6_DST3].mask_range.u32; +} + static int extend_sp_arr(struct acl6_rules **sp_tbl, uint32_t cur_cnt, uint32_t *cur_sz) { @@ -329,7 +343,7 @@ parse_sp6_tokens(char **tokens, uint32_t n_tokens, } if (strcmp(tokens[ti], "src") == 0) { - struct in6_addr ip; + struct rte_ipv6_addr ip; uint32_t depth; APP_CHECK_PRESENCE(src_p, tokens[ti], status); @@ -347,34 +361,34 @@ parse_sp6_tokens(char **tokens, uint32_t n_tokens, return; rule_ipv6->field[1].value.u32 = - (uint32_t)ip.s6_addr[0] << 24 | - (uint32_t)ip.s6_addr[1] << 16 | - (uint32_t)ip.s6_addr[2] << 8 | - (uint32_t)ip.s6_addr[3]; + (uint32_t)ip.a[0] << 24 | + (uint32_t)ip.a[1] << 16 | + (uint32_t)ip.a[2] << 8 | + (uint32_t)ip.a[3]; rule_ipv6->field[1].mask_range.u32 = (depth > 32) ? 32 : depth; depth = (depth > 32) ? (depth - 32) : 0; rule_ipv6->field[2].value.u32 = - (uint32_t)ip.s6_addr[4] << 24 | - (uint32_t)ip.s6_addr[5] << 16 | - (uint32_t)ip.s6_addr[6] << 8 | - (uint32_t)ip.s6_addr[7]; + (uint32_t)ip.a[4] << 24 | + (uint32_t)ip.a[5] << 16 | + (uint32_t)ip.a[6] << 8 | + (uint32_t)ip.a[7]; rule_ipv6->field[2].mask_range.u32 = (depth > 32) ? 32 : depth; depth = (depth > 32) ? (depth - 32) : 0; rule_ipv6->field[3].value.u32 = - (uint32_t)ip.s6_addr[8] << 24 | - (uint32_t)ip.s6_addr[9] << 16 | - (uint32_t)ip.s6_addr[10] << 8 | - (uint32_t)ip.s6_addr[11]; + (uint32_t)ip.a[8] << 24 | + (uint32_t)ip.a[9] << 16 | + (uint32_t)ip.a[10] << 8 | + (uint32_t)ip.a[11]; rule_ipv6->field[3].mask_range.u32 = (depth > 32) ? 32 : depth; depth = (depth > 32) ? (depth - 32) : 0; rule_ipv6->field[4].value.u32 = - (uint32_t)ip.s6_addr[12] << 24 | - (uint32_t)ip.s6_addr[13] << 16 | - (uint32_t)ip.s6_addr[14] << 8 | - (uint32_t)ip.s6_addr[15]; + (uint32_t)ip.a[12] << 24 | + (uint32_t)ip.a[13] << 16 | + (uint32_t)ip.a[14] << 8 | + (uint32_t)ip.a[15]; rule_ipv6->field[4].mask_range.u32 = (depth > 32) ? 32 : depth; @@ -383,7 +397,7 @@ parse_sp6_tokens(char **tokens, uint32_t n_tokens, } if (strcmp(tokens[ti], "dst") == 0) { - struct in6_addr ip; + struct rte_ipv6_addr ip; uint32_t depth; APP_CHECK_PRESENCE(dst_p, tokens[ti], status); @@ -401,34 +415,34 @@ parse_sp6_tokens(char **tokens, uint32_t n_tokens, return; rule_ipv6->field[5].value.u32 = - (uint32_t)ip.s6_addr[0] << 24 | - (uint32_t)ip.s6_addr[1] << 16 | - (uint32_t)ip.s6_addr[2] << 8 | - (uint32_t)ip.s6_addr[3]; + (uint32_t)ip.a[0] << 24 | + (uint32_t)ip.a[1] << 16 | + (uint32_t)ip.a[2] << 8 | + (uint32_t)ip.a[3]; rule_ipv6->field[5].mask_range.u32 = (depth > 32) ? 32 : depth; depth = (depth > 32) ? (depth - 32) : 0; rule_ipv6->field[6].value.u32 = - (uint32_t)ip.s6_addr[4] << 24 | - (uint32_t)ip.s6_addr[5] << 16 | - (uint32_t)ip.s6_addr[6] << 8 | - (uint32_t)ip.s6_addr[7]; + (uint32_t)ip.a[4] << 24 | + (uint32_t)ip.a[5] << 16 | + (uint32_t)ip.a[6] << 8 | + (uint32_t)ip.a[7]; rule_ipv6->field[6].mask_range.u32 = (depth > 32) ? 32 : depth; depth = (depth > 32) ? (depth - 32) : 0; rule_ipv6->field[7].value.u32 = - (uint32_t)ip.s6_addr[8] << 24 | - (uint32_t)ip.s6_addr[9] << 16 | - (uint32_t)ip.s6_addr[10] << 8 | - (uint32_t)ip.s6_addr[11]; + (uint32_t)ip.a[8] << 24 | + (uint32_t)ip.a[9] << 16 | + (uint32_t)ip.a[10] << 8 | + (uint32_t)ip.a[11]; rule_ipv6->field[7].mask_range.u32 = (depth > 32) ? 32 : depth; depth = (depth > 32) ? (depth - 32) : 0; rule_ipv6->field[8].value.u32 = - (uint32_t)ip.s6_addr[12] << 24 | - (uint32_t)ip.s6_addr[13] << 16 | - (uint32_t)ip.s6_addr[14] << 8 | - (uint32_t)ip.s6_addr[15]; + (uint32_t)ip.a[12] << 24 | + (uint32_t)ip.a[13] << 16 | + (uint32_t)ip.a[14] << 8 | + (uint32_t)ip.a[15]; rule_ipv6->field[8].mask_range.u32 = (depth > 32) ? 32 : depth; @@ -757,10 +771,10 @@ sp6_spi_present(uint32_t spi, int inbound, struct ip_addr ip_addr[2], rule = bsearch(&tmpl, acr, num, sizeof(struct acl6_rules), sp_cmp); if (rule != NULL) { if (NULL != ip_addr && NULL != mask) { - IPV6_SRC_FROM_SP(ip_addr[0], *rule); - IPV6_DST_FROM_SP(ip_addr[1], *rule); - IPV6_SRC_MASK_FROM_SP(mask[0], *rule); - IPV6_DST_MASK_FROM_SP(mask[1], *rule); + ip_addr[0].ip.ip6 = ipv6_src_from_sp(rule); + ip_addr[1].ip.ip6 = ipv6_dst_from_sp(rule); + mask[0] = ipv6_src_mask_from_sp(rule); + mask[1] = ipv6_dst_mask_from_sp(rule); } return RTE_PTR_DIFF(rule, acr) / sizeof(struct acl6_rules); } |
