X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fkni%2Fmain.c;h=e99ef5c38ab7e95a9e4f7aaf6666b9d469626847;hb=2e7997ce58f95762511568e4b6549fcde9860726;hp=f5d12a5b8676f4abf1ae939f87ba60956cd72a5b;hpb=3ee6f706519c0a7456f3d8a79048150dfa6d2581;p=dpdk.git diff --git a/examples/kni/main.c b/examples/kni/main.c index f5d12a5b86..e99ef5c38a 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -95,7 +94,7 @@ static struct kni_port_params *kni_port_params_array[RTE_MAX_ETHPORTS]; /* Options for configuring ethernet port */ static struct rte_eth_conf port_conf = { .txmode = { - .mq_mode = ETH_MQ_TX_NONE, + .mq_mode = RTE_ETH_MQ_TX_NONE, }, }; @@ -131,8 +130,8 @@ static int kni_change_mtu(uint16_t port_id, unsigned int new_mtu); static int kni_config_network_interface(uint16_t port_id, uint8_t if_up); static int kni_config_mac_address(uint16_t port_id, uint8_t mac_addr[]); -static rte_atomic32_t kni_stop = RTE_ATOMIC32_INIT(0); -static rte_atomic32_t kni_pause = RTE_ATOMIC32_INIT(0); +static uint32_t kni_stop; +static uint32_t kni_pause; /* Print out statistics on packets handled */ static void @@ -185,7 +184,7 @@ signal_handler(int signum) if (signum == SIGRTMIN || signum == SIGINT || signum == SIGTERM) { printf("\nSIGRTMIN/SIGINT/SIGTERM received. " "KNI processing stopping.\n"); - rte_atomic32_inc(&kni_stop); + __atomic_fetch_add(&kni_stop, 1, __ATOMIC_RELAXED); return; } } @@ -311,8 +310,8 @@ main_loop(__rte_unused void *arg) kni_port_params_array[i]->lcore_rx, kni_port_params_array[i]->port_id); while (1) { - f_stop = rte_atomic32_read(&kni_stop); - f_pause = rte_atomic32_read(&kni_pause); + f_stop = __atomic_load_n(&kni_stop, __ATOMIC_RELAXED); + f_pause = __atomic_load_n(&kni_pause, __ATOMIC_RELAXED); if (f_stop) break; if (f_pause) @@ -324,8 +323,8 @@ main_loop(__rte_unused void *arg) kni_port_params_array[i]->lcore_tx, kni_port_params_array[i]->port_id); while (1) { - f_stop = rte_atomic32_read(&kni_stop); - f_pause = rte_atomic32_read(&kni_pause); + f_stop = __atomic_load_n(&kni_stop, __ATOMIC_RELAXED); + f_pause = __atomic_load_n(&kni_pause, __ATOMIC_RELAXED); if (f_stop) break; if (f_pause) @@ -608,9 +607,9 @@ init_port(uint16_t port) "Error during getting device (port %u) info: %s\n", port, strerror(-ret)); - if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) + if (dev_info.tx_offload_capa & RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE) local_port_conf.txmode.offloads |= - DEV_TX_OFFLOAD_MBUF_FAST_FREE; + RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE; ret = rte_eth_dev_configure(port, 1, 1, &local_port_conf); if (ret < 0) rte_exit(EXIT_FAILURE, "Could not configure port%u (%d)\n", @@ -661,6 +660,7 @@ check_all_ports_link_status(uint32_t port_mask) uint8_t count, all_ports_up, print_flag = 0; struct rte_eth_link link; int ret; + char link_status_text[RTE_ETH_LINK_MAX_STR_LEN]; printf("\nChecking link status\n"); fflush(stdout); @@ -680,18 +680,14 @@ check_all_ports_link_status(uint32_t port_mask) } /* print link status if flag set */ if (print_flag == 1) { - if (link.link_status) - printf( - "Port%d Link Up - speed %uMbps - %s\n", - portid, link.link_speed, - (link.link_duplex == ETH_LINK_FULL_DUPLEX) ? - ("full-duplex") : ("half-duplex")); - else - printf("Port %d Link Down\n", portid); + rte_eth_link_to_str(link_status_text, + sizeof(link_status_text), &link); + printf("Port %d %s\n", portid, + link_status_text); continue; } /* clear all_ports_up flag if any link down */ - if (link.link_status == ETH_LINK_DOWN) { + if (link.link_status == RTE_ETH_LINK_DOWN) { all_ports_up = 0; break; } @@ -717,19 +713,15 @@ check_all_ports_link_status(uint32_t port_mask) static void log_link_state(struct rte_kni *kni, int prev, struct rte_eth_link *link) { + char link_status_text[RTE_ETH_LINK_MAX_STR_LEN]; if (kni == NULL || link == NULL) return; - if (prev == ETH_LINK_DOWN && link->link_status == ETH_LINK_UP) { - RTE_LOG(INFO, APP, "%s NIC Link is Up %d Mbps %s %s.\n", + rte_eth_link_to_str(link_status_text, sizeof(link_status_text), link); + if (prev != link->link_status) + RTE_LOG(INFO, APP, "%s NIC %s\n", rte_kni_get_name(kni), - link->link_speed, - link->link_autoneg ? "(AutoNeg)" : "(Fixed)", - link->link_duplex ? "Full Duplex" : "Half Duplex"); - } else if (prev == ETH_LINK_UP && link->link_status == ETH_LINK_DOWN) { - RTE_LOG(INFO, APP, "%s NIC Link is Down.\n", - rte_kni_get_name(kni)); - } + link_status_text); } /* @@ -789,18 +781,16 @@ kni_change_mtu_(uint16_t port_id, unsigned int new_mtu) RTE_LOG(INFO, APP, "Change MTU of port %d to %u\n", port_id, new_mtu); /* Stop specific port */ - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d: %s\n", + port_id, rte_strerror(-ret)); + return ret; + } memcpy(&conf, &port_conf, sizeof(conf)); - /* Set new MTU */ - if (new_mtu > RTE_ETHER_MAX_LEN) - conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME; - else - conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME; - - /* mtu + length of header + length of FCS = max pkt length */ - conf.rxmode.max_rx_pkt_len = new_mtu + KNI_ENET_HEADER_SIZE + - KNI_ENET_FCS_SIZE; + + conf.rxmode.mtu = new_mtu; ret = rte_eth_dev_configure(port_id, 1, 1, &conf); if (ret < 0) { RTE_LOG(ERR, APP, "Fail to reconfigure port %d\n", port_id); @@ -858,9 +848,9 @@ kni_change_mtu(uint16_t port_id, unsigned int new_mtu) { int ret; - rte_atomic32_inc(&kni_pause); + __atomic_fetch_add(&kni_pause, 1, __ATOMIC_RELAXED); ret = kni_change_mtu_(port_id, new_mtu); - rte_atomic32_dec(&kni_pause); + __atomic_fetch_sub(&kni_pause, 1, __ATOMIC_RELAXED); return ret; } @@ -879,15 +869,28 @@ kni_config_network_interface(uint16_t port_id, uint8_t if_up) RTE_LOG(INFO, APP, "Configure network interface of %d %s\n", port_id, if_up ? "up" : "down"); - rte_atomic32_inc(&kni_pause); + __atomic_fetch_add(&kni_pause, 1, __ATOMIC_RELAXED); if (if_up != 0) { /* Configure network interface up */ - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d: %s\n", + port_id, rte_strerror(-ret)); + __atomic_fetch_sub(&kni_pause, 1, __ATOMIC_RELAXED); + return ret; + } ret = rte_eth_dev_start(port_id); - } else /* Configure network interface down */ - rte_eth_dev_stop(port_id); + } else { /* Configure network interface down */ + ret = rte_eth_dev_stop(port_id); + if (ret != 0) { + RTE_LOG(ERR, APP, "Failed to stop port %d: %s\n", + port_id, rte_strerror(-ret)); + __atomic_fetch_sub(&kni_pause, 1, __ATOMIC_RELAXED); + return ret; + } + } - rte_atomic32_dec(&kni_pause); + __atomic_fetch_sub(&kni_pause, 1, __ATOMIC_RELAXED); if (ret < 0) RTE_LOG(ERR, APP, "Failed to start port %d\n", port_id); @@ -956,7 +959,7 @@ kni_alloc(uint16_t port_id) conf.mbuf_size = MAX_PACKET_SZ; /* * The first KNI device associated to a port - * is the master, for multiple kernel thread + * is the main, for multiple kernel thread * environment. */ if (i == 0) { @@ -1005,6 +1008,7 @@ static int kni_free_kni(uint16_t port_id) { uint8_t i; + int ret; struct kni_port_params **p = kni_port_params_array; if (port_id >= RTE_MAX_ETHPORTS || !p[port_id]) @@ -1015,7 +1019,11 @@ kni_free_kni(uint16_t port_id) printf("Fail to release kni\n"); p[port_id]->kni[i] = NULL; } - rte_eth_dev_stop(port_id); + ret = rte_eth_dev_stop(port_id); + if (ret != 0) + RTE_LOG(ERR, APP, "Failed to stop port %d: %s\n", + port_id, rte_strerror(-ret)); + rte_eth_dev_close(port_id); return 0; } @@ -1031,7 +1039,7 @@ main(int argc, char** argv) pthread_t kni_link_tid; int pid; - /* Associate signal_hanlder function with USR signals */ + /* Associate signal_handler function with USR signals */ signal(SIGUSR1, signal_handler); signal(SIGUSR2, signal_handler); signal(SIGRTMIN, signal_handler); @@ -1105,8 +1113,8 @@ main(int argc, char** argv) "Could not create link status thread!\n"); /* Launch per-lcore function on every lcore */ - rte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER); - RTE_LCORE_FOREACH_SLAVE(i) { + rte_eal_mp_remote_launch(main_loop, NULL, CALL_MAIN); + RTE_LCORE_FOREACH_WORKER(i) { if (rte_eal_wait_lcore(i) < 0) return -1; } @@ -1125,5 +1133,8 @@ main(int argc, char** argv) kni_port_params_array[i] = NULL; } + /* clean up the EAL */ + rte_eal_cleanup(); + return 0; }