wifi: cfg80211: modify prototype for change_beacon
authorAloka Dixit <quic_alokad@quicinc.com>
Thu, 27 Jul 2023 17:40:58 +0000 (10:40 -0700)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 13 Sep 2023 10:34:01 +0000 (12:34 +0200)
Modify the prototype for change_beacon() in struct cfg80211_op to
accept cfg80211_ap_settings instead of cfg80211_beacon_data so that
it can process data in addition to beacons.
Modify the prototypes of ieee80211_change_beacon() and driver specific
functions accordingly.

Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Link: https://lore.kernel.org/r/20230727174100.11721-4-quic_alokad@quicinc.com
[while at it, remove pointless "if (info)" check in tracing that just
 makes all the lines longer than they need be - it's never NULL]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
12 files changed:
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/wil6210/cfg80211.c
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
drivers/net/wireless/marvell/mwifiex/cfg80211.c
drivers/net/wireless/microchip/wilc1000/cfg80211.c
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
include/net/cfg80211.h
net/mac80211/cfg.c
net/wireless/nl80211.c
net/wireless/rdev-ops.h
net/wireless/trace.h

index 1dba55c..eea60e2 100644 (file)
@@ -2954,7 +2954,7 @@ static int ath6kl_start_ap(struct wiphy *wiphy, struct net_device *dev,
 }
 
 static int ath6kl_change_beacon(struct wiphy *wiphy, struct net_device *dev,
-                               struct cfg80211_beacon_data *beacon)
+                               struct cfg80211_ap_settings *params)
 {
        struct ath6kl_vif *vif = netdev_priv(dev);
 
@@ -2964,7 +2964,7 @@ static int ath6kl_change_beacon(struct wiphy *wiphy, struct net_device *dev,
        if (vif->next_mode != AP_NETWORK)
                return -EOPNOTSUPP;
 
-       return ath6kl_set_ies(vif, beacon);
+       return ath6kl_set_ies(vif, &params->beacon);
 }
 
 static int ath6kl_stop_ap(struct wiphy *wiphy, struct net_device *dev,
index 40f9a7e..dfbb478 100644 (file)
@@ -2082,11 +2082,12 @@ void wil_cfg80211_ap_recovery(struct wil6210_priv *wil)
 
 static int wil_cfg80211_change_beacon(struct wiphy *wiphy,
                                      struct net_device *ndev,
-                                     struct cfg80211_beacon_data *bcon)
+                                     struct cfg80211_ap_settings *params)
 {
        struct wil6210_priv *wil = wiphy_to_wil(wiphy);
        struct wireless_dev *wdev = ndev->ieee80211_ptr;
        struct wil6210_vif *vif = ndev_to_vif(ndev);
+       struct cfg80211_beacon_data *bcon = &params->beacon;
        int rc;
        u32 privacy = 0;
 
index 94b4a7b..9012456 100644 (file)
@@ -5415,13 +5415,13 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev,
 
 static s32
 brcmf_cfg80211_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
-                            struct cfg80211_beacon_data *info)
+                            struct cfg80211_ap_settings *info)
 {
        struct brcmf_if *ifp = netdev_priv(ndev);
 
        brcmf_dbg(TRACE, "Enter\n");
 
-       return brcmf_config_ap_mgmt_ie(ifp->vif, info);
+       return brcmf_config_ap_mgmt_ie(ifp->vif, &info->beacon);
 }
 
 static int
index ba4e297..70473be 100644 (file)
@@ -1835,10 +1835,11 @@ static int mwifiex_cfg80211_set_cqm_rssi_config(struct wiphy *wiphy,
  */
 static int mwifiex_cfg80211_change_beacon(struct wiphy *wiphy,
                                          struct net_device *dev,
-                                         struct cfg80211_beacon_data *data)
+                                         struct cfg80211_ap_settings *params)
 {
        struct mwifiex_private *priv = mwifiex_netdev_get_priv(dev);
        struct mwifiex_adapter *adapter = priv->adapter;
+       struct cfg80211_beacon_data *data = &params->beacon;
 
        mwifiex_cancel_scan(adapter);
 
index b545d93..3447470 100644 (file)
@@ -1441,11 +1441,11 @@ static int start_ap(struct wiphy *wiphy, struct net_device *dev,
 }
 
 static int change_beacon(struct wiphy *wiphy, struct net_device *dev,
-                        struct cfg80211_beacon_data *beacon)
+                        struct cfg80211_ap_settings *params)
 {
        struct wilc_vif *vif = netdev_priv(dev);
 
-       return wilc_add_beacon(vif, 0, 0, beacon);
+       return wilc_add_beacon(vif, 0, 0, &params->beacon);
 }
 
 static int stop_ap(struct wiphy *wiphy, struct net_device *dev,
index 73e6f94..9388adc 100644 (file)
@@ -331,11 +331,11 @@ out:
 }
 
 static int qtnf_change_beacon(struct wiphy *wiphy, struct net_device *dev,
-                             struct cfg80211_beacon_data *info)
+                             struct cfg80211_ap_settings *info)
 {
        struct qtnf_vif *vif = qtnf_netdev_get_priv(dev);
 
-       return qtnf_mgmt_set_appie(vif, info);
+       return qtnf_mgmt_set_appie(vif, &info->beacon);
 }
 
 static int qtnf_start_ap(struct wiphy *wiphy, struct net_device *dev,
index 2ae7843..5ddc2d9 100644 (file)
@@ -2319,11 +2319,13 @@ static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
 }
 
 static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
-               struct cfg80211_beacon_data *info)
+               struct cfg80211_ap_settings *info)
 {
        struct adapter *adapter = rtw_netdev_priv(ndev);
 
-       return rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
+       return rtw_add_beacon(adapter, info->beacon.head,
+                             info->beacon.head_len, info->beacon.tail,
+                             info->beacon.tail_len);
 }
 
 static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev,
index aa8c453..d69841f 100644 (file)
@@ -4495,7 +4495,7 @@ struct cfg80211_ops {
        int     (*start_ap)(struct wiphy *wiphy, struct net_device *dev,
                            struct cfg80211_ap_settings *settings);
        int     (*change_beacon)(struct wiphy *wiphy, struct net_device *dev,
-                                struct cfg80211_beacon_data *info);
+                                struct cfg80211_ap_settings *info);
        int     (*stop_ap)(struct wiphy *wiphy, struct net_device *dev,
                           unsigned int link_id);
 
index e28a22e..e17ce9b 100644 (file)
@@ -1477,10 +1477,12 @@ error:
 }
 
 static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
-                                  struct cfg80211_beacon_data *params)
+                                  struct cfg80211_ap_settings *params)
+
 {
        struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
        struct ieee80211_link_data *link;
+       struct cfg80211_beacon_data *beacon = &params->beacon;
        struct beacon_data *old;
        int err;
        struct ieee80211_bss_conf *link_conf;
@@ -1488,7 +1490,7 @@ static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
 
        lockdep_assert_wiphy(wiphy);
 
-       link = sdata_dereference(sdata->link[params->link_id], sdata);
+       link = sdata_dereference(sdata->link[beacon->link_id], sdata);
        if (!link)
                return -ENOLINK;
 
@@ -1504,14 +1506,14 @@ static int ieee80211_change_beacon(struct wiphy *wiphy, struct net_device *dev,
        if (!old)
                return -ENOENT;
 
-       err = ieee80211_assign_beacon(sdata, link, params, NULL, NULL,
+       err = ieee80211_assign_beacon(sdata, link, beacon, NULL, NULL,
                                      &changed);
        if (err < 0)
                return err;
 
-       if (params->he_bss_color_valid &&
-           params->he_bss_color.enabled != link_conf->he_bss_color.enabled) {
-               link_conf->he_bss_color.enabled = params->he_bss_color.enabled;
+       if (beacon->he_bss_color_valid &&
+           beacon->he_bss_color.enabled != link_conf->he_bss_color.enabled) {
+               link_conf->he_bss_color.enabled = beacon->he_bss_color.enabled;
                changed |= BSS_CHANGED_HE_BSS_COLOR;
        }
 
index 53618a1..6449072 100644 (file)
@@ -6198,7 +6198,7 @@ static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
        unsigned int link_id = nl80211_link_id(info->attrs);
        struct net_device *dev = info->user_ptr[1];
        struct wireless_dev *wdev = dev->ieee80211_ptr;
-       struct cfg80211_beacon_data params;
+       struct cfg80211_ap_settings *params;
        int err;
 
        if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
@@ -6211,15 +6211,21 @@ static int nl80211_set_beacon(struct sk_buff *skb, struct genl_info *info)
        if (!wdev->links[link_id].ap.beacon_interval)
                return -EINVAL;
 
-       err = nl80211_parse_beacon(rdev, info->attrs, &params, info->extack);
+       params = kzalloc(sizeof(*params), GFP_KERNEL);
+       if (!params)
+               return -ENOMEM;
+
+       err = nl80211_parse_beacon(rdev, info->attrs, &params->beacon,
+                                  info->extack);
        if (err)
                goto out;
 
-       err = rdev_change_beacon(rdev, dev, &params);
+       err = rdev_change_beacon(rdev, dev, params);
 
 out:
-       kfree(params.mbssid_ies);
-       kfree(params.rnr_ies);
+       kfree(params->beacon.mbssid_ies);
+       kfree(params->beacon.rnr_ies);
+       kfree(params);
        return err;
 }
 
index 90bb7ac..c6a2c07 100644 (file)
@@ -173,7 +173,7 @@ static inline int rdev_start_ap(struct cfg80211_registered_device *rdev,
 
 static inline int rdev_change_beacon(struct cfg80211_registered_device *rdev,
                                     struct net_device *dev,
-                                    struct cfg80211_beacon_data *info)
+                                    struct cfg80211_ap_settings *info)
 {
        int ret;
        trace_rdev_change_beacon(&rdev->wiphy, dev, info);
index 126c3a0..1557dc1 100644 (file)
@@ -615,49 +615,47 @@ TRACE_EVENT(rdev_start_ap,
 
 TRACE_EVENT(rdev_change_beacon,
        TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
-                struct cfg80211_beacon_data *info),
+                struct cfg80211_ap_settings *info),
        TP_ARGS(wiphy, netdev, info),
        TP_STRUCT__entry(
                WIPHY_ENTRY
                NETDEV_ENTRY
                __field(int, link_id)
-               __dynamic_array(u8, head, info ? info->head_len : 0)
-               __dynamic_array(u8, tail, info ? info->tail_len : 0)
-               __dynamic_array(u8, beacon_ies, info ? info->beacon_ies_len : 0)
-               __dynamic_array(u8, proberesp_ies,
-                               info ? info->proberesp_ies_len : 0)
-               __dynamic_array(u8, assocresp_ies,
-                               info ? info->assocresp_ies_len : 0)
-               __dynamic_array(u8, probe_resp, info ? info->probe_resp_len : 0)
-       ),
-       TP_fast_assign(
-               WIPHY_ASSIGN;
-               NETDEV_ASSIGN;
-               if (info) {
-                       __entry->link_id = info->link_id;
-                       if (info->head)
-                               memcpy(__get_dynamic_array(head), info->head,
-                                      info->head_len);
-                       if (info->tail)
-                               memcpy(__get_dynamic_array(tail), info->tail,
-                                      info->tail_len);
-                       if (info->beacon_ies)
-                               memcpy(__get_dynamic_array(beacon_ies),
-                                      info->beacon_ies, info->beacon_ies_len);
-                       if (info->proberesp_ies)
-                               memcpy(__get_dynamic_array(proberesp_ies),
-                                      info->proberesp_ies,
-                                      info->proberesp_ies_len);
-                       if (info->assocresp_ies)
-                               memcpy(__get_dynamic_array(assocresp_ies),
-                                      info->assocresp_ies,
-                                      info->assocresp_ies_len);
-                       if (info->probe_resp)
-                               memcpy(__get_dynamic_array(probe_resp),
-                                      info->probe_resp, info->probe_resp_len);
-               } else {
-                       __entry->link_id = -1;
-               }
+               __dynamic_array(u8, head, info->beacon.head_len)
+               __dynamic_array(u8, tail, info->beacon.tail_len)
+               __dynamic_array(u8, beacon_ies, info->beacon.beacon_ies_len)
+               __dynamic_array(u8, proberesp_ies, info->beacon.proberesp_ies_len)
+               __dynamic_array(u8, assocresp_ies, info->beacon.assocresp_ies_len)
+               __dynamic_array(u8, probe_resp, info->beacon.probe_resp_len)
+       ),
+       TP_fast_assign(
+               WIPHY_ASSIGN;
+               NETDEV_ASSIGN;
+               __entry->link_id = info->beacon.link_id;
+               if (info->beacon.head)
+                       memcpy(__get_dynamic_array(head),
+                              info->beacon.head,
+                              info->beacon.head_len);
+               if (info->beacon.tail)
+                       memcpy(__get_dynamic_array(tail),
+                              info->beacon.tail,
+                              info->beacon.tail_len);
+               if (info->beacon.beacon_ies)
+                       memcpy(__get_dynamic_array(beacon_ies),
+                              info->beacon.beacon_ies,
+                              info->beacon.beacon_ies_len);
+               if (info->beacon.proberesp_ies)
+                       memcpy(__get_dynamic_array(proberesp_ies),
+                              info->beacon.proberesp_ies,
+                              info->beacon.proberesp_ies_len);
+               if (info->beacon.assocresp_ies)
+                       memcpy(__get_dynamic_array(assocresp_ies),
+                              info->beacon.assocresp_ies,
+                              info->beacon.assocresp_ies_len);
+               if (info->beacon.probe_resp)
+                       memcpy(__get_dynamic_array(probe_resp),
+                              info->beacon.probe_resp,
+                              info->beacon.probe_resp_len);
        ),
        TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", link_id:%d",
                  WIPHY_PR_ARG, NETDEV_PR_ARG, __entry->link_id)