/** * wps_is_addr_authorized - Check whether WPS IE authorizes MAC address * @msg: WPS IE contents from Beacon or Probe Response frame * @addr: MAC address to search for * @ver1_compat: Whether to use version 1 compatibility mode * Returns: 2 if the specified address is explicit authorized, 1 if address is * authorized (broadcast), 0 if not */ int wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr, int ver1_compat) { struct wps_parse_attr attr; unsigned int i; const u8 *pos; const u8 bcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; if (wps_parse_msg(msg, &attr) < 0) return 0; if (!attr.version2 && ver1_compat) { /* * Version 1.0 AP - AuthorizedMACs not used, so revert back to * old mechanism of using SelectedRegistrar. */ return is_selected_pin_registrar(&attr); } if (!attr.authorized_macs) return 0; pos = attr.authorized_macs; for (i = 0; i < attr.authorized_macs_len / ETH_ALEN; i++) { if (os_memcmp(pos, addr, ETH_ALEN) == 0) return 2; if (os_memcmp(pos, bcast, ETH_ALEN) == 0) return 1; pos += ETH_ALEN; } return 0; }
/** * wps_is_selected_pin_registrar - Check whether WPS IE indicates active PIN * @msg: WPS IE contents from Beacon or Probe Response frame * Returns: 1 if PIN Registrar is active, 0 if not */ int wps_is_selected_pin_registrar(const struct wpabuf *msg) { struct wps_parse_attr attr; if (wps_parse_msg(msg, &attr) < 0) return 0; return is_selected_pin_registrar(&attr); }
/** * wps_is_addr_authorized - Check whether WPS IE authorizes MAC address * @msg: WPS IE contents from Beacon or Probe Response frame * @addr: MAC address to search for * @ver1_compat: Whether to use version 1 compatibility mode * Returns: 2 if the specified address is explicit authorized, 1 if address is * authorized (broadcast), 0 if not */ int wps_is_addr_authorized(const struct wpabuf *msg, const u8 *addr, int ver1_compat) { struct wps_parse_attr attr; unsigned int i; const u8 *pos; const u8 bcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; if (wps_parse_msg(msg, &attr) < 0) return 0; return is_selected_pin_registrar(&attr); // Marked by Albert 2011/11/17 // Some APs won't carry the AuthorizedMACs in the probe response. // So, skip this check will speed up the process to find the current AP out for WPS handshake. /* if (!attr.version2 && ver1_compat) { /* * Version 1.0 AP - AuthorizedMACs not used, so revert back to * old mechanism of using SelectedRegistrar. return is_selected_pin_registrar(&attr); } if (!attr.authorized_macs) return 0; pos = attr.authorized_macs; for (i = 0; i < attr.authorized_macs_len / ETH_ALEN; i++) { if (os_memcmp(pos, addr, ETH_ALEN) == 0) return 2; if (os_memcmp(pos, bcast, ETH_ALEN) == 0) return 1; pos += ETH_ALEN; } return 0; */ }