]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blame - net/wireless/mlme.c
cfg80211: connect/disconnect API
[mirror_ubuntu-zesty-kernel.git] / net / wireless / mlme.c
CommitLineData
6039f6d2
JM
1/*
2 * cfg80211 MLME SAP interface
3 *
4 * Copyright (c) 2009, Jouni Malinen <j@w1.fi>
5 */
6
7#include <linux/kernel.h>
8#include <linux/module.h>
9#include <linux/netdevice.h>
10#include <linux/nl80211.h>
11#include <net/cfg80211.h>
12#include "core.h"
13#include "nl80211.h"
14
e6d6e342 15void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len, gfp_t gfp)
6039f6d2
JM
16{
17 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
18 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
e6d6e342 19 nl80211_send_rx_auth(rdev, dev, buf, len, gfp);
6039f6d2
JM
20}
21EXPORT_SYMBOL(cfg80211_send_rx_auth);
22
e6d6e342 23void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len, gfp_t gfp)
6039f6d2
JM
24{
25 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
26 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
e6d6e342 27 nl80211_send_rx_assoc(rdev, dev, buf, len, gfp);
6039f6d2
JM
28}
29EXPORT_SYMBOL(cfg80211_send_rx_assoc);
30
e6d6e342 31void cfg80211_send_deauth(struct net_device *dev, const u8 *buf, size_t len, gfp_t gfp)
6039f6d2
JM
32{
33 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
34 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
e6d6e342 35 nl80211_send_deauth(rdev, dev, buf, len, gfp);
6039f6d2 36}
53b46b84 37EXPORT_SYMBOL(cfg80211_send_deauth);
6039f6d2 38
e6d6e342 39void cfg80211_send_disassoc(struct net_device *dev, const u8 *buf, size_t len, gfp_t gfp)
6039f6d2
JM
40{
41 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
42 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
e6d6e342 43 nl80211_send_disassoc(rdev, dev, buf, len, gfp);
6039f6d2 44}
53b46b84 45EXPORT_SYMBOL(cfg80211_send_disassoc);
a3b8b056 46
1965c853
JM
47static void cfg80211_wext_disconnected(struct net_device *dev)
48{
49#ifdef CONFIG_WIRELESS_EXT
50 union iwreq_data wrqu;
51 memset(&wrqu, 0, sizeof(wrqu));
52 wireless_send_event(dev, SIOCGIWAP, &wrqu, NULL);
53#endif
54}
55
e6d6e342 56void cfg80211_send_auth_timeout(struct net_device *dev, const u8 *addr, gfp_t gfp)
1965c853
JM
57{
58 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
59 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
e6d6e342 60 nl80211_send_auth_timeout(rdev, dev, addr, gfp);
1965c853
JM
61 cfg80211_wext_disconnected(dev);
62}
63EXPORT_SYMBOL(cfg80211_send_auth_timeout);
64
e6d6e342 65void cfg80211_send_assoc_timeout(struct net_device *dev, const u8 *addr, gfp_t gfp)
1965c853
JM
66{
67 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
68 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
e6d6e342 69 nl80211_send_assoc_timeout(rdev, dev, addr, gfp);
1965c853
JM
70 cfg80211_wext_disconnected(dev);
71}
72EXPORT_SYMBOL(cfg80211_send_assoc_timeout);
73
a3b8b056
JM
74void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr,
75 enum nl80211_key_type key_type, int key_id,
e6d6e342 76 const u8 *tsc, gfp_t gfp)
a3b8b056
JM
77{
78 struct wiphy *wiphy = dev->ieee80211_ptr->wiphy;
79 struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
f58d4ed9
JB
80#ifdef CONFIG_WIRELESS_EXT
81 union iwreq_data wrqu;
e6d6e342 82 char *buf = kmalloc(128, gfp);
f58d4ed9
JB
83
84 if (buf) {
85 sprintf(buf, "MLME-MICHAELMICFAILURE.indication("
86 "keyid=%d %scast addr=%pM)", key_id,
87 key_type == NL80211_KEYTYPE_GROUP ? "broad" : "uni",
88 addr);
89 memset(&wrqu, 0, sizeof(wrqu));
90 wrqu.data.length = strlen(buf);
91 wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf);
92 kfree(buf);
93 }
94#endif
95
e6d6e342 96 nl80211_michael_mic_failure(rdev, dev, addr, key_type, key_id, tsc, gfp);
a3b8b056
JM
97}
98EXPORT_SYMBOL(cfg80211_michael_mic_failure);