From d8911a911d493199e2caa66486b40ef7c5c9eef7 Mon Sep 17 00:00:00 2001 From: Marc Date: Sat, 15 Jan 2022 21:51:44 +0000 Subject: gen: Add ability to set different BSSID than Transmitter for Beacons --- src/libwifi/gen/management/beacon.c | 9 +++++++-- src/libwifi/gen/management/beacon.h | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/libwifi/gen/management/beacon.c b/src/libwifi/gen/management/beacon.c index 8703205..f884c6e 100644 --- a/src/libwifi/gen/management/beacon.c +++ b/src/libwifi/gen/management/beacon.c @@ -77,14 +77,19 @@ int libwifi_set_beacon_channel(struct libwifi_beacon *beacon, uint8_t channel) { * The generated beacon frame is made with sane defaults defined in common.h. * Three tagged parameters are also added to the beacon: SSID, Channel and Supported Rates. */ -int libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char receiver[6], - const unsigned char transmitter[6], const char *ssid, uint8_t channel) { +int libwifi_create_beacon(struct libwifi_beacon *beacon, + const unsigned char receiver[6], + const unsigned char transmitter[6], + const unsigned char bssid[6], + const char *ssid, + uint8_t channel) { memset(beacon, 0, sizeof(struct libwifi_beacon)); beacon->frame_header.frame_control.type = TYPE_MANAGEMENT; beacon->frame_header.frame_control.subtype = SUBTYPE_BEACON; memcpy(&beacon->frame_header.addr1, receiver, 6); memcpy(&beacon->frame_header.addr2, transmitter, 6); + memcpy(&beacon->frame_header.addr3, bssid, 6); beacon->frame_header.seq_control.sequence_number = (rand() % 4096); beacon->fixed_parameters.timestamp = BYTESWAP64(libwifi_get_epoch()); diff --git a/src/libwifi/gen/management/beacon.h b/src/libwifi/gen/management/beacon.h index 971df88..943be55 100644 --- a/src/libwifi/gen/management/beacon.h +++ b/src/libwifi/gen/management/beacon.h @@ -51,12 +51,17 @@ size_t libwifi_get_beacon_length(struct libwifi_beacon *beacon); * @param beacon A struct libwifi_beacon * @param receiver The receiver MAC address, aka address 1 * @param transmitter The source MAC address, aka address 2 + * @param bssid The BSSID MAC address, aka address 3 * @param ssid The SSID of the beacon. Maximum length is 32 characters * @param channel The desired channel of the beacon * */ -int libwifi_create_beacon(struct libwifi_beacon *beacon, const unsigned char receiver[6], - const unsigned char transmitter[6], const char *ssid, uint8_t channel); +int libwifi_create_beacon(struct libwifi_beacon *beacon, + const unsigned char receiver[6], + const unsigned char transmitter[6], + const unsigned char bssid[6], + const char *ssid, + uint8_t channel); /** * Dump a struct libwifi_beacon into a raw format for packet injection. -- cgit 1.4.1