| 367 | } |
| 368 | |
| 369 | static int |
| 370 | pmd_parse_args(struct pmd_params *p, const char *params) |
| 371 | { |
| 372 | struct rte_kvargs *kvlist; |
| 373 | int ret = 0; |
| 374 | char *firmware = NULL; |
| 375 | |
| 376 | kvlist = rte_kvargs_parse(params, pmd_valid_args); |
| 377 | if (kvlist == NULL) |
| 378 | return -EINVAL; |
| 379 | |
| 380 | /* Set default values */ |
| 381 | memset(p, 0, sizeof(*p)); |
| 382 | if (rte_strscpy(p->firmware, SOFTNIC_FIRMWARE, |
| 383 | sizeof(p->firmware)) < 0) { |
| 384 | PMD_LOG(WARNING, |
| 385 | "\"%s\": firmware path should be shorter than %zu", |
| 386 | SOFTNIC_FIRMWARE, sizeof(p->firmware)); |
| 387 | ret = -EINVAL; |
| 388 | goto out_free; |
| 389 | } |
| 390 | p->cpu_id = SOFTNIC_CPU_ID; |
| 391 | p->sc = SOFTNIC_SC; |
| 392 | |
| 393 | /* Firmware script (optional) */ |
| 394 | if (rte_kvargs_count(kvlist, PMD_PARAM_FIRMWARE) == 1) { |
| 395 | ret = rte_kvargs_process(kvlist, PMD_PARAM_FIRMWARE, |
| 396 | &get_string, &firmware); |
| 397 | if (ret < 0) |
| 398 | goto out_free; |
| 399 | |
| 400 | if (rte_strscpy(p->firmware, firmware, |
| 401 | sizeof(p->firmware)) < 0) { |
| 402 | PMD_LOG(WARNING, |
| 403 | "\"%s\": " |
| 404 | "firmware path should be shorter than %zu", |
| 405 | firmware, sizeof(p->firmware)); |
| 406 | free(firmware); |
| 407 | ret = -EINVAL; |
| 408 | goto out_free; |
| 409 | } |
| 410 | free(firmware); |
| 411 | } |
| 412 | /* Connection listening port (optional) */ |
| 413 | if (rte_kvargs_count(kvlist, PMD_PARAM_CONN_PORT) == 1) { |
| 414 | ret = rte_kvargs_process(kvlist, PMD_PARAM_CONN_PORT, |
| 415 | &get_uint16, &p->conn_port); |
| 416 | if (ret < 0) |
| 417 | goto out_free; |
| 418 | } |
| 419 | |
| 420 | /* CPU ID (optional) */ |
| 421 | if (rte_kvargs_count(kvlist, PMD_PARAM_CPU_ID) == 1) { |
| 422 | ret = rte_kvargs_process(kvlist, PMD_PARAM_CPU_ID, |
| 423 | &get_uint32, &p->cpu_id); |
| 424 | if (ret < 0) |
| 425 | goto out_free; |
| 426 | } |
no test coverage detected