diff --git a/package/gluon-core/check_site.lua b/package/gluon-core/check_site.lua
index f953d8a17e791207bb11346614c011aeac53978b..7a4cd060e4550ea63a1640a7dbffd59ca2449aaf 100644
--- a/package/gluon-core/check_site.lua
+++ b/package/gluon-core/check_site.lua
@@ -49,14 +49,7 @@ for _, config in ipairs({'wifi24', 'wifi5'}) do
 
 		obsolete({config, 'supported_rates'}, '802.11b rates are disabled by default.')
 		obsolete({config, 'basic_rate'}, '802.11b rates are disabled by default.')
-
-		if need_table({config, 'ibss'}, nil, false) then
-			need_string_match(in_domain({config, 'ibss', 'ssid'}), '^' .. ('.?'):rep(32) .. '$')
-			need_string_match(in_domain({config, 'ibss', 'bssid'}), '^%x[02468aAcCeE]:%x%x:%x%x:%x%x:%x%x:%x%x$')
-			need_one_of({config, 'ibss', 'mcast_rate'}, supported_rates, false)
-			need_number({config, 'ibss', 'vlan'}, false)
-			need_boolean({config, 'ibss', 'disabled'}, false)
-		end
+		obsolete({config, 'ibss'}, 'IBSS support has been dropped.')
 
 		if need_table({config, 'mesh'}, nil, false) then
 			need_string_match(in_domain({config, 'mesh', 'id'}), '^' .. ('.?'):rep(32) .. '$')
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
index eb120404da34e69945bf575dc1686282a89ec7a3..709cc909265f04676658bb4c7eeabe35f821a3e6 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/200-wireless
@@ -98,49 +98,12 @@ local function first_non_nil(first, ...)
 end
 
 
-local function configure_ibss(config, radio, index, suffix, disabled)
-	local radio_name = radio['.name']
+local function delete_ibss(radio_name)
 	local name = 'ibss_' .. radio_name
 
 	uci:delete('network', name)
 	uci:delete('network', name .. '_vlan')
 	uci:delete('wireless', name)
-
-	if not config then
-		return
-	end
-
-	local macaddr = util.get_wlan_mac(uci, radio, index, 3)
-	if not macaddr then
-		return
-	end
-
-	if config.vlan then
-		uci:section('network', 'interface', name, {
-			proto = 'none',
-		})
-
-		uci:section('network', 'interface', name .. '_vlan', {
-			ifname = '@' .. name .. '.' .. config.vlan,
-			proto = 'gluon_mesh',
-		})
-	else
-		uci:section('network', 'interface', name, {
-			proto = 'gluon_mesh',
-		})
-	end
-
-	uci:section('wireless', 'wifi-iface', name, {
-		device = radio_name,
-		network = name,
-		mode = 'adhoc',
-		ssid = config.ssid,
-		bssid = config.bssid,
-		macaddr = macaddr,
-		mcast_rate = config.mcast_rate,
-		ifname = suffix and 'ibss' .. suffix,
-		disabled = disabled,
-	})
 end
 
 local function configure_mesh(config, radio, index, suffix, disabled)
@@ -202,20 +165,9 @@ local function configure_mesh_wireless(radio, index, config)
 	local radio_name = radio['.name']
 	local suffix = radio_name:match('^radio(%d+)$')
 
-	local ibss_disabled = is_disabled('ibss_' .. radio_name)
-	local mesh_disabled = is_disabled('mesh_' .. radio_name)
-
-	configure_ibss(config.ibss(), radio, index, suffix,
-		first_non_nil(
-			ibss_disabled,
-			mesh_disabled,
-			config.ibss.disabled(false)
-		)
-	)
 	configure_mesh(config.mesh(), radio, index, suffix,
 		first_non_nil(
-			mesh_disabled,
-			ibss_disabled,
+			is_disabled('mesh_' .. radio_name),
 			config.mesh.disabled(false)
 		)
 	)
@@ -224,6 +176,8 @@ end
 util.foreach_radio(uci, function(radio, index, config)
 	local radio_name = radio['.name']
 
+	delete_ibss(radio_name)
+
 	if not config() then
 		uci:set('wireless', radio_name, 'disabled', true)
 		return
@@ -259,7 +213,6 @@ util.foreach_radio(uci, function(radio, index, config)
 			util.add_to_set(hostapd_options, 'country3=0x4f')
 			uci:set_list('wireless', radio_name, 'hostapd_options', hostapd_options)
 
-			uci:delete('wireless', 'ibss_' .. radio_name)
 			uci:delete('wireless', 'mesh_' .. radio_name)
 		else
 			uci:delete('wireless', radio_name, 'channels')
@@ -277,12 +230,7 @@ end)
 
 
 if uci:get('system', 'rssid_wlan0') then
-	if uci:get('wireless', 'mesh_radio0') then
-		uci:set('system', 'rssid_wlan0', 'dev', 'mesh0')
-	else
-		uci:set('system', 'rssid_wlan0', 'dev', 'ibss0')
-	end
-
+	uci:set('system', 'rssid_wlan0', 'dev', 'mesh0')
 	uci:save('system')
 end
 
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/util.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/util.lua
index 6725958a3c3a0dbddc5644c0e49732a98da41b13..96a4a19098feb7ba9b7a18d27c59f7ed647c5869 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/util.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/util.lua
@@ -172,11 +172,11 @@ end
 -- IDs defined so far:
 -- 0: client0; WAN
 -- 1: mesh0
--- 2: ibss0
+-- 2: (unused)
 -- 3: wan_radio0 (private WLAN); batman-adv primary address
 -- 4: client1; LAN
 -- 5: mesh1
--- 6: ibss1
+-- 6: (unused)
 -- 7: wan_radio1 (private WLAN); mesh VPN
 function M.generate_mac(i)
 	if i > 7 or i < 0 then return nil end -- max allowed id (0b111)