X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fipsec-secgw%2Fsp4.c;h=3871c6cc10e20b7d4862bd193aab3b80284e1c41;hb=bba1db3520ad450d9f884a4a024c0db39435ef48;hp=ca9ee7f24430915e239a3bc6cea6899fc3057026;hpb=49757b6845835394d1a9a6efad9356a6da58fd85;p=dpdk.git diff --git a/examples/ipsec-secgw/sp4.c b/examples/ipsec-secgw/sp4.c index ca9ee7f244..3871c6cc10 100644 --- a/examples/ipsec-secgw/sp4.c +++ b/examples/ipsec-secgw/sp4.c @@ -17,6 +17,18 @@ #define MAX_ACL_RULE_NUM 1024 +#define IPV4_DST_FROM_SP(acr) \ + (rte_cpu_to_be_32((acr).field[DST_FIELD_IPV4].value.u32)) + +#define IPV4_SRC_FROM_SP(acr) \ + (rte_cpu_to_be_32((acr).field[SRC_FIELD_IPV4].value.u32)) + +#define IPV4_DST_MASK_FROM_SP(acr) \ + ((acr).field[DST_FIELD_IPV4].mask_range.u32) + +#define IPV4_SRC_MASK_FROM_SP(acr) \ + ((acr).field[SRC_FIELD_IPV4].mask_range.u32) + /* * Rule and trace formats definitions. */ @@ -552,7 +564,8 @@ sp4_init(struct socket_ctx *ctx, int32_t socket_id) * Search though SP rules for given SPI. */ int -sp4_spi_present(uint32_t spi, int inbound) +sp4_spi_present(uint32_t spi, int inbound, struct ip_addr ip_addr[2], + uint32_t mask[2]) { uint32_t i, num; const struct acl4_rules *acr; @@ -566,8 +579,15 @@ sp4_spi_present(uint32_t spi, int inbound) } for (i = 0; i != num; i++) { - if (acr[i].data.userdata == spi) + if (acr[i].data.userdata == spi) { + if (NULL != ip_addr && NULL != mask) { + ip_addr[0].ip.ip4 = IPV4_SRC_FROM_SP(acr[i]); + ip_addr[1].ip.ip4 = IPV4_DST_FROM_SP(acr[i]); + mask[0] = IPV4_SRC_MASK_FROM_SP(acr[i]); + mask[1] = IPV4_DST_MASK_FROM_SP(acr[i]); + } return i; + } } return -ENOENT;