Module Name: src Committed By: roy Date: Wed Jan 20 14:43:40 UTC 2016
Modified Files: src/external/bsd/wpa/dist/src/drivers: driver_bsd.c Log Message: If an interface is removed, zero the remembered ifindex. Don't try to set properties on the interface when it is removed. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/external/bsd/wpa/dist/src/drivers/driver_bsd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/wpa/dist/src/drivers/driver_bsd.c diff -u src/external/bsd/wpa/dist/src/drivers/driver_bsd.c:1.20 src/external/bsd/wpa/dist/src/drivers/driver_bsd.c:1.21 --- src/external/bsd/wpa/dist/src/drivers/driver_bsd.c:1.20 Tue Jan 19 18:09:09 2016 +++ src/external/bsd/wpa/dist/src/drivers/driver_bsd.c Wed Jan 20 14:43:40 2016 @@ -94,6 +94,9 @@ bsd_set80211(void *priv, int op, int val struct bsd_driver_data *drv = priv; struct ieee80211req ireq; + if (drv->ifindex == 0) + return -1; + os_memset(&ireq, 0, sizeof(ireq)); os_strlcpy(ireq.i_name, drv->ifname, sizeof(ireq.i_name)); ireq.i_type = op; @@ -884,7 +887,8 @@ bsd_deinit(void *priv) { struct bsd_driver_data *drv = priv; - bsd_ctrl_iface(drv, 0); + if (drv->ifindex != 0) + bsd_ctrl_iface(drv, 0); if (drv->sock_xmit != NULL) l2_packet_deinit(drv->sock_xmit); os_free(drv); @@ -1228,6 +1232,7 @@ wpa_driver_bsd_event_receive(int sock, v switch (ifan->ifan_what) { case IFAN_DEPARTURE: event.interface_status.ievent = EVENT_INTERFACE_REMOVED; + drv->ifindex = 0; break; default: return; @@ -1578,16 +1583,21 @@ wpa_driver_bsd_deinit(void *priv) { struct bsd_driver_data *drv = priv; - wpa_driver_bsd_set_wpa(drv, 0); + if (drv->ifindex != 0) { + wpa_driver_bsd_set_wpa(drv, 0); - /* NB: mark interface down */ - bsd_ctrl_iface(drv, 0); + /* NB: mark interface down */ + bsd_ctrl_iface(drv, 0); - wpa_driver_bsd_set_wpa_internal(drv, drv->prev_wpa, drv->prev_privacy); + wpa_driver_bsd_set_wpa_internal(drv, drv->prev_wpa, + drv->prev_privacy); - if (set80211param(drv, IEEE80211_IOC_ROAMING, drv->prev_roaming) < 0) - wpa_printf(MSG_DEBUG, "%s: failed to restore roaming state", - __func__); + if (set80211param(drv, IEEE80211_IOC_ROAMING, drv->prev_roaming) + < 0) + wpa_printf(MSG_DEBUG, + "%s: failed to restore roaming state", + __func__); + } if (drv->sock_xmit != NULL) l2_packet_deinit(drv->sock_xmit);