Loading net/ipv4/ipip.c +50 −0 Original line number Original line Diff line number Diff line Loading @@ -115,10 +115,16 @@ #include <net/ipip.h> #include <net/ipip.h> #include <net/inet_ecn.h> #include <net/inet_ecn.h> #include <net/xfrm.h> #include <net/xfrm.h> #include <net/net_namespace.h> #include <net/netns/generic.h> #define HASH_SIZE 16 #define HASH_SIZE 16 #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF) #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF) static int ipip_net_id; struct ipip_net { }; static int ipip_fb_tunnel_init(struct net_device *dev); static int ipip_fb_tunnel_init(struct net_device *dev); static int ipip_tunnel_init(struct net_device *dev); static int ipip_tunnel_init(struct net_device *dev); static void ipip_tunnel_setup(struct net_device *dev); static void ipip_tunnel_setup(struct net_device *dev); Loading Loading @@ -867,6 +873,41 @@ static struct xfrm_tunnel ipip_handler = { static char banner[] __initdata = static char banner[] __initdata = KERN_INFO "IPv4 over IPv4 tunneling driver\n"; KERN_INFO "IPv4 over IPv4 tunneling driver\n"; static int ipip_init_net(struct net *net) { int err; struct ipip_net *ipn; err = -ENOMEM; ipn = kmalloc(sizeof(struct ipip_net), GFP_KERNEL); if (ipn == NULL) goto err_alloc; err = net_assign_generic(net, ipip_net_id, ipn); if (err < 0) goto err_assign; return 0; err_assign: kfree(ipn); err_alloc: return err; } static void ipip_exit_net(struct net *net) { struct ipip_net *ipn; ipn = net_generic(net, ipip_net_id); kfree(ipn); } static struct pernet_operations ipip_net_ops = { .init = ipip_init_net, .exit = ipip_exit_net, }; static int __init ipip_init(void) static int __init ipip_init(void) { { int err; int err; Loading @@ -890,6 +931,10 @@ static int __init ipip_init(void) if ((err = register_netdev(ipip_fb_tunnel_dev))) if ((err = register_netdev(ipip_fb_tunnel_dev))) goto err2; goto err2; err = register_pernet_gen_device(&ipip_net_id, &ipip_net_ops); if (err) goto err3; out: out: return err; return err; err2: err2: Loading @@ -897,6 +942,9 @@ static int __init ipip_init(void) err1: err1: xfrm4_tunnel_deregister(&ipip_handler, AF_INET); xfrm4_tunnel_deregister(&ipip_handler, AF_INET); goto out; goto out; err3: unregister_netdevice(ipip_fb_tunnel_dev); goto err1; } } static void __exit ipip_destroy_tunnels(void) static void __exit ipip_destroy_tunnels(void) Loading @@ -922,6 +970,8 @@ static void __exit ipip_fini(void) ipip_destroy_tunnels(); ipip_destroy_tunnels(); unregister_netdevice(ipip_fb_tunnel_dev); unregister_netdevice(ipip_fb_tunnel_dev); rtnl_unlock(); rtnl_unlock(); unregister_pernet_gen_device(ipip_net_id, &ipip_net_ops); } } module_init(ipip_init); module_init(ipip_init); Loading Loading
net/ipv4/ipip.c +50 −0 Original line number Original line Diff line number Diff line Loading @@ -115,10 +115,16 @@ #include <net/ipip.h> #include <net/ipip.h> #include <net/inet_ecn.h> #include <net/inet_ecn.h> #include <net/xfrm.h> #include <net/xfrm.h> #include <net/net_namespace.h> #include <net/netns/generic.h> #define HASH_SIZE 16 #define HASH_SIZE 16 #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF) #define HASH(addr) (((__force u32)addr^((__force u32)addr>>4))&0xF) static int ipip_net_id; struct ipip_net { }; static int ipip_fb_tunnel_init(struct net_device *dev); static int ipip_fb_tunnel_init(struct net_device *dev); static int ipip_tunnel_init(struct net_device *dev); static int ipip_tunnel_init(struct net_device *dev); static void ipip_tunnel_setup(struct net_device *dev); static void ipip_tunnel_setup(struct net_device *dev); Loading Loading @@ -867,6 +873,41 @@ static struct xfrm_tunnel ipip_handler = { static char banner[] __initdata = static char banner[] __initdata = KERN_INFO "IPv4 over IPv4 tunneling driver\n"; KERN_INFO "IPv4 over IPv4 tunneling driver\n"; static int ipip_init_net(struct net *net) { int err; struct ipip_net *ipn; err = -ENOMEM; ipn = kmalloc(sizeof(struct ipip_net), GFP_KERNEL); if (ipn == NULL) goto err_alloc; err = net_assign_generic(net, ipip_net_id, ipn); if (err < 0) goto err_assign; return 0; err_assign: kfree(ipn); err_alloc: return err; } static void ipip_exit_net(struct net *net) { struct ipip_net *ipn; ipn = net_generic(net, ipip_net_id); kfree(ipn); } static struct pernet_operations ipip_net_ops = { .init = ipip_init_net, .exit = ipip_exit_net, }; static int __init ipip_init(void) static int __init ipip_init(void) { { int err; int err; Loading @@ -890,6 +931,10 @@ static int __init ipip_init(void) if ((err = register_netdev(ipip_fb_tunnel_dev))) if ((err = register_netdev(ipip_fb_tunnel_dev))) goto err2; goto err2; err = register_pernet_gen_device(&ipip_net_id, &ipip_net_ops); if (err) goto err3; out: out: return err; return err; err2: err2: Loading @@ -897,6 +942,9 @@ static int __init ipip_init(void) err1: err1: xfrm4_tunnel_deregister(&ipip_handler, AF_INET); xfrm4_tunnel_deregister(&ipip_handler, AF_INET); goto out; goto out; err3: unregister_netdevice(ipip_fb_tunnel_dev); goto err1; } } static void __exit ipip_destroy_tunnels(void) static void __exit ipip_destroy_tunnels(void) Loading @@ -922,6 +970,8 @@ static void __exit ipip_fini(void) ipip_destroy_tunnels(); ipip_destroy_tunnels(); unregister_netdevice(ipip_fb_tunnel_dev); unregister_netdevice(ipip_fb_tunnel_dev); rtnl_unlock(); rtnl_unlock(); unregister_pernet_gen_device(ipip_net_id, &ipip_net_ops); } } module_init(ipip_init); module_init(ipip_init); Loading