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

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

ip: convert to net_device_ops for ioctl



Convert to net_device_ops function table pointer for ioctl.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 54a30c97
Loading
Loading
Loading
Loading
+17 −8
Original line number Original line Diff line number Diff line
@@ -124,8 +124,8 @@ static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v)


	dev = __dev_get_by_name(&init_net, "tunl0");
	dev = __dev_get_by_name(&init_net, "tunl0");
	if (dev) {
	if (dev) {
		const struct net_device_ops *ops = dev->netdev_ops;
		struct ifreq ifr;
		struct ifreq ifr;
		mm_segment_t	oldfs;
		struct ip_tunnel_parm p;
		struct ip_tunnel_parm p;


		memset(&p, 0, sizeof(p));
		memset(&p, 0, sizeof(p));
@@ -137,11 +137,15 @@ static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v)
		sprintf(p.name, "dvmrp%d", v->vifc_vifi);
		sprintf(p.name, "dvmrp%d", v->vifc_vifi);
		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;
		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;


		oldfs = get_fs(); set_fs(KERNEL_DS);
		if (ops->ndo_do_ioctl) {
		dev->do_ioctl(dev, &ifr, SIOCDELTUNNEL);
			mm_segment_t oldfs = get_fs();

			set_fs(KERNEL_DS);
			ops->ndo_do_ioctl(dev, &ifr, SIOCDELTUNNEL);
			set_fs(oldfs);
			set_fs(oldfs);
		}
		}
	}
	}
}


static
static
struct net_device *ipmr_new_tunnel(struct vifctl *v)
struct net_device *ipmr_new_tunnel(struct vifctl *v)
@@ -151,9 +155,9 @@ struct net_device *ipmr_new_tunnel(struct vifctl *v)
	dev = __dev_get_by_name(&init_net, "tunl0");
	dev = __dev_get_by_name(&init_net, "tunl0");


	if (dev) {
	if (dev) {
		const struct net_device_ops *ops = dev->netdev_ops;
		int err;
		int err;
		struct ifreq ifr;
		struct ifreq ifr;
		mm_segment_t	oldfs;
		struct ip_tunnel_parm p;
		struct ip_tunnel_parm p;
		struct in_device  *in_dev;
		struct in_device  *in_dev;


@@ -166,9 +170,14 @@ struct net_device *ipmr_new_tunnel(struct vifctl *v)
		sprintf(p.name, "dvmrp%d", v->vifc_vifi);
		sprintf(p.name, "dvmrp%d", v->vifc_vifi);
		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;
		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;


		oldfs = get_fs(); set_fs(KERNEL_DS);
		if (ops->ndo_do_ioctl) {
		err = dev->do_ioctl(dev, &ifr, SIOCADDTUNNEL);
			mm_segment_t oldfs = get_fs();

			set_fs(KERNEL_DS);
			err = ops->ndo_do_ioctl(dev, &ifr, SIOCADDTUNNEL);
			set_fs(oldfs);
			set_fs(oldfs);
		} else
			err = -EOPNOTSUPP;


		dev = NULL;
		dev = NULL;


+9 −4
Original line number Original line Diff line number Diff line
@@ -2031,8 +2031,8 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)


#if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
#if defined(CONFIG_IPV6_SIT) || defined(CONFIG_IPV6_SIT_MODULE)
	if (dev->type == ARPHRD_SIT) {
	if (dev->type == ARPHRD_SIT) {
		const struct net_device_ops *ops = dev->netdev_ops;
		struct ifreq ifr;
		struct ifreq ifr;
		mm_segment_t	oldfs;
		struct ip_tunnel_parm p;
		struct ip_tunnel_parm p;


		err = -EADDRNOTAVAIL;
		err = -EADDRNOTAVAIL;
@@ -2048,9 +2048,14 @@ int addrconf_set_dstaddr(struct net *net, void __user *arg)
		p.iph.ttl = 64;
		p.iph.ttl = 64;
		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;
		ifr.ifr_ifru.ifru_data = (__force void __user *)&p;


		oldfs = get_fs(); set_fs(KERNEL_DS);
		if (ops->ndo_do_ioctl) {
		err = dev->do_ioctl(dev, &ifr, SIOCADDTUNNEL);
			mm_segment_t oldfs = get_fs();

			set_fs(KERNEL_DS);
			err = ops->ndo_do_ioctl(dev, &ifr, SIOCADDTUNNEL);
			set_fs(oldfs);
			set_fs(oldfs);
		} else
			err = -EOPNOTSUPP;


		if (err == 0) {
		if (err == 0) {
			err = -ENOBUFS;
			err = -ENOBUFS;