[NET]: Remove unused "mibalign" argument for snmp_mib_init().
[safe/jmp/linux-2.6] / net / ipv6 / af_inet6.c
index 18cb928..90d2f72 100644 (file)
@@ -42,7 +42,6 @@
 #include <linux/inet.h>
 #include <linux/netdevice.h>
 #include <linux/icmpv6.h>
-#include <linux/smp_lock.h>
 #include <linux/netfilter_ipv6.h>
 
 #include <net/ip.h>
@@ -59,9 +58,6 @@
 #ifdef CONFIG_IPV6_TUNNEL
 #include <net/ip6_tunnel.h>
 #endif
-#ifdef CONFIG_IPV6_MIP6
-#include <net/mip6.h>
-#endif
 
 #include <asm/uaccess.h>
 #include <asm/system.h>
@@ -72,7 +68,7 @@ MODULE_LICENSE("GPL");
 
 int sysctl_ipv6_bindv6only __read_mostly;
 
-/* The inetsw table contains everything that inet_create needs to
+/* The inetsw6 table contains everything that inet6_create needs to
  * build a new socket.
  */
 static struct list_head inetsw6[SOCK_MAX];
@@ -85,7 +81,7 @@ static __inline__ struct ipv6_pinfo *inet6_sk_generic(struct sock *sk)
        return (struct ipv6_pinfo *)(((u8 *)sk) + offset);
 }
 
-static int inet6_create(struct socket *sock, int protocol)
+static int inet6_create(struct net *net, struct socket *sock, int protocol)
 {
        struct inet_sock *inet;
        struct ipv6_pinfo *np;
@@ -98,6 +94,9 @@ static int inet6_create(struct socket *sock, int protocol)
        int try_loading_module = 0;
        int err;
 
+       if (net != &init_net)
+               return -EAFNOSUPPORT;
+
        if (sock->type != SOCK_RAW &&
            sock->type != SOCK_DGRAM &&
            !inet_ehash_secret)
@@ -163,7 +162,7 @@ lookup_protocol:
        BUG_TRAP(answer_prot->slab != NULL);
 
        err = -ENOBUFS;
-       sk = sk_alloc(PF_INET6, GFP_KERNEL, answer_prot, 1);
+       sk = sk_alloc(net, PF_INET6, GFP_KERNEL, answer_prot);
        if (sk == NULL)
                goto out;
 
@@ -303,7 +302,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
                                        err = -EINVAL;
                                        goto out;
                                }
-                               dev = dev_get_by_index(sk->sk_bound_dev_if);
+                               dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if);
                                if (!dev) {
                                        err = -ENODEV;
                                        goto out;
@@ -488,10 +487,11 @@ const struct proto_ops inet6_stream_ops = {
        .shutdown          = inet_shutdown,             /* ok           */
        .setsockopt        = sock_common_setsockopt,    /* ok           */
        .getsockopt        = sock_common_getsockopt,    /* ok           */
-       .sendmsg           = inet_sendmsg,              /* ok           */
+       .sendmsg           = tcp_sendmsg,               /* ok           */
        .recvmsg           = sock_common_recvmsg,       /* ok           */
        .mmap              = sock_no_mmap,
        .sendpage          = tcp_sendpage,
+       .splice_read       = tcp_splice_read,
 #ifdef CONFIG_COMPAT
        .compat_setsockopt = compat_sock_common_setsockopt,
        .compat_getsockopt = compat_sock_common_getsockopt,
@@ -714,23 +714,27 @@ EXPORT_SYMBOL_GPL(ipv6_opt_accepted);
 
 static int __init init_ipv6_mibs(void)
 {
-       if (snmp_mib_init((void **)ipv6_statistics, sizeof (struct ipstats_mib),
-                         __alignof__(struct ipstats_mib)) < 0)
+       if (snmp_mib_init((void **)ipv6_statistics,
+                         sizeof(struct ipstats_mib)) < 0)
                goto err_ip_mib;
-       if (snmp_mib_init((void **)icmpv6_statistics, sizeof (struct icmpv6_mib),
-                         __alignof__(struct icmpv6_mib)) < 0)
+       if (snmp_mib_init((void **)icmpv6_statistics,
+                         sizeof(struct icmpv6_mib)) < 0)
                goto err_icmp_mib;
-       if (snmp_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib),
-                         __alignof__(struct udp_mib)) < 0)
+       if (snmp_mib_init((void **)icmpv6msg_statistics,
+                         sizeof(struct icmpv6msg_mib)) < 0)
+               goto err_icmpmsg_mib;
+       if (snmp_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib)) < 0)
                goto err_udp_mib;
-       if (snmp_mib_init((void **)udplite_stats_in6, sizeof (struct udp_mib),
-                         __alignof__(struct udp_mib)) < 0)
+       if (snmp_mib_init((void **)udplite_stats_in6,
+                         sizeof (struct udp_mib)) < 0)
                goto err_udplite_mib;
        return 0;
 
 err_udplite_mib:
        snmp_mib_free((void **)udp_stats_in6);
 err_udp_mib:
+       snmp_mib_free((void **)icmpv6msg_statistics);
+err_icmpmsg_mib:
        snmp_mib_free((void **)icmpv6_statistics);
 err_icmp_mib:
        snmp_mib_free((void **)ipv6_statistics);
@@ -743,6 +747,7 @@ static void cleanup_ipv6_mibs(void)
 {
        snmp_mib_free((void **)ipv6_statistics);
        snmp_mib_free((void **)icmpv6_statistics);
+       snmp_mib_free((void **)icmpv6msg_statistics);
        snmp_mib_free((void **)udp_stats_in6);
        snmp_mib_free((void **)udplite_stats_in6);
 }
@@ -843,7 +848,9 @@ static int __init inet6_init(void)
        if (if6_proc_init())
                goto proc_if6_fail;
 #endif
-       ip6_route_init();
+       err = ip6_route_init();
+       if (err)
+               goto ip6_route_fail;
        ip6_flowlabel_init();
        err = addrconf_init();
        if (err)
@@ -854,9 +861,6 @@ static int __init inet6_init(void)
        ipv6_frag_init();
        ipv6_nodata_init();
        ipv6_destopt_init();
-#ifdef CONFIG_IPV6_MIP6
-       mip6_init();
-#endif
 
        /* Init v6 transport protocols. */
        udpv6_init();
@@ -871,6 +875,7 @@ out:
 addrconf_fail:
        ip6_flowlabel_cleanup();
        ip6_route_cleanup();
+ip6_route_fail:
 #ifdef CONFIG_PROC_FS
        if6_proc_exit();
 proc_if6_fail:
@@ -901,6 +906,7 @@ icmp_fail:
        cleanup_ipv6_mibs();
 out_unregister_sock:
        sock_unregister(PF_INET6);
+       rtnl_unregister_all(PF_INET6);
 out_unregister_raw_proto:
        proto_unregister(&rawv6_prot);
 out_unregister_udplite_proto:
@@ -922,9 +928,7 @@ static void __exit inet6_exit(void)
 
        /* Cleanup code parts. */
        ipv6_packet_cleanup();
-#ifdef CONFIG_IPV6_MIP6
-       mip6_fini();
-#endif
+
        addrconf_cleanup();
        ip6_flowlabel_cleanup();
        ip6_route_cleanup();