mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 17:59:25 +01:00
wscutil: Add wsc_build_beacon
For consistency also update wsc_build_probe_response to use the same __builtin_popcount based rf_bands check.
This commit is contained in:
parent
8c1bf5385e
commit
66e9d4fca9
@ -2138,6 +2138,53 @@ static void build_credential(struct wsc_attr_builder *builder,
|
||||
l_free(data);
|
||||
}
|
||||
|
||||
uint8_t *wsc_build_beacon(const struct wsc_beacon *beacon, size_t *out_len)
|
||||
{
|
||||
struct wsc_attr_builder *builder;
|
||||
uint8_t *ret;
|
||||
|
||||
builder = wsc_attr_builder_new(512);
|
||||
build_version(builder, 0x10);
|
||||
build_wsc_state(builder, beacon->state);
|
||||
|
||||
if (beacon->ap_setup_locked)
|
||||
build_ap_setup_locked(builder, true);
|
||||
|
||||
if (beacon->selected_registrar) {
|
||||
build_selected_registrar(builder, true);
|
||||
build_device_password_id(builder, beacon->device_password_id);
|
||||
build_selected_registrar_configuration_methods(builder,
|
||||
beacon->selected_reg_config_methods);
|
||||
}
|
||||
|
||||
/* These two "should be provided" if dual-band */
|
||||
if (__builtin_popcount(beacon->rf_bands) > 1) {
|
||||
if (beacon->selected_registrar)
|
||||
build_uuid_e(builder, beacon->uuid_e);
|
||||
|
||||
build_rf_bands(builder, beacon->rf_bands);
|
||||
}
|
||||
|
||||
if (!beacon->version2)
|
||||
goto done;
|
||||
|
||||
START_WFA_VENDOR_EXTENSION();
|
||||
|
||||
if (!util_mem_is_zero(beacon->authorized_macs, 6))
|
||||
wfa_build_authorized_macs(builder, beacon->authorized_macs);
|
||||
|
||||
if (beacon->reg_config_methods) {
|
||||
wsc_attr_builder_put_u8(builder,
|
||||
WSC_WFA_EXTENSION_REGISTRAR_CONFIGRATION_METHODS);
|
||||
wsc_attr_builder_put_u8(builder, 2);
|
||||
wsc_attr_builder_put_u16(builder, beacon->reg_config_methods);
|
||||
}
|
||||
|
||||
done:
|
||||
ret = wsc_attr_builder_free(builder, false, out_len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t *wsc_build_probe_request(const struct wsc_probe_request *probe_request,
|
||||
size_t *out_len)
|
||||
{
|
||||
@ -2210,7 +2257,7 @@ uint8_t *wsc_build_probe_response(
|
||||
build_device_name(builder, probe_response->device_name);
|
||||
build_configuration_methods(builder, probe_response->config_methods);
|
||||
|
||||
if (probe_response->rf_bands & (probe_response->rf_bands - 1))
|
||||
if (__builtin_popcount(probe_response->rf_bands) > 1)
|
||||
build_rf_bands(builder, probe_response->rf_bands);
|
||||
|
||||
if (!probe_response->version2)
|
||||
|
@ -604,6 +604,7 @@ int wsc_parse_wsc_done(const uint8_t *pdu, uint32_t len, struct wsc_done *out);
|
||||
|
||||
uint8_t *wsc_build_credential(const struct wsc_credential *in, size_t *out_len);
|
||||
|
||||
uint8_t *wsc_build_beacon(const struct wsc_beacon *beacon, size_t *out_len);
|
||||
uint8_t *wsc_build_probe_request(const struct wsc_probe_request *probe_request,
|
||||
size_t *out_len);
|
||||
uint8_t *wsc_build_probe_response(
|
||||
|
Loading…
Reference in New Issue
Block a user