Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/bsd/wpa/dist/src/drivers If an interface is removed...



details:   https://anonhg.NetBSD.org/src/rev/cd9fbe9d40a0
branches:  trunk
changeset: 343037:cd9fbe9d40a0
user:      roy <roy%NetBSD.org@localhost>
date:      Wed Jan 20 14:43:40 2016 +0000

description:
If an interface is removed, zero the remembered ifindex.
Don't try to set properties on the interface when it is removed.

diffstat:

 external/bsd/wpa/dist/src/drivers/driver_bsd.c |  26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 deletions(-)

diffs (60 lines):

diff -r d9cc60047903 -r cd9fbe9d40a0 external/bsd/wpa/dist/src/drivers/driver_bsd.c
--- a/external/bsd/wpa/dist/src/drivers/driver_bsd.c    Wed Jan 20 12:49:21 2016 +0000
+++ b/external/bsd/wpa/dist/src/drivers/driver_bsd.c    Wed Jan 20 14:43:40 2016 +0000
@@ -94,6 +94,9 @@
        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 @@
 {
        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 @@
                switch (ifan->ifan_what) {
                case IFAN_DEPARTURE:
                        event.interface_status.ievent = EVENT_INTERFACE_REMOVED;
+                       drv->ifindex = 0;
                        break;
                default:
                        return;
@@ -1578,16 +1583,21 @@
 {
        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);



Home | Main Index | Thread Index | Old Index