linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers
@ 2025-07-18 11:52 Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 1/5] netpoll: Remove unused fields from inet_addr union Breno Leitao
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Breno Leitao @ 2025-07-18 11:52 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, Breno Leitao, Andrew Lunn
  Cc: netdev, linux-kernel, kernel-team

This patchset refactors the IP address parsing logic in the netconsole
driver to eliminate code duplication and improve maintainability. The
changes centralize IPv4 and IPv6 address parsing into a single function
(netpoll_parse_ip_addr). For that, it needs to teach
netpoll_parse_ip_addr() to handle strings with newlines, which is the
type of string coming from configfs.

Background

The netconsole driver currently has duplicate IP address parsing logic
in both local_ip_store() and remote_ip_store() functions. This
duplication increases the risk of inconsistencies and makes the code
harder to maintain.

Benefits

* Reduced code duplication: ~40 lines of duplicate parsing logic eliminated
 * Improved robustness: Centralized parsing reduces the chance of inconsistencies
 * Easier to maintain: Code follow more the netdev way

PS: The patches are very well contained in other to help review.

---
Breno Leitao (5):
      netpoll: Remove unused fields from inet_addr union
      netconsole: move netpoll_parse_ip_addr() earlier for reuse
      netconsole: add support for strings with new line in netpoll_parse_ip_addr
      netconsole: use netpoll_parse_ip_addr in local_ip_store
      netconsole: use netpoll_parse_ip_addr in local_ip_store

 drivers/net/netconsole.c | 85 ++++++++++++++++++------------------------------
 include/linux/netpoll.h  |  3 --
 2 files changed, 31 insertions(+), 57 deletions(-)
---
base-commit: d61f6cb6f6ef3c70d2ccc0d9c85c508cb8017da9
change-id: 20250718-netconsole_ref-c1f7254cfb51

Best regards,
--  
Breno Leitao <leitao@debian.org>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH net-next 1/5] netpoll: Remove unused fields from inet_addr union
  2025-07-18 11:52 [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers Breno Leitao
@ 2025-07-18 11:52 ` Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse Breno Leitao
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Breno Leitao @ 2025-07-18 11:52 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, Breno Leitao, Andrew Lunn
  Cc: netdev, linux-kernel, kernel-team

Clean up the inet_addr union by removing unused fields that are
redundant with existing members:

This simplifies the union structure while maintaining all necessary
functionality for both IPv4 and IPv6 address handling.

Signed-off-by: Breno Leitao <leitao@debian.org>
---
 include/linux/netpoll.h | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h
index 735e65c3cc114..b5ea9882eda8b 100644
--- a/include/linux/netpoll.h
+++ b/include/linux/netpoll.h
@@ -15,10 +15,7 @@
 #include <linux/refcount.h>
 
 union inet_addr {
-	__u32		all[4];
 	__be32		ip;
-	__be32		ip6[4];
-	struct in_addr	in;
 	struct in6_addr	in6;
 };
 

-- 
2.47.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
  2025-07-18 11:52 [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 1/5] netpoll: Remove unused fields from inet_addr union Breno Leitao
@ 2025-07-18 11:52 ` Breno Leitao
  2025-07-18 17:03   ` Jakub Kicinski
  2025-07-19  0:03   ` kernel test robot
  2025-07-18 11:52 ` [PATCH net-next 3/5] netconsole: add support for strings with new line in netpoll_parse_ip_addr Breno Leitao
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 8+ messages in thread
From: Breno Leitao @ 2025-07-18 11:52 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, Breno Leitao, Andrew Lunn
  Cc: netdev, linux-kernel, kernel-team

Move netpoll_parse_ip_addr() earlier in the file to be reused in
other functions, such as local_ip_store(). This avoids duplicate
address parsing logic and centralizes validation for both IPv4
and IPv6 string input.

No functional changes intended.

Signed-off-by: Breno Leitao <leitao@debian.org>
---
 drivers/net/netconsole.c | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index e3722de08ea9f..be946e8be72b1 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -360,6 +360,26 @@ static void trim_newline(char *s, size_t maxlen)
 		s[len - 1] = '\0';
 }
 
+static int netpoll_parse_ip_addr(const char *str, union inet_addr *addr)
+{
+	const char *end;
+
+	if (!strchr(str, ':') &&
+	    in4_pton(str, -1, (void *)addr, -1, &end) > 0) {
+		if (!*end)
+			return 0;
+	}
+	if (in6_pton(str, -1, addr->in6.s6_addr, -1, &end) > 0) {
+#if IS_ENABLED(CONFIG_IPV6)
+		if (!*end)
+			return 1;
+#else
+		return -1;
+#endif
+	}
+	return -1;
+}
+
 /*
  * Attribute operations for netconsole_target.
  */
@@ -1742,26 +1762,6 @@ static void write_msg(struct console *con, const char *msg, unsigned int len)
 	spin_unlock_irqrestore(&target_list_lock, flags);
 }
 
-static int netpoll_parse_ip_addr(const char *str, union inet_addr *addr)
-{
-	const char *end;
-
-	if (!strchr(str, ':') &&
-	    in4_pton(str, -1, (void *)addr, -1, &end) > 0) {
-		if (!*end)
-			return 0;
-	}
-	if (in6_pton(str, -1, addr->in6.s6_addr, -1, &end) > 0) {
-#if IS_ENABLED(CONFIG_IPV6)
-		if (!*end)
-			return 1;
-#else
-		return -1;
-#endif
-	}
-	return -1;
-}
-
 static int netconsole_parser_cmdline(struct netpoll *np, char *opt)
 {
 	bool ipversion_set = false;

-- 
2.47.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 3/5] netconsole: add support for strings with new line in netpoll_parse_ip_addr
  2025-07-18 11:52 [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 1/5] netpoll: Remove unused fields from inet_addr union Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse Breno Leitao
@ 2025-07-18 11:52 ` Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 5/5] " Breno Leitao
  4 siblings, 0 replies; 8+ messages in thread
