static int __proc_net_register(struct proc_dir_entry * dp) { return proc_net_register(dp); }
__initfunc(void inet6_proto_init(struct net_proto *pro)) #endif { struct sk_buff *dummy_skb; int err; #ifdef MODULE if (!mod_member_present(&__this_module, can_unload)) return -EINVAL; __this_module.can_unload = &ipv6_unload; #endif printk(KERN_INFO "IPv6 v0.8 for NET4.0\n"); if (sizeof(struct inet6_skb_parm) > sizeof(dummy_skb->cb)) { printk(KERN_CRIT "inet6_proto_init: size fault\n"); #ifdef MODULE return -EINVAL; #else return; #endif } /* * ipngwg API draft makes clear that the correct semantics * for TCP and UDP is to consider one TCP and UDP instance * in a host availiable by both INET and INET6 APIs and * able to communicate via both network protocols. */ #if defined(MODULE) && defined(CONFIG_SYSCTL) ipv6_sysctl_register(); #endif err = icmpv6_init(&inet6_family_ops); if (err) goto icmp_fail; err = ndisc_init(&inet6_family_ops); if (err) goto ndisc_fail; err = igmp6_init(&inet6_family_ops); if (err) goto igmp_fail; ipv6_netdev_notif_init(); ipv6_packet_init(); ip6_route_init(); ip6_flowlabel_init(); addrconf_init(); #ifndef _HURD_ sit_init(); #endif /* Init v6 transport protocols. */ udpv6_init(); tcpv6_init(); /* Create /proc/foo6 entries. */ #ifdef CONFIG_PROC_FS proc_net_register(&proc_net_raw6); proc_net_register(&proc_net_tcp6); proc_net_register(&proc_net_udp6); proc_net_register(&proc_net_sockstat6); proc_net_register(&proc_net_snmp6); #endif /* Now the userspace is allowed to create INET6 sockets. */ (void) sock_register(&inet6_family_ops); #ifdef MODULE return 0; #else return; #endif igmp_fail: ndisc_cleanup(); ndisc_fail: icmpv6_cleanup(); icmp_fail: #if defined(MODULE) && defined(CONFIG_SYSCTL) ipv6_sysctl_unregister(); #endif #ifdef MODULE return err; #else return; #endif }