MCPcopy Index your code
hub / github.com/F-Stack/f-stack / ff_rss_tbl_init

Function ff_rss_tbl_init

lib/ff_dpdk_if.c:2478–2615  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2476}
2477
2478int
2479ff_rss_tbl_init(void)
2480{
2481 uint32_t ori_idx, idx, ori_daddr_idx, daddr_idx;
2482 uint32_t daddr, saddr;
2483 uint16_t sport;
2484 int prev_dport, stat, i, j, k;
2485 void *sc;
2486 struct ff_dpdk_if_context ctx;
2487
2488 memset(ff_rss_tbl, 0, sizeof(ff_rss_tbl));
2489
2490 sc = ff_veth_get_softc(&ctx);
2491 if (sc == NULL) {
2492 ff_log(FF_LOG_ERR, FF_LOGTYPE_FSTACK_LIB, "ff_veth_get_softc failed\n");
2493 return -1;
2494 }
2495
2496 for (i = 0; i < ff_global_cfg.dpdk.rss_check_cfgs->nb_rss_tbl; i++) {
2497 struct ff_rss_tbl_cfg *rcc = &ff_global_cfg.dpdk.rss_check_cfgs->rss_tbl_cfgs[i];
2498
2499 ctx.port_id = rcc->port_id;
2500 daddr = rcc->daddr;
2501 saddr = rcc->saddr;
2502 sport = rcc->sport;
2503
2504 /* Use DIR D to avoid getting the same idx while FF_RSS_TBL_MAX_DIP_MASK is very small*/
2505 ori_idx = idx = ((saddr + (uint32_t)((uint8_t *)&saddr)[3]) ^ sport) & \
2506 FF_RSS_TBL_MAX_SADDR_SPORT_ENTRIES_MASK;
2507 ori_daddr_idx = daddr_idx = (daddr + (uint32_t)((uint8_t *)&daddr)[3]) & \
2508 FF_RSS_TBL_MAX_DIP_MASK;
2509
2510 do {
2511 if (ff_rss_tbl[idx].saddr == INADDR_ANY ||
2512 (ff_rss_tbl[idx].saddr == saddr &&
2513 ff_rss_tbl[idx].sport == sport)) {
2514 break;
2515 }
2516
2517 if (ff_rss_tbl[idx].saddr != saddr ||
2518 ff_rss_tbl[idx].sport != sport) {
2519 idx++;
2520 idx &= FF_RSS_TBL_MAX_SADDR_SPORT_ENTRIES_MASK;
2521 }
2522 } while (idx != ori_idx);
2523
2524 if (idx == ori_idx &&
2525 ((ff_rss_tbl[idx].saddr != INADDR_ANY) &&
2526 (ff_rss_tbl[idx].saddr != saddr ||
2527 ff_rss_tbl[idx].sport != sport))) {
2528 ff_log(FF_LOG_WARNING, FF_LOGTYPE_FSTACK_LIB, "There are too many 2-tuble(> %d) of saddrs(max %d) * sport(max %d),"
2529 " this 4-tuple rss_tbl config will be ignored,"
2530 " idx %d, port_id %u, daddr "NIPQUAD_FMT", saddr "NIPQUAD_FMT", sport %u\n",
2531 FF_RSS_TBL_MAX_SADDR_SPORT_ENTRIES, FF_RSS_TBL_MAX_SADDR, FF_RSS_TBL_MAX_SPORT,
2532 i, ctx.port_id, NIPQUAD(daddr), NIPQUAD(saddr), ntohs(sport));
2533 goto IGNORE;
2534 //ff_veth_free_softc(sc);
2535 //return -1;

Callers 1

ff_dpdk_initFunction · 0.85

Calls 5

memsetFunction · 0.85
ff_veth_get_softcFunction · 0.85
ff_logFunction · 0.85
ff_rss_checkFunction · 0.85
ff_veth_free_softcFunction · 0.85

Tested by

no test coverage detected