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

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.
That works for me and because quiet is a old option we do not need to worry about any backwards compatibility when we pass this by default. So yes this seems like the preferred option here.

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]"
Yes that looks good. I don't mind to much, I was just being pedantic there as you already touched the message anyway. I am totally fine if you keep the message like it is right now.

? David?