mirror of
git://git.openwrt.org/openwrt/openwrt.git
synced 2025-02-17 04:17:19 +00:00
hostapd: ubus: make (B)SSID optional for neighbor report
Make the BSSID and SSID fields optional when configuring a neighbor report into hostapd. Both options can now be an empty string. For the BSSID, the first 6 byte are copied from the neighbor report. For the SSID, the SSID for the affected hostapd BSS is used. Signed-off-by: David Bauer <mail@david-bauer.net>
This commit is contained in:
parent
560e54c69e
commit
c5eea362f3
@ -7,7 +7,7 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=hostapd
|
PKG_NAME:=hostapd
|
||||||
PKG_RELEASE:=10
|
PKG_RELEASE:=11
|
||||||
|
|
||||||
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
PKG_SOURCE_URL:=http://w1.fi/hostap.git
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
|
@ -863,26 +863,41 @@ hostapd_rrm_nr_set(struct ubus_context *ctx, struct ubus_object *obj,
|
|||||||
struct wpa_ssid_value ssid;
|
struct wpa_ssid_value ssid;
|
||||||
struct wpabuf *data;
|
struct wpabuf *data;
|
||||||
u8 bssid[ETH_ALEN];
|
u8 bssid[ETH_ALEN];
|
||||||
char *s;
|
char *s, *nr_s;
|
||||||
|
|
||||||
blobmsg_parse_array(nr_e_policy, ARRAY_SIZE(nr_e_policy), tb, blobmsg_data(cur), blobmsg_data_len(cur));
|
blobmsg_parse_array(nr_e_policy, ARRAY_SIZE(nr_e_policy), tb, blobmsg_data(cur), blobmsg_data_len(cur));
|
||||||
if (!tb[0] || !tb[1] || !tb[2])
|
if (!tb[0] || !tb[1] || !tb[2])
|
||||||
goto invalid;
|
goto invalid;
|
||||||
|
|
||||||
s = blobmsg_get_string(tb[0]);
|
/* Neighbor Report binary */
|
||||||
if (hwaddr_aton(s, bssid))
|
nr_s = blobmsg_get_string(tb[2]);
|
||||||
goto invalid;
|
data = wpabuf_parse_bin(nr_s);
|
||||||
|
|
||||||
s = blobmsg_get_string(tb[1]);
|
|
||||||
ssid.ssid_len = strlen(s);
|
|
||||||
if (ssid.ssid_len > sizeof(ssid.ssid))
|
|
||||||
goto invalid;
|
|
||||||
|
|
||||||
memcpy(&ssid, s, ssid.ssid_len);
|
|
||||||
data = wpabuf_parse_bin(blobmsg_get_string(tb[2]));
|
|
||||||
if (!data)
|
if (!data)
|
||||||
goto invalid;
|
goto invalid;
|
||||||
|
|
||||||
|
/* BSSID */
|
||||||
|
s = blobmsg_get_string(tb[0]);
|
||||||
|
if (strlen(s) == 0) {
|
||||||
|
/* Copy BSSID from neighbor report */
|
||||||
|
if (hwaddr_compact_aton(nr_s, bssid))
|
||||||
|
goto invalid;
|
||||||
|
} else if (hwaddr_aton(s, bssid)) {
|
||||||
|
goto invalid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SSID */
|
||||||
|
s = blobmsg_get_string(tb[1]);
|
||||||
|
if (strlen(s) == 0) {
|
||||||
|
/* Copy SSID from hostapd BSS conf */
|
||||||
|
memcpy(&ssid, &hapd->conf->ssid, sizeof(ssid));
|
||||||
|
} else {
|
||||||
|
ssid.ssid_len = strlen(s);
|
||||||
|
if (ssid.ssid_len > sizeof(ssid.ssid))
|
||||||
|
goto invalid;
|
||||||
|
|
||||||
|
memcpy(&ssid, s, ssid.ssid_len);
|
||||||
|
}
|
||||||
|
|
||||||
hostapd_neighbor_set(hapd, bssid, &ssid, data, NULL, NULL, 0);
|
hostapd_neighbor_set(hapd, bssid, &ssid, data, NULL, NULL, 0);
|
||||||
wpabuf_free(data);
|
wpabuf_free(data);
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user