Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[sfrench/cifs-2.6.git] / net / ipv6 / af_inet6.c
index d443c18b45fef01a120ccaeb47e8edffdd239ed0..74f2a261e8df4dc78a3baddb31609cdc70ba6035 100644 (file)
@@ -273,33 +273,8 @@ out_rcu_unlock:
        goto out;
 }
 
-
-/* bind for INET6 API */
-int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
-{
-       struct sock *sk = sock->sk;
-       int err = 0;
-
-       /* If the socket has its own bind function then use it. */
-       if (sk->sk_prot->bind)
-               return sk->sk_prot->bind(sk, uaddr, addr_len);
-
-       if (addr_len < SIN6_LEN_RFC2133)
-               return -EINVAL;
-
-       /* BPF prog is run before any checks are done so that if the prog
-        * changes context in a wrong way it will be caught.
-        */
-       err = BPF_CGROUP_RUN_PROG_INET6_BIND(sk, uaddr);
-       if (err)
-               return err;
-
-       return __inet6_bind(sk, uaddr, addr_len, false, true);
-}
-EXPORT_SYMBOL(inet6_bind);
-
-int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
-                bool force_bind_address_no_port, bool with_lock)
+static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
+                       bool force_bind_address_no_port, bool with_lock)
 {
        struct sockaddr_in6 *addr = (struct sockaddr_in6 *)uaddr;
        struct inet_sock *inet = inet_sk(sk);
@@ -444,6 +419,30 @@ out_unlock:
        goto out;
 }
 
+/* bind for INET6 API */
+int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+{
+       struct sock *sk = sock->sk;
+       int err = 0;
+
+       /* If the socket has its own bind function then use it. */
+       if (sk->sk_prot->bind)
+               return sk->sk_prot->bind(sk, uaddr, addr_len);
+
+       if (addr_len < SIN6_LEN_RFC2133)
+               return -EINVAL;
+
+       /* BPF prog is run before any checks are done so that if the prog
+        * changes context in a wrong way it will be caught.
+        */
+       err = BPF_CGROUP_RUN_PROG_INET6_BIND(sk, uaddr);
+       if (err)
+               return err;
+
+       return __inet6_bind(sk, uaddr, addr_len, false, true);
+}
+EXPORT_SYMBOL(inet6_bind);
+
 int inet6_release(struct socket *sock)
 {
        struct sock *sk = sock->sk;
@@ -579,7 +578,9 @@ const struct proto_ops inet6_stream_ops = {
        .getsockopt        = sock_common_getsockopt,    /* ok           */
        .sendmsg           = inet_sendmsg,              /* ok           */
        .recvmsg           = inet_recvmsg,              /* ok           */
-       .mmap              = sock_no_mmap,
+#ifdef CONFIG_MMU
+       .mmap              = tcp_mmap,
+#endif
        .sendpage          = inet_sendpage,
        .sendmsg_locked    = tcp_sendmsg_locked,
        .sendpage_locked   = tcp_sendpage_locked,
@@ -590,6 +591,7 @@ const struct proto_ops inet6_stream_ops = {
        .compat_setsockopt = compat_sock_common_setsockopt,
        .compat_getsockopt = compat_sock_common_getsockopt,
 #endif
+       .set_rcvlowat      = tcp_set_rcvlowat,
 };
 
 const struct proto_ops inet6_dgram_ops = {
@@ -887,7 +889,12 @@ static struct pernet_operations inet6_net_ops = {
 static const struct ipv6_stub ipv6_stub_impl = {
        .ipv6_sock_mc_join = ipv6_sock_mc_join,
        .ipv6_sock_mc_drop = ipv6_sock_mc_drop,
-       .ipv6_dst_lookup = ip6_dst_lookup,
+       .ipv6_dst_lookup   = ip6_dst_lookup,
+       .fib6_get_table    = fib6_get_table,
+       .fib6_table_lookup = fib6_table_lookup,
+       .fib6_lookup       = fib6_lookup,
+       .fib6_multipath_select = fib6_multipath_select,
+       .ip6_mtu_from_fib6 = ip6_mtu_from_fib6,
        .udpv6_encap_enable = udpv6_encap_enable,
        .ndisc_send_na = ndisc_send_na,
        .nd_tbl = &nd_tbl,