From: Breno Leitao @ 2025-07-18 11:52 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, Breno Leitao, Andrew Lunn
  Cc: netdev, linux-kernel, kernel-team

The current IP address parsing logic fails when the input string
contains a trailing newline character. This can occur when IP
addresses are provided through configfs, which contains newlines in
a const buffer.

Teach netpoll_parse_ip_addr() how to ignore newlines at the end of the
IPs. Also, simplify the code by:

 * No need to check for separators. Try to parse ipv4, if it fails try
   ipv6 similarly to ceph_pton()
 * If ipv6 is not supported, don't call in6_pton() at all.

Signed-off-by: Breno Leitao <leitao@debian.org>
---
 drivers/net/netconsole.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index be946e8be72b1..7ea265752e021 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -363,20 +363,21 @@ static void trim_newline(char *s, size_t maxlen)
 static int netpoll_parse_ip_addr(const char *str, union inet_addr *addr)
 {
 	const char *end;
+	int len;
 
-	if (!strchr(str, ':') &&
-	    in4_pton(str, -1, (void *)addr, -1, &end) > 0) {
-		if (!*end)
-			return 0;
-	}
-	if (in6_pton(str, -1, addr->in6.s6_addr, -1, &end) > 0) {
-#if IS_ENABLED(CONFIG_IPV6)
-		if (!*end)
-			return 1;
-#else
+	len = strlen(str);
+	if (!len)
 		return -1;
+
+	if (str[len - 1] == '\n')
+		len -= 1;
+
+	if (in4_pton(str, len, (void *)addr, -1, &end) > 0)
+		return 0;
+#if IS_ENABLED(CONFIG_IPV6)
+	if (in6_pton(str, len, addr->in6.s6_addr, -1, &end) > 0)
+		return 1;
 #endif
-	}
 	return -1;
 }
 

