public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
* [PATCH v2] conf: No routable interface for IPv4 or IPv6 is informational, not a warning
@ 2024-02-16  5:09 Stefano Brivio
  2024-02-16 10:23 ` Paul Holzinger
  0 siblings, 1 reply; 3+ messages in thread
From: Stefano Brivio @ 2024-02-16  5:09 UTC (permalink / raw)
  To: passt-dev; +Cc: Paul Holzinger, David Gibson

...Podman users might get confused by the fact that if we can't
find a default route for a given IP version, we'll report that as a
warning message and possibly just before actual error messages.

However, a lack of routable interface for IPv4 or IPv6 can be a
normal circumstance: don't warn about it, just state that as
informational message, if those are displayed (they're not in
non-error paths in Podman, for example).

While at it, make it clear that we're disabling IPv4 or IPv6 if
there's no routable interface for the corresponding IP version.

Reported-by: Paul Holzinger <pholzing@redhat.com>
Link: https://github.com/containers/podman/pull/21563#issuecomment-1937024642
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
v2: Report that we're disabling IPv4 or IPv6 in the message

 conf.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/conf.c b/conf.c
index 5e15b66..3646700 100644
--- a/conf.c
+++ b/conf.c
@@ -579,7 +579,7 @@ static unsigned int conf_ip4(unsigned int ifi,
 		ifi = nl_get_ext_if(nl_sock, AF_INET);
 
 	if (!ifi) {
-		warn("No external routable interface for IPv4");
+		info("No routable interface for IPv4: IPv4 is disabled");
 		return 0;
 	}
 
@@ -651,7 +651,7 @@ static unsigned int conf_ip6(unsigned int ifi,
 		ifi = nl_get_ext_if(nl_sock, AF_INET6);
 
 	if (!ifi) {
-		warn("No external routable interface for IPv6");
+		info("No routable interface for IPv6: IPv6 is disabled");
 		return 0;
 	}
 
-- 
@@ -579,7 +579,7 @@ static unsigned int conf_ip4(unsigned int ifi,
 		ifi = nl_get_ext_if(nl_sock, AF_INET);
 
 	if (!ifi) {
-		warn("No external routable interface for IPv4");
+		info("No routable interface for IPv4: IPv4 is disabled");
 		return 0;
 	}
 
@@ -651,7 +651,7 @@ static unsigned int conf_ip6(unsigned int ifi,
 		ifi = nl_get_ext_if(nl_sock, AF_INET6);
 
 	if (!ifi) {
-		warn("No external routable interface for IPv6");
+		info("No routable interface for IPv6: IPv6 is disabled");
 		return 0;
 	}
 
-- 
2.39.2


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

* Re: [PATCH v2] conf: No routable interface for IPv4 or IPv6 is informational, not a warning
  2024-02-16  5:09 [PATCH v2] conf: No routable interface for IPv4 or IPv6 is informational, not a warning Stefano Brivio
@ 2024-02-16 10:23 ` Paul Holzinger
  2024-02-16 10:43   ` Stefano Brivio
  0 siblings, 1 reply; 3+ messages in thread
From: Paul Holzinger @ 2024-02-16 10:23 UTC (permalink / raw)
  To: Stefano Brivio, passt-dev; +Cc: David Gibson

Hi Stefano,

On 16/02/2024 06:09, Stefano Brivio wrote:
> ...Podman users might get confused by the fact that if we can't
> find a default route for a given IP version, we'll report that as a
> warning message and possibly just before actual error messages.
>
> However, a lack of routable interface for IPv4 or IPv6 can be a
> normal circumstance: don't warn about it, just state that as
> informational message, if those are displayed (they're not in
> non-error paths in Podman, for example).

A bit of topic but what actually is the default log level? Looking at 
the main function I see:

if (c.debug)
         __setlogmask(LOG_UPTO(LOG_DEBUG));
     else if (c.quiet)
         __setlogmask(LOG_UPTO(LOG_ERR));
     else
         __setlogmask(LOG_UPTO(LOG_INFO));

So if the default is still log level is info there is no way for podman 
to say show warnings/errors only. We can use --quiet but I think the 
warnings should be displayed to end users as well.
So my next request would be to one of the following:
a) change the default level to warn but then there no way show info 
unless debug is set (or add a new flag for info)
b) add a flag to select warning level
c) log info to stdout and warn/err to stderr then podman could just show 
stderr and hide stdout

>
> While at it, make it clear that we're disabling IPv4 or IPv6 if
> there's no routable interface for the corresponding IP version.
>
> Reported-by: Paul Holzinger <pholzing@redhat.com>
> Link: https://github.com/containers/podman/pull/21563#issuecomment-1937024642
> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
> ---
> v2: Report that we're disabling IPv4 or IPv6 in the message
>
>   conf.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/conf.c b/conf.c
> index 5e15b66..3646700 100644
> --- a/conf.c
> +++ b/conf.c
> @@ -579,7 +579,7 @@ static unsigned int conf_ip4(unsigned int ifi,
>   		ifi = nl_get_ext_if(nl_sock, AF_INET);
>   
>   	if (!ifi) {
> -		warn("No external routable interface for IPv4");
> +		info("No routable interface for IPv4: IPv4 is disabled");
>   		return 0;
>   	}
>   
> @@ -651,7 +651,7 @@ static unsigned int conf_ip6(unsigned int ifi,
>   		ifi = nl_get_ext_if(nl_sock, AF_INET6);
>   
>   	if (!ifi) {
> -		warn("No external routable interface for IPv6");
> +		info("No routable interface for IPv6: IPv6 is disabled");
The code only looks for a default route, so if one has some custom 
internal routes then saying no routable interface found is confusing. 
What this should really say is:
No interface with a default route for IPv...
>   		return 0;
>   	}
>   


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

* Re: [PATCH v2] conf: No routable interface for IPv4 or IPv6 is informational, not a warning
  2024-02-16 10:23 ` Paul Holzinger
