Wed Jan 29 11:31:40 2020 UTC ()
wpa: Driver does not need to know about both wpa and hostap contexts

It will either be one or the other.
Fold hapd into ctx to match other drivers.


(roy)
diff -r1.30 -r1.31 src/external/bsd/wpa/dist/src/drivers/driver_bsd.c

cvs diff -r1.30 -r1.31 src/external/bsd/wpa/dist/src/drivers/driver_bsd.c (expand / switch to unified diff)

--- src/external/bsd/wpa/dist/src/drivers/driver_bsd.c 2019/04/10 17:48:07 1.30
+++ src/external/bsd/wpa/dist/src/drivers/driver_bsd.c 2020/01/29 11:31:40 1.31
@@ -48,34 +48,33 @@ @@ -48,34 +48,33 @@
48#include "l2_packet/l2_packet.h" 48#include "l2_packet/l2_packet.h"
49 49
50struct bsd_driver_global { 50struct bsd_driver_global {
51 void *ctx; 51 void *ctx;
52 int sock; /* socket for 802.11 ioctls */ 52 int sock; /* socket for 802.11 ioctls */
53 int route; /* routing socket for events */ 53 int route; /* routing socket for events */
54 struct iovec event_iov[1]; 54 struct iovec event_iov[1];
55 struct dl_list ifaces; /* list of interfaces */ 55 struct dl_list ifaces; /* list of interfaces */
56}; 56};
57 57
58struct bsd_driver_data { 58struct bsd_driver_data {
59 struct dl_list list; 59 struct dl_list list;
60 struct bsd_driver_global *global; 60 struct bsd_driver_global *global;
61 struct hostapd_data *hapd; /* back pointer */ 61 void *ctx;
62 62
63 struct l2_packet_data *sock_xmit;/* raw packet xmit socket */ 63 struct l2_packet_data *sock_xmit;/* raw packet xmit socket */
64 char ifname[IFNAMSIZ+1]; /* interface name */ 64 char ifname[IFNAMSIZ+1]; /* interface name */
65 int flags; 65 int flags;
66 unsigned int ifindex; /* interface index */ 66 unsigned int ifindex; /* interface index */
67 int if_removed; /* has the interface been removed? */ 67 int if_removed; /* has the interface been removed? */
68 void *ctx; 
69 struct wpa_driver_capa capa; /* driver capability */ 68 struct wpa_driver_capa capa; /* driver capability */
70 int is_ap; /* Access point mode */ 69 int is_ap; /* Access point mode */
71 int prev_roaming; /* roaming state to restore on deinit */ 70 int prev_roaming; /* roaming state to restore on deinit */
72 int prev_privacy; /* privacy state to restore on deinit */ 71 int prev_privacy; /* privacy state to restore on deinit */
73 int prev_wpa; /* wpa state to restore on deinit */ 72 int prev_wpa; /* wpa state to restore on deinit */
74 enum ieee80211_opmode opmode; /* operation mode */ 73 enum ieee80211_opmode opmode; /* operation mode */
75}; 74};
76 75
77/* Generic functions for hostapd and wpa_supplicant */ 76/* Generic functions for hostapd and wpa_supplicant */
78 77
79#define IOVEC_BUFSIZ 256 78#define IOVEC_BUFSIZ 256
80ssize_t 79ssize_t
81recvmsg_realloc(int fd, struct msghdr *msg, int flags) 80recvmsg_realloc(int fd, struct msghdr *msg, int flags)
@@ -833,81 +832,81 @@ bsd_wireless_event_receive(int sock, voi @@ -833,81 +832,81 @@ bsd_wireless_event_receive(int sock, voi
833 case RTM_IEEE80211: 832 case RTM_IEEE80211:
834 ifan = (struct if_announcemsghdr *) rtm; 833 ifan = (struct if_announcemsghdr *) rtm;
835 drv = bsd_get_drvindex(global, ifan->ifan_index); 834 drv = bsd_get_drvindex(global, ifan->ifan_index);
836 if (drv == NULL) 835 if (drv == NULL)
837 return; 836 return;
838 switch (ifan->ifan_what) { 837 switch (ifan->ifan_what) {
839 case RTM_IEEE80211_ASSOC: 838 case RTM_IEEE80211_ASSOC:
840 case RTM_IEEE80211_REASSOC: 839 case RTM_IEEE80211_REASSOC:
841 case RTM_IEEE80211_DISASSOC: 840 case RTM_IEEE80211_DISASSOC:
842 case RTM_IEEE80211_SCAN: 841 case RTM_IEEE80211_SCAN:
843 break; 842 break;
844 case RTM_IEEE80211_LEAVE: 843 case RTM_IEEE80211_LEAVE:
845 leave = (struct ieee80211_leave_event *) &ifan[1]; 844 leave = (struct ieee80211_leave_event *) &ifan[1];
846 drv_event_disassoc(drv->hapd, leave->iev_addr); 845 drv_event_disassoc(drv->ctx, leave->iev_addr);
847 break; 846 break;
848 case RTM_IEEE80211_JOIN: 847 case RTM_IEEE80211_JOIN:
849#ifdef RTM_IEEE80211_REJOIN 848#ifdef RTM_IEEE80211_REJOIN
850 case RTM_IEEE80211_REJOIN: 849 case RTM_IEEE80211_REJOIN:
851#endif 850#endif
852 join = (struct ieee80211_join_event *) &ifan[1]; 851 join = (struct ieee80211_join_event *) &ifan[1];
853 bsd_new_sta(drv, drv->hapd, join->iev_addr); 852 bsd_new_sta(drv, drv->ctx, join->iev_addr);
854 break; 853 break;
855 case RTM_IEEE80211_REPLAY: 854 case RTM_IEEE80211_REPLAY:
856 /* ignore */ 855 /* ignore */
857 break; 856 break;
858 case RTM_IEEE80211_MICHAEL: 857 case RTM_IEEE80211_MICHAEL:
859 mic = (struct ieee80211_michael_event *) &ifan[1]; 858 mic = (struct ieee80211_michael_event *) &ifan[1];
860 wpa_printf(MSG_DEBUG, 859 wpa_printf(MSG_DEBUG,
861 "Michael MIC failure wireless event: " 860 "Michael MIC failure wireless event: "
862 "keyix=%u src_addr=" MACSTR, mic->iev_keyix, 861 "keyix=%u src_addr=" MACSTR, mic->iev_keyix,
863 MAC2STR(mic->iev_src)); 862 MAC2STR(mic->iev_src));
864 os_memset(&data, 0, sizeof(data)); 863 os_memset(&data, 0, sizeof(data));
865 data.michael_mic_failure.unicast = 1; 864 data.michael_mic_failure.unicast = 1;
866 data.michael_mic_failure.src = mic->iev_src; 865 data.michael_mic_failure.src = mic->iev_src;
867 wpa_supplicant_event(drv->hapd, 866 wpa_supplicant_event(drv->ctx,
868 EVENT_MICHAEL_MIC_FAILURE, &data); 867 EVENT_MICHAEL_MIC_FAILURE, &data);
869 break; 868 break;
870 } 869 }
871 break; 870 break;
872 } 871 }
873} 872}
874 873
875static void 874static void
876handle_read(void *ctx, const u8 *src_addr, const u8 *buf, size_t len) 875handle_read(void *ctx, const u8 *src_addr, const u8 *buf, size_t len)
877{ 876{
878 struct bsd_driver_data *drv = ctx; 877 struct bsd_driver_data *drv = ctx;
879 drv_event_eapol_rx(drv->hapd, src_addr, buf, len); 878 drv_event_eapol_rx(drv->ctx, src_addr, buf, len);
880} 879}
881 880
882static void * 881static void *
883bsd_init(struct hostapd_data *hapd, struct wpa_init_params *params) 882bsd_init(struct hostapd_data *hapd, struct wpa_init_params *params)
884{ 883{
885 struct bsd_driver_data *drv; 884 struct bsd_driver_data *drv;
886 885
887 drv = os_zalloc(sizeof(struct bsd_driver_data)); 886 drv = os_zalloc(sizeof(struct bsd_driver_data));
888 if (drv == NULL) { 887 if (drv == NULL) {
889 wpa_printf(MSG_ERROR, "Could not allocate memory for bsd driver data"); 888 wpa_printf(MSG_ERROR, "Could not allocate memory for bsd driver data");
890 return NULL; 889 return NULL;
891 } 890 }
892 891
893 drv->ifindex = if_nametoindex(params->ifname); 892 drv->ifindex = if_nametoindex(params->ifname);
894 if (drv->ifindex == 0) { 893 if (drv->ifindex == 0) {
895 wpa_printf(MSG_DEBUG, "%s: interface %s does not exist", 894 wpa_printf(MSG_DEBUG, "%s: interface %s does not exist",
896 __func__, params->ifname); 895 __func__, params->ifname);
897 goto bad; 896 goto bad;
898 } 897 }
899 898
900 drv->hapd = hapd; 899 drv->ctx = hapd;
901 drv->global = params->global_priv; 900 drv->global = params->global_priv;
902 os_strlcpy(drv->ifname, params->ifname, sizeof(drv->ifname)); 901 os_strlcpy(drv->ifname, params->ifname, sizeof(drv->ifname));
903 902
904 drv->sock_xmit = l2_packet_init(drv->ifname, NULL, ETH_P_EAPOL, 903 drv->sock_xmit = l2_packet_init(drv->ifname, NULL, ETH_P_EAPOL,
905 handle_read, drv, 0); 904 handle_read, drv, 0);
906 if (drv->sock_xmit == NULL) 905 if (drv->sock_xmit == NULL)
907 goto bad; 906 goto bad;
908 if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr)) 907 if (l2_packet_get_own_addr(drv->sock_xmit, params->own_addr))
909 goto bad; 908 goto bad;
910 909
911 /* mark down during setup */ 910 /* mark down during setup */
912 if (bsd_ctrl_iface(drv, 0) < 0) 911 if (bsd_ctrl_iface(drv, 0) < 0)
913 goto bad; 912 goto bad;