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