| 366 | } |
| 367 | |
| 368 | void |
| 369 | parse_sa_tokens(char **tokens, uint32_t n_tokens, |
| 370 | struct parse_status *status) |
| 371 | { |
| 372 | struct ipsec_sa *rule = NULL; |
| 373 | struct rte_ipsec_session *ips; |
| 374 | uint32_t ti; /*token index*/ |
| 375 | uint32_t *ri /*rule index*/; |
| 376 | struct ipsec_sa_cnt *sa_cnt; |
| 377 | uint32_t cipher_algo_p = 0; |
| 378 | uint32_t auth_algo_p = 0; |
| 379 | uint32_t aead_algo_p = 0; |
| 380 | uint32_t src_p = 0; |
| 381 | uint32_t dst_p = 0; |
| 382 | uint32_t mode_p = 0; |
| 383 | uint32_t type_p = 0; |
| 384 | uint32_t portid_p = 0; |
| 385 | uint32_t fallback_p = 0; |
| 386 | int16_t status_p = 0; |
| 387 | uint16_t udp_encap_p = 0; |
| 388 | |
| 389 | if (strcmp(tokens[0], "in") == 0) { |
| 390 | ri = &nb_sa_in; |
| 391 | sa_cnt = &sa_in_cnt; |
| 392 | if (extend_sa_arr(&sa_in, nb_sa_in, &sa_in_sz) < 0) |
| 393 | return; |
| 394 | rule = &sa_in[*ri]; |
| 395 | rule->direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS; |
| 396 | } else { |
| 397 | ri = &nb_sa_out; |
| 398 | sa_cnt = &sa_out_cnt; |
| 399 | if (extend_sa_arr(&sa_out, nb_sa_out, &sa_out_sz) < 0) |
| 400 | return; |
| 401 | rule = &sa_out[*ri]; |
| 402 | rule->direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS; |
| 403 | } |
| 404 | |
| 405 | /* spi number */ |
| 406 | APP_CHECK_TOKEN_IS_NUM(tokens, 1, status); |
| 407 | if (status->status < 0) |
| 408 | return; |
| 409 | if (atoi(tokens[1]) == INVALID_SPI) |
| 410 | return; |
| 411 | rule->flags = 0; |
| 412 | rule->spi = atoi(tokens[1]); |
| 413 | rule->portid = UINT16_MAX; |
| 414 | ips = ipsec_get_primary_session(rule); |
| 415 | |
| 416 | for (ti = 2; ti < n_tokens; ti++) { |
| 417 | if (strcmp(tokens[ti], "mode") == 0) { |
| 418 | APP_CHECK_PRESENCE(mode_p, tokens[ti], status); |
| 419 | if (status->status < 0) |
| 420 | return; |
| 421 | |
| 422 | INCREMENT_TOKEN_INDEX(ti, n_tokens, status); |
| 423 | if (status->status < 0) |
| 424 | return; |
| 425 |
no test coverage detected