diff --git a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
index a055005..0c31ad4 100644
--- a/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/netifd/wireless/mac80211.sh
@@ -157,8 +157,8 @@ mac80211_hostapd_setup_base() {
 	ieee80211n=1
 	ht_capab=
 	case "$htmode" in
-		VHT20|HT20|HE20) ;;
-		HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160)
+		VHT20|HT20|HE20|EHT20) ;;
+		HT40*|VHT40|VHT80|VHT160|HE40|HE80|HE160|EHT40|EHT80|EHT160|EHT320*)
 			case "$hwmode" in
 				a)
 					case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
@@ -202,7 +202,7 @@ mac80211_hostapd_setup_base() {
 			dsss_cck_40:1
 
 		ht_cap_mask=0
-		for cap in $(iw phy "$phy" info | grep 'Capabilities:' | cut -d: -f2); do
+		for cap in $(iw phy "$phy" info | grep 'Capabilities: 0x' | cut -d: -f2); do
 			ht_cap_mask="$(($ht_cap_mask | $cap))"
 		done
 
@@ -233,8 +233,8 @@ mac80211_hostapd_setup_base() {
 
 	idx="$channel"
 	case "$htmode" in
-		VHT20|HE20) enable_ac=1;;
-		VHT40|HE40)
+		VHT20|HE20|EHT20) enable_ac=1;;
+		VHT40|HE40|EHT40)
 			case "$(( (($channel / 4) + $chan_ofs) % 2 ))" in
 				1) idx=$(($channel + 2));;
 				0) idx=$(($channel - 2));;
@@ -242,7 +242,7 @@ mac80211_hostapd_setup_base() {
 			enable_ac=1
 			vht_center_seg0=$idx
 		;;
-		VHT80|HE80)
+		VHT80|HE80|EHT80)
 			case "$(( (($channel / 4) + $chan_ofs) % 4 ))" in
 				1) idx=$(($channel + 6));;
 				2) idx=$(($channel + 2));;
@@ -253,7 +253,7 @@ mac80211_hostapd_setup_base() {
 			vht_oper_chwidth=1
 			vht_center_seg0=$idx
 		;;
-		VHT160|HE160)
+		VHT160|HE160|EHT160)
 			if [ "$band" = "6g" ]; then
 				case "$channel" in
 					1|5|9|13|17|21|25|29) idx=15;;
@@ -274,6 +274,36 @@ mac80211_hostapd_setup_base() {
 			vht_oper_chwidth=2
 			vht_center_seg0=$idx
 		;;
+		EHT320*)
+			case "$channel" in
+				1|5|9|13|17|21|25|29) idx=31;;
+				33|37|41|45|49|53|57|61| \
+				65|69|73|77|81|85|89|93) idx=63;;
+				97|101|105|109|113|117|121|125| \
+				129|133|137|141|145|149|153|157) idx=127;;
+				161|165|169|173|177|181|185|189| \
+				193|197|201|205|209|213|217|221) idx=191;;
+			esac
+			if [[ "$htmode" = "EHT320-1" && "$channel" -ge "193" ]] ||
+			   [[ "$htmode" = "EHT320-2" && "$channel" -le "29" ]]; then
+				echo "Could not set the center freq with this EHT setting"
+				return 1
+			elif [[ "$htmode" = "EHT320-1" && "$channel" -ge "33" ]]; then
+				if [ "$channel" -gt $idx ]; then
+					idx=$(($idx + 32))
+				else
+					idx=$(($idx - 32))
+				fi
+			fi
+			vht_oper_chwidth=2
+			if [ "$channel" -gt $idx ]; then
+				vht_center_seg0=$(($idx + 16))
+			else
+				vht_center_seg0=$(($idx - 16))
+			fi
+			eht_oper_chwidth=9
+			eht_oper_centr_freq_seg0_idx=$idx
+		;;
 	esac
 	[ "$band" = "5g" ] && {
 		json_get_vars background_radar:0
@@ -283,8 +313,9 @@ mac80211_hostapd_setup_base() {
 	[ "$band" = "6g" ] && {
 		op_class=
 		case "$htmode" in
-			HE20) op_class=131;;
-			HE*) op_class=$((132 + $vht_oper_chwidth))
+			HE20|EHT20) op_class=131;;
+			EHT320*) op_class=137;;
+			HE*|EHT*) op_class=$((132 + $vht_oper_chwidth))
 		esac
 		[ -n "$op_class" ] && append base_cfg "op_class=$op_class" "$N"
 	}
