Пример #1
0
static int ipip_tunnel_init(struct device *dev)
{
	struct device *tdev = NULL;
	struct ip_tunnel *tunnel;
	struct iphdr *iph;

	tunnel = (struct ip_tunnel*)dev->priv;
	iph = &tunnel->parms.iph;

	ipip_tunnel_init_gen(dev);

	if (iph->daddr) {
		struct rtable *rt;
		if (!ip_route_output(&rt, iph->daddr, iph->saddr, RT_TOS(iph->tos), tunnel->parms.link)) {
			tdev = rt->u.dst.dev;
			ip_rt_put(rt);
		}
		dev->flags |= IFF_POINTOPOINT;
	}

	if (!tdev && tunnel->parms.link)
		tdev = dev_get_by_index(tunnel->parms.link);

	if (tdev) {
		dev->hard_header_len = tdev->hard_header_len + sizeof(struct iphdr);
		dev->mtu = tdev->mtu - sizeof(struct iphdr);
	}
	dev->iflink = tunnel->parms.link;

	return 0;
}
Пример #2
0
__initfunc(int ipip_fb_tunnel_init(struct device *dev))
{
	struct iphdr *iph;

	ipip_tunnel_init_gen(dev);
#ifdef MODULE
	dev->open		= ipip_fb_tunnel_open;
	dev->stop		= ipip_fb_tunnel_close;
#endif

	iph = &ipip_fb_tunnel.parms.iph;
	iph->version		= 4;
	iph->protocol		= IPPROTO_IPIP;
	iph->ihl		= 5;

	tunnels_wc[0]		= &ipip_fb_tunnel;
	return 0;
}
Пример #3
0
int __init ipip_fb_tunnel_init(struct net_device *dev)
{
	struct iphdr *iph;

	ipip_tunnel_init_gen(dev);
#ifdef MODULE
	dev->open		= ipip_fb_tunnel_open;
	dev->stop		= ipip_fb_tunnel_close;
#endif

	iph = &ipip_fb_tunnel.parms.iph;
	iph->version		= 4;
#ifndef CONFIG_NET_IPIP_IPV6
	iph->protocol		= IPPROTO_IPIP;
#endif
	iph->ihl		= 5;

	dev_hold(dev);
	tunnels_wc[0]		= &ipip_fb_tunnel;
	return 0;
}