#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.
*/
* 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;
}
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;