diff options
author | Patrick McHardy <kaber@trash.net> | 2005-07-19 17:03:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-07-19 17:03:34 -0400 |
commit | 0303770deb834c15ca664a9d741d40f893c92f4e (patch) | |
tree | d48e2df54d3545052aaffeeeec1c34c214055056 /net/ipv4 | |
parent | c877efb207bf4629cfa97ac13412f7392a873485 (diff) |
[NET]: Make ipip/ip6_tunnel independant of XFRM
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/Kconfig | 1 | ||||
-rw-r--r-- | net/ipv4/ipip.c | 36 | ||||
-rw-r--r-- | net/ipv4/xfrm4_tunnel.c | 3 |
3 files changed, 33 insertions, 7 deletions
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig index c7f1f9245bc9..fc561c0ae8e2 100644 --- a/net/ipv4/Kconfig +++ b/net/ipv4/Kconfig | |||
@@ -235,7 +235,6 @@ config IP_PNP_RARP | |||
235 | # bool ' IP: ARP support' CONFIG_IP_PNP_ARP | 235 | # bool ' IP: ARP support' CONFIG_IP_PNP_ARP |
236 | config NET_IPIP | 236 | config NET_IPIP |
237 | tristate "IP: tunneling" | 237 | tristate "IP: tunneling" |
238 | select INET_TUNNEL | ||
239 | ---help--- | 238 | ---help--- |
240 | Tunneling means encapsulating data of one protocol type within | 239 | Tunneling means encapsulating data of one protocol type within |
241 | another protocol and sending it over a channel that understands the | 240 | another protocol and sending it over a channel that understands the |
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index 68a78731f722..c3947cd566b7 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
@@ -273,7 +273,7 @@ static void ipip_tunnel_uninit(struct net_device *dev) | |||
273 | dev_put(dev); | 273 | dev_put(dev); |
274 | } | 274 | } |
275 | 275 | ||
276 | static void ipip_err(struct sk_buff *skb, void *__unused) | 276 | static void ipip_err(struct sk_buff *skb, u32 info) |
277 | { | 277 | { |
278 | #ifndef I_WISH_WORLD_WERE_PERFECT | 278 | #ifndef I_WISH_WORLD_WERE_PERFECT |
279 | 279 | ||
@@ -852,11 +852,39 @@ static int __init ipip_fb_tunnel_init(struct net_device *dev) | |||
852 | return 0; | 852 | return 0; |
853 | } | 853 | } |
854 | 854 | ||
855 | #ifdef CONFIG_INET_TUNNEL | ||
855 | static struct xfrm_tunnel ipip_handler = { | 856 | static struct xfrm_tunnel ipip_handler = { |
856 | .handler = ipip_rcv, | 857 | .handler = ipip_rcv, |
857 | .err_handler = ipip_err, | 858 | .err_handler = ipip_err, |
858 | }; | 859 | }; |
859 | 860 | ||
861 | static inline int ipip_register(void) | ||
862 | { | ||
863 | return xfrm4_tunnel_register(&ipip_handler); | ||
864 | } | ||
865 | |||
866 | static inline int ipip_unregister(void) | ||
867 | { | ||
868 | return xfrm4_tunnel_deregister(&ipip_handler); | ||
869 | } | ||
870 | #else | ||
871 | static struct net_protocol ipip_protocol = { | ||
872 | .handler = ipip_rcv, | ||
873 | .err_handler = ipip_err, | ||
874 | .no_policy = 1, | ||
875 | }; | ||
876 | |||
877 | static inline int ipip_register(void) | ||
878 | { | ||
879 | return inet_add_protocol(&ipip_protocol, IPPROTO_IPIP); | ||
880 | } | ||
881 | |||
882 | static inline int ipip_unregister(void) | ||
883 | { | ||
884 | return inet_del_protocol(&ipip_protocol, IPPROTO_IPIP); | ||
885 | } | ||
886 | #endif | ||
887 | |||
860 | static char banner[] __initdata = | 888 | static char banner[] __initdata = |
861 | KERN_INFO "IPv4 over IPv4 tunneling driver\n"; | 889 | KERN_INFO "IPv4 over IPv4 tunneling driver\n"; |
862 | 890 | ||
@@ -866,7 +894,7 @@ static int __init ipip_init(void) | |||
866 | 894 | ||
867 | printk(banner); | 895 | printk(banner); |
868 | 896 | ||
869 | if (xfrm4_tunnel_register(&ipip_handler) < 0) { | 897 | if (ipip_register() < 0) { |
870 | printk(KERN_INFO "ipip init: can't register tunnel\n"); | 898 | printk(KERN_INFO "ipip init: can't register tunnel\n"); |
871 | return -EAGAIN; | 899 | return -EAGAIN; |
872 | } | 900 | } |
@@ -888,13 +916,13 @@ static int __init ipip_init(void) | |||
888 | err2: | 916 | err2: |
889 | free_netdev(ipip_fb_tunnel_dev); | 917 | free_netdev(ipip_fb_tunnel_dev); |
890 | err1: | 918 | err1: |
891 | xfrm4_tunnel_deregister(&ipip_handler); | 919 | ipip_unregister(); |
892 | goto out; | 920 | goto out; |
893 | } | 921 | } |
894 | 922 | ||
895 | static void __exit ipip_fini(void) | 923 | static void __exit ipip_fini(void) |
896 | { | 924 | { |
897 | if (xfrm4_tunnel_deregister(&ipip_handler) < 0) | 925 | if (ipip_unregister() < 0) |
898 | printk(KERN_INFO "ipip close: can't deregister tunnel\n"); | 926 | printk(KERN_INFO "ipip close: can't deregister tunnel\n"); |
899 | 927 | ||
900 | unregister_netdev(ipip_fb_tunnel_dev); | 928 | unregister_netdev(ipip_fb_tunnel_dev); |
diff --git a/net/ipv4/xfrm4_tunnel.c b/net/ipv4/xfrm4_tunnel.c index e1fe360ed27a..afbb0d4cc305 100644 --- a/net/ipv4/xfrm4_tunnel.c +++ b/net/ipv4/xfrm4_tunnel.c | |||
@@ -78,10 +78,9 @@ static int ipip_rcv(struct sk_buff *skb) | |||
78 | static void ipip_err(struct sk_buff *skb, u32 info) | 78 | static void ipip_err(struct sk_buff *skb, u32 info) |
79 | { | 79 | { |
80 | struct xfrm_tunnel *handler = ipip_handler; | 80 | struct xfrm_tunnel *handler = ipip_handler; |
81 | u32 arg = info; | ||
82 | 81 | ||
83 | if (handler) | 82 | if (handler) |
84 | handler->err_handler(skb, &arg); | 83 | handler->err_handler(skb, info); |
85 | } | 84 | } |
86 | 85 | ||
87 | static int ipip_init_state(struct xfrm_state *x) | 86 | static int ipip_init_state(struct xfrm_state *x) |