diff --git a/vwifi.c b/vwifi.c index 1ada95a..4dba8e9 100644 --- a/vwifi.c +++ b/vwifi.c @@ -454,7 +454,9 @@ static void inform_bss(struct vwifi_vif *vif) struct cfg80211_inform_bss data = { /* the only channel */ .chan = &ap->wdev.wiphy->bands[NL80211_BAND_2GHZ]->channels[0], +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 7, 0) .scan_width = NL80211_BSS_CHAN_WIDTH_20, +#endif .signal = DBM_TO_MBM(rand_int_smooth(-100, -30, jiffies)), }; int capability = WLAN_CAPABILITY_ESS; @@ -529,7 +531,7 @@ static enum hrtimer_restart vwifi_beacon(struct hrtimer *timer) .boottime_ns = ktime_get_boottime_ns(), .chan = vif->channel, }; - +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 7, 0) switch (vif->bw) { case NL80211_CHAN_WIDTH_5: bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_5; @@ -541,7 +543,7 @@ static enum hrtimer_restart vwifi_beacon(struct hrtimer *timer) bss_meta.scan_width = NL80211_BSS_CHAN_WIDTH_20; break; } - +#endif int capability = WLAN_CAPABILITY_ESS; if (vif->privacy) @@ -1580,7 +1582,12 @@ static int vwifi_stop_ap(struct wiphy *wiphy, struct net_device *ndev) static int vwifi_change_beacon(struct wiphy *wiphy, struct net_device *ndev, - struct cfg80211_beacon_data *info) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0) + struct cfg80211_ap_update *info +#else + struct cfg80211_beacon_data *info +#endif +) { struct vwifi_vif *vif = ndev_get_vwifi_vif(ndev); int ie_offset = DOT11_MGMT_HDR_LEN + DOT11_BCN_PRB_FIXED_LEN; @@ -1591,15 +1598,23 @@ static int vwifi_change_beacon(struct wiphy *wiphy, * 2. tail: beacon IEs after TIM IE * We combine them and store them in vif->beacon_ie. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0) + head_ie_len = info->beacon.head_len - ie_offset; + tail_ie_len = info->beacon.tail_len; +#else head_ie_len = info->head_len - ie_offset; tail_ie_len = info->tail_len; - +#endif if (likely(head_ie_len + tail_ie_len <= IE_MAX_LEN)) { vif->beacon_ie_len = head_ie_len + tail_ie_len; memset(vif->beacon_ie, 0, IE_MAX_LEN); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 7, 0) + memcpy(vif->beacon_ie, &info->beacon.head[ie_offset], head_ie_len); + memcpy(vif->beacon_ie + head_ie_len, info->beacon.tail, tail_ie_len); +#else memcpy(vif->beacon_ie, &info->head[ie_offset], head_ie_len); memcpy(vif->beacon_ie + head_ie_len, info->tail, tail_ie_len); - +#endif pr_info( "%s: head_ie_len (before TIM IE) = %d, tail_ie_len = " "%d", @@ -2550,7 +2565,9 @@ static void vwifi_virtio_mgmt_rx_scan_response( }; struct cfg80211_inform_bss data = { .chan = &rx_channel, +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 7, 0) .scan_width = NL80211_BSS_CHAN_WIDTH_20, +#endif .signal = DBM_TO_MBM(rand_int_smooth(-100, -30, jiffies)), };