diff options
author | Stephen Hemminger <shemminger@vyatta.com> | 2008-11-20 00:52:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-11-20 01:42:41 -0500 |
commit | 5bc3eb7e2f0026f246d939851109df99e8e9f64a (patch) | |
tree | 6da63169e066a07db21cc5268ac97ceb4c366c1c /net/ipv4/ipmr.c | |
parent | 54a30c975b6b27c0c9268461b647576b146d39bb (diff) |
ip: convert to net_device_ops for ioctl
Convert to net_device_ops function table pointer for ioctl.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ipmr.c')
-rw-r--r-- | net/ipv4/ipmr.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 05ed336f798a..ed372f3983e5 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -124,8 +124,8 @@ static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v) | |||
124 | 124 | ||
125 | dev = __dev_get_by_name(&init_net, "tunl0"); | 125 | dev = __dev_get_by_name(&init_net, "tunl0"); |
126 | if (dev) { | 126 | if (dev) { |
127 | const struct net_device_ops *ops = dev->netdev_ops; | ||
127 | struct ifreq ifr; | 128 | struct ifreq ifr; |
128 | mm_segment_t oldfs; | ||
129 | struct ip_tunnel_parm p; | 129 | struct ip_tunnel_parm p; |
130 | 130 | ||
131 | memset(&p, 0, sizeof(p)); | 131 | memset(&p, 0, sizeof(p)); |
@@ -137,9 +137,13 @@ static void ipmr_del_tunnel(struct net_device *dev, struct vifctl *v) | |||
137 | sprintf(p.name, "dvmrp%d", v->vifc_vifi); | 137 | sprintf(p.name, "dvmrp%d", v->vifc_vifi); |
138 | ifr.ifr_ifru.ifru_data = (__force void __user *)&p; | 138 | ifr.ifr_ifru.ifru_data = (__force void __user *)&p; |
139 | 139 | ||
140 | oldfs = get_fs(); set_fs(KERNEL_DS); | 140 | if (ops->ndo_do_ioctl) { |
141 | dev->do_ioctl(dev, &ifr, SIOCDELTUNNEL); | 141 | mm_segment_t oldfs = get_fs(); |
142 | set_fs(oldfs); | 142 | |
143 | set_fs(KERNEL_DS); | ||
144 | ops->ndo_do_ioctl(dev, &ifr, SIOCDELTUNNEL); | ||
145 | set_fs(oldfs); | ||
146 | } | ||
143 | } | 147 | } |
144 | } | 148 | } |
145 | 149 | ||
@@ -151,9 +155,9 @@ struct net_device *ipmr_new_tunnel(struct vifctl *v) | |||
151 | dev = __dev_get_by_name(&init_net, "tunl0"); | 155 | dev = __dev_get_by_name(&init_net, "tunl0"); |
152 | 156 | ||
153 | if (dev) { | 157 | if (dev) { |
158 | const struct net_device_ops *ops = dev->netdev_ops; | ||
154 | int err; | 159 | int err; |
155 | struct ifreq ifr; | 160 | struct ifreq ifr; |
156 | mm_segment_t oldfs; | ||
157 | struct ip_tunnel_parm p; | 161 | struct ip_tunnel_parm p; |
158 | struct in_device *in_dev; | 162 | struct in_device *in_dev; |
159 | 163 | ||
@@ -166,9 +170,14 @@ struct net_device *ipmr_new_tunnel(struct vifctl *v) | |||
166 | sprintf(p.name, "dvmrp%d", v->vifc_vifi); | 170 | sprintf(p.name, "dvmrp%d", v->vifc_vifi); |
167 | ifr.ifr_ifru.ifru_data = (__force void __user *)&p; | 171 | ifr.ifr_ifru.ifru_data = (__force void __user *)&p; |
168 | 172 | ||
169 | oldfs = get_fs(); set_fs(KERNEL_DS); | 173 | if (ops->ndo_do_ioctl) { |
170 | err = dev->do_ioctl(dev, &ifr, SIOCADDTUNNEL); | 174 | mm_segment_t oldfs = get_fs(); |
171 | set_fs(oldfs); | 175 | |
176 | set_fs(KERNEL_DS); | ||
177 | err = ops->ndo_do_ioctl(dev, &ifr, SIOCADDTUNNEL); | ||
178 | set_fs(oldfs); | ||
179 | } else | ||
180 | err = -EOPNOTSUPP; | ||
172 | 181 | ||
173 | dev = NULL; | 182 | dev = NULL; |
174 | 183 | ||