Example #1
0
static int __proc_net_register(struct proc_dir_entry * dp)
{
	return proc_net_register(dp);
}
Example #2
0
__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
}