-- 
2.47.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store
  2025-07-18 11:52 [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers Breno Leitao
                   ` (2 preceding siblings ...)
  2025-07-18 11:52 ` [PATCH net-next 3/5] netconsole: add support for strings with new line in netpoll_parse_ip_addr Breno Leitao
@ 2025-07-18 11:52 ` Breno Leitao
  2025-07-18 11:52 ` [PATCH net-next 5/5] " Breno Leitao
  4 siblings, 0 replies; 8+ messages in thread
From: Breno Leitao @ 2025-07-18 11:52 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, Breno Leitao, Andrew Lunn
  Cc: netdev, linux-kernel, kernel-team

Replace manual IP address parsing with a call to netpoll_parse_ip_addr
in local_ip_store(), simplifying the code and reducing the chance of
errors.

Also, remove the pr_err() if the user enters an invalid value in
configfs entries. pr_err() is not the best way to alert user that the
configuration is invalid.

Signed-off-by: Breno Leitao <leitao@debian.org>
---
 drivers/net/netconsole.c | 22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index 7ea265752e021..3044349c5fe37 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -751,6 +751,7 @@ static ssize_t local_ip_store(struct config_item *item, const char *buf,
 {
 	struct netconsole_target *nt = to_target(item);
 	ssize_t ret = -EINVAL;
+	int ipv6;
 
 	mutex_lock(&dynamic_netconsole_mutex);
 	if (nt->enabled) {
@@ -759,23 +760,10 @@ static ssize_t local_ip_store(struct config_item *item, const char *buf,
 		goto out_unlock;
 	}
 
-	if (strnchr(buf, count, ':')) {
-		const char *end;
-
-		if (in6_pton(buf, count, nt->np.local_ip.in6.s6_addr, -1, &end) > 0) {
-			if (*end && *end != '\n') {
-				pr_err("invalid IPv6 address at: <%c>\n", *end);
-				goto out_unlock;
-			}
-			nt->np.ipv6 = true;
-		} else
-			goto out_unlock;
-	} else {
-		if (!nt->np.ipv6)
-			nt->np.local_ip.ip = in_aton(buf);
-		else
-			goto out_unlock;
-	}
+	ipv6 = netpoll_parse_ip_addr(buf, &nt->np.local_ip);
+	if (ipv6 == -1)
+		goto out_unlock;
+	nt->np.ipv6 = ipv6;
 
 	ret = strnlen(buf, count);
 out_unlock:

-- 
2.47.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 5/5] netconsole: use netpoll_parse_ip_addr in local_ip_store
  2025-07-18 11:52 [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers Breno Leitao
                   ` (3 preceding siblings ...)
  2025-07-18 11:52 ` [PATCH net-next 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store Breno Leitao
@ 2025-07-18 11:52 ` Breno Leitao
  4 siblings, 0 replies; 8+ messages in thread
From: Breno Leitao @ 2025-07-18 11:52 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, Breno Leitao, Andrew Lunn
  Cc: netdev, linux-kernel, kernel-team

Replace manual IP address parsing with a call to netpoll_parse_ip_addr
in remote_ip_store(), simplifying the code and reducing the chance of
errors.

The error message got removed, since it is not a good practice to
pr_err() if used pass a wrong value in configfs.

Signed-off-by: Breno Leitao <leitao@debian.org>
---
 drivers/net/netconsole.c | 22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index 3044349c5fe37..de6f1a7c24cc0 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -776,6 +776,7 @@ static ssize_t remote_ip_store(struct config_item *item, const char *buf,
 {
 	struct netconsole_target *nt = to_target(item);
 	ssize_t ret = -EINVAL;
+	int ipv6;
 
 	mutex_lock(&dynamic_netconsole_mutex);
 	if (nt->enabled) {
@@ -784,23 +785,10 @@ static ssize_t remote_ip_store(struct config_item *item, const char *buf,
 		goto out_unlock;
 	}
 
-	if (strnchr(buf, count, ':')) {
-		const char *end;
-
-		if (in6_pton(buf, count, nt->np.remote_ip.in6.s6_addr, -1, &end) > 0) {
-			if (*end && *end != '\n') {
-				pr_err("invalid IPv6 address at: <%c>\n", *end);
-				goto out_unlock;
-			}
-			nt->np.ipv6 = true;
-		} else
-			goto out_unlock;
-	} else {
-		if (!nt->np.ipv6)
-			nt->np.remote_ip.ip = in_aton(buf);
-		else
-			goto out_unlock;
-	}
+	ipv6 = netpoll_parse_ip_addr(buf, &nt->np.remote_ip);
+	if (ipv6 == -1)
+		goto out_unlock;
+	nt->np.ipv6 = ipv6;
 
 	ret = strnlen(buf, count);
 out_unlock:

-- 
2.47.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
  2025-07-18 11:52 ` [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse Breno Leitao
@ 2025-07-18 17:03   ` Jakub Kicinski
  2025-07-19  0:03   ` kernel test robot
  1 sibling, 0 replies; 8+ messages in thread
From: Jakub Kicinski @ 2025-07-18 17:03 UTC (permalink / raw)
  To: Breno Leitao
  Cc: David S. Miller, Eric Dumazet, Paolo Abeni, Simon Horman,
	Andrew Lunn, netdev, linux-kernel, kernel-team

On Fri, 18 Jul 2025 04:52:02 -0700 Breno Leitao wrote:
> Move netpoll_parse_ip_addr() earlier in the file to be reused in
> other functions, such as local_ip_store(). This avoids duplicate
> address parsing logic and centralizes validation for both IPv4
> and IPv6 string input.
> 
> No functional changes intended.

You're moving it to the section of the file under
CONFIG_NETCONSOLE_DYNAMIC breaking the build if dynamic is disabled
-- 
pw-bot: cr

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
  2025-07-18 11:52 ` [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse Breno Leitao
  2025-07-18 17:03   ` Jakub Kicinski
@ 2025-07-19  0:03   ` kernel test robot
  1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2025-07-19  0:03 UTC (permalink / raw)
  To: Breno Leitao, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Simon Horman, Andrew Lunn
  Cc: oe-kbuild-all, netdev, linux-kernel, kernel-team

Hi Breno,

kernel test robot noticed the following build errors:

[auto build test ERROR on d61f6cb6f6ef3c70d2ccc0d9c85c508cb8017da9]

url:    https://github.com/intel-lab-lkp/linux/commits/Breno-Leitao/netpoll-Remove-unused-fields-from-inet_addr-union/20250718-195552
base:   d61f6cb6f6ef3c70d2ccc0d9c85c508cb8017da9
patch link:    https://lore.kernel.org/r/20250718-netconsole_ref-v1-2-86ef253b7a7a%40debian.org
patch subject: [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
config: arc-randconfig-002-20250719 (https://download.01.org/0day-ci/archive/20250719/202507190704.mjDNQvmd-lkp@intel.com/config)
compiler: arc-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250719/202507190704.mjDNQvmd-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507190704.mjDNQvmd-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/net/netconsole.c: In function 'netconsole_parser_cmdline':
>> drivers/net/netconsole.c:1789:24: error: implicit declaration of function 'netpoll_parse_ip_addr' [-Wimplicit-function-declaration]
    1789 |                 ipv6 = netpoll_parse_ip_addr(cur, &np->local_ip);
         |                        ^~~~~~~~~~~~~~~~~~~~~


vim +/netpoll_parse_ip_addr +1789 drivers/net/netconsole.c

^1da177e4c3f415 Linus Torvalds 2005-04-16  1764  
abebef96aab12da Breno Leitao   2025-06-13  1765  static int netconsole_parser_cmdline(struct netpoll *np, char *opt)
5a34c9a8536511b Breno Leitao   2025-06-13  1766  {
5a34c9a8536511b Breno Leitao   2025-06-13  1767  	bool ipversion_set = false;
abebef96aab12da Breno Leitao   2025-06-13  1768  	char *cur = opt;
abebef96aab12da Breno Leitao   2025-06-13  1769  	char *delim;
abebef96aab12da Breno Leitao   2025-06-13  1770  	int ipv6;
5a34c9a8536511b Breno Leitao   2025-06-13  1771  
5a34c9a8536511b Breno Leitao   2025-06-13  1772  	if (*cur != '@') {
d79206451f4f99a Breno Leitao   2025-06-13  1773  		delim = strchr(cur, '@');
d79206451f4f99a Breno Leitao   2025-06-13  1774  		if (!delim)
5a34c9a8536511b Breno Leitao   2025-06-13  1775  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1776  		*delim = 0;
5a34c9a8536511b Breno Leitao   2025-06-13  1777  		if (kstrtou16(cur, 10, &np->local_port))
5a34c9a8536511b Breno Leitao   2025-06-13  1778  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1779  		cur = delim;
5a34c9a8536511b Breno Leitao   2025-06-13  1780  	}
5a34c9a8536511b Breno Leitao   2025-06-13  1781  	cur++;
5a34c9a8536511b Breno Leitao   2025-06-13  1782  
5a34c9a8536511b Breno Leitao   2025-06-13  1783  	if (*cur != '/') {
5a34c9a8536511b Breno Leitao   2025-06-13  1784  		ipversion_set = true;
d79206451f4f99a Breno Leitao   2025-06-13  1785  		delim = strchr(cur, '/');
d79206451f4f99a Breno Leitao   2025-06-13  1786  		if (!delim)
5a34c9a8536511b Breno Leitao   2025-06-13  1787  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1788  		*delim = 0;
5a34c9a8536511b Breno Leitao   2025-06-13 @1789  		ipv6 = netpoll_parse_ip_addr(cur, &np->local_ip);
5a34c9a8536511b Breno Leitao   2025-06-13  1790  		if (ipv6 < 0)
5a34c9a8536511b Breno Leitao   2025-06-13  1791  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1792  		else
5a34c9a8536511b Breno Leitao   2025-06-13  1793  			np->ipv6 = (bool)ipv6;
5a34c9a8536511b Breno Leitao   2025-06-13  1794  		cur = delim;
5a34c9a8536511b Breno Leitao   2025-06-13  1795  	}
5a34c9a8536511b Breno Leitao   2025-06-13  1796  	cur++;
5a34c9a8536511b Breno Leitao   2025-06-13  1797  
5a34c9a8536511b Breno Leitao   2025-06-13  1798  	if (*cur != ',') {
5a34c9a8536511b Breno Leitao   2025-06-13  1799  		/* parse out dev_name or dev_mac */
d79206451f4f99a Breno Leitao   2025-06-13  1800  		delim = strchr(cur, ',');
d79206451f4f99a Breno Leitao   2025-06-13  1801  		if (!delim)
5a34c9a8536511b Breno Leitao   2025-06-13  1802  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1803  		*delim = 0;
5a34c9a8536511b Breno Leitao   2025-06-13  1804  
5a34c9a8536511b Breno Leitao   2025-06-13  1805  		np->dev_name[0] = '\0';
5a34c9a8536511b Breno Leitao   2025-06-13  1806  		eth_broadcast_addr(np->dev_mac);
5a34c9a8536511b Breno Leitao   2025-06-13  1807  		if (!strchr(cur, ':'))
5a34c9a8536511b Breno Leitao   2025-06-13  1808  			strscpy(np->dev_name, cur, sizeof(np->dev_name));
5a34c9a8536511b Breno Leitao   2025-06-13  1809  		else if (!mac_pton(cur, np->dev_mac))
5a34c9a8536511b Breno Leitao   2025-06-13  1810  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1811  
5a34c9a8536511b Breno Leitao   2025-06-13  1812  		cur = delim;
5a34c9a8536511b Breno Leitao   2025-06-13  1813  	}
5a34c9a8536511b Breno Leitao   2025-06-13  1814  	cur++;
5a34c9a8536511b Breno Leitao   2025-06-13  1815  
5a34c9a8536511b Breno Leitao   2025-06-13  1816  	if (*cur != '@') {
5a34c9a8536511b Breno Leitao   2025-06-13  1817  		/* dst port */
d79206451f4f99a Breno Leitao   2025-06-13  1818  		delim = strchr(cur, '@');
d79206451f4f99a Breno Leitao   2025-06-13  1819  		if (!delim)
5a34c9a8536511b Breno Leitao   2025-06-13  1820  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1821  		*delim = 0;
5a34c9a8536511b Breno Leitao   2025-06-13  1822  		if (*cur == ' ' || *cur == '\t')
5a34c9a8536511b Breno Leitao   2025-06-13  1823  			np_info(np, "warning: whitespace is not allowed\n");
5a34c9a8536511b Breno Leitao   2025-06-13  1824  		if (kstrtou16(cur, 10, &np->remote_port))
5a34c9a8536511b Breno Leitao   2025-06-13  1825  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1826  		cur = delim;
5a34c9a8536511b Breno Leitao   2025-06-13  1827  	}
5a34c9a8536511b Breno Leitao   2025-06-13  1828  	cur++;
5a34c9a8536511b Breno Leitao   2025-06-13  1829  
5a34c9a8536511b Breno Leitao   2025-06-13  1830  	/* dst ip */
d79206451f4f99a Breno Leitao   2025-06-13  1831  	delim = strchr(cur, '/');
d79206451f4f99a Breno Leitao   2025-06-13  1832  	if (!delim)
5a34c9a8536511b Breno Leitao   2025-06-13  1833  		goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1834  	*delim = 0;
5a34c9a8536511b Breno Leitao   2025-06-13  1835  	ipv6 = netpoll_parse_ip_addr(cur, &np->remote_ip);
5a34c9a8536511b Breno Leitao   2025-06-13  1836  	if (ipv6 < 0)
5a34c9a8536511b Breno Leitao   2025-06-13  1837  		goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1838  	else if (ipversion_set && np->ipv6 != (bool)ipv6)
5a34c9a8536511b Breno Leitao   2025-06-13  1839  		goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1840  	else
5a34c9a8536511b Breno Leitao   2025-06-13  1841  		np->ipv6 = (bool)ipv6;
5a34c9a8536511b Breno Leitao   2025-06-13  1842  	cur = delim + 1;
5a34c9a8536511b Breno Leitao   2025-06-13  1843  
5a34c9a8536511b Breno Leitao   2025-06-13  1844  	if (*cur != 0) {
5a34c9a8536511b Breno Leitao   2025-06-13  1845  		/* MAC address */
5a34c9a8536511b Breno Leitao   2025-06-13  1846  		if (!mac_pton(cur, np->remote_mac))
5a34c9a8536511b Breno Leitao   2025-06-13  1847  			goto parse_failed;
5a34c9a8536511b Breno Leitao   2025-06-13  1848  	}
5a34c9a8536511b Breno Leitao   2025-06-13  1849  
abebef96aab12da Breno Leitao   2025-06-13  1850  	netconsole_print_banner(np);
5a34c9a8536511b Breno Leitao   2025-06-13  1851  
5a34c9a8536511b Breno Leitao   2025-06-13  1852  	return 0;
5a34c9a8536511b Breno Leitao   2025-06-13  1853  
5a34c9a8536511b Breno Leitao   2025-06-13  1854   parse_failed:
5a34c9a8536511b Breno Leitao   2025-06-13  1855  	np_info(np, "couldn't parse config at '%s'!\n", cur);
5a34c9a8536511b Breno Leitao   2025-06-13  1856  	return -1;
5a34c9a8536511b Breno Leitao   2025-06-13  1857  }
5a34c9a8536511b Breno Leitao   2025-06-13  1858  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-07-19  0:04 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-18 11:52 [PATCH net-next 0/5] netconsole: reuse netpoll_parse_ip_addr in configfs helpers Breno Leitao
2025-07-18 11:52 ` [PATCH net-next 1/5] netpoll: Remove unused fields from inet_addr union Breno Leitao
2025-07-18 11:52 ` [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse Breno Leitao
2025-07-18 17:03   ` Jakub Kicinski
2025-07-19  0:03   ` kernel test robot
2025-07-18 11:52 ` [PATCH net-next 3/5] netconsole: add support for strings with new line in netpoll_parse_ip_addr Breno Leitao
2025-07-18 11:52 ` [PATCH net-next 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store Breno Leitao
2025-07-18 11:52 ` [PATCH net-next 5/5] " Breno Leitao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).