| 1312 | #endif |
| 1313 | |
| 1314 | int |
| 1315 | ff_dpdk_init(int argc, char **argv) |
| 1316 | { |
| 1317 | if (ff_global_cfg.dpdk.nb_procs < 1 || |
| 1318 | ff_global_cfg.dpdk.nb_procs > RTE_MAX_LCORE || |
| 1319 | ff_global_cfg.dpdk.proc_id >= ff_global_cfg.dpdk.nb_procs || |
| 1320 | ff_global_cfg.dpdk.proc_id < 0) { |
| 1321 | printf("param num_procs[%d] or proc_id[%d] error!\n", |
| 1322 | ff_global_cfg.dpdk.nb_procs, |
| 1323 | ff_global_cfg.dpdk.proc_id); |
| 1324 | exit(1); |
| 1325 | } |
| 1326 | |
| 1327 | int ret = rte_eal_init(argc, argv); |
| 1328 | if (ret < 0) { |
| 1329 | rte_exit(EXIT_FAILURE, "Error with EAL initialization\n"); |
| 1330 | } |
| 1331 | |
| 1332 | if (ff_global_cfg.log.level) { |
| 1333 | ff_log_open_set(); |
| 1334 | } |
| 1335 | |
| 1336 | numa_on = ff_global_cfg.dpdk.numa_on; |
| 1337 | |
| 1338 | idle_sleep = ff_global_cfg.dpdk.idle_sleep; |
| 1339 | pkt_tx_delay = ff_global_cfg.dpdk.pkt_tx_delay > BURST_TX_DRAIN_US ? \ |
| 1340 | BURST_TX_DRAIN_US : ff_global_cfg.dpdk.pkt_tx_delay; |
| 1341 | |
| 1342 | init_lcore_conf(); |
| 1343 | |
| 1344 | init_mem_pool(); |
| 1345 | |
| 1346 | init_dispatch_ring(); |
| 1347 | |
| 1348 | init_msg_ring(); |
| 1349 | |
| 1350 | #ifdef FF_KNI |
| 1351 | enable_kni = ff_global_cfg.kni.enable; |
| 1352 | if (enable_kni) { |
| 1353 | init_kni(); |
| 1354 | } |
| 1355 | #endif |
| 1356 | |
| 1357 | #ifdef FF_USE_PAGE_ARRAY |
| 1358 | ff_mmap_init(); |
| 1359 | #endif |
| 1360 | |
| 1361 | #ifdef FF_FLOW_ISOLATE |
| 1362 | // run once in primary process |
| 1363 | if (rte_eal_process_type() == RTE_PROC_PRIMARY){ |
| 1364 | ret = port_flow_isolate(0, 1); |
| 1365 | if (ret < 0) |
| 1366 | rte_exit(EXIT_FAILURE, "init_port_isolate failed\n"); |
| 1367 | } |
| 1368 | #endif |
| 1369 | |
| 1370 | ret = init_port_start(); |
| 1371 | if (ret < 0) { |
no test coverage detected