]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/sunrpc/svcsock.c
mac80211: remove max_antenna_gain config
[linux-2.6-omap-h63xx.git] / net / sunrpc / svcsock.c
index 3e65719f1ef698891d8e81ebea6c57e72b212717..6f7d1f2d2f36d00cec3a9e9561c016b032092bdf 100644 (file)
@@ -250,10 +250,10 @@ static int one_sock_name(char *buf, struct svc_sock *svsk)
 
        switch(svsk->sk_sk->sk_family) {
        case AF_INET:
-               len = sprintf(buf, "ipv4 %s %u.%u.%u.%u %d\n",
-                             svsk->sk_sk->sk_protocol==IPPROTO_UDP?
+               len = sprintf(buf, "ipv4 %s %pI4 %d\n",
+                             svsk->sk_sk->sk_protocol == IPPROTO_UDP ?
                              "udp" : "tcp",
-                             NIPQUAD(inet_sk(svsk->sk_sk)->rcv_saddr),
+                             &inet_sk(svsk->sk_sk)->rcv_saddr,
                              inet_sk(svsk->sk_sk)->num);
                break;
        default:
@@ -1114,6 +1114,7 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
        struct svc_sock *svsk;
        struct sock     *inet;
        int             pmap_register = !(flags & SVC_SOCK_ANONYMOUS);
+       int             val;
 
        dprintk("svc: svc_setup_socket %p\n", sock);
        if (!(svsk = kzalloc(sizeof(*svsk), GFP_KERNEL))) {
@@ -1146,6 +1147,18 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
        else
                svc_tcp_init(svsk, serv);
 
+       /*
+        * We start one listener per sv_serv.  We want AF_INET
+        * requests to be automatically shunted to our AF_INET6
+        * listener using a mapped IPv4 address.  Make sure
+        * no-one starts an equivalent IPv4 listener, which
+        * would steal our incoming connections.
+        */
+       val = 0;
+       if (serv->sv_family == AF_INET6)
+               kernel_setsockopt(sock, SOL_IPV6, IPV6_V6ONLY,
+                                       (char *)&val, sizeof(val));
+
        dprintk("svc: svc_setup_socket created %p (inet %p)\n",
                                svsk, svsk->sk_sk);
 
@@ -1154,8 +1167,7 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
 
 int svc_addsock(struct svc_serv *serv,
                int fd,
-               char *name_return,
-               int *proto)
+               char *name_return)
 {
        int err = 0;
        struct socket *so = sockfd_lookup(fd, &err);
@@ -1190,7 +1202,6 @@ int svc_addsock(struct svc_serv *serv,
                sockfd_put(so);
                return err;
        }
-       if (proto) *proto = so->sk->sk_protocol;
        return one_sock_name(name_return, svsk);
 }
 EXPORT_SYMBOL_GPL(svc_addsock);