[WEXT]: Cleanup early ioctl call path.

This patch makes the code in wireless_process_ioctl somewhat more
readable.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Johannes Berg 2007-04-26 20:45:47 -07:00 committed by David S. Miller
parent 4b1e255384
commit dd8ceabcd1

View File

@ -1035,53 +1035,31 @@ static int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd)
/* A bunch of special cases, then the generic case... /* A bunch of special cases, then the generic case...
* Note that 'cmd' is already filtered in dev_ioctl() with * Note that 'cmd' is already filtered in dev_ioctl() with
* (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) */ * (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) */
switch (cmd) { if (cmd == SIOCGIWSTATS)
case SIOCGIWSTATS: return ioctl_standard_call(dev, ifr, cmd,
/* Get Wireless Stats */
return ioctl_standard_call(dev,
ifr,
cmd,
&iw_handler_get_iwstats); &iw_handler_get_iwstats);
case SIOCGIWPRIV: if (cmd == SIOCGIWPRIV && dev->wireless_handlers)
/* Check if we have some wireless handlers defined */ return ioctl_standard_call(dev, ifr, cmd,
if (dev->wireless_handlers != NULL) { &iw_handler_get_private);
/* We export to user space the definition of
* the private handler ourselves */ /* Basic check */
return ioctl_standard_call(dev, if (!netif_device_present(dev))
ifr, return -ENODEV;
cmd,
&iw_handler_get_private); /* New driver API : try to find the handler */
} handler = get_handler(dev, cmd);
// ## Fall-through for old API ## if (handler) {
default: /* Standard and private are not the same */
/* Generic IOCTL */ if (cmd < SIOCIWFIRSTPRIV)
/* Basic check */ return ioctl_standard_call(dev, ifr, cmd, handler);
if (!netif_device_present(dev)) else
return -ENODEV; return ioctl_private_call(dev, ifr, cmd, handler);
/* New driver API : try to find the handler */
handler = get_handler(dev, cmd);
if (handler != NULL) {
/* Standard and private are not the same */
if (cmd < SIOCIWFIRSTPRIV)
return ioctl_standard_call(dev,
ifr,
cmd,
handler);
else
return ioctl_private_call(dev,
ifr,
cmd,
handler);
}
/* Old driver API : call driver ioctl handler */
if (dev->do_ioctl) {
return dev->do_ioctl(dev, ifr, cmd);
}
return -EOPNOTSUPP;
} }
/* Not reached */ /* Old driver API : call driver ioctl handler */
return -EINVAL; if (dev->do_ioctl)
return dev->do_ioctl(dev, ifr, cmd);
return -EOPNOTSUPP;
} }
/* entry point from dev ioctl */ /* entry point from dev ioctl */
@ -1093,9 +1071,10 @@ int wext_handle_ioctl(struct ifreq *ifr, unsigned int cmd,
/* If command is `set a parameter', or /* If command is `set a parameter', or
* `get the encoding parameters', check if * `get the encoding parameters', check if
* the user has the right to do it */ * the user has the right to do it */
if (IW_IS_SET(cmd) || cmd == SIOCGIWENCODE || cmd == SIOCGIWENCODEEXT) if ((IW_IS_SET(cmd) || cmd == SIOCGIWENCODE || cmd == SIOCGIWENCODEEXT)
if (!capable(CAP_NET_ADMIN)) && !capable(CAP_NET_ADMIN))
return -EPERM; return -EPERM;
dev_load(ifr->ifr_name); dev_load(ifr->ifr_name);
rtnl_lock(); rtnl_lock();
ret = wireless_process_ioctl(ifr, cmd); ret = wireless_process_ioctl(ifr, cmd);