Messages in this thread | | | Date | Wed, 5 Jul 2023 08:56:40 -0700 | From | Jakub Kicinski <> | Subject | Re: [PATCH] netconsole: Append kernel version to message |
| |
On Tue, 4 Jul 2023 08:47:23 -0700 Breno Leitao wrote: > This is the code that does it. How does it sound?
More or less :)
> diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c > index 4f4f79532c6c..d26bd3b785c4 100644 > --- a/drivers/net/netconsole.c > +++ b/drivers/net/netconsole.c > @@ -36,6 +36,7 @@ > #include <linux/inet.h> > #include <linux/configfs.h> > #include <linux/etherdevice.h> > +#include <linux/utsname.h> > > MODULE_AUTHOR("Maintainer: Matt Mackall <mpm@selenic.com>"); > MODULE_DESCRIPTION("Console driver for network interfaces"); > @@ -772,8 +773,10 @@ static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, > const char *header, *body; > int offset = 0; > int header_len, body_len; > + int uname_len = 0;
I'd calculate the uname_len here if the option was set.
> - if (msg_len <= MAX_PRINT_CHUNK) { > + if (msg_len <= MAX_PRINT_CHUNK && > + !IS_ENABLED(CONFIG_NETCONSOLE_UNAME)) {
And then try to fold the path with uname into this. So that we don't have to separate exit points for the "message is short enough".
> netpoll_send_udp(&nt->np, msg, msg_len); > return; > } > @@ -788,14 +791,31 @@ static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg, > body_len = msg_len - header_len - 1; > body++; > > + if (IS_ENABLED(CONFIG_NETCONSOLE_UNAME)) { > + /* Add uname at the beginning of buffer */ > + char *uname = init_utsname()->release;
nit: const
> + /* uname_len contains the length of uname + ',' */ > + uname_len = strlen(uname) + 1; > + > + if (uname_len + msg_len < MAX_PRINT_CHUNK) { > + /* No fragmentation needed */ > + scnprintf(buf, MAX_PRINT_CHUNK, "%s,%s", uname, msg); > + netpoll_send_udp(&nt->np, buf, uname_len + msg_len); > + return; > + } > + > + /* The data will be fragment, prepending uname */ > + scnprintf(buf, MAX_PRINT_CHUNK, "%s,", uname); > + } > + > /* > * Transfer multiple chunks with the following extra header. > * "ncfrag=<byte-offset>/<total-bytes>" > */ > - memcpy(buf, header, header_len); > + memcpy(buf + uname_len, header, header_len);
And once done prepping I'd add uname_len to header_len
> while (offset < body_len) { > - int this_header = header_len; > + int this_header = header_len + uname_len;
Last but not least, I do agree with Stephen that this can be configurable with sysfs at runtime, no need to make it a Kconfig.
| |