Subject: Re: IPv6 address printf format specifier

From: Vlad Yasevich <[email-masked]>
Date: Mon, 16 Mar 2009 13:13:00 -0400

Chuck Lever wrote:
> The NFS and RPC code in the kernel now uses the new printf format
> specifier for IPv6 addresses.  In some cases, the generated address
> string is sent out of the kernel (for example, it is used to build a
> universal address for RPCB_SET requests, and used as the mon_name in
> some SM_MON upcalls to our rpc.statd).
> 
> The problem is that outside the kernel, applications generally use
> getnameinfo(3) or inet_ntop(3) to do this conversion.  The library
> follows the RFC suggestion of shortening these address strings by
> replacing the longest series of zeroes in the IPv6 address with "::".
> 
> Since the kernel doesn't do that, string comparisons don't work when
> comparing address strings that came from our kernel.  Since these
> address strings appear to other hosts (via the rpcbind registry) this
> is, or could become, an interoperability issue for Linux.
> 
> How should I fix this?
> 
> 1.  Copy glibc's code to the printf logic for %pI6

I think this is the optimum solution.  This normalizes kernel output
with that of user-space thus creating a uniform format.

My $0.02
-vlad