Q8-Add SSID IE
Topics in this section,
In this section, you are going to learn
How to add multiple SSID IE elements in Beacons
# |
Version |
---|---|
Ubuntu |
Ubuntu 22.04 64 bit |
Linux Kernel |
6.9.2 |
Supplicant |
wpa_supplicant 2.10 |
Hostapd |
hostapd 2.10 |
Add multiple SSID IE elements in Beacons
Callflow for add multiple SSID IE elements in Beacons
ieee80211_beacon_get_tim
__ieee80211_beacon_get
ieee80211_beacon_get_ap
drv_add_multiple_ssid_ie
Download the below patch file
add_multiple_ssid_ie_in_beacons.patch
See the full content of patch file
Binary files original/net/mac80211/agg-rx.o and changed/net/mac80211/agg-rx.o differ
Binary files original/net/mac80211/agg-tx.o and changed/net/mac80211/agg-tx.o differ
Binary files original/net/mac80211/airtime.o and changed/net/mac80211/airtime.o differ
Binary files original/net/mac80211/cfg.o and changed/net/mac80211/cfg.o differ
Binary files original/net/mac80211/chan.o and changed/net/mac80211/chan.o differ
Binary files original/net/mac80211/debugfs_key.o and changed/net/mac80211/debugfs_key.o differ
Binary files original/net/mac80211/debugfs_netdev.o and changed/net/mac80211/debugfs_netdev.o differ
Binary files original/net/mac80211/debugfs.o and changed/net/mac80211/debugfs.o differ
Binary files original/net/mac80211/debugfs_sta.o and changed/net/mac80211/debugfs_sta.o differ
Binary files original/net/mac80211/driver-ops.o and changed/net/mac80211/driver-ops.o differ
Binary files original/net/mac80211/eht.o and changed/net/mac80211/eht.o differ
Binary files original/net/mac80211/ethtool.o and changed/net/mac80211/ethtool.o differ
Binary files original/net/mac80211/fils_aead.o and changed/net/mac80211/fils_aead.o differ
Binary files original/net/mac80211/he.o and changed/net/mac80211/he.o differ
Binary files original/net/mac80211/ht.o and changed/net/mac80211/ht.o differ
Binary files original/net/mac80211/ibss.o and changed/net/mac80211/ibss.o differ
diff -crB original/net/mac80211/ieee80211_i.h changed/net/mac80211/ieee80211_i.h
*** original/net/mac80211/ieee80211_i.h 2024-07-11 19:39:07.644259000 +0530
--- changed/net/mac80211/ieee80211_i.h 2024-08-02 13:23:40.215197153 +0530
***************
*** 599,604 ****
--- 599,605 ----
/* dialog token enumerator for neg TTLM request */
u8 dialog_token_alloc;
struct wiphy_delayed_work neg_ttlm_timeout_work;
+ int drv_sta_data ;
};
struct ieee80211_if_ibss {
Binary files original/net/mac80211/iface.o and changed/net/mac80211/iface.o differ
Binary files original/net/mac80211/key.o and changed/net/mac80211/key.o differ
Binary files original/net/mac80211/led.o and changed/net/mac80211/led.o differ
diff -crB original/net/mac80211/link.c changed/net/mac80211/link.c
*** original/net/mac80211/link.c 2024-07-11 19:39:07.644259000 +0530
--- changed/net/mac80211/link.c 2024-08-02 13:23:40.219195153 +0530
***************
*** 250,258 ****
ieee80211_link_setup(&link->data);
}
! if (new_links == 0)
ieee80211_link_init(sdata, -1, &sdata->deflink,
&sdata->vif.bss_conf);
ret = ieee80211_check_dup_link_addrs(sdata);
if (!ret) {
--- 249,258 ----
ieee80211_link_setup(&link->data);
}
! if (new_links == 0) {
ieee80211_link_init(sdata, -1, &sdata->deflink,
&sdata->vif.bss_conf);
+ }
ret = ieee80211_check_dup_link_addrs(sdata);
if (!ret) {
***************
*** 291,299 ****
links[link_id] = NULL;
}
deinit:
! if (use_deflink)
ieee80211_link_init(sdata, -1, &sdata->deflink,
&sdata->vif.bss_conf);
return ret;
}
--- 291,300 ----
links[link_id] = NULL;
}
deinit:
! if (use_deflink) {
ieee80211_link_init(sdata, -1, &sdata->deflink,
&sdata->vif.bss_conf);
+ }
return ret;
}
Binary files original/net/mac80211/link.o and changed/net/mac80211/link.o differ
Binary files original/net/mac80211/mac80211.ko and changed/net/mac80211/mac80211.ko differ
diff -crB original/net/mac80211/mac80211.mod.c changed/net/mac80211/mac80211.mod.c
*** original/net/mac80211/mac80211.mod.c 2024-07-11 19:39:07.824257000 +0530
--- changed/net/mac80211/mac80211.mod.c 2024-08-02 13:23:40.411099150 +0530
***************
*** 716,719 ****
MODULE_INFO(depends, "cfg80211,libarc4");
! MODULE_INFO(srcversion, "BB095EE77446E94801FEB4A");
--- 716,719 ----
MODULE_INFO(depends, "cfg80211,libarc4");
! MODULE_INFO(srcversion, "D72E66977A3F468F29F588C");
Binary files original/net/mac80211/mac80211.mod.o and changed/net/mac80211/mac80211.mod.o differ
Binary files original/net/mac80211/mac80211.o and changed/net/mac80211/mac80211.o differ
Binary files original/net/mac80211/main.o and changed/net/mac80211/main.o differ
Binary files original/net/mac80211/mesh_hwmp.o and changed/net/mac80211/mesh_hwmp.o differ
Binary files original/net/mac80211/mesh.o and changed/net/mac80211/mesh.o differ
Binary files original/net/mac80211/mesh_pathtbl.o and changed/net/mac80211/mesh_pathtbl.o differ
Binary files original/net/mac80211/mesh_plink.o and changed/net/mac80211/mesh_plink.o differ
Binary files original/net/mac80211/mesh_ps.o and changed/net/mac80211/mesh_ps.o differ
Binary files original/net/mac80211/mesh_sync.o and changed/net/mac80211/mesh_sync.o differ
Binary files original/net/mac80211/mlme.o and changed/net/mac80211/mlme.o differ
Binary files original/net/mac80211/ocb.o and changed/net/mac80211/ocb.o differ
Binary files original/net/mac80211/offchannel.o and changed/net/mac80211/offchannel.o differ
Binary files original/net/mac80211/parse.o and changed/net/mac80211/parse.o differ
Binary files original/net/mac80211/pm.o and changed/net/mac80211/pm.o differ
Binary files original/net/mac80211/rate.o and changed/net/mac80211/rate.o differ
Binary files original/net/mac80211/rc80211_minstrel_ht.o and changed/net/mac80211/rc80211_minstrel_ht.o differ
Binary files original/net/mac80211/rx.o and changed/net/mac80211/rx.o differ
Binary files original/net/mac80211/s1g.o and changed/net/mac80211/s1g.o differ
Binary files original/net/mac80211/scan.o and changed/net/mac80211/scan.o differ
Binary files original/net/mac80211/spectmgmt.o and changed/net/mac80211/spectmgmt.o differ
Binary files original/net/mac80211/sta_info.o and changed/net/mac80211/sta_info.o differ
Binary files original/net/mac80211/status.o and changed/net/mac80211/status.o differ
Binary files original/net/mac80211/tdls.o and changed/net/mac80211/tdls.o differ
Binary files original/net/mac80211/tkip.o and changed/net/mac80211/tkip.o differ
Binary files original/net/mac80211/trace.o and changed/net/mac80211/trace.o differ
diff -crB original/net/mac80211/tx.c changed/net/mac80211/tx.c
*** original/net/mac80211/tx.c 2024-07-11 19:39:07.652259000 +0530
--- changed/net/mac80211/tx.c 2024-08-02 13:23:40.219195153 +0530
***************
*** 5290,5295 ****
--- 5290,5297 ----
beacon->mbssid_ies->elem[i].len);
}
+ int drv_add_multiple_ssid_ie(struct sk_buff *skb);
+
static struct sk_buff *
ieee80211_beacon_get_ap(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
***************
*** 5345,5357 ****
/* for AP the csa offsets are from tail */
csa_off_base = skb->len;
}
-
if (beacon->tail)
skb_put_data(skb, beacon->tail, beacon->tail_len);
if (ieee80211_beacon_protect(skb, local, sdata, link) < 0)
return NULL;
ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb,
chanctx_conf, csa_off_base);
return skb;
--- 5347,5364 ----
/* for AP the csa offsets are from tail */
csa_off_base = skb->len;
}
if (beacon->tail)
skb_put_data(skb, beacon->tail, beacon->tail_len);
if (ieee80211_beacon_protect(skb, local, sdata, link) < 0)
return NULL;
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+
+ if(ieee80211_is_beacon(hdr->frame_control))
+ {
+ drv_add_multiple_ssid_ie(skb);
+ }
ieee80211_beacon_get_finish(hw, vif, link, offs, beacon, skb,
chanctx_conf, csa_off_base);
return skb;
Binary files original/net/mac80211/tx.o and changed/net/mac80211/tx.o differ
diff -crB original/net/mac80211/util.c changed/net/mac80211/util.c
*** original/net/mac80211/util.c 2024-07-11 19:39:07.652259000 +0530
--- changed/net/mac80211/util.c 2024-08-02 13:23:40.239185152 +0530
***************
*** 1188,1193 ****
--- 1188,1220 ----
return 0;
}
+ int drv_add_multiple_ssid_ie(struct sk_buff *skb);
+
+ char data_ssid1_ie[] = "test_open_ssid1";
+ char data_ssid2_ie[] = "test_open_ssid2";
+
+ int drv_add_multiple_ssid_ie(struct sk_buff *skb)
+ {
+ size_t len;
+ len = strlen(data_ssid1_ie);
+
+ if (skb_tailroom(skb) < (2+len))
+ return -ENOBUFS;
+ skb_put_u8(skb, WLAN_EID_SSID);
+ skb_put_u8(skb, len);
+ skb_put_data(skb, data_ssid1_ie, len);
+
+ len = strlen(data_ssid2_ie);
+
+ if (skb_tailroom(skb) < (2+len))
+ return -ENOBUFS;
+ skb_put_u8(skb, WLAN_EID_SSID);
+ skb_put_u8(skb, len);
+ skb_put_data(skb, data_ssid2_ie, len);
+
+ return 0;
+ }
+
static int ieee80211_put_preq_ies_band(struct sk_buff *skb,
struct ieee80211_sub_if_data *sdata,
const u8 *ie, size_t ie_len,
***************
*** 1234,1240 ****
*offset);
if (skb_tailroom(skb) < noffset - *offset)
return -ENOBUFS;
! skb_put_data(skb, ie + *offset, noffset - *offset);
*offset = noffset;
}
--- 1260,1266 ----
*offset);
if (skb_tailroom(skb) < noffset - *offset)
return -ENOBUFS;
!
*offset = noffset;
}
Binary files original/net/mac80211/util.o and changed/net/mac80211/util.o differ
Binary files original/net/mac80211/vht.o and changed/net/mac80211/vht.o differ
Binary files original/net/mac80211/wbrf.o and changed/net/mac80211/wbrf.o differ
Binary files original/net/mac80211/wep.o and changed/net/mac80211/wep.o differ
Binary files original/net/mac80211/wme.o and changed/net/mac80211/wme.o differ
Binary files original/net/mac80211/wpa.o and changed/net/mac80211/wpa.o differ
test:~$ pwd
/home/test/
Compile Linux
Change directory to linux-6.9.2
test:~$ cd linux-6.9.2/
Note : Your present working directory should be linux-6.9.2
test:~$ pwd
/home/test/linux-6.9.2/
Remove mac80211 module
test:~$ sudo systemctl stop NetworkManager.service
test:~$ sudo rmmod mac80211
Run the below command to apply patch
test:~$ sudo patch -p1 < add_multiple_ssid_ie_in_beacons.patch
patching file net/mac80211/ieee80211_i.h
patching file net/mac80211/link.c
patching file net/mac80211/mac80211.mod.c
patching file net/mac80211/tx.c
patching file net/mac80211/util.c
Compile mac80211 folder
test:~$ sudo make -C . M=net/mac80211/
Insert mac80211 module
test:~$ sudo insmod ./net/mac80211/mac80211.ko
Download file to check wireshark output
add_multiple_ssid_ie_in_beacons.pcapng
Check for beacon packet
Click on packet No.2 as shown in the image below

Click on IEEE 802.11 Wireless Management
Click on Tagged parameters
Click on Tag: SSID parameter set: Undecoded
