On Fri, Apr 08, 2022 at 10:29:50AM +0200, Oleksij Rempel wrote: > It is kind of tcpdump or tshark for barebox. Instead of starting > application it will let barebox dump everything to the console by still > allowing to use other application. > > Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> > --- > commands/Kconfig | 8 +++++ > commands/Makefile | 1 + > commands/ethlog.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++ > include/net.h | 11 +++++++ > net/eth.c | 4 +-- > net/net.c | 3 ++ > 6 files changed, 108 insertions(+), 2 deletions(-) > create mode 100644 commands/ethlog.c > > diff --git a/commands/Kconfig b/commands/Kconfig > index caef1e8fb5..c5505321cf 100644 > --- a/commands/Kconfig > +++ b/commands/Kconfig > @@ -1272,6 +1272,14 @@ config CMD_IP_ROUTE_GET > be shown on the command line or alternatively a variable is set to > the result. > > +config CMD_ETHLOG > + tristate > + prompt "ethlog" > + help > + log ethernet traffic. > + > + Usage: ethlog [-r] [DEVICENAME] > + > # end Network commands > endmenu > > diff --git a/commands/Makefile b/commands/Makefile > index fffb6d979e..b3b7bafe6b 100644 > --- a/commands/Makefile > +++ b/commands/Makefile > @@ -16,6 +16,7 @@ obj-$(CONFIG_CMD_MEMCMP) += memcmp.o > obj-$(CONFIG_CMD_MEMCPY) += memcpy.o > obj-$(CONFIG_CMD_MEMSET) += memset.o > obj-$(CONFIG_CMD_EDIT) += edit.o > +obj-$(CONFIG_CMD_ETHLOG) += ethlog.o > obj-$(CONFIG_CMD_EXEC) += exec.o > obj-$(CONFIG_CMD_SLEEP) += sleep.o > obj-$(CONFIG_CMD_SMC) += smc.o > diff --git a/commands/ethlog.c b/commands/ethlog.c > new file mode 100644 > index 0000000000..5ae278fc87 > --- /dev/null > +++ b/commands/ethlog.c > @@ -0,0 +1,83 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +// SPDX-FileCopyrightText: (c) 2022 Pengutronix, > +// Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx> > + > +#include <common.h> > +#include <command.h> > +#include <complete.h> > +#include <environment.h> > +#include <getopt.h> > +#include <net.h> > + > +static void ethlog_rx_monitor(struct eth_device *edev, void *packet, > + int length) > +{ > + print_hex_dump(KERN_DEBUG, "rx data <: ", DUMP_PREFIX_OFFSET, > + 16, 1, packet, length, true); > +} > + > +static void ethlog_tx_monitor(struct eth_device *edev, void *packet, > + int length) > +{ > + print_hex_dump(KERN_DEBUG, "tx data >: ", DUMP_PREFIX_OFFSET, > + 16, 1, packet, length, true); > +} It would be nice to print the network device name along with the hex dump. Maybe it's time for a dev_print_hex_dump() > + > +static int do_ethlog(int argc, char *argv[]) > +{ > + struct eth_device *edev; > + const char *edevname; > + bool remove = false; > + int opt; > + > + while ((opt = getopt(argc, argv, "r")) > 0) { > + switch (opt) { > + case 'r': > + remove = true; > + break; > + default: > + return COMMAND_ERROR_USAGE; > + } > + } > + > + if (optind == argc) > + edevname = "eth0"; > + else > + edevname = argv[optind]; > + > + edev = eth_get_byname(edevname); > + if (!edev) { > + printf("No such network device: %s\n", edevname); > + return 1; > + } > + > + if (remove) { > + edev->tx_monitor = NULL; > + edev->rx_monitor = NULL; > + > + return 0; > + } > + > + if (edev->tx_monitor || edev->rx_monitor) { > + printf("TX/RX monitor is already registered on %s\n", edevname); > + return 1; > + } This check doesn't look useful at the moment. > + > + edev->tx_monitor = ethlog_tx_monitor; > + edev->rx_monitor = ethlog_rx_monitor; > + > + return 0; > +} Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox