| 858 | } |
| 859 | |
| 860 | static int |
| 861 | rss_tbl_cfg_handler(struct ff_rss_check_cfg *cur) |
| 862 | { |
| 863 | //vip cfg |
| 864 | int ret, nb_rss_tbl, i, j, k; |
| 865 | char *rss_tbl_array[FF_RSS_TBL_MAX_ENTRIES], *rss_tbl_4tuble_array[4], *rss_tbl_str; |
| 866 | struct ff_rss_tbl_cfg *rss_tbl_cfg_p; |
| 867 | |
| 868 | rss_tbl_str = cur->rss_tbl_str; |
| 869 | |
| 870 | ret = rte_strsplit(rss_tbl_str, strlen(rss_tbl_str), &rss_tbl_array[0], FF_RSS_TBL_MAX_ENTRIES, ';'); |
| 871 | if (ret <= 0) { |
| 872 | fprintf(stdout, "rss_tbl_cfg_handler nb_rss_tbl is 0, not set rss_tbl or set invalid rss_tbl %s\n", |
| 873 | rss_tbl_str); |
| 874 | return 1; |
| 875 | } |
| 876 | |
| 877 | nb_rss_tbl = ret; |
| 878 | |
| 879 | rss_tbl_cfg_p = &cur->rss_tbl_cfgs[0]; |
| 880 | |
| 881 | for (i = 0; i < nb_rss_tbl; i++) { |
| 882 | rss_tbl_str = rss_tbl_array[i]; |
| 883 | /* port_id, daddr(local), saddr(remote), sport */ |
| 884 | ret = rte_strsplit(rss_tbl_str, strlen(rss_tbl_str), &rss_tbl_4tuble_array[0], 4, ' '); |
| 885 | if (ret != 4) { |
| 886 | fprintf(stdout, "rss_tbl_cfg_handler daddr/saddr/sport format error %s\n", |
| 887 | rss_tbl_str); |
| 888 | return 1; |
| 889 | } |
| 890 | |
| 891 | /* Note: daddr must be include by port_id's addr or vip_addr, but here not check it now */ |
| 892 | rss_tbl_cfg_p[i].port_id = atoi(rss_tbl_4tuble_array[0]); |
| 893 | inet_pton(AF_INET, rss_tbl_4tuble_array[1], (void *)&(rss_tbl_cfg_p[i].daddr)); |
| 894 | inet_pton(AF_INET, rss_tbl_4tuble_array[2], (void *)&(rss_tbl_cfg_p[i].saddr)); |
| 895 | rss_tbl_cfg_p[i].sport = htons(atoi(rss_tbl_4tuble_array[3])); |
| 896 | } |
| 897 | |
| 898 | cur->nb_rss_tbl = nb_rss_tbl; |
| 899 | |
| 900 | return 1; |
| 901 | } |
| 902 | |
| 903 | static int |
| 904 | rss_check_cfg_handler(struct ff_config *cfg, __rte_unused const char *section, |
no test coverage detected