header cleaning: don't include smp_lock.h when not used
[linux-3.10.git] / net / ipv6 / af_inet6.c
index 3585d8f..6dd3772 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>
@@ -98,6 +97,11 @@ static int inet6_create(struct socket *sock, int protocol)
        int try_loading_module = 0;
        int err;
 
+       if (sock->type != SOCK_RAW &&
+           sock->type != SOCK_DGRAM &&
+           !inet_ehash_secret)
+               build_ehash_secret();
+
        /* Look for the requested type/protocol pair. */
        answer = NULL;
 lookup_protocol:
@@ -349,6 +353,8 @@ out:
        return err;
 }
 
+EXPORT_SYMBOL(inet6_bind);
+
 int inet6_release(struct socket *sock)
 {
        struct sock *sk = sock->sk;
@@ -365,6 +371,8 @@ int inet6_release(struct socket *sock)
        return inet_release(sock);
 }
 
+EXPORT_SYMBOL(inet6_release);
+
 int inet6_destroy_sock(struct sock *sk)
 {
        struct ipv6_pinfo *np = inet6_sk(sk);
@@ -428,6 +436,8 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
        return(0);
 }
 
+EXPORT_SYMBOL(inet6_getname);
+
 int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
        struct sock *sk = sock->sk;
@@ -437,6 +447,9 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
        case SIOCGSTAMP:
                return sock_get_timestamp(sk, (struct timeval __user *)arg);
 
+       case SIOCGSTAMPNS:
+               return sock_get_timestampns(sk, (struct timespec __user *)arg);
+
        case SIOCADDRT:
        case SIOCDELRT:
 
@@ -457,6 +470,8 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
        return(0);
 }
 
+EXPORT_SYMBOL(inet6_ioctl);
+
 const struct proto_ops inet6_stream_ops = {
        .family            = PF_INET6,
        .owner             = THIS_MODULE,
@@ -603,6 +618,8 @@ out_illegal:
        goto out;
 }
 
+EXPORT_SYMBOL(inet6_register_protosw);
+
 void
 inet6_unregister_protosw(struct inet_protosw *p)
 {
@@ -619,6 +636,8 @@ inet6_unregister_protosw(struct inet_protosw *p)
        }
 }
 
+EXPORT_SYMBOL(inet6_unregister_protosw);
+
 int inet6_sk_rebuild_header(struct sock *sk)
 {
        int err;
@@ -678,7 +697,8 @@ int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb)
        if (np->rxopt.all) {
                if ((opt->hop && (np->rxopt.bits.hopopts ||
                                  np->rxopt.bits.ohopopts)) ||
-                   ((IPV6_FLOWINFO_MASK & *(__be32*)skb->nh.raw) &&
+                   ((IPV6_FLOWINFO_MASK &
+                     *(__be32 *)skb_network_header(skb)) &&
                     np->rxopt.bits.rxflow) ||
                    (opt->srcrt && (np->rxopt.bits.srcrt ||
                     np->rxopt.bits.osrcrt)) ||
@@ -691,61 +711,28 @@ int ipv6_opt_accepted(struct sock *sk, struct sk_buff *skb)
 
 EXPORT_SYMBOL_GPL(ipv6_opt_accepted);
 
-int
-snmp6_mib_init(void *ptr[2], size_t mibsize, size_t mibalign)
-{
-       if (ptr == NULL)
-               return -EINVAL;
-
-       ptr[0] = __alloc_percpu(mibsize);
-       if (!ptr[0])
-               goto err0;
-
-       ptr[1] = __alloc_percpu(mibsize);
-       if (!ptr[1])
-               goto err1;
-
-       return 0;
-
-err1:
-       free_percpu(ptr[0]);
-       ptr[0] = NULL;
-err0:
-       return -ENOMEM;
-}
-
-void
-snmp6_mib_free(void *ptr[2])
-{
-       if (ptr == NULL)
-               return;
-       free_percpu(ptr[0]);
-       free_percpu(ptr[1]);
-       ptr[0] = ptr[1] = NULL;
-}
-
 static int __init init_ipv6_mibs(void)
 {
-       if (snmp6_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),
+                         __alignof__(struct ipstats_mib)) < 0)
                goto err_ip_mib;
-       if (snmp6_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),
+                         __alignof__(struct icmpv6_mib)) < 0)
                goto err_icmp_mib;
-       if (snmp6_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib),
-                          __alignof__(struct udp_mib)) < 0)
+       if (snmp_mib_init((void **)udp_stats_in6, sizeof (struct udp_mib),
+                         __alignof__(struct udp_mib)) < 0)
                goto err_udp_mib;
-       if (snmp6_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),
+                         __alignof__(struct udp_mib)) < 0)
                goto err_udplite_mib;
        return 0;
 
 err_udplite_mib:
-       snmp6_mib_free((void **)udp_stats_in6);
+       snmp_mib_free((void **)udp_stats_in6);
 err_udp_mib:
-       snmp6_mib_free((void **)icmpv6_statistics);
+       snmp_mib_free((void **)icmpv6_statistics);
 err_icmp_mib:
-       snmp6_mib_free((void **)ipv6_statistics);
+       snmp_mib_free((void **)ipv6_statistics);
 err_ip_mib:
        return -ENOMEM;
 
@@ -753,10 +740,10 @@ err_ip_mib:
 
 static void cleanup_ipv6_mibs(void)
 {
-       snmp6_mib_free((void **)ipv6_statistics);
-       snmp6_mib_free((void **)icmpv6_statistics);
-       snmp6_mib_free((void **)udp_stats_in6);
-       snmp6_mib_free((void **)udplite_stats_in6);
+       snmp_mib_free((void **)ipv6_statistics);
+       snmp_mib_free((void **)icmpv6_statistics);
+       snmp_mib_free((void **)udp_stats_in6);
+       snmp_mib_free((void **)udplite_stats_in6);
 }
 
 static int __init inet6_init(void)
@@ -929,25 +916,30 @@ static void __exit inet6_exit(void)
 {
        /* First of all disallow new sockets creation. */
        sock_unregister(PF_INET6);
+       /* Disallow any further netlink messages */
+       rtnl_unregister_all(PF_INET6);
+
+       /* Cleanup code parts. */
+       ipv6_packet_cleanup();
+#ifdef CONFIG_IPV6_MIP6
+       mip6_fini();
+#endif
+       addrconf_cleanup();
+       ip6_flowlabel_cleanup();
+       ip6_route_cleanup();
 #ifdef CONFIG_PROC_FS
+
+       /* Cleanup code parts. */
        if6_proc_exit();
        ac6_proc_exit();
        ipv6_misc_proc_exit();
-       udp6_proc_exit();
        udplite6_proc_exit();
+       udp6_proc_exit();
        tcp6_proc_exit();
        raw6_proc_exit();
 #endif
-#ifdef CONFIG_IPV6_MIP6
-       mip6_fini();
-#endif
-       /* Cleanup code parts. */
-       ip6_flowlabel_cleanup();
-       addrconf_cleanup();
-       ip6_route_cleanup();
-       ipv6_packet_cleanup();
-       igmp6_cleanup();
        ipv6_netfilter_fini();
+       igmp6_cleanup();
        ndisc_cleanup();
        icmpv6_cleanup();
 #ifdef CONFIG_SYSCTL
@@ -955,6 +947,7 @@ static void __exit inet6_exit(void)
 #endif
        cleanup_ipv6_mibs();
        proto_unregister(&rawv6_prot);
+       proto_unregister(&udplitev6_prot);
        proto_unregister(&udpv6_prot);
        proto_unregister(&tcpv6_prot);
 }