Re: [PATCH 06/17] SUNRPC: Set IPV6ONLY flag on PF_INET6 RPC listenersockets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux