Lines Matching +full:addr +full:- +full:mode

3  * Copyright (c) 2003-2005, Jouni Malinen <j@w1.fi>
71 fc = le_to_host16(hdr->frame_control); in handle_data()
78 sa = hdr->addr2; in handle_data()
81 event.rx_from_unknown.addr = sa; in handle_data()
82 wpa_supplicant_event(drv->hapd, EVENT_RX_FROM_UNKNOWN, &event); in handle_data()
85 left = len - sizeof(*hdr); in handle_data()
97 left -= sizeof(rfc1042_header); in handle_data()
106 left -= 2; in handle_data()
109 drv_event_eapol_rx(drv->hapd, sa, pos, left); in handle_data()
127 fc = le_to_host16(hdr->frame_control); in handle_tx_callback()
132 event.tx_status.dst = hdr->addr1; in handle_tx_callback()
136 wpa_supplicant_event(drv->hapd, EVENT_TX_STATUS, &event); in handle_tx_callback()
157 fc = le_to_host16(hdr->frame_control); in handle_frame()
184 wpa_supplicant_event(drv->hapd, EVENT_RX_MGMT, &event); in handle_frame()
219 struct sockaddr_ll addr; in hostap_init_sockets() local
221 drv->sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); in hostap_init_sockets()
222 if (drv->sock < 0) { in hostap_init_sockets()
225 return -1; in hostap_init_sockets()
228 if (eloop_register_read_sock(drv->sock, handle_read, drv, NULL)) { in hostap_init_sockets()
230 return -1; in hostap_init_sockets()
235 drv->iface) >= (int) sizeof(ifr.ifr_name)) { in hostap_init_sockets()
237 return -1; in hostap_init_sockets()
239 if (ioctl(drv->sock, SIOCGIFINDEX, &ifr) != 0) { in hostap_init_sockets()
242 return -1; in hostap_init_sockets()
246 return -1; in hostap_init_sockets()
249 memset(&addr, 0, sizeof(addr)); in hostap_init_sockets()
250 addr.sll_family = AF_PACKET; in hostap_init_sockets()
251 addr.sll_ifindex = ifr.ifr_ifindex; in hostap_init_sockets()
253 addr.sll_ifindex); in hostap_init_sockets()
255 if (bind(drv->sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { in hostap_init_sockets()
257 return -1; in hostap_init_sockets()
260 return linux_get_ifhwaddr(drv->sock, drv->iface, own_addr); in hostap_init_sockets()
274 hdr->frame_control |= host_to_le16(BIT(1)); in hostap_send_mlme()
275 res = send(drv->sock, msg, len, 0); in hostap_send_mlme()
276 hdr->frame_control &= ~host_to_le16(BIT(1)); in hostap_send_mlme()
282 static int hostap_send_eapol(void *priv, const u8 *addr, const u8 *data, in hostap_send_eapol() argument
297 return -1; in hostap_send_eapol()
300 hdr->frame_control = in hostap_send_eapol()
302 hdr->frame_control |= host_to_le16(WLAN_FC_FROMDS); in hostap_send_eapol()
304 hdr->frame_control |= host_to_le16(WLAN_FC_ISWEP); in hostap_send_eapol()
305 memcpy(hdr->IEEE80211_DA_FROMDS, addr, ETH_ALEN); in hostap_send_eapol()
306 memcpy(hdr->IEEE80211_BSSID_FROMDS, own_addr, ETH_ALEN); in hostap_send_eapol()
307 memcpy(hdr->IEEE80211_SA_FROMDS, own_addr, ETH_ALEN); in hostap_send_eapol()
316 res = hostap_send_mlme(drv, (u8 *) hdr, len, 0, 0, NULL, 0, 0, 0, -1); in hostap_send_eapol()
318 wpa_printf(MSG_ERROR, "hostap_send_eapol - packet len: %lu - " in hostap_send_eapol()
328 static int hostap_sta_set_flags(void *priv, const u8 *addr, in hostap_sta_set_flags() argument
343 memcpy(param.sta_addr, addr, ETH_ALEN); in hostap_sta_set_flags()
356 if (os_snprintf(ifname, IFNAMSIZ, "%sap", drv->iface) >= IFNAMSIZ) { in hostap_set_iface_flags()
358 return -1; in hostap_set_iface_flags()
360 if (linux_set_iface_flags(drv->ioctl_sock, ifname, dev_up) < 0) in hostap_set_iface_flags()
361 return -1; in hostap_set_iface_flags()
367 if (ioctl(drv->ioctl_sock, SIOCSIFMTU, &ifr) != 0) { in hostap_set_iface_flags()
369 "Setting MTU failed - trying to survive with current value: ioctl[SIOCSIFMTU]: %s", in hostap_set_iface_flags()
385 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostapd_ioctl()
389 if (ioctl(drv->ioctl_sock, PRISM2_IOCTL_HOSTAPD, &iwr) < 0) { in hostapd_ioctl()
392 return -1; in hostapd_ioctl()
407 enum wpa_alg alg = params->alg; in wpa_driver_hostap_set_key()
408 const u8 *addr = params->addr; in wpa_driver_hostap_set_key() local
409 int key_idx = params->key_idx; in wpa_driver_hostap_set_key()
410 int set_tx = params->set_tx; in wpa_driver_hostap_set_key()
411 const u8 *key = params->key; in wpa_driver_hostap_set_key()
412 size_t key_len = params->key_len; in wpa_driver_hostap_set_key()
417 return -1; in wpa_driver_hostap_set_key()
420 param->cmd = PRISM2_SET_ENCRYPTION; in wpa_driver_hostap_set_key()
421 if (addr == NULL) in wpa_driver_hostap_set_key()
422 memset(param->sta_addr, 0xff, ETH_ALEN); in wpa_driver_hostap_set_key()
424 memcpy(param->sta_addr, addr, ETH_ALEN); in wpa_driver_hostap_set_key()
427 os_strlcpy((char *) param->u.crypt.alg, "NONE", in wpa_driver_hostap_set_key()
431 os_strlcpy((char *) param->u.crypt.alg, "WEP", in wpa_driver_hostap_set_key()
435 os_strlcpy((char *) param->u.crypt.alg, "TKIP", in wpa_driver_hostap_set_key()
439 os_strlcpy((char *) param->u.crypt.alg, "CCMP", in wpa_driver_hostap_set_key()
444 return -1; in wpa_driver_hostap_set_key()
446 param->u.crypt.flags = set_tx ? HOSTAP_CRYPT_FLAG_SET_TX_KEY : 0; in wpa_driver_hostap_set_key()
447 param->u.crypt.idx = key_idx; in wpa_driver_hostap_set_key()
448 param->u.crypt.key_len = key_len; in wpa_driver_hostap_set_key()
453 ret = -1; in wpa_driver_hostap_set_key()
461 static int hostap_get_seqnum(const char *ifname, void *priv, const u8 *addr, in hostap_get_seqnum() argument
473 return -1; in hostap_get_seqnum()
476 param->cmd = PRISM2_GET_ENCRYPTION; in hostap_get_seqnum()
477 if (addr == NULL) in hostap_get_seqnum()
478 os_memset(param->sta_addr, 0xff, ETH_ALEN); in hostap_get_seqnum()
480 os_memcpy(param->sta_addr, addr, ETH_ALEN); in hostap_get_seqnum()
481 param->u.crypt.idx = idx; in hostap_get_seqnum()
485 ret = -1; in hostap_get_seqnum()
487 os_memcpy(seq, param->u.crypt.seq, 8); in hostap_get_seqnum()
502 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_ioctl_prism2param()
507 if (ioctl(drv->ioctl_sock, PRISM2_IOCTL_PRISM2_PARAM, &iwr) < 0) { in hostap_ioctl_prism2param()
510 return -1; in hostap_ioctl_prism2param()
520 int enabled = params->enabled; in hostap_set_ieee8021x()
526 return -1; in hostap_set_ieee8021x()
536 printf("Could not setup host-based encryption in kernel " in hostap_set_ieee8021x()
538 return -1; in hostap_set_ieee8021x()
560 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_set_ssid()
565 if (ioctl(drv->ioctl_sock, SIOCSIWESSID, &iwr) < 0) { in hostap_set_ssid()
568 return -1; in hostap_set_ssid()
588 const u8 *addr) in hostap_read_sta_data() argument
597 drv->iface, MAC2STR(addr)); in hostap_read_sta_data()
601 return -1; in hostap_read_sta_data()
613 data->rx_packets = val; in hostap_read_sta_data()
615 data->tx_packets = val; in hostap_read_sta_data()
617 data->rx_bytes = val; in hostap_read_sta_data()
619 data->tx_bytes = val; in hostap_read_sta_data()
640 for (i = 0; i < params->supp_rates_len; i++) { in hostap_sta_add()
641 if ((params->supp_rates[i] & 0x7f) == 2) in hostap_sta_add()
643 if ((params->supp_rates[i] & 0x7f) == 4) in hostap_sta_add()
645 if ((params->supp_rates[i] & 0x7f) == 11) in hostap_sta_add()
647 if ((params->supp_rates[i] & 0x7f) == 22) in hostap_sta_add()
653 memcpy(param.sta_addr, params->addr, ETH_ALEN); in hostap_sta_add()
654 param.u.add_sta.aid = params->aid; in hostap_sta_add()
655 param.u.add_sta.capability = params->capability; in hostap_sta_add()
661 static int hostap_sta_remove(void *priv, const u8 *addr) in hostap_sta_remove() argument
666 hostap_sta_set_flags(drv, addr, 0, 0, ~WPA_STA_AUTHORIZED); in hostap_sta_remove()
670 memcpy(param.sta_addr, addr, ETH_ALEN); in hostap_sta_remove()
673 return -1; in hostap_sta_remove()
679 static int hostap_get_inact_sec(void *priv, const u8 *addr) in hostap_get_inact_sec() argument
686 memcpy(param.sta_addr, addr, ETH_ALEN); in hostap_get_inact_sec()
688 return -1; in hostap_get_inact_sec()
695 static int hostap_sta_clear_stats(void *priv, const u8 *addr) in hostap_sta_clear_stats() argument
702 memcpy(param.sta_addr, addr, ETH_ALEN); in hostap_sta_clear_stats()
704 return -1; in hostap_sta_clear_stats()
717 elem_len = drv->generic_ie_len + drv->wps_ie_len; in hostapd_ioctl_set_generic_elem()
724 return -1; in hostapd_ioctl_set_generic_elem()
726 param->cmd = PRISM2_HOSTAPD_SET_GENERIC_ELEMENT; in hostapd_ioctl_set_generic_elem()
727 param->u.generic_elem.len = elem_len; in hostapd_ioctl_set_generic_elem()
728 if (drv->generic_ie) { in hostapd_ioctl_set_generic_elem()
729 os_memcpy(param->u.generic_elem.data, drv->generic_ie, in hostapd_ioctl_set_generic_elem()
730 drv->generic_ie_len); in hostapd_ioctl_set_generic_elem()
732 if (drv->wps_ie) { in hostapd_ioctl_set_generic_elem()
733 os_memcpy(&param->u.generic_elem.data[drv->generic_ie_len], in hostapd_ioctl_set_generic_elem()
734 drv->wps_ie, drv->wps_ie_len); in hostapd_ioctl_set_generic_elem()
737 param->u.generic_elem.data, elem_len); in hostapd_ioctl_set_generic_elem()
751 os_free(drv->generic_ie); in hostap_set_generic_elem()
752 drv->generic_ie = NULL; in hostap_set_generic_elem()
753 drv->generic_ie_len = 0; in hostap_set_generic_elem()
755 drv->generic_ie = os_memdup(elem, elem_len); in hostap_set_generic_elem()
756 if (drv->generic_ie == NULL) in hostap_set_generic_elem()
757 return -1; in hostap_set_generic_elem()
758 drv->generic_ie_len = elem_len; in hostap_set_generic_elem()
777 os_free(drv->wps_ie); in hostap_set_ap_wps_ie()
778 drv->wps_ie = NULL; in hostap_set_ap_wps_ie()
779 drv->wps_ie_len = 0; in hostap_set_ap_wps_ie()
781 drv->wps_ie = os_memdup(wpabuf_head(proberesp), in hostap_set_ap_wps_ie()
783 if (drv->wps_ie == NULL) in hostap_set_ap_wps_ie()
784 return -1; in hostap_set_ap_wps_ie()
785 drv->wps_ie_len = wpabuf_len(proberesp); in hostap_set_ap_wps_ie()
798 if (strncmp(custom, "MLME-MICHAELMICFAILURE.indication", 33) == 0) { in hostapd_wireless_event_wireless_custom()
800 u8 addr[ETH_ALEN]; in hostapd_wireless_event_wireless_custom() local
801 pos = strstr(custom, "addr="); in hostapd_wireless_event_wireless_custom()
804 "MLME-MICHAELMICFAILURE.indication " in hostapd_wireless_event_wireless_custom()
809 if (hwaddr_aton(pos, addr) == 0) { in hostapd_wireless_event_wireless_custom()
813 data.michael_mic_failure.src = addr; in hostapd_wireless_event_wireless_custom()
814 wpa_supplicant_event(drv->hapd, in hostapd_wireless_event_wireless_custom()
818 "MLME-MICHAELMICFAILURE.indication " in hostapd_wireless_event_wireless_custom()
834 while ((size_t) (end - pos) >= IW_EV_LCP_LEN) { in hostapd_wireless_event_wireless()
839 iwe->cmd, iwe->len); in hostapd_wireless_event_wireless()
840 if (iwe->len <= IW_EV_LCP_LEN || iwe->len > end - pos) in hostapd_wireless_event_wireless()
844 if (drv->we_version > 18 && in hostapd_wireless_event_wireless()
845 (iwe->cmd == IWEVMICHAELMICFAILURE || in hostapd_wireless_event_wireless()
846 iwe->cmd == IWEVCUSTOM)) { in hostapd_wireless_event_wireless()
847 /* WE-19 removed the pointer from struct iw_point */ in hostapd_wireless_event_wireless()
849 int dlen = dpos - (char *) &iwe_buf; in hostapd_wireless_event_wireless()
851 sizeof(struct iw_event) - dlen); in hostapd_wireless_event_wireless()
857 switch (iwe->cmd) { in hostapd_wireless_event_wireless()
859 if (iwe->u.data.length > end - custom) in hostapd_wireless_event_wireless()
861 buf = malloc(iwe->u.data.length + 1); in hostapd_wireless_event_wireless()
864 memcpy(buf, custom, iwe->u.data.length); in hostapd_wireless_event_wireless()
865 buf[iwe->u.data.length] = '\0'; in hostapd_wireless_event_wireless()
871 pos += iwe->len; in hostapd_wireless_event_wireless()
884 /* TODO: use ifi->ifi_index to filter out wireless events from other in hostapd_wireless_event_rtm_newlink()
892 if (attr->rta_type == IFLA_WIRELESS) { in hostapd_wireless_event_rtm_newlink()
895 attr->rta_len - rta_len); in hostapd_wireless_event_rtm_newlink()
909 drv->we_version = 0; in hostap_get_we_version()
918 return -1; in hostap_get_we_version()
921 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_get_we_version()
925 minlen = ((char *) &range->enc_capa) - (char *) range + in hostap_get_we_version()
926 sizeof(range->enc_capa); in hostap_get_we_version()
928 if (ioctl(drv->ioctl_sock, SIOCGIWRANGE, &iwr) < 0) { in hostap_get_we_version()
932 return -1; in hostap_get_we_version()
934 range->we_version_compiled >= 18) { in hostap_get_we_version()
937 range->we_version_compiled, in hostap_get_we_version()
938 range->we_version_source, in hostap_get_we_version()
939 range->enc_capa); in hostap_get_we_version()
940 drv->we_version = range->we_version_compiled; in hostap_get_we_version()
956 return -1; in hostap_wireless_event_init()
957 cfg->ctx = drv; in hostap_wireless_event_init()
958 cfg->newlink_cb = hostapd_wireless_event_rtm_newlink; in hostap_wireless_event_init()
959 drv->netlink = netlink_init(cfg); in hostap_wireless_event_init()
960 if (drv->netlink == NULL) { in hostap_wireless_event_init()
962 return -1; in hostap_wireless_event_init()
980 drv->hapd = hapd; in hostap_init()
981 drv->ioctl_sock = drv->sock = -1; in hostap_init()
982 memcpy(drv->iface, params->ifname, sizeof(drv->iface)); in hostap_init()
984 drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); in hostap_init()
985 if (drv->ioctl_sock < 0) { in hostap_init()
994 "Could not enable hostapd mode for interface %s", in hostap_init()
995 drv->iface); in hostap_init()
996 close(drv->ioctl_sock); in hostap_init()
1001 if (hostap_init_sockets(drv, params->own_addr) || in hostap_init()
1003 close(drv->ioctl_sock); in hostap_init()
1016 netlink_deinit(drv->netlink); in hostap_driver_deinit()
1021 if (drv->ioctl_sock >= 0) in hostap_driver_deinit()
1022 close(drv->ioctl_sock); in hostap_driver_deinit()
1024 if (drv->sock >= 0) in hostap_driver_deinit()
1025 close(drv->sock); in hostap_driver_deinit()
1027 os_free(drv->generic_ie); in hostap_driver_deinit()
1028 os_free(drv->wps_ie); in hostap_driver_deinit()
1034 static int hostap_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, in hostap_sta_deauth() argument
1040 if (is_broadcast_ether_addr(addr)) { in hostap_sta_deauth()
1053 memcpy(mgmt.da, addr, ETH_ALEN); in hostap_sta_deauth()
1058 sizeof(mgmt.u.deauth), 0, 0, NULL, 0, 0, 0, -1); in hostap_sta_deauth()
1068 os_strlcpy(iwr.ifr_name, drv->iface, IFNAMSIZ); in hostap_set_freq()
1069 iwr.u.freq.m = freq->channel; in hostap_set_freq()
1072 if (ioctl(drv->ioctl_sock, SIOCSIWFREQ, &iwr) < 0) { in hostap_set_freq()
1075 return -1; in hostap_set_freq()
1082 static int hostap_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr, in hostap_sta_disassoc() argument
1091 memcpy(mgmt.da, addr, ETH_ALEN); in hostap_sta_disassoc()
1097 -1); in hostap_sta_disassoc()
1105 struct hostapd_hw_modes *mode; in hostap_get_hw_feature_data() local
1112 mode = os_zalloc(sizeof(struct hostapd_hw_modes)); in hostap_get_hw_feature_data()
1113 if (mode == NULL) in hostap_get_hw_feature_data()
1120 mode->mode = HOSTAPD_MODE_IEEE80211B; in hostap_get_hw_feature_data()
1121 mode->num_channels = 14; in hostap_get_hw_feature_data()
1122 mode->num_rates = 4; in hostap_get_hw_feature_data()
1124 clen = mode->num_channels * sizeof(struct hostapd_channel_data); in hostap_get_hw_feature_data()
1125 rlen = mode->num_rates * sizeof(int); in hostap_get_hw_feature_data()
1127 mode->channels = os_zalloc(clen); in hostap_get_hw_feature_data()
1128 mode->rates = os_zalloc(rlen); in hostap_get_hw_feature_data()
1129 if (mode->channels == NULL || mode->rates == NULL) { in hostap_get_hw_feature_data()
1130 os_free(mode->channels); in hostap_get_hw_feature_data()
1131 os_free(mode->rates); in hostap_get_hw_feature_data()
1132 os_free(mode); in hostap_get_hw_feature_data()
1137 mode->channels[i].chan = i + 1; in hostap_get_hw_feature_data()
1138 mode->channels[i].freq = chan2freq[i]; in hostap_get_hw_feature_data()
1139 mode->channels[i].allowed_bw = HOSTAPD_CHAN_WIDTH_20; in hostap_get_hw_feature_data()
1142 mode->channels[i].flag = HOSTAPD_CHAN_DISABLED; in hostap_get_hw_feature_data()
1145 mode->rates[0] = 10; in hostap_get_hw_feature_data()
1146 mode->rates[1] = 20; in hostap_get_hw_feature_data()
1147 mode->rates[2] = 55; in hostap_get_hw_feature_data()
1148 mode->rates[3] = 110; in hostap_get_hw_feature_data()
1150 return mode; in hostap_get_hw_feature_data()
1155 const u8 *addr, int qos) in wpa_driver_hostap_poll_client() argument
1173 os_memcpy(hdr.IEEE80211_DA_FROMDS, addr, ETH_ALEN); in wpa_driver_hostap_poll_client()
1178 -1); in wpa_driver_hostap_poll_client()