cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ap.c (1342B)


      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
     10int __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
     49int 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}