wifi: hostap: Avoid clashing function prototypes

When built with Control Flow Integrity, function prototypes between
caller and function declaration must match. These mismatches are visible
at compile time with the new -Wcast-function-type-strict in Clang[1].

Fix a total of 42 warnings like these:

../drivers/net/wireless/intersil/hostap/hostap_ioctl.c:3868:2: warning: cast from 'int (*)(struct net_device *, struct iw_request_info *, char *, char *)' to 'iw_handler' (aka 'int (*)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *)') converts to incompatible function type [-Wcast-function-type-strict]
        (iw_handler) prism2_get_name,                   /* SIOCGIWNAME */
        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

The hostap Wireless Extension handler callbacks (iw_handler) use a
union for the data argument. Actually use the union and perform explicit
member selection in the function body instead of having a function
prototype mismatch. There are no resulting binary differences
before/after changes.

These changes were made partly manually and partly with the help of
Coccinelle.

Link: https://github.com/KSPP/linux/issues/235
Link: https://reviews.llvm.org/D134831 [1]
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/e480e7713f1a4909ae011068c8d793cc4a638fbd.1667934775.git.gustavoars@kernel.org
This commit is contained in:
Gustavo A. R. Silva 2022-11-08 14:25:17 -06:00 committed by Kalle Valo
parent 02ae6a7034
commit fd7ef879a9

View File

