| 455 | } |
| 456 | |
| 457 | int |
| 458 | rte_acl_add_rules(struct rte_acl_ctx *ctx, const struct rte_acl_rule *rules, |
| 459 | uint32_t num) |
| 460 | { |
| 461 | const struct rte_acl_rule *rv; |
| 462 | uint32_t i; |
| 463 | int32_t rc; |
| 464 | |
| 465 | if (ctx == NULL || rules == NULL || 0 == ctx->rule_sz) |
| 466 | return -EINVAL; |
| 467 | |
| 468 | for (i = 0; i != num; i++) { |
| 469 | rv = (const struct rte_acl_rule *) |
| 470 | ((uintptr_t)rules + i * ctx->rule_sz); |
| 471 | rc = acl_check_rule(&rv->data); |
| 472 | if (rc != 0) { |
| 473 | RTE_LOG(ERR, ACL, "%s(%s): rule #%u is invalid\n", |
| 474 | __func__, ctx->name, i + 1); |
| 475 | return rc; |
| 476 | } |
| 477 | } |
| 478 | |
| 479 | return acl_add_rules(ctx, rules, num); |
| 480 | } |
| 481 | |
| 482 | /* |
| 483 | * Reset all rules. |