[PATCH net-next v2 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store

Breno Leitao posted 5 patches 2 months, 2 weeks ago
There is a newer version of this series
[PATCH net-next v2 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store
Posted by Breno Leitao 2 months, 2 weeks ago
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 f2c2b8852c603..b24e423a60268 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
Re: [PATCH net-next v2 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store
Posted by Simon Horman 2 months, 2 weeks ago
On Mon, Jul 21, 2025 at 06:02:04AM -0700, Breno Leitao wrote:
> 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>

My suggestion below not withstanding, this looks good to me.

Reviewed-by: Simon Horman <horms@kernel.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 f2c2b8852c603..b24e423a60268 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;

I don't think this needs to block progress.
And if you disagree that is fine too.
But I would have expressed this as:

	nt->np.ipv6 = !!ipv6;

Because nt->np.ipv6 is a bool and ipv6 is an int.

Likewise for patch 5/5.

...
Re: [PATCH net-next v2 4/5] netconsole: use netpoll_parse_ip_addr in local_ip_store
Posted by Breno Leitao 2 months, 2 weeks ago
Hello Simon

On Wed, Jul 23, 2025 at 03:54:00PM +0100, Simon Horman wrote:
> > @@ -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;
> 
> I don't think this needs to block progress.
> And if you disagree that is fine too.
> But I would have expressed this as:
> 
> 	nt->np.ipv6 = !!ipv6;
> 
> Because nt->np.ipv6 is a bool and ipv6 is an int.
> 
> Likewise for patch 5/5.

Agree with the suggestion. I will update the patchset with your
suggestion.

Thank you very much for your review, again!
--breno