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=0ddc63e925f9a86d9e511065711a5f18b0a47dde;hpb=a894d96ee20293af353fc54dc2e801dcaa01e46c;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 0ddc63e925..b18e12dd4b 100644 --- a/examples/multi_process/client_server_mp/mp_server/main.c +++ b/examples/multi_process/client_server_mp/mp_server/main.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include @@ -60,18 +59,27 @@ static struct client_rx_buf *cl_rx_buf; static const char * 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); - 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]; } @@ -79,7 +87,7 @@ get_printable_mac_addr(uint16_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. */ @@ -141,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; @@ -239,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) @@ -292,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;