]> git.droids-corp.org - dpdk.git/commitdiff
examples/l2fwd: add promiscuous mode option
authorSarosh Arif <sarosh.arif@emumba.com>
Wed, 13 Oct 2021 07:23:03 +0000 (12:23 +0500)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 25 Oct 2021 20:31:53 +0000 (22:31 +0200)
The default behaviour of l2fwd is to exit if we are unable to turn
promiscuous mode on. On some aws instances turning promiscuous mode
on is not permitted. In such cases there should be a way to run the
application without promiscuous mode.

This patch allows user to turn promiscuous mode on via command line
parameter. l3fwd has a similar option available.

Signed-off-by: Sarosh Arif <sarosh.arif@emumba.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
doc/guides/sample_app_ug/l2_forward_real_virtual.rst
examples/l2fwd/main.c

index 7b1529b2fad45dbafcc4b24bb30a747b62b68fc8..aeeda7059cb6a28a5a4b9ae2ad1c85f744216a88 100644 (file)
@@ -92,6 +92,7 @@ The application requires a number of command line options:
 .. code-block:: console
 
     ./<build_dir>/examples/dpdk-l2fwd [EAL options] -- -p PORTMASK
+                                   [-P]
                                    [-q NQ]
                                    --[no-]mac-updating
                                    [--portmap="(port, port)[,(port, port)]"]
@@ -100,6 +101,11 @@ where,
 
 *   p PORTMASK: A hexadecimal bitmask of the ports to configure
 
+*   P: Optional, set all ports to promiscuous mode
+    so that packets are accepted regardless of the MAC destination address.
+    Without this option, only packets with the MAC destination address
+    set to the Ethernet address of the port are accepted.
+
 *   q NQ: A number of queues (=ports) per lcore (default is 1)
 
 *   --[no-]mac-updating: Enable or disable MAC addresses updating (enabled by default)
index c9d8d4918a3462734b2cc8e650d57c743d2e63c0..281c6b7a3f80e73ea8a27eb78b1e305a5ea46ff0 100644 (file)
@@ -43,6 +43,9 @@ static volatile bool force_quit;
 /* MAC updating enabled by default */
 static int mac_updating = 1;
 
+/* Ports set in promiscuous mode off by default. */
+static int promiscuous_on;
+
 #define RTE_LOGTYPE_L2FWD RTE_LOGTYPE_USER1
 
 #define MAX_PKT_BURST 32
@@ -306,8 +309,9 @@ l2fwd_launch_one_lcore(__rte_unused void *dummy)
 static void
 l2fwd_usage(const char *prgname)
 {
-       printf("%s [EAL options] -- -p PORTMASK [-q NQ]\n"
+       printf("%s [EAL options] -- -p PORTMASK [-P] [-q NQ]\n"
               "  -p PORTMASK: hexadecimal bitmask of ports to configure\n"
+              "  -P : Enable promiscuous mode\n"
               "  -q NQ: number of queue (=ports) per lcore (default is 1)\n"
               "  -T PERIOD: statistics will be refreshed each PERIOD seconds (0 to disable, 10 default, 86400 maximum)\n"
               "  --no-mac-updating: Disable MAC addresses updating (enabled by default)\n"
@@ -424,6 +428,7 @@ l2fwd_parse_timer_period(const char *q_arg)
 
 static const char short_options[] =
        "p:"  /* portmask */
+       "P"   /* promiscuous */
        "q:"  /* number of queues */
        "T:"  /* timer period */
        ;
@@ -472,6 +477,9 @@ l2fwd_parse_args(int argc, char **argv)
                                return -1;
                        }
                        break;
+               case 'P':
+                       promiscuous_on = 1;
+                       break;
 
                /* nqueue */
                case 'q':
@@ -871,12 +879,13 @@ main(int argc, char **argv)
                                  ret, portid);
 
                printf("done: \n");
-
-               ret = rte_eth_promiscuous_enable(portid);
-               if (ret != 0)
-                       rte_exit(EXIT_FAILURE,
-                                "rte_eth_promiscuous_enable:err=%s, port=%u\n",
-                                rte_strerror(-ret), portid);
+               if (promiscuous_on) {
+                       ret = rte_eth_promiscuous_enable(portid);
+                       if (ret != 0)
+                               rte_exit(EXIT_FAILURE,
+                                       "rte_eth_promiscuous_enable:err=%s, port=%u\n",
+                                       rte_strerror(-ret), portid);
+               }
 
                printf("Port %u, MAC address: " RTE_ETHER_ADDR_PRT_FMT "\n\n",
                        portid,