atheros: Add more robust and complete debug info for ioctl failures
This commit is contained in:
parent
a317d8520e
commit
9b74812032
1 changed files with 110 additions and 36 deletions
|
@ -69,6 +69,108 @@ struct madwifi_driver_data {
|
|||
static int madwifi_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
|
||||
int reason_code);
|
||||
|
||||
static const char * athr_get_ioctl_name(int op)
|
||||
{
|
||||
switch (op) {
|
||||
case IEEE80211_IOCTL_SETPARAM:
|
||||
return "SETPARAM";
|
||||
case IEEE80211_IOCTL_GETPARAM:
|
||||
return "GETPARAM";
|
||||
case IEEE80211_IOCTL_SETKEY:
|
||||
return "SETKEY";
|
||||
case IEEE80211_IOCTL_SETWMMPARAMS:
|
||||
return "SETWMMPARAMS";
|
||||
case IEEE80211_IOCTL_DELKEY:
|
||||
return "DELKEY";
|
||||
case IEEE80211_IOCTL_GETWMMPARAMS:
|
||||
return "GETWMMPARAMS";
|
||||
case IEEE80211_IOCTL_SETMLME:
|
||||
return "SETMLME";
|
||||
case IEEE80211_IOCTL_GETCHANINFO:
|
||||
return "GETCHANINFO";
|
||||
case IEEE80211_IOCTL_SETOPTIE:
|
||||
return "SETOPTIE";
|
||||
case IEEE80211_IOCTL_GETOPTIE:
|
||||
return "GETOPTIE";
|
||||
case IEEE80211_IOCTL_ADDMAC:
|
||||
return "ADDMAC";
|
||||
case IEEE80211_IOCTL_DELMAC:
|
||||
return "DELMAC";
|
||||
case IEEE80211_IOCTL_GETCHANLIST:
|
||||
return "GETCHANLIST";
|
||||
case IEEE80211_IOCTL_SETCHANLIST:
|
||||
return "SETCHANLIST";
|
||||
case IEEE80211_IOCTL_KICKMAC:
|
||||
return "KICKMAC";
|
||||
case IEEE80211_IOCTL_CHANSWITCH:
|
||||
return "CHANSWITCH";
|
||||
case IEEE80211_IOCTL_GETMODE:
|
||||
return "GETMODE";
|
||||
case IEEE80211_IOCTL_SETMODE:
|
||||
return "SETMODE";
|
||||
case IEEE80211_IOCTL_GET_APPIEBUF:
|
||||
return "GET_APPIEBUF";
|
||||
case IEEE80211_IOCTL_SET_APPIEBUF:
|
||||
return "SET_APPIEBUF";
|
||||
case IEEE80211_IOCTL_SET_ACPARAMS:
|
||||
return "SET_ACPARAMS";
|
||||
case IEEE80211_IOCTL_FILTERFRAME:
|
||||
return "FILTERFRAME";
|
||||
case IEEE80211_IOCTL_SET_RTPARAMS:
|
||||
return "SET_RTPARAMS";
|
||||
case IEEE80211_IOCTL_SENDADDBA:
|
||||
return "SENDADDBA";
|
||||
case IEEE80211_IOCTL_GETADDBASTATUS:
|
||||
return "GETADDBASTATUS";
|
||||
case IEEE80211_IOCTL_SENDDELBA:
|
||||
return "SENDDELBA";
|
||||
case IEEE80211_IOCTL_SET_MEDENYENTRY:
|
||||
return "SET_MEDENYENTRY";
|
||||
case IEEE80211_IOCTL_SET_ADDBARESP:
|
||||
return "SET_ADDBARESP";
|
||||
case IEEE80211_IOCTL_GET_MACADDR:
|
||||
return "GET_MACADDR";
|
||||
case IEEE80211_IOCTL_SET_HBRPARAMS:
|
||||
return "SET_HBRPARAMS";
|
||||
case IEEE80211_IOCTL_SET_RXTIMEOUT:
|
||||
return "SET_RXTIMEOUT";
|
||||
case IEEE80211_IOCTL_STA_STATS:
|
||||
return "STA_STATS";
|
||||
case IEEE80211_IOCTL_GETWPAIE:
|
||||
return "GETWPAIE";
|
||||
default:
|
||||
return "??";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static const char * athr_get_param_name(int op)
|
||||
{
|
||||
switch (op) {
|
||||
case IEEE80211_IOC_MCASTCIPHER:
|
||||
return "MCASTCIPHER";
|
||||
case IEEE80211_PARAM_MCASTKEYLEN:
|
||||
return "MCASTKEYLEN";
|
||||
case IEEE80211_PARAM_UCASTCIPHERS:
|
||||
return "UCASTCIPHERS";
|
||||
case IEEE80211_PARAM_KEYMGTALGS:
|
||||
return "KEYMGTALGS";
|
||||
case IEEE80211_PARAM_RSNCAPS:
|
||||
return "RSNCAPS";
|
||||
case IEEE80211_PARAM_WPA:
|
||||
return "WPA";
|
||||
case IEEE80211_PARAM_AUTHMODE:
|
||||
return "AUTHMODE";
|
||||
case IEEE80211_PARAM_PRIVACY:
|
||||
return "PRIVACY";
|
||||
case IEEE80211_PARAM_COUNTERMEASURES:
|
||||
return "COUNTERMEASURES";
|
||||
default:
|
||||
return "??";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
set80211priv(struct madwifi_driver_data *drv, int op, void *data, int len)
|
||||
{
|
||||
|
@ -98,40 +200,11 @@ set80211priv(struct madwifi_driver_data *drv, int op, void *data, int len)
|
|||
}
|
||||
|
||||
if (ioctl(drv->ioctl_sock, op, &iwr) < 0) {
|
||||
int first = IEEE80211_IOCTL_SETPARAM;
|
||||
static const char *opnames[] = {
|
||||
"ioctl[IEEE80211_IOCTL_SETPARAM]",
|
||||
"ioctl[IEEE80211_IOCTL_GETPARAM]",
|
||||
"ioctl[IEEE80211_IOCTL_SETKEY]",
|
||||
"ioctl[IEEE80211_IOCTL_SETWMMPARAMS]",
|
||||
"ioctl[IEEE80211_IOCTL_DELKEY]",
|
||||
"ioctl[IEEE80211_IOCTL_GETWMMPARAMS]",
|
||||
"ioctl[IEEE80211_IOCTL_SETMLME]",
|
||||
"ioctl[IEEE80211_IOCTL_GETCHANINFO]",
|
||||
"ioctl[IEEE80211_IOCTL_SETOPTIE]",
|
||||
"ioctl[IEEE80211_IOCTL_GETOPTIE]",
|
||||
"ioctl[IEEE80211_IOCTL_ADDMAC]",
|
||||
"ioctl[IEEE80211_IOCTL_DELMAC]",
|
||||
"ioctl[IEEE80211_IOCTL_GETCHANLIST]",
|
||||
"ioctl[IEEE80211_IOCTL_SETCHANLIST]",
|
||||
"ioctl[IEEE80211_IOCTL_KICKMAC]",
|
||||
"ioctl[IEEE80211_IOCTL_CHANSWITCH]",
|
||||
"ioctl[IEEE80211_IOCTL_GETMODE]",
|
||||
"ioctl[IEEE80211_IOCTL_SETMODE]",
|
||||
"ioctl[IEEE80211_IOCTL_GET_APPIEBUF]",
|
||||
"ioctl[IEEE80211_IOCTL_SET_APPIEBUF]",
|
||||
NULL,
|
||||
"ioctl[IEEE80211_IOCTL_FILTERFRAME]",
|
||||
};
|
||||
int idx = op - first;
|
||||
if (first <= op &&
|
||||
idx < (int) (sizeof(opnames) / sizeof(opnames[0])) &&
|
||||
opnames[idx])
|
||||
perror(opnames[idx]);
|
||||
else {
|
||||
perror("ioctl[unknown???]");
|
||||
wpa_printf(MSG_DEBUG, "Failed ioctl: 0x%x", op);
|
||||
}
|
||||
wpa_printf(MSG_DEBUG, "atheros: %s: %s: ioctl op=0x%x "
|
||||
"(%s) len=%d failed: %d (%s)",
|
||||
__func__, drv->iface, op,
|
||||
athr_get_ioctl_name(op),
|
||||
len, errno, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -149,8 +222,9 @@ set80211param(struct madwifi_driver_data *drv, int op, int arg)
|
|||
|
||||
if (ioctl(drv->ioctl_sock, IEEE80211_IOCTL_SETPARAM, &iwr) < 0) {
|
||||
perror("ioctl[IEEE80211_IOCTL_SETPARAM]");
|
||||
wpa_printf(MSG_DEBUG, "%s: Failed to set parameter (op %d "
|
||||
"arg %d)", __func__, op, arg);
|
||||
wpa_printf(MSG_DEBUG, "%s: %s: Failed to set parameter (op %d "
|
||||
"(%s) arg %d)", __func__, drv->iface, op,
|
||||
athr_get_param_name(op), arg);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue