]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
wifi: mac80211: enable MLO support for 4-address mode interfaces
authorTamizh Chelvam Raja <tamizh.raja@oss.qualcomm.com>
Thu, 26 Mar 2026 16:47:23 +0000 (22:17 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 7 Apr 2026 13:43:02 +0000 (15:43 +0200)
The current code does not support establishing MLO connections for
interfaces operating in 4-address AP_VLAN mode.
MLO bringup is blocked by sanity checks in cfg.c, iface.c, and mlme.c,
which prevent MLD initialization when use_4addr is enabled.
Remove these restrictions to allow 4-address AP_VLAN interfaces to
initialize as part of an MLD and successfully participate in MLO
connections. This patch series also adds the necessary changes to
support WDS operation in MLO, making these modifications valid.

Allow 4-address mode interfaces to:
- Proceed with MLD initialization during interface setup
- Add MLO links dynamically via ieee80211_add_intf_link()
- Establish associations with MLO-capable access points
- Support AP_VLAN interfaces with MLO parent APs

Signed-off-by: Tamizh Chelvam Raja <tamizh.raja@oss.qualcomm.com>
Link: https://patch.msgid.link/20260326164723.553927-4-tamizh.raja@oss.qualcomm.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/cfg.c
net/mac80211/iface.c
net/mac80211/mlme.c

index 6a5bf403fd85d7e93a3f8b5670c4ac2803a0fac6..7b77d57c9f96fd6ed0bf2ca2655b25f50063f6d9 100644 (file)
@@ -281,10 +281,6 @@ static int ieee80211_change_iface(struct wiphy *wiphy,
                if (params->use_4addr == ifmgd->use_4addr)
                        return 0;
 
-               /* FIXME: no support for 4-addr MLO yet */
-               if (ieee80211_vif_is_mld(&sdata->vif))
-                       return -EOPNOTSUPP;
-
                sdata->u.mgd.use_4addr = params->use_4addr;
                if (!ifmgd->associated)
                        return 0;
@@ -5585,9 +5581,6 @@ static int ieee80211_add_intf_link(struct wiphy *wiphy,
 
        lockdep_assert_wiphy(sdata->local->hw.wiphy);
 
-       if (wdev->use_4addr)
-               return -EOPNOTSUPP;
-
        return ieee80211_vif_set_links(sdata, wdev->valid_links, 0);
 }
 
index f1ab85ff326def08e0d4e1673145c4944d95ea7c..95b779c4d627e8d08e9ac282c7b71519913fee77 100644 (file)
@@ -409,13 +409,6 @@ static int ieee80211_check_concurrent_iface(struct ieee80211_sub_if_data *sdata,
                                                        nsdata->vif.type))
                                return -ENOTUNIQ;
 
-                       /* No support for VLAN with MLO yet */
-                       if (iftype == NL80211_IFTYPE_AP_VLAN &&
-                           sdata->wdev.use_4addr &&
-                           nsdata->vif.type == NL80211_IFTYPE_AP &&
-                           nsdata->vif.valid_links)
-                               return -EOPNOTSUPP;
-
                        /*
                         * can only add VLANs to enabled APs
                         */
index 4a34547b39d59f926d63b9ab9844b5ea556b3a6f..160ae65a5c645819c437f8b70938e1055e547016 100644 (file)
@@ -9859,10 +9859,6 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
        for (i = 0; i < IEEE80211_MLD_MAX_NUM_LINKS; i++)
                size += req->links[i].elems_len;
 
-       /* FIXME: no support for 4-addr MLO yet */
-       if (sdata->u.mgd.use_4addr && req->link_id >= 0)
-               return -EOPNOTSUPP;
-
        assoc_data = kzalloc(size, GFP_KERNEL);
        if (!assoc_data)
                return -ENOMEM;