Commit c2e5f4fd authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'netconsole-enable-compile-time-configuration'

Breno Leitao says:

====================
netconsole: Enable compile time configuration

Enable netconsole features to be set at compilation time. Create two
Kconfig options that allow users to set extended logs and release
prepending features at compilation time.

The first patch de-duplicates the initialization code, and the second
patch adds the support in the de-duplicated code, avoiding touching two
different functions with the same change.
====================

Link: https://lore.kernel.org/r/20230811093158.1678322-1-leitao@debian.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents f3add6de fad361a2
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -332,6 +332,28 @@ config NETCONSOLE_DYNAMIC
	  at runtime through a userspace interface exported using configfs.
	  See <file:Documentation/networking/netconsole.rst> for details.

config NETCONSOLE_EXTENDED_LOG
	bool "Set kernel extended message by default"
	depends on NETCONSOLE
	default n
	help
	  Set extended log support for netconsole message. If this option is
	  set, log messages are transmitted with extended metadata header in a
	  format similar to /dev/kmsg.  See
	  <file:Documentation/networking/netconsole.rst> for details.

config NETCONSOLE_PREPEND_RELEASE
	bool "Prepend kernel release version in the message by default"
	depends on NETCONSOLE_EXTENDED_LOG
	default n
	help
	  Set kernel release to be prepended to each netconsole message by
	  default. If this option is set, the kernel release is prepended into
	  the first field of every netconsole message, so, the netconsole
	  server/peer can easily identify what kernel release is logging each
	  message.  See <file:Documentation/networking/netconsole.rst> for
	  details.

config NETPOLL
	def_bool NETCONSOLE

+28 −20
Original line number Diff line number Diff line
@@ -167,19 +167,21 @@ static void netconsole_target_put(struct netconsole_target *nt)

#endif	/* CONFIG_NETCONSOLE_DYNAMIC */

/* Allocate new target (from boot/module param) and setup netpoll for it */
static struct netconsole_target *alloc_param_target(char *target_config)
/* Allocate and initialize with defaults.
 * Note that these targets get their config_item fields zeroed-out.
 */
static struct netconsole_target *alloc_and_init(void)
{
	int err = -ENOMEM;
	struct netconsole_target *nt;

	/*
	 * Allocate and initialize with defaults.
	 * Note that these targets get their config_item fields zeroed-out.
	 */
	nt = kzalloc(sizeof(*nt), GFP_KERNEL);
	if (!nt)
		goto fail;
		return nt;

	if (IS_ENABLED(CONFIG_NETCONSOLE_EXTENDED_LOG))
		nt->extended = true;
	if (IS_ENABLED(CONFIG_NETCONSOLE_PREPEND_RELEASE))
		nt->release = true;

	nt->np.name = "netconsole";
	strscpy(nt->np.dev_name, "eth0", IFNAMSIZ);
@@ -187,6 +189,21 @@ static struct netconsole_target *alloc_param_target(char *target_config)
	nt->np.remote_port = 6666;
	eth_broadcast_addr(nt->np.remote_mac);

	return nt;
}

/* Allocate new target (from boot/module param) and setup netpoll for it */
static struct netconsole_target *alloc_param_target(char *target_config)
{
	struct netconsole_target *nt;
	int err;

	nt = alloc_and_init();
	if (!nt) {
		err = -ENOMEM;
		goto fail;
	}

	if (*target_config == '+') {
		nt->extended = true;
		target_config++;
@@ -195,6 +212,7 @@ static struct netconsole_target *alloc_param_target(char *target_config)
	if (*target_config == 'r') {
		if (!nt->extended) {
			pr_err("Netconsole configuration error. Release feature requires extended log message");
			err = -EINVAL;
			goto fail;
		}
		nt->release = true;
@@ -664,23 +682,13 @@ static const struct config_item_type netconsole_target_type = {
static struct config_item *make_netconsole_target(struct config_group *group,
						  const char *name)
{
	unsigned long flags;
	struct netconsole_target *nt;
	unsigned long flags;

	/*
	 * Allocate and initialize with defaults.
	 * Target is disabled at creation (!enabled).
	 */
	nt = kzalloc(sizeof(*nt), GFP_KERNEL);
	nt = alloc_and_init();
	if (!nt)
		return ERR_PTR(-ENOMEM);

	nt->np.name = "netconsole";
	strscpy(nt->np.dev_name, "eth0", IFNAMSIZ);
	nt->np.local_port = 6665;
	nt->np.remote_port = 6666;
	eth_broadcast_addr(nt->np.remote_mac);

	/* Initialize the config_item member */
	config_item_init_type_name(&nt->item, name, &netconsole_target_type);