root/net/wireless/ap.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. __cfg80211_stop_ap
  2. cfg80211_stop_ap

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <linux/ieee80211.h>
   3 #include <linux/export.h>
   4 #include <net/cfg80211.h>
   5 #include "nl80211.h"
   6 #include "core.h"
   7 #include "rdev-ops.h"
   8 
   9 
  10 int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
  11                        struct net_device *dev, bool notify)
  12 {
  13         struct wireless_dev *wdev = dev->ieee80211_ptr;
  14         int err;
  15 
  16         ASSERT_WDEV_LOCK(wdev);
  17 
  18         if (!rdev->ops->stop_ap)
  19                 return -EOPNOTSUPP;
  20 
  21         if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&
  22             dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO)
  23                 return -EOPNOTSUPP;
  24 
  25         if (!wdev->beacon_interval)
  26                 return -ENOENT;
  27 
  28         err = rdev_stop_ap(rdev, dev);
  29         if (!err) {
  30                 wdev->conn_owner_nlportid = 0;
  31                 wdev->beacon_interval = 0;
  32                 memset(&wdev->chandef, 0, sizeof(wdev->chandef));
  33                 wdev->ssid_len = 0;
  34                 rdev_set_qos_map(rdev, dev, NULL);
  35                 if (notify)
  36                         nl80211_send_ap_stopped(wdev);
  37 
  38                 /* Should we apply the grace period during beaconing interface
  39                  * shutdown also?
  40                  */
  41                 cfg80211_sched_dfs_chan_update(rdev);
  42         }
  43 
  44         schedule_work(&cfg80211_disconnect_work);
  45 
  46         return err;
  47 }
  48 
  49 int cfg80211_stop_ap(struct cfg80211_registered_device *rdev,
  50                      struct net_device *dev, bool notify)
  51 {
  52         struct wireless_dev *wdev = dev->ieee80211_ptr;
  53         int err;
  54 
  55         wdev_lock(wdev);
  56         err = __cfg80211_stop_ap(rdev, dev, notify);
  57         wdev_unlock(wdev);
  58 
  59         return err;
  60 }

/* [<][>][^][v][top][bottom][index][help] */