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

Commit b8c26a33 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller
Browse files

ipgre: convert to netdevice_ops



Convert ipgre tunnel to netdevice ops.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1326c3d5
Loading
Loading
Loading
Loading
+26 −16
Original line number Diff line number Diff line
@@ -126,8 +126,6 @@ static int ipgre_tunnel_bind_dev(struct net_device *dev);

/* Fallback tunnel: no source, no destination, no key, no options */

static int ipgre_fb_tunnel_init(struct net_device *dev);

#define HASH_SIZE  16

static int ipgre_net_id;
@@ -1142,6 +1140,7 @@ static int ipgre_open(struct net_device *dev)
static int ipgre_close(struct net_device *dev)
{
	struct ip_tunnel *t = netdev_priv(dev);

	if (ipv4_is_multicast(t->parms.iph.daddr) && t->mlink) {
		struct in_device *in_dev;
		in_dev = inetdev_by_index(dev_net(dev), t->mlink);
@@ -1155,14 +1154,22 @@ static int ipgre_close(struct net_device *dev)

#endif

static const struct net_device_ops ipgre_netdev_ops = {
	.ndo_init		= ipgre_tunnel_init,
	.ndo_uninit		= ipgre_tunnel_uninit,
#ifdef CONFIG_NET_IPGRE_BROADCAST
	.ndo_open		= ipgre_open,
	.ndo_stop		= ipgre_close,
#endif
	.ndo_start_xmit		= ipgre_tunnel_xmit,
	.ndo_do_ioctl		= ipgre_tunnel_ioctl,
	.ndo_change_mtu		= ipgre_tunnel_change_mtu,
};

static void ipgre_tunnel_setup(struct net_device *dev)
{
	dev->init		= ipgre_tunnel_init;
	dev->uninit		= ipgre_tunnel_uninit;
	dev->netdev_ops		= &ipgre_netdev_ops;
	dev->destructor 	= free_netdev;
	dev->hard_start_xmit	= ipgre_tunnel_xmit;
	dev->do_ioctl		= ipgre_tunnel_ioctl;
	dev->change_mtu		= ipgre_tunnel_change_mtu;

	dev->type		= ARPHRD_IPGRE;
	dev->needed_headroom 	= LL_MAX_HEADER + sizeof(struct iphdr) + 4;
@@ -1194,8 +1201,6 @@ static int ipgre_tunnel_init(struct net_device *dev)
				return -EINVAL;
			dev->flags = IFF_BROADCAST;
			dev->header_ops = &ipgre_header_ops;
			dev->open = ipgre_open;
			dev->stop = ipgre_close;
		}
#endif
	} else
@@ -1204,7 +1209,7 @@ static int ipgre_tunnel_init(struct net_device *dev)
	return 0;
}

static int ipgre_fb_tunnel_init(struct net_device *dev)
static void ipgre_fb_tunnel_init(struct net_device *dev)
{
	struct ip_tunnel *tunnel = netdev_priv(dev);
	struct iphdr *iph = &tunnel->parms.iph;
@@ -1220,7 +1225,6 @@ static int ipgre_fb_tunnel_init(struct net_device *dev)

	dev_hold(dev);
	ign->tunnels_wc[0]	= tunnel;
	return 0;
}


@@ -1265,7 +1269,7 @@ static int ipgre_init_net(struct net *net)
		goto err_alloc_dev;
	}

	ign->fb_tunnel_dev->init = ipgre_fb_tunnel_init;
	ipgre_fb_tunnel_init(ign->fb_tunnel_dev);
	dev_net_set(ign->fb_tunnel_dev, net);
	ign->fb_tunnel_dev->rtnl_link_ops = &ipgre_link_ops;

@@ -1397,16 +1401,22 @@ static int ipgre_tap_init(struct net_device *dev)
	return 0;
}

static const struct net_device_ops ipgre_tap_netdev_ops = {
	.ndo_init		= ipgre_tap_init,
	.ndo_uninit		= ipgre_tunnel_uninit,
	.ndo_start_xmit		= ipgre_tunnel_xmit,
	.ndo_set_mac_address 	= eth_mac_addr,
	.ndo_validate_addr	= eth_validate_addr,
	.ndo_change_mtu		= ipgre_tunnel_change_mtu,
};

static void ipgre_tap_setup(struct net_device *dev)
{

	ether_setup(dev);

	dev->init		= ipgre_tap_init;
	dev->uninit		= ipgre_tunnel_uninit;
	dev->netdev_ops		= &ipgre_netdev_ops;
	dev->destructor 	= free_netdev;
	dev->hard_start_xmit	= ipgre_tunnel_xmit;
	dev->change_mtu		= ipgre_tunnel_change_mtu;

	dev->iflink		= 0;
	dev->features		|= NETIF_F_NETNS_LOCAL;