@ -91,7 +91,7 @@ static int prism2_get_datarates(struct net_device *dev, u8 *rates)
static int prism2_get_name(struct net_device *dev,
struct iw_request_info *info,
char *name, char *extra)
union iwreq_data *wrqu, char *extra)
{
u8 rates[10];
int len, i, over2 = 0;
@ -105,7 +105,7 @@ static int prism2_get_name(struct net_device *dev,
}
}
strcpy(name, over2 ? "IEEE 802.11b" : "IEEE 802.11-DS");
strcpy(wrqu->name, over2 ? "IEEE 802.11b" : "IEEE 802.11-DS");
return 0;
}
@ -113,8 +113,9 @@ static int prism2_get_name(struct net_device *dev,
static int prism2_ioctl_siwencode(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *keybuf)
union iwreq_data *wrqu, char *keybuf)
{
struct iw_point *erq = &wrqu->encoding;
struct hostap_interface *iface;
local_info_t *local;
int i;
@ -215,8 +216,9 @@ static int prism2_ioctl_siwencode(struct net_device *dev,
static int prism2_ioctl_giwencode(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *key)
union iwreq_data *wrqu, char *key)
{
struct iw_point *erq = &wrqu->encoding;
struct hostap_interface *iface;
local_info_t *local;
int i, len;
@ -321,8 +323,9 @@ static int hostap_set_rate(struct net_device *dev)
static int prism2_ioctl_siwrate(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rrq = &wrqu->bitrate;
struct hostap_interface *iface;
local_info_t *local;
@ -381,8 +384,9 @@ static int prism2_ioctl_siwrate(struct net_device *dev,
static int prism2_ioctl_giwrate(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rrq = &wrqu->bitrate;
u16 val;
struct hostap_interface *iface;
local_info_t *local;
@ -440,8 +444,9 @@ static int prism2_ioctl_giwrate(struct net_device *dev,
static int prism2_ioctl_siwsens(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *sens, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *sens = &wrqu->sens;
struct hostap_interface *iface;
local_info_t *local;
@ -461,8 +466,9 @@ static int prism2_ioctl_siwsens(struct net_device *dev,
static int prism2_ioctl_giwsens(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *sens, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *sens = &wrqu->sens;
struct hostap_interface *iface;
local_info_t *local;
__le16 val;
@ -485,8 +491,9 @@ static int prism2_ioctl_giwsens(struct net_device *dev,
/* Deprecated in new wireless extension API */
static int prism2_ioctl_giwaplist(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
struct sockaddr *addr;
@ -526,8 +533,9 @@ static int prism2_ioctl_giwaplist(struct net_device *dev,
static int prism2_ioctl_siwrts(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rts, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rts = &wrqu->rts;
struct hostap_interface *iface;
local_info_t *local;
__le16 val;
@ -553,8 +561,9 @@ static int prism2_ioctl_siwrts(struct net_device *dev,
static int prism2_ioctl_giwrts(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rts, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rts = &wrqu->rts;
struct hostap_interface *iface;
local_info_t *local;
__le16 val;
@ -576,8 +585,9 @@ static int prism2_ioctl_giwrts(struct net_device *dev,
static int prism2_ioctl_siwfrag(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rts, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rts = &wrqu->rts;
struct hostap_interface *iface;
local_info_t *local;
__le16 val;
@ -603,8 +613,9 @@ static int prism2_ioctl_siwfrag(struct net_device *dev,
static int prism2_ioctl_giwfrag(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rts, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rts = &wrqu->rts;
struct hostap_interface *iface;
local_info_t *local;
__le16 val;
@ -669,8 +680,9 @@ static int hostap_join_ap(struct net_device *dev)
static int prism2_ioctl_siwap(struct net_device *dev,
struct iw_request_info *info,
struct sockaddr *ap_addr, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct sockaddr *ap_addr = &wrqu->ap_addr;
#ifdef PRISM2_NO_STATION_MODES
return -EOPNOTSUPP;
#else /* PRISM2_NO_STATION_MODES */
@ -709,8 +721,9 @@ static int prism2_ioctl_siwap(struct net_device *dev,
static int prism2_ioctl_giwap(struct net_device *dev,
struct iw_request_info *info,
struct sockaddr *ap_addr, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct sockaddr *ap_addr = &wrqu->ap_addr;
struct hostap_interface *iface;
local_info_t *local;
@ -745,8 +758,9 @@ static int prism2_ioctl_giwap(struct net_device *dev,
static int prism2_ioctl_siwnickn(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *nickname)
union iwreq_data *wrqu, char *nickname)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
@ -766,8 +780,9 @@ static int prism2_ioctl_siwnickn(struct net_device *dev,
static int prism2_ioctl_giwnickn(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *nickname)
union iwreq_data *wrqu, char *nickname)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
int len;
@ -793,8 +808,9 @@ static int prism2_ioctl_giwnickn(struct net_device *dev,
static int prism2_ioctl_siwfreq(struct net_device *dev,
struct iw_request_info *info,
struct iw_freq *freq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_freq *freq = &wrqu->freq;
struct hostap_interface *iface;
local_info_t *local;
@ -830,8 +846,9 @@ static int prism2_ioctl_siwfreq(struct net_device *dev,
static int prism2_ioctl_giwfreq(struct net_device *dev,
struct iw_request_info *info,
struct iw_freq *freq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_freq *freq = &wrqu->freq;
struct hostap_interface *iface;
local_info_t *local;
u16 val;
@ -874,8 +891,9 @@ static void hostap_monitor_set_type(local_info_t *local)
static int prism2_ioctl_siwessid(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *ssid)
union iwreq_data *wrqu, char *ssid)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
@ -910,8 +928,9 @@ static int prism2_ioctl_siwessid(struct net_device *dev,
static int prism2_ioctl_giwessid(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *essid)
union iwreq_data *wrqu, char *essid)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
u16 val;
@ -946,8 +965,9 @@ static int prism2_ioctl_giwessid(struct net_device *dev,
static int prism2_ioctl_giwrange(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
struct iw_range *range = (struct iw_range *) extra;
@ -1121,8 +1141,9 @@ static int hostap_monitor_mode_disable(local_info_t *local)
static int prism2_ioctl_siwmode(struct net_device *dev,
struct iw_request_info *info,
__u32 *mode, char *extra)
union iwreq_data *wrqu, char *extra)
{
__u32 *mode = &wrqu->mode;
struct hostap_interface *iface;
local_info_t *local;
int double_reset = 0;
@ -1197,8 +1218,9 @@ static int prism2_ioctl_siwmode(struct net_device *dev,
static int prism2_ioctl_giwmode(struct net_device *dev,
struct iw_request_info *info,
__u32 *mode, char *extra)
union iwreq_data *wrqu, char *extra)
{
__u32 *mode = &wrqu->mode;
struct hostap_interface *iface;
local_info_t *local;
@ -1222,8 +1244,9 @@ static int prism2_ioctl_giwmode(struct net_device *dev,
static int prism2_ioctl_siwpower(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *wrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *wrq = &wrqu->power;
#ifdef PRISM2_NO_STATION_MODES
return -EOPNOTSUPP;
#else /* PRISM2_NO_STATION_MODES */
@ -1281,8 +1304,9 @@ static int prism2_ioctl_siwpower(struct net_device *dev,
static int prism2_ioctl_giwpower(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rrq = &wrqu->power;
#ifdef PRISM2_NO_STATION_MODES
return -EOPNOTSUPP;
#else /* PRISM2_NO_STATION_MODES */
@ -1339,8 +1363,9 @@ static int prism2_ioctl_giwpower(struct net_device *dev,
static int prism2_ioctl_siwretry(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rrq = &wrqu->retry;
struct hostap_interface *iface;
local_info_t *local;
@ -1400,8 +1425,9 @@ static int prism2_ioctl_siwretry(struct net_device *dev,
static int prism2_ioctl_giwretry(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rrq = &wrqu->retry;
struct hostap_interface *iface;
local_info_t *local;
__le16 shortretry, longretry, lifetime, altretry;
@ -1494,8 +1520,9 @@ static u16 prism2_txpower_dBm_to_hfa386x(int val)
static int prism2_ioctl_siwtxpow(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *rrq = &wrqu->txpower;
struct hostap_interface *iface;
local_info_t *local;
#ifdef RAW_TXPOWER_SETTING
@ -1575,9 +1602,10 @@ static int prism2_ioctl_siwtxpow(struct net_device *dev,
static int prism2_ioctl_giwtxpow(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rrq, char *extra)
union iwreq_data *wrqu, char *extra)
{
#ifdef RAW_TXPOWER_SETTING
struct iw_param *rrq = &wrqu->txpower;
struct hostap_interface *iface;
local_info_t *local;
u16 resp0;
@ -1710,8 +1738,9 @@ static inline int prism2_request_scan(struct net_device *dev)
static int prism2_ioctl_siwscan(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
int ret;
@ -2057,8 +2086,9 @@ static inline int prism2_ioctl_giwscan_sta(struct net_device *dev,
static int prism2_ioctl_giwscan(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface;
local_info_t *local;
int res;
@ -2303,7 +2333,7 @@ static int prism2_ioctl_priv_inquire(struct net_device *dev, int *i)
static int prism2_ioctl_priv_prism2_param(struct net_device *dev,
struct iw_request_info *info,
void *wrqu, char *extra)
union iwreq_data *uwrq, char *extra)
{
struct hostap_interface *iface;
local_info_t *local;
@ -2654,7 +2684,7 @@ static int prism2_ioctl_priv_prism2_param(struct net_device *dev,
static int prism2_ioctl_priv_get_prism2_param(struct net_device *dev,
struct iw_request_info *info,
void *wrqu, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct hostap_interface *iface;
local_info_t *local;
@ -2841,7 +2871,7 @@ static int prism2_ioctl_priv_get_prism2_param(struct net_device *dev,
static int prism2_ioctl_priv_readmif(struct net_device *dev,
struct iw_request_info *info,
void *wrqu, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct hostap_interface *iface;
local_info_t *local;
@ -2862,7 +2892,7 @@ static int prism2_ioctl_priv_readmif(struct net_device *dev,
static int prism2_ioctl_priv_writemif(struct net_device *dev,
struct iw_request_info *info,
void *wrqu, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct hostap_interface *iface;
local_info_t *local;
@ -2885,7 +2915,7 @@ static int prism2_ioctl_priv_monitor(struct net_device *dev, int *i)
struct hostap_interface *iface;
local_info_t *local;
int ret = 0;
u32 mode;
union iwreq_data wrqu;
iface = netdev_priv(dev);
local = iface->local;
@ -2899,8 +2929,8 @@ static int prism2_ioctl_priv_monitor(struct net_device *dev, int *i)
if (*i == 0) {
/* Disable monitor mode - old mode was not saved, so go to
* Master mode */
mode = IW_MODE_MASTER;
ret = prism2_ioctl_siwmode(dev, NULL, &mode, NULL);
wrqu.mode = IW_MODE_MASTER;
ret = prism2_ioctl_siwmode(dev, NULL, &wrqu, NULL);
} else if (*i == 1) {
/* netlink socket mode is not supported anymore since it did
* not separate different devices from each other and was not
@ -2916,8 +2946,8 @@ static int prism2_ioctl_priv_monitor(struct net_device *dev, int *i)
local->monitor_type = PRISM2_MONITOR_PRISM;
break;
}
mode = IW_MODE_MONITOR;
ret = prism2_ioctl_siwmode(dev, NULL, &mode, NULL);
wrqu.mode = IW_MODE_MONITOR;
ret = prism2_ioctl_siwmode(dev, NULL, &wrqu, NULL);
hostap_monitor_mode_enable(local);
} else
ret = -EINVAL;
@ -3079,8 +3109,9 @@ static int prism2_set_genericelement(struct net_device *dev, u8 *elem,
static int prism2_ioctl_siwauth(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *data = &wrqu->param;
struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
@ -3145,8 +3176,9 @@ static int prism2_ioctl_siwauth(struct net_device *dev,
static int prism2_ioctl_giwauth(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_param *data = &wrqu->param;
struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
@ -3184,8 +3216,9 @@ static int prism2_ioctl_giwauth(struct net_device *dev,
static int prism2_ioctl_siwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *erq = &wrqu->encoding;
struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct iw_encode_ext *ext = (struct iw_encode_ext *) extra;
@ -3358,8 +3391,9 @@ static int prism2_ioctl_siwencodeext(struct net_device *dev,
static int prism2_ioctl_giwencodeext(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *erq = &wrqu->encoding;
struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
struct lib80211_crypt_data **crypt;
@ -3666,16 +3700,18 @@ static int prism2_ioctl_set_assoc_ap_addr(local_info_t *local,
static int prism2_ioctl_siwgenie(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *data = &wrqu->data;
return prism2_set_genericelement(dev, extra, data->length);
}
static int prism2_ioctl_giwgenie(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct iw_point *data = &wrqu->data;
struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
int len = local->generic_elem_len - 2;
@ -3713,7 +3749,7 @@ static int prism2_ioctl_set_generic_element(local_info_t *local,
static int prism2_ioctl_siwmlme(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
union iwreq_data *wrqu, char *extra)
{
struct hostap_interface *iface = netdev_priv(dev);
local_info_t *local = iface->local;
@ -3864,70 +3900,56 @@ const struct ethtool_ops prism2_ethtool_ops = {
static const iw_handler prism2_handler[] =
{
(iw_handler) NULL, /* SIOCSIWCOMMIT */
(iw_handler) prism2_get_name, /* SIOCGIWNAME */
(iw_handler) NULL, /* SIOCSIWNWID */
(iw_handler) NULL, /* SIOCGIWNWID */
(iw_handler) prism2_ioctl_siwfreq, /* SIOCSIWFREQ */
(iw_handler) prism2_ioctl_giwfreq, /* SIOCGIWFREQ */
(iw_handler) prism2_ioctl_siwmode, /* SIOCSIWMODE */
(iw_handler) prism2_ioctl_giwmode, /* SIOCGIWMODE */
(iw_handler) prism2_ioctl_siwsens, /* SIOCSIWSENS */
(iw_handler) prism2_ioctl_giwsens, /* SIOCGIWSENS */
(iw_handler) NULL /* not used */, /* SIOCSIWRANGE */
(iw_handler) prism2_ioctl_giwrange, /* SIOCGIWRANGE */
(iw_handler) NULL /* not used */, /* SIOCSIWPRIV */
(iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */
(iw_handler) NULL /* not used */, /* SIOCSIWSTATS */
(iw_handler) NULL /* kernel code */, /* SIOCGIWSTATS */
iw_handler_set_spy, /* SIOCSIWSPY */
iw_handler_get_spy, /* SIOCGIWSPY */
iw_handler_set_thrspy, /* SIOCSIWTHRSPY */
iw_handler_get_thrspy, /* SIOCGIWTHRSPY */
(iw_handler) prism2_ioctl_siwap, /* SIOCSIWAP */
(iw_handler) prism2_ioctl_giwap, /* SIOCGIWAP */
(iw_handler) prism2_ioctl_siwmlme, /* SIOCSIWMLME */
(iw_handler) prism2_ioctl_giwaplist, /* SIOCGIWAPLIST */
(iw_handler) prism2_ioctl_siwscan, /* SIOCSIWSCAN */
(iw_handler) prism2_ioctl_giwscan, /* SIOCGIWSCAN */
(iw_handler) prism2_ioctl_siwessid, /* SIOCSIWESSID */
(iw_handler) prism2_ioctl_giwessid, /* SIOCGIWESSID */
(iw_handler) prism2_ioctl_siwnickn, /* SIOCSIWNICKN */
(iw_handler) prism2_ioctl_giwnickn, /* SIOCGIWNICKN */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) prism2_ioctl_siwrate, /* SIOCSIWRATE */
(iw_handler) prism2_ioctl_giwrate, /* SIOCGIWRATE */
(iw_handler) prism2_ioctl_siwrts, /* SIOCSIWRTS */
(iw_handler) prism2_ioctl_giwrts, /* SIOCGIWRTS */
(iw_handler) prism2_ioctl_siwfrag, /* SIOCSIWFRAG */
(iw_handler) prism2_ioctl_giwfrag, /* SIOCGIWFRAG */
(iw_handler) prism2_ioctl_siwtxpow, /* SIOCSIWTXPOW */
(iw_handler) prism2_ioctl_giwtxpow, /* SIOCGIWTXPOW */
(iw_handler) prism2_ioctl_siwretry, /* SIOCSIWRETRY */
(iw_handler) prism2_ioctl_giwretry, /* SIOCGIWRETRY */
(iw_handler) prism2_ioctl_siwencode, /* SIOCSIWENCODE */
(iw_handler) prism2_ioctl_giwencode, /* SIOCGIWENCODE */
(iw_handler) prism2_ioctl_siwpower, /* SIOCSIWPOWER */
(iw_handler) prism2_ioctl_giwpower, /* SIOCGIWPOWER */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) prism2_ioctl_siwgenie, /* SIOCSIWGENIE */
(iw_handler) prism2_ioctl_giwgenie, /* SIOCGIWGENIE */
(iw_handler) prism2_ioctl_siwauth, /* SIOCSIWAUTH */
(iw_handler) prism2_ioctl_giwauth, /* SIOCGIWAUTH */
(iw_handler) prism2_ioctl_siwencodeext, /* SIOCSIWENCODEEXT */
(iw_handler) prism2_ioctl_giwencodeext, /* SIOCGIWENCODEEXT */
(iw_handler) NULL, /* SIOCSIWPMKSA */
(iw_handler) NULL, /* -- hole -- */
IW_HANDLER(SIOCGIWNAME, prism2_get_name),
IW_HANDLER(SIOCSIWFREQ, prism2_ioctl_siwfreq),
IW_HANDLER(SIOCGIWFREQ, prism2_ioctl_giwfreq),
IW_HANDLER(SIOCSIWMODE, prism2_ioctl_siwmode),
IW_HANDLER(SIOCGIWMODE, prism2_ioctl_giwmode),
IW_HANDLER(SIOCSIWSENS, prism2_ioctl_siwsens),
IW_HANDLER(SIOCGIWSENS, prism2_ioctl_giwsens),
IW_HANDLER(SIOCGIWRANGE, prism2_ioctl_giwrange),
IW_HANDLER(SIOCSIWSPY, iw_handler_set_spy),
IW_HANDLER(SIOCGIWSPY, iw_handler_get_spy),
IW_HANDLER(SIOCSIWTHRSPY, iw_handler_set_thrspy),
IW_HANDLER(SIOCGIWTHRSPY, iw_handler_get_thrspy),
IW_HANDLER(SIOCSIWAP, prism2_ioctl_siwap),
IW_HANDLER(SIOCGIWAP, prism2_ioctl_giwap),
IW_HANDLER(SIOCSIWMLME, prism2_ioctl_siwmlme),
IW_HANDLER(SIOCGIWAPLIST, prism2_ioctl_giwaplist),
IW_HANDLER(SIOCSIWSCAN, prism2_ioctl_siwscan),
IW_HANDLER(SIOCGIWSCAN, prism2_ioctl_giwscan),
IW_HANDLER(SIOCSIWESSID, prism2_ioctl_siwessid),
IW_HANDLER(SIOCGIWESSID, prism2_ioctl_giwessid),
IW_HANDLER(SIOCSIWNICKN, prism2_ioctl_siwnickn),
IW_HANDLER(SIOCGIWNICKN, prism2_ioctl_giwnickn),
IW_HANDLER(SIOCSIWRATE, prism2_ioctl_siwrate),
IW_HANDLER(SIOCGIWRATE, prism2_ioctl_giwrate),
IW_HANDLER(SIOCSIWRTS, prism2_ioctl_siwrts),
IW_HANDLER(SIOCGIWRTS, prism2_ioctl_giwrts),
IW_HANDLER(SIOCSIWFRAG, prism2_ioctl_siwfrag),
IW_HANDLER(SIOCGIWFRAG, prism2_ioctl_giwfrag),
IW_HANDLER(SIOCSIWTXPOW, prism2_ioctl_siwtxpow),
IW_HANDLER(SIOCGIWTXPOW, prism2_ioctl_giwtxpow),
IW_HANDLER(SIOCSIWRETRY, prism2_ioctl_siwretry),
IW_HANDLER(SIOCGIWRETRY, prism2_ioctl_giwretry),
IW_HANDLER(SIOCSIWENCODE, prism2_ioctl_siwencode),
IW_HANDLER(SIOCGIWENCODE, prism2_ioctl_giwencode),
IW_HANDLER(SIOCSIWPOWER, prism2_ioctl_siwpower),
IW_HANDLER(SIOCGIWPOWER, prism2_ioctl_giwpower),
IW_HANDLER(SIOCSIWGENIE, prism2_ioctl_siwgenie),
IW_HANDLER(SIOCGIWGENIE, prism2_ioctl_giwgenie),
IW_HANDLER(SIOCSIWAUTH, prism2_ioctl_siwauth),
IW_HANDLER(SIOCGIWAUTH, prism2_ioctl_giwauth),
IW_HANDLER(SIOCSIWENCODEEXT, prism2_ioctl_siwencodeext),
IW_HANDLER(SIOCGIWENCODEEXT, prism2_ioctl_giwencodeext),
};
static const iw_handler prism2_private_handler[] =
{ /* SIOCIWFIRSTPRIV + */
(iw_handler) prism2_ioctl_priv_prism2_param, /* 0 */
(iw_handler) prism2_ioctl_priv_get_prism2_param, /* 1 */
(iw_handler) prism2_ioctl_priv_writemif, /* 2 */
(iw_handler) prism2_ioctl_priv_readmif, /* 3 */
{ /* SIOCIWFIRSTPRIV + */
prism2_ioctl_priv_prism2_param, /* 0 */
prism2_ioctl_priv_get_prism2_param, /* 1 */
prism2_ioctl_priv_writemif, /* 2 */
prism2_ioctl_priv_readmif, /* 3 */
};
const struct iw_handler_def hostap_iw_handler_def =
@ -3935,8 +3957,8 @@ const struct iw_handler_def hostap_iw_handler_def =
.num_standard = ARRAY_SIZE(prism2_handler),
.num_private = ARRAY_SIZE(prism2_private_handler),
.num_private_args = ARRAY_SIZE(prism2_priv),
.standard = (iw_handler *) prism2_handler,
.private = (iw_handler *) prism2_private_handler,
.standard = prism2_handler,
.private = prism2_private_handler,
.private_args = (struct iw_priv_args *) prism2_priv,
.get_wireless_stats = hostap_get_wireless_stats,
};