|
@@ -4027,6 +4027,21 @@ static struct notifier_block ip6_route_dev_notifier = {
|
|
|
.priority = 0,
|
|
|
};
|
|
|
|
|
|
+void __init ip6_route_init_special_entries(void)
|
|
|
+{
|
|
|
+ /* Registering of the loopback is done before this portion of code,
|
|
|
+ * the loopback reference in rt6_info will not be taken, do it
|
|
|
+ * manually for init_net */
|
|
|
+ init_net.ipv6.ip6_null_entry->dst.dev = init_net.loopback_dev;
|
|
|
+ init_net.ipv6.ip6_null_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
|
|
+ #ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
|
|
+ init_net.ipv6.ip6_prohibit_entry->dst.dev = init_net.loopback_dev;
|
|
|
+ init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
|
|
+ init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
|
|
+ init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
|
|
+ #endif
|
|
|
+}
|
|
|
+
|
|
|
int __init ip6_route_init(void)
|
|
|
{
|
|
|
int ret;
|
|
@@ -4053,17 +4068,6 @@ int __init ip6_route_init(void)
|
|
|
|
|
|
ip6_dst_blackhole_ops.kmem_cachep = ip6_dst_ops_template.kmem_cachep;
|
|
|
|
|
|
- /* Registering of the loopback is done before this portion of code,
|
|
|
- * the loopback reference in rt6_info will not be taken, do it
|
|
|
- * manually for init_net */
|
|
|
- init_net.ipv6.ip6_null_entry->dst.dev = init_net.loopback_dev;
|
|
|
- init_net.ipv6.ip6_null_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
|
|
- #ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
|
|
- init_net.ipv6.ip6_prohibit_entry->dst.dev = init_net.loopback_dev;
|
|
|
- init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
|
|
- init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev;
|
|
|
- init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
|
|
- #endif
|
|
|
ret = fib6_init();
|
|
|
if (ret)
|
|
|
goto out_register_subsys;
|