examples/multi_process: fix build on Ubuntu 20.04
[dpdk.git] / examples / multi_process / client_server_mp / mp_server / main.c
index 0150533..b18e12d 100644 (file)
@@ -59,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 rte_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]);
+               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];
 }
@@ -78,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.
  */
@@ -140,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;
@@ -238,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)
@@ -291,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;