diff options
author | Oleksij Rempel <o.rempel@pengutronix.de> | 2022-11-08 07:10:04 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2022-11-08 11:12:40 +0100 |
commit | 32f68233fe4bba7616af6cb61d3e121dfac50d0c (patch) | |
tree | ce857d7a7f31a66373a9ae7c384fe1550f7bbe2a | |
parent | 967e990287fd661298cc48f8f8aef85eb29c61c8 (diff) | |
download | barebox-32f68233fe4bba7616af6cb61d3e121dfac50d0c.tar.gz barebox-32f68233fe4bba7616af6cb61d3e121dfac50d0c.tar.xz |
ethlog: option to enable/disable promisc mode
Add -p option to control promisc mode of the ethernet device.
Example:
ethlog -p eth0 - will enable promisc mode and logging on the eth0
device
ethlog -rp eth0 - will disable promisc mode and logging on the eth0
device
All the same commands without "-p" option will not touch promisc
configuration.
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.barebox.org/20221108061009.4168735-3-o.rempel@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | commands/ethlog.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/commands/ethlog.c b/commands/ethlog.c index 0cc93ba808..7885d32c6b 100644 --- a/commands/ethlog.c +++ b/commands/ethlog.c @@ -29,11 +29,14 @@ static int do_ethlog(int argc, char *argv[]) { struct eth_device *edev; const char *edevname; - bool remove = false; - int opt; + bool remove = false, promisc = false; + int opt, ret; - while ((opt = getopt(argc, argv, "r")) > 0) { + while ((opt = getopt(argc, argv, "pr")) > 0) { switch (opt) { + case 'p': + promisc = true; + break; case 'r': remove = true; break; @@ -56,10 +59,19 @@ static int do_ethlog(int argc, char *argv[]) if (remove) { edev->tx_monitor = NULL; edev->rx_monitor = NULL; + if (promisc) + eth_set_promisc(edev, false); return 0; } + if (promisc) { + ret = eth_set_promisc(edev, true); + if (ret) + dev_warn(&edev->dev, "Failed to set promisc mode: %pe\n", + ERR_PTR(ret)); + } + edev->tx_monitor = ethlog_tx_monitor; edev->rx_monitor = ethlog_rx_monitor; @@ -69,12 +81,13 @@ static int do_ethlog(int argc, char *argv[]) BAREBOX_CMD_HELP_START(ethlog) BAREBOX_CMD_HELP_TEXT("Options:") BAREBOX_CMD_HELP_OPT("-r", "remove log handler from Ethernet interface") +BAREBOX_CMD_HELP_OPT("-p", "Enable promisc mode, or disable if -r is used") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(ethlog) .cmd = do_ethlog, BAREBOX_CMD_DESC("ETHLOG - tool to get dump of Ethernet packets") - BAREBOX_CMD_OPTS("[-r] [device]") + BAREBOX_CMD_OPTS("[-rp] [device]") BAREBOX_CMD_GROUP(CMD_GRP_NET) BAREBOX_CMD_COMPLETE(eth_complete) BAREBOX_CMD_END |