X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fkni%2Fmain.c;h=29fc37e1fb6b593f01260da677d01f5497f490ab;hb=f5ad5016869b06aa6e03dc1e38dcf8e4d1c733bf;hp=8bea07182f7f05d689ad347d1b62c36bcebbf3ca;hpb=6d13ea8e8e49ab957deae2bba5ecf4a4bfe747d1;p=dpdk.git diff --git a/examples/kni/main.c b/examples/kni/main.c index 8bea07182f..29fc37e1fb 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -176,9 +176,13 @@ signal_handler(int signum) return; } - /* When we receive a RTMIN or SIGINT signal, stop kni processing */ - if (signum == SIGRTMIN || signum == SIGINT){ - printf("\nSIGRTMIN/SIGINT received. KNI processing stopping.\n"); + /* + * When we receive a RTMIN or SIGINT or SIGTERM signal, + * stop kni processing + */ + if (signum == SIGRTMIN || signum == SIGINT || signum == SIGTERM) { + printf("\nSIGRTMIN/SIGINT/SIGTERM received. " + "KNI processing stopping.\n"); rte_atomic32_inc(&kni_stop); return; } @@ -595,7 +599,13 @@ init_port(uint16_t port) /* Initialise device and RX/TX queues */ RTE_LOG(INFO, APP, "Initialising port %u ...\n", (unsigned)port); fflush(stdout); - rte_eth_dev_info_get(port, &dev_info); + + ret = rte_eth_dev_info_get(port, &dev_info); + if (ret != 0) + rte_exit(EXIT_FAILURE, + "Error during getting device (port %u) info: %s\n", + port, strerror(-ret)); + if (dev_info.tx_offload_capa & DEV_TX_OFFLOAD_MBUF_FAST_FREE) local_port_conf.txmode.offloads |= DEV_TX_OFFLOAD_MBUF_FAST_FREE; @@ -630,8 +640,13 @@ init_port(uint16_t port) rte_exit(EXIT_FAILURE, "Could not start port%u (%d)\n", (unsigned)port, ret); - if (promiscuous_on) - rte_eth_promiscuous_enable(port); + if (promiscuous_on) { + ret = rte_eth_promiscuous_enable(port); + if (ret != 0) + rte_exit(EXIT_FAILURE, + "Could not enable promiscuous mode for port%u: %s\n", + port, rte_strerror(-ret)); + } } /* Check the link status of all ports in up to 9s, and print them finally */ @@ -643,6 +658,7 @@ check_all_ports_link_status(uint32_t port_mask) uint16_t portid; uint8_t count, all_ports_up, print_flag = 0; struct rte_eth_link link; + int ret; printf("\nChecking link status\n"); fflush(stdout); @@ -652,7 +668,14 @@ check_all_ports_link_status(uint32_t port_mask) if ((port_mask & (1 << portid)) == 0) continue; memset(&link, 0, sizeof(link)); - rte_eth_link_get_nowait(portid, &link); + ret = rte_eth_link_get_nowait(portid, &link); + if (ret < 0) { + all_ports_up = 0; + if (print_flag == 1) + printf("Port %u link get failed: %s\n", + portid, rte_strerror(-ret)); + continue; + } /* print link status if flag set */ if (print_flag == 1) { if (link.link_status) @@ -720,6 +743,7 @@ monitor_all_ports_link_status(void *arg) struct kni_port_params **p = kni_port_params_array; int prev; (void) arg; + int ret; while (monitor_links) { rte_delay_ms(500); @@ -727,7 +751,13 @@ monitor_all_ports_link_status(void *arg) if ((ports_mask & (1 << portid)) == 0) continue; memset(&link, 0, sizeof(link)); - rte_eth_link_get_nowait(portid, &link); + ret = rte_eth_link_get_nowait(portid, &link); + if (ret < 0) { + RTE_LOG(ERR, APP, + "Get link failed (port %u): %s\n", + portid, rte_strerror(-ret)); + continue; + } for (i = 0; i < p[portid]->nb_kni; i++) { prev = rte_kni_update_link(p[portid]->kni[i], link.link_status); @@ -760,7 +790,7 @@ kni_change_mtu(uint16_t port_id, unsigned int new_mtu) memcpy(&conf, &port_conf, sizeof(conf)); /* Set new MTU */ - if (new_mtu > ETHER_MAX_LEN) + if (new_mtu > RTE_ETHER_MAX_LEN) conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME; else conf.rxmode.offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME; @@ -780,7 +810,15 @@ kni_change_mtu(uint16_t port_id, unsigned int new_mtu) "for port%u (%d)\n", (unsigned int)port_id, ret); - rte_eth_dev_info_get(port_id, &dev_info); + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) { + RTE_LOG(ERR, APP, + "Error during getting device (port %u) info: %s\n", + port_id, strerror(-ret)); + + return ret; + } + rxq_conf = dev_info.default_rxconf; rxq_conf.offloads = conf.rxmode.offloads; ret = rte_eth_rx_queue_setup(port_id, 0, nb_rxd, @@ -834,8 +872,8 @@ kni_config_network_interface(uint16_t port_id, uint8_t if_up) static void print_ethaddr(const char *name, struct rte_ether_addr *mac_addr) { - char buf[ETHER_ADDR_FMT_SIZE]; - ether_format_addr(buf, ETHER_ADDR_FMT_SIZE, mac_addr); + char buf[RTE_ETHER_ADDR_FMT_SIZE]; + rte_ether_format_addr(buf, RTE_ETHER_ADDR_FMT_SIZE, mac_addr); RTE_LOG(INFO, APP, "\t%s%s\n", name, buf); } @@ -869,6 +907,7 @@ kni_alloc(uint16_t port_id) struct rte_kni *kni; struct rte_kni_conf conf; struct kni_port_params **params = kni_port_params_array; + int ret; if (port_id >= RTE_MAX_ETHPORTS || !params[port_id]) return -1; @@ -897,25 +936,26 @@ kni_alloc(uint16_t port_id) if (i == 0) { struct rte_kni_ops ops; struct rte_eth_dev_info dev_info; - const struct rte_pci_device *pci_dev; - const struct rte_bus *bus = NULL; - - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(port_id, &dev_info); - - if (dev_info.device) - bus = rte_bus_find_by_device(dev_info.device); - if (bus && !strcmp(bus->name, "pci")) { - pci_dev = RTE_DEV_TO_PCI(dev_info.device); - conf.addr = pci_dev->addr; - conf.id = pci_dev->id; - } + + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) + rte_exit(EXIT_FAILURE, + "Error during getting device (port %u) info: %s\n", + port_id, strerror(-ret)); + /* Get the interface default mac address */ - rte_eth_macaddr_get(port_id, + ret = rte_eth_macaddr_get(port_id, (struct rte_ether_addr *)&conf.mac_addr); + if (ret != 0) + rte_exit(EXIT_FAILURE, + "Failed to get MAC address (port %u): %s\n", + port_id, rte_strerror(-ret)); rte_eth_dev_get_mtu(port_id, &conf.mtu); + conf.min_mtu = dev_info.min_mtu; + conf.max_mtu = dev_info.max_mtu; + memset(&ops, 0, sizeof(ops)); ops.port_id = port_id; ops.change_mtu = kni_change_mtu; @@ -970,6 +1010,7 @@ main(int argc, char** argv) signal(SIGUSR2, signal_handler); signal(SIGRTMIN, signal_handler); signal(SIGINT, signal_handler); + signal(SIGTERM, signal_handler); /* Initialise EAL */ ret = rte_eal_init(argc, argv);