aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2009-11-24 10:43:35 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-11-24 10:43:35 -0800
commitaccc05ae1d88945230a42baa7844290d5272796e (patch)
tree020a61d828f165c4eb41937c8f56f8b5b8c77b74
parentbcb241da1ad1a134d8974cb1f238b7fd85261780 (diff)
parent0080c796226f35669a2b7ed0e58e4485323692ff (diff)
downloadwpa_supplicant-accc05ae1d88945230a42baa7844290d5272796e.tar.gz
am 0080c796: am aea96d8d: WEXT: Add "HANGED" processing
Merge commit '0080c796226f35669a2b7ed0e58e4485323692ff' * commit '0080c796226f35669a2b7ed0e58e4485323692ff': WEXT: Add "HANGED" processing
-rw-r--r--driver_wext.c19
-rw-r--r--driver_wext.h1
2 files changed, 17 insertions, 3 deletions
diff --git a/driver_wext.c b/driver_wext.c
index c75dd4a..3c50466 100644
--- a/driver_wext.c
+++ b/driver_wext.c
@@ -84,6 +84,7 @@ struct wpa_driver_wext_data {
char mlmedev[IFNAMSIZ + 1];
int scan_complete_events;
+ int errors;
};
@@ -1001,6 +1002,7 @@ void * wpa_driver_wext_init(void *ctx, const char *ifname)
drv->mlme_sock = -1;
+ drv->errors = 0;
wpa_driver_wext_finish_drv_init(drv);
return drv;
@@ -2542,11 +2544,15 @@ static int wpa_driver_priv_driver_cmd(void *priv, char *cmd, char *buf, size_t b
else if (os_strcasecmp(cmd, "STOP") == 0) {
if ((wpa_driver_wext_get_ifflags(drv, &flags) == 0) &&
(flags & IFF_UP)) {
- wpa_printf(MSG_ERROR, "WEXT: %s when iface is UP",
- cmd);
+ wpa_printf(MSG_ERROR, "WEXT: %s when iface is UP", cmd);
wpa_driver_wext_set_ifflags(drv, flags & ~IFF_UP);
}
}
+ else if( os_strcasecmp(cmd, "RELOAD") == 0 ) {
+ wpa_printf(MSG_DEBUG,"Reload command");
+ wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
+ return ret;
+ }
os_memset(&iwr, 0, sizeof(iwr));
os_strncpy(iwr.ifr_name, drv->ifname, IFNAMSIZ);
@@ -2558,9 +2564,16 @@ static int wpa_driver_priv_driver_cmd(void *priv, char *cmd, char *buf, size_t b
perror("ioctl[SIOCSIWPRIV]");
}
- if (ret < 0)
+ if (ret < 0) {
wpa_printf(MSG_ERROR, "%s failed", __func__);
+ drv->errors++;
+ if (drv->errors > WEXT_NUMBER_SEQUENTIAL_ERRORS) {
+ drv->errors = 0;
+ wpa_msg(drv->ctx, MSG_INFO, WPA_EVENT_DRIVER_STATE "HANGED");
+ }
+ }
else {
+ drv->errors = 0;
ret = 0;
if ((os_strcasecmp(cmd, "RSSI") == 0) ||
(os_strcasecmp(cmd, "LINKSPEED") == 0) ||
diff --git a/driver_wext.h b/driver_wext.h
index 4804ae5..cdd9246 100644
--- a/driver_wext.h
+++ b/driver_wext.h
@@ -52,6 +52,7 @@ int wpa_driver_wext_get_version(struct wpa_driver_wext_data *drv);
#define WPA_DRIVER_WEXT_WAIT_US 400000
#define MAX_DRV_CMD_SIZE 248
+#define WEXT_NUMBER_SEQUENTIAL_ERRORS 4
#endif
#endif /* DRIVER_WEXT_H */