[PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse

Breno Leitao posted 5 patches 4 months, 4 weeks ago
There is a newer version of this series
[PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
Posted by Breno Leitao 4 months, 4 weeks ago
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
Re: [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
Posted by kernel test robot 4 months, 4 weeks ago
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
Re: [PATCH net-next 2/5] netconsole: move netpoll_parse_ip_addr() earlier for reuse
Posted by Jakub Kicinski 4 months, 4 weeks ago
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