@@ -407,7 +438,7 @@ mac80211_hostapd_setup_base() {
 	# 802.11ax
 	enable_ax=0
 	case "$htmode" in
-		HE*) enable_ax=1 ;;
+		HE*|EHT*) enable_ax=1 ;;
 	esac
 
 	if [ "$enable_ax" != "0" ]; then
@@ -481,6 +512,28 @@ mac80211_hostapd_setup_base() {
 		append base_cfg "he_mu_edca_ac_vo_timer=255" "$N"
 	fi
 
+	# 802.11be
+	enable_be=0
+	case "$htmode" in
+		EHT*) enable_be=1 ;;
+	esac
+
+	if [ "$enable_be" != "0" ]; then
+		append base_cfg "ieee80211be=1" "$N"
+		[ "$hwmode" = "a" ] && {
+			case $htmode in
+				EHT320*)
+					append base_cfg "eht_oper_chwidth=$eht_oper_chwidth" "$N"
+					append base_cfg "eht_oper_centr_freq_seg0_idx=$eht_oper_centr_freq_seg0_idx" "$N"
+				;;
+				*)
+					append base_cfg "eht_oper_chwidth=$vht_oper_chwidth" "$N"
+					append base_cfg "eht_oper_centr_freq_seg0_idx=$vht_center_seg0" "$N"
+				;;
+			esac
+		}
+	fi
+
 	hostapd_prepare_device_config "$hostapd_conf_file" nl80211
 	cat >> "$hostapd_conf_file" <<EOF
 ${channel:+channel=$channel}
diff --git a/package/kernel/mac80211/files/lib/wifi/mac80211.sh b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
index 438bf92..cb85bac 100644
--- a/package/kernel/mac80211/files/lib/wifi/mac80211.sh
+++ b/package/kernel/mac80211/files/lib/wifi/mac80211.sh
@@ -60,6 +60,8 @@ BEGIN {
 		if (vht && band != "1:") mode="VHT80"
 		if (he) mode="HE80"
 		if (he && band == "1:") mode="HE20"
+		if (eht) mode="EHT80"
+		if (eht && band == "1:") mode="EHT20"
                 sub("\\[", "", channel)
                 sub("\\]", "", channel)
                 bands = bands band channel ":" mode " "
@@ -73,6 +75,7 @@ $1 == "Band" {
 	vht = ""
 	ht = ""
 	he = ""
+	eht = ""
 }
 
 $0 ~ "Capabilities:" {
@@ -87,6 +90,10 @@ $0 ~ "HE Iftypes" {
 	he=1
 }
 
+$0 ~ "EHT Iftypes" {
+	eht=1
+}
+
 $1 == "*" && $3 == "MHz" && $0 !~ /disabled/ && band && !channel {
         channel = $4
 }
@@ -160,6 +167,10 @@ detect_mac80211() {
 
 	json_load_file /etc/board.json
 
+	# generate random bytes for macaddr
+	rand=$(hexdump -C /dev/urandom | head -n 1 &)
+	killall hexdump
+
 	for _dev in /sys/class/ieee80211/*; do
 		[ -e "$_dev" ] || continue
 
@@ -201,6 +212,11 @@ detect_mac80211() {
 				;;
 		esac
 
+		macaddr=""
+		for i in $(seq 2 3); do
+			macaddr=${macaddr}:$(echo $rand | cut -d ' ' -f $i)
+		done
+
 		uci -q batch <<-EOF
 			set wireless.${name}=wifi-device
 			set wireless.${name}.type=mac80211
@@ -217,6 +233,8 @@ detect_mac80211() {
 			set wireless.default_${name}.ssid=OpenWrt
 			set wireless.default_${name}.encryption=${encryption}
 
+			set wireless.default_${name}.macaddr=00:0$(($devidx - 1)):55:66${macaddr}
+
 EOF
 		[ -n "$key" ] && {
 			uci -q set wireless.default_${name}.key=${key}
-- 
2.25.1

