Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0303770d authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller
Browse files

[NET]: Make ipip/ip6_tunnel independant of XFRM

parent c877efb2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -803,7 +803,7 @@ struct xfrm_algo_desc {
/* XFRM tunnel handlers.  */
struct xfrm_tunnel {
	int (*handler)(struct sk_buff *skb);
	void (*err_handler)(struct sk_buff *skb, void *info);
	void (*err_handler)(struct sk_buff *skb, __u32 info);
};

struct xfrm6_tunnel {
+0 −1
Original line number Diff line number Diff line
@@ -235,7 +235,6 @@ config IP_PNP_RARP
#   bool '    IP: ARP support' CONFIG_IP_PNP_ARP		
config NET_IPIP
	tristate "IP: tunneling"
	select INET_TUNNEL
	---help---
	  Tunneling means encapsulating data of one protocol type within
	  another protocol and sending it over a channel that understands the
+32 −4
Original line number Diff line number Diff line
@@ -273,7 +273,7 @@ static void ipip_tunnel_uninit(struct net_device *dev)
	dev_put(dev);
}

static void ipip_err(struct sk_buff *skb, void *__unused)
static void ipip_err(struct sk_buff *skb, u32 info)
{
#ifndef I_WISH_WORLD_WERE_PERFECT

@@ -852,11 +852,39 @@ static int __init ipip_fb_tunnel_init(struct net_device *dev)
	return 0;
}

#ifdef CONFIG_INET_TUNNEL
static struct xfrm_tunnel ipip_handler = {
	.handler	=	ipip_rcv,
	.err_handler	=	ipip_err,
};

static inline int ipip_register(void)
{
	return xfrm4_tunnel_register(&ipip_handler);
}

static inline int ipip_unregister(void)
{
	return xfrm4_tunnel_deregister(&ipip_handler);
}
#else
static struct net_protocol ipip_protocol = {
	.handler	=	ipip_rcv,
	.err_handler	=	ipip_err,
	.no_policy	=	1,
};

static inline int ipip_register(void)
{
	return inet_add_protocol(&ipip_protocol, IPPROTO_IPIP);
}

static inline int ipip_unregister(void)
{
	return inet_del_protocol(&ipip_protocol, IPPROTO_IPIP);
}
#endif

static char banner[] __initdata =
	KERN_INFO "IPv4 over IPv4 tunneling driver\n";

@@ -866,7 +894,7 @@ static int __init ipip_init(void)

	printk(banner);

	if (xfrm4_tunnel_register(&ipip_handler) < 0) {
	if (ipip_register() < 0) {
		printk(KERN_INFO "ipip init: can't register tunnel\n");
		return -EAGAIN;
	}
@@ -888,13 +916,13 @@ static int __init ipip_init(void)
 err2:
	free_netdev(ipip_fb_tunnel_dev);
 err1:
	xfrm4_tunnel_deregister(&ipip_handler);
	ipip_unregister();
	goto out;
}

static void __exit ipip_fini(void)
{
	if (xfrm4_tunnel_deregister(&ipip_handler) < 0)
	if (ipip_unregister() < 0)
		printk(KERN_INFO "ipip close: can't deregister tunnel\n");

	unregister_netdev(ipip_fb_tunnel_dev);
+1 −2
Original line number Diff line number Diff line
@@ -78,10 +78,9 @@ static int ipip_rcv(struct sk_buff *skb)
static void ipip_err(struct sk_buff *skb, u32 info)
{
	struct xfrm_tunnel *handler = ipip_handler;
	u32 arg = info;

	if (handler)
		handler->err_handler(skb, &arg);
		handler->err_handler(skb, info);
}

static int ipip_init_state(struct xfrm_state *x)
+0 −1
Original line number Diff line number Diff line
@@ -91,7 +91,6 @@ config INET6_TUNNEL
config IPV6_TUNNEL
	tristate "IPv6: IPv6-in-IPv6 tunnel"
	depends on IPV6
	select INET6_TUNNEL
	---help---
	  Support for IPv6-in-IPv6 tunnels described in RFC 2473.

Loading