X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=examples%2Fmulti_process%2Fclient_server_mp%2Fmp_server%2Fmain.c;h=b18e12dd4b840312ab8ea4d8e3b5d79346055d4e;hb=27b549c12df2ef2db6b271795b4df7b14a2d9c2c;hp=43e0ab52259b2a8d7a01b9c8c04a71ab21f9e6fc;hpb=cdfd5dbb90b05e198b436f97f0ba320d7cd7d8ad;p=dpdk.git diff --git a/examples/multi_process/client_server_mp/mp_server/main.c b/examples/multi_process/client_server_mp/mp_server/main.c index 43e0ab5225..b18e12dd4b 100644 --- a/examples/multi_process/client_server_mp/mp_server/main.c +++ b/examples/multi_process/client_server_mp/mp_server/main.c @@ -1,35 +1,5 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2013 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2014 Intel Corporation */ #include @@ -39,17 +9,13 @@ #include #include #include -#include #include #include -#include +#include #include #include -#include -#include #include -#include #include #include #include @@ -63,17 +29,14 @@ #include #include #include -#include #include #include #include -#include #include #include "common.h" #include "args.h" #include "init.h" -#include "main.h" /* * When doing reads from the NIC or the client queues, @@ -94,20 +57,29 @@ struct client_rx_buf { static struct client_rx_buf *cl_rx_buf; static const char * -get_printable_mac_addr(uint8_t port) +get_printable_mac_addr(uint16_t port) { - static const char err_address[] = "00:00:00:00:00:00"; - static char addresses[RTE_MAX_ETHPORTS][sizeof(err_address)]; - - if (unlikely(port >= RTE_MAX_ETHPORTS)) + static const struct rte_ether_addr null_mac; /* static defaults to 0 */ + static char err_address[32]; + static char addresses[RTE_MAX_ETHPORTS][32]; + int ret; + + if (unlikely(port >= RTE_MAX_ETHPORTS)) { + if (err_address[0] == '\0') + rte_ether_format_addr(err_address, + sizeof(err_address), &null_mac); return err_address; + } if (unlikely(addresses[port][0]=='\0')){ - struct ether_addr mac; - rte_eth_macaddr_get(port, &mac); - rte_snprintf(addresses[port], sizeof(addresses[port]), - "%02x:%02x:%02x:%02x:%02x:%02x\n", - mac.addr_bytes[0], mac.addr_bytes[1], mac.addr_bytes[2], - mac.addr_bytes[3], mac.addr_bytes[4], mac.addr_bytes[5]); + struct rte_ether_addr mac; + ret = rte_eth_macaddr_get(port, &mac); + if (ret != 0) { + printf("Failed to get MAC address (port %u): %s\n", + port, rte_strerror(-ret)); + return err_address; + } + rte_ether_format_addr(addresses[port], + sizeof(addresses[port]), &mac); } return addresses[port]; } @@ -115,7 +87,7 @@ get_printable_mac_addr(uint8_t port) /* * This function displays the recorded statistics for each port * and for each client. It uses ANSI terminal codes to clear - * screen when called. It is called from a single non-master + * screen when called. It is called from a single worker * thread in the server process, when the process is run with more * than one lcore enabled. */ @@ -177,13 +149,13 @@ do_stats_display(void) } /* - * The function called from each non-master lcore used by the process. + * The function called from each worker lcore used by the process. * The test_and_set function is used to randomly pick a single lcore on which * the code to display the statistics will run. Otherwise, the code just * repeatedly sleeps. */ static int -sleep_lcore(__attribute__((unused)) void *dummy) +sleep_lcore(__rte_unused void *dummy) { /* Used to pick a display thread - static, so zero-initialised */ static rte_atomic32_t display_stats; @@ -231,7 +203,7 @@ flush_rx_queue(uint16_t client) cl = &clients[client]; if (rte_ring_enqueue_bulk(cl->rx_q, (void **)cl_rx_buf[client].buffer, - cl_rx_buf[client].count) != 0){ + cl_rx_buf[client].count, NULL) == 0){ for (j = 0; j < cl_rx_buf[client].count; j++) rte_pktmbuf_free(cl_rx_buf[client].buffer[j]); cl->stats.rx_drop += cl_rx_buf[client].count; @@ -275,7 +247,7 @@ process_packets(uint32_t port_num __rte_unused, } /* - * Function called by the master lcore of the DPDK process. + * Function called by the main lcore of the DPDK process. */ static void do_packet_forwarding(void) @@ -301,9 +273,23 @@ do_packet_forwarding(void) } } +static void +signal_handler(int signal) +{ + uint16_t port_id; + + if (signal == SIGINT) + RTE_ETH_FOREACH_DEV(port_id) { + rte_eth_dev_stop(port_id); + rte_eth_dev_close(port_id); + } + exit(0); +} + int -MAIN(int argc, char *argv[]) +main(int argc, char *argv[]) { + signal(SIGINT, signal_handler); /* initialise the system */ if (init(argc, argv) < 0 ) return -1; @@ -314,8 +300,8 @@ MAIN(int argc, char *argv[]) /* clear statistics */ clear_stats(); - /* put all other cores to sleep bar master */ - rte_eal_mp_remote_launch(sleep_lcore, NULL, SKIP_MASTER); + /* put all other cores to sleep except main */ + rte_eal_mp_remote_launch(sleep_lcore, NULL, SKIP_MAIN); do_packet_forwarding(); return 0;