On Mon, 2009-03-30 at 18:28 -0400, Chuck Lever wrote: > On Mar 30, 2009, at 6:17 PM, Trond Myklebust wrote: > > On Tue, 2009-03-03 at 15:32 -0700, Chuck Lever wrote: > >> We are about to convert to using separate RPC listener sockets for > >> AF_INET and AF_INET6. This echoes the way IPv6 is handled in user > >> space by TI-RPC, and eliminates the need to worry about mapped IPv4 > >> AF_INET6 addresses when doing address comparisons. > >> > >> Start by setting the IPV6ONLY flag on RPC listener sockets. > >> > >> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> > >> --- > >> > >> net/sunrpc/svcsock.c | 10 ++++------ > >> 1 files changed, 4 insertions(+), 6 deletions(-) > >> > >> diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c > >> index d00bc33..ac6cd65 100644 > >> --- a/net/sunrpc/svcsock.c > >> +++ b/net/sunrpc/svcsock.c > >> @@ -1144,13 +1144,11 @@ static struct svc_sock > >> *svc_setup_socket(struct svc_serv *serv, > >> svc_tcp_init(svsk, serv); > >> > >> /* > >> - * We start one listener per sv_serv. We want AF_INET > >> - * requests to be automatically shunted to our PF_INET6 > >> - * listener using a mapped IPv4 address. Make sure > >> - * no-one starts an equivalent IPv4 listener, which > >> - * would steal our incoming connections. > >> + * If this is a PF_INET6 listener, we want to avoid > >> + * getting requests from IPv4 remotes. Those should > >> + * be shunted to a PF_INET listener via rpcbind. > >> */ > >> - val = 0; > >> + val = 1; > >> if (inet->sk_family == PF_INET6) > > AF_INET6... > > As far as I can tell PF_INET6 and AF_INET6 are interchangeable here. > I can find examples of sk_family being set to or compared to either, > and I think they always have the same value. So it's really just a > style preference? Technically, one is a protocol family, and one is an address family. They just happen to be defined to take the same numerical values. > > ...and this should probably be set before we bind the socket... > > Yes, that's probably correct. I hadn't encountered EADDRINUSE in my > testing. > > Should I send you a fix, or do you have one in mind already? > > >> kernel_setsockopt(sock, SOL_IPV6, IPV6_V6ONLY, > >> (char *)&val, sizeof(val)); I'm testing a fix right now... -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html