@ 2024-02-16 10:43   ` Stefano Brivio
  0 siblings, 0 replies; 3+ messages in thread
From: Stefano Brivio @ 2024-02-16 10:43 UTC (permalink / raw)
  To: Paul Holzinger, David Gibson; +Cc: passt-dev

On Fri, 16 Feb 2024 11:23:30 +0100
Paul Holzinger <pholzing@redhat.com> wrote:

> Hi Stefano,
> 
> On 16/02/2024 06:09, Stefano Brivio wrote:
> > ...Podman users might get confused by the fact that if we can't
> > find a default route for a given IP version, we'll report that as a
> > warning message and possibly just before actual error messages.
> >
> > However, a lack of routable interface for IPv4 or IPv6 can be a
> > normal circumstance: don't warn about it, just state that as
> > informational message, if those are displayed (they're not in
> > non-error paths in Podman, for example).  
> 
> A bit of topic but what actually is the default log level?

It's LOG_INFO.

> Looking at 
> the main function I see:
> 
> if (c.debug)
>          __setlogmask(LOG_UPTO(LOG_DEBUG));
>      else if (c.quiet)
>          __setlogmask(LOG_UPTO(LOG_ERR));
                                     ^^^
>      else
>          __setlogmask(LOG_UPTO(LOG_INFO));
> 
> So if the default is still log level is info there is no way for podman 
> to say show warnings/errors only.

That's because the second clause above is wrong, I think. It should be:

	else if (c.quiet)
		__setlogmask(LOG_UPTO(LOG_WARN));

because we also say in the man page:

       -q, --quiet
              Don't print informational messages.

but nowhere it's written that we'll also hide warnings with it.

> We can use --quiet but I think the 
> warnings should be displayed to end users as well.
> So my next request would be to one of the following:
> a) change the default level to warn but then there no way show info 
> unless debug is set (or add a new flag for info)

I think LOG_INFO should really be the default, if you use passt or
pasta stand-alone that's very helpful.

> b) add a flag to select warning level

...which is however what --quiet is supposed to do.

> c) log info to stdout and warn/err to stderr then podman could just show 
> stderr and hide stdout

...which doesn't fit the meaning of standard output though: pasta has
no functional terminal output.

I would just fix --quiet if that suits Podman as well.

> > While at it, make it clear that we're disabling IPv4 or IPv6 if
> > there's no routable interface for the corresponding IP version.
> >
> > Reported-by: Paul Holzinger <pholzing@redhat.com>
> > Link: https://github.com/containers/podman/pull/21563#issuecomment-1937024642
> > Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
> > ---
> > v2: Report that we're disabling IPv4 or IPv6 in the message
> >
> >   conf.c | 4 ++--
> >   1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/conf.c b/conf.c
> > index 5e15b66..3646700 100644
> > --- a/conf.c
> > +++ b/conf.c
> > @@ -579,7 +579,7 @@ static unsigned int conf_ip4(unsigned int ifi,
> >   		ifi = nl_get_ext_if(nl_sock, AF_INET);
> >   
> >   	if (!ifi) {
> > -		warn("No external routable interface for IPv4");
> > +		info("No routable interface for IPv4: IPv4 is disabled");
> >   		return 0;
> >   	}
> >   
> > @@ -651,7 +651,7 @@ static unsigned int conf_ip6(unsigned int ifi,
> >   		ifi = nl_get_ext_if(nl_sock, AF_INET6);
> >   
> >   	if (!ifi) {
> > -		warn("No external routable interface for IPv6");
> > +		info("No routable interface for IPv6: IPv6 is disabled");  
>
> The code only looks for a default route, so if one has some custom 
> internal routes then saying no routable interface found is confusing. 
> What this should really say is:
> No interface with a default route for IPv...

Oops, sorry, I just pushed this.

I think it's clear enough in the sense that by design passt and pasta
need a default route, and if you have a specific route on a given
interface, that interface is not "routable" for our purposes.

But sure, we can make it more explicit. Building on your suggestion --
would this be okay:

  "No interface with a default route for IPv[46]: disabling IPv[64]"

? David?

-- 
Stefano


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

end of thread, other threads:[~2024-02-16 10:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-16  5:09 [PATCH v2] conf: No routable interface for IPv4 or IPv6 is informational, not a warning Stefano Brivio
2024-02-16 10:23 ` Paul Holzinger
2024-02-16 10:43   ` Stefano Brivio

Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

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 IMAP folder(s).