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 Use the interface index fr...



details:   https://anonhg.NetBSD.org/src/rev/9580b55851a1
branches:  trunk
changeset: 813167:9580b55851a1
user:      roy <roy%NetBSD.org@localhost>
date:      Tue Jan 19 16:47:44 2016 +0000

description:
Use the interface index from the correc structure according to the message
to find the driver instead of assuming that rtm_index is corect.

diffstat:

 external/bsd/wpa/dist/src/drivers/driver_bsd.c |  41 +++++++++++++++----------
 1 files changed, 24 insertions(+), 17 deletions(-)

diffs (123 lines):

diff -r 404759785d4b -r 9580b55851a1 external/bsd/wpa/dist/src/drivers/driver_bsd.c
--- a/external/bsd/wpa/dist/src/drivers/driver_bsd.c    Tue Jan 19 15:49:07 2016 +0000
+++ b/external/bsd/wpa/dist/src/drivers/driver_bsd.c    Tue Jan 19 16:47:44 2016 +0000
@@ -777,12 +777,12 @@
                           rtm->rtm_version);
                return;
        }
-       drv = bsd_get_drvindex(global, rtm->rtm_index);
-       if (drv == NULL)
-               return;
        switch (rtm->rtm_type) {
        case RTM_IEEE80211:
                ifan = (struct if_announcemsghdr *) rtm;
+               drv = bsd_get_drvindex(global, ifan->ifan_index);
+               if (drv == NULL)
+                       return;
                switch (ifan->ifan_what) {
                case RTM_IEEE80211_ASSOC:
                case RTM_IEEE80211_REASSOC:
@@ -1214,14 +1214,13 @@
                           rtm->rtm_version);
                return;
        }
-       drv = bsd_get_drvindex(global, rtm->rtm_index);
-       if (drv == NULL)
-               return;
-       ctx = drv->ctx;
        os_memset(&event, 0, sizeof(event));
        switch (rtm->rtm_type) {
        case RTM_IFANNOUNCE:
                ifan = (struct if_announcemsghdr *) rtm;
+               drv = bsd_get_drvindex(global, ifan->ifan_index);
+               if (drv == NULL)
+                       return;
                os_strlcpy(event.interface_status.ifname, drv->ifname,
                           sizeof(event.interface_status.ifname));
                switch (ifan->ifan_what) {
@@ -1239,37 +1238,40 @@
                           event.interface_status.ifname,
                           ifan->ifan_what == IFAN_DEPARTURE ?
                                "removed" : "added");
-               wpa_supplicant_event(ctx, EVENT_INTERFACE_STATUS, &event);
+               wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS, &event);
                return;
        case RTM_IEEE80211:
                ifan = (struct if_announcemsghdr *) rtm;
+               drv = bsd_get_drvindex(global, ifan->ifan_index);
+               if (drv == NULL)
+                       return;
                switch (ifan->ifan_what) {
                case RTM_IEEE80211_ASSOC:
                case RTM_IEEE80211_REASSOC:
                        if (drv->is_ap)
                                break;
-                       wpa_supplicant_event(ctx, EVENT_ASSOC, NULL);
+                       wpa_supplicant_event(drv->ctx, EVENT_ASSOC, NULL);
                        break;
                case RTM_IEEE80211_DISASSOC:
                        if (drv->is_ap)
                                break;
-                       wpa_supplicant_event(ctx, EVENT_DISASSOC, NULL);
+                       wpa_supplicant_event(drv->ctx, EVENT_DISASSOC, NULL);
                        break;
                case RTM_IEEE80211_SCAN:
                        if (drv->is_ap)
                                break;
-                       wpa_supplicant_event(ctx, EVENT_SCAN_RESULTS, NULL);
+                       wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS, NULL);
                        break;
                case RTM_IEEE80211_LEAVE:
                        leave = (struct ieee80211_leave_event *) &ifan[1];
-                       drv_event_disassoc(ctx, leave->iev_addr);
+                       drv_event_disassoc(drv->ctx, leave->iev_addr);
                        break;
                case RTM_IEEE80211_JOIN:
 #ifdef RTM_IEEE80211_REJOIN
                case RTM_IEEE80211_REJOIN:
 #endif
                        join = (struct ieee80211_join_event *) &ifan[1];
-                       bsd_new_sta(drv, ctx, join->iev_addr);
+                       bsd_new_sta(drv, drv->ctx, join->iev_addr);
                        break;
                case RTM_IEEE80211_REPLAY:
                        /* ignore */
@@ -1284,13 +1286,16 @@
                        os_memset(&event, 0, sizeof(event));
                        event.michael_mic_failure.unicast =
                                !IEEE80211_IS_MULTICAST(mic->iev_dst);
-                       wpa_supplicant_event(ctx, EVENT_MICHAEL_MIC_FAILURE,
-                               &event);
+                       wpa_supplicant_event(drv->ctx,
+                               EVENT_MICHAEL_MIC_FAILURE, &event);
                        break;
                }
                break;
        case RTM_IFINFO:
                ifm = (struct if_msghdr *) rtm;
+               drv = bsd_get_drvindex(global, ifm->ifm_index);
+               if (drv == NULL)
+                       return;
                if ((ifm->ifm_flags & IFF_UP) == 0 &&
                    (drv->flags & IFF_UP) != 0) {
                        os_strlcpy(event.interface_status.ifname, drv->ifname,
@@ -1298,7 +1303,8 @@
                        event.interface_status.ievent = EVENT_INTERFACE_REMOVED;
                        wpa_printf(MSG_DEBUG, "RTM_IFINFO: Interface '%s' DOWN",
                                   event.interface_status.ifname);
-                       wpa_supplicant_event(ctx, EVENT_INTERFACE_STATUS, &event);
+                       wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS,
+                                            &event);
                } else if ((ifm->ifm_flags & IFF_UP) != 0 &&
                    (drv->flags & IFF_UP) == 0) {
                        os_strlcpy(event.interface_status.ifname, drv->ifname,
@@ -1306,7 +1312,8 @@
                        event.interface_status.ievent = EVENT_INTERFACE_ADDED;
                        wpa_printf(MSG_DEBUG, "RTM_IFINFO: Interface '%s' UP",
                                   event.interface_status.ifname);
-                       wpa_supplicant_event(ctx, EVENT_INTERFACE_STATUS, &event);
+                       wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_STATUS,
+                                            &event);
                } else {
                        os_strlcpy(event.interface_status.ifname, drv->ifname,
                                sizeof(event.interface_status.ifname));



Home | Main Index | Thread Index | Old Index