1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Portions of this file |
4 | * Copyright (C) 2018, 2020-2022 Intel Corporation |
5 | */ |
6 | #ifndef __NET_WIRELESS_NL80211_H |
7 | #define __NET_WIRELESS_NL80211_H |
8 | |
9 | #include "core.h" |
10 | |
11 | int nl80211_init(void); |
12 | void nl80211_exit(void); |
13 | |
14 | void *nl80211hdr_put(struct sk_buff *skb, u32 portid, u32 seq, |
15 | int flags, u8 cmd); |
16 | bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, |
17 | int attr); |
18 | |
19 | static inline u64 wdev_id(struct wireless_dev *wdev) |
20 | { |
21 | return (u64)wdev->identifier | |
22 | ((u64)wiphy_to_rdev(wiphy: wdev->wiphy)->wiphy_idx << 32); |
23 | } |
24 | |
25 | int nl80211_parse_chandef(struct cfg80211_registered_device *rdev, |
26 | struct genl_info *info, |
27 | struct cfg80211_chan_def *chandef); |
28 | int nl80211_parse_random_mac(struct nlattr **attrs, |
29 | u8 *mac_addr, u8 *mac_addr_mask); |
30 | |
31 | void nl80211_notify_wiphy(struct cfg80211_registered_device *rdev, |
32 | enum nl80211_commands cmd); |
33 | void nl80211_notify_iface(struct cfg80211_registered_device *rdev, |
34 | struct wireless_dev *wdev, |
35 | enum nl80211_commands cmd); |
36 | void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, |
37 | struct wireless_dev *wdev); |
38 | struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, |
39 | struct wireless_dev *wdev, bool aborted); |
40 | void nl80211_send_scan_msg(struct cfg80211_registered_device *rdev, |
41 | struct sk_buff *msg); |
42 | void nl80211_send_sched_scan(struct cfg80211_sched_scan_request *req, u32 cmd); |
43 | void nl80211_common_reg_change_event(enum nl80211_commands cmd_id, |
44 | struct regulatory_request *request); |
45 | |
46 | static inline void |
47 | nl80211_send_reg_change_event(struct regulatory_request *request) |
48 | { |
49 | nl80211_common_reg_change_event(NL80211_CMD_REG_CHANGE, request); |
50 | } |
51 | |
52 | static inline void |
53 | nl80211_send_wiphy_reg_change_event(struct regulatory_request *request) |
54 | { |
55 | nl80211_common_reg_change_event(cmd_id: NL80211_CMD_WIPHY_REG_CHANGE, request); |
56 | } |
57 | |
58 | void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev, |
59 | struct net_device *netdev, |
60 | const u8 *buf, size_t len, gfp_t gfp); |
61 | void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev, |
62 | struct net_device *netdev, |
63 | struct cfg80211_rx_assoc_resp_data *data); |
64 | void nl80211_send_deauth(struct cfg80211_registered_device *rdev, |
65 | struct net_device *netdev, |
66 | const u8 *buf, size_t len, |
67 | bool reconnect, gfp_t gfp); |
68 | void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, |
69 | struct net_device *netdev, |
70 | const u8 *buf, size_t len, |
71 | bool reconnect, gfp_t gfp); |
72 | void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev, |
73 | struct net_device *netdev, |
74 | const u8 *addr, gfp_t gfp); |
75 | void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev, |
76 | struct net_device *netdev, |
77 | const u8 *addr, gfp_t gfp); |
78 | void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, |
79 | struct net_device *netdev, |
80 | struct cfg80211_connect_resp_params *params, |
81 | gfp_t gfp); |
82 | void nl80211_send_roamed(struct cfg80211_registered_device *rdev, |
83 | struct net_device *netdev, |
84 | struct cfg80211_roam_info *info, gfp_t gfp); |
85 | /* For STA/GC, indicate port authorized with AP/GO bssid. |
86 | * For GO/AP, use peer GC/STA mac_addr. |
87 | */ |
88 | void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev, |
89 | struct net_device *netdev, const u8 *peer_addr, |
90 | const u8 *td_bitmap, u8 td_bitmap_len); |
91 | void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, |
92 | struct net_device *netdev, u16 reason, |
93 | const u8 *ie, size_t ie_len, bool from_ap); |
94 | |
95 | void |
96 | nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, |
97 | struct net_device *netdev, const u8 *addr, |
98 | enum nl80211_key_type key_type, |
99 | int key_id, const u8 *tsc, gfp_t gfp); |
100 | |
101 | void |
102 | nl80211_send_beacon_hint_event(struct wiphy *wiphy, |
103 | struct ieee80211_channel *channel_before, |
104 | struct ieee80211_channel *channel_after); |
105 | |
106 | void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, |
107 | struct net_device *netdev, const u8 *bssid, |
108 | gfp_t gfp); |
109 | |
110 | int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, |
111 | struct wireless_dev *wdev, u32 nlpid, |
112 | struct cfg80211_rx_info *info, gfp_t gfp); |
113 | |
114 | void |
115 | nl80211_radar_notify(struct cfg80211_registered_device *rdev, |
116 | const struct cfg80211_chan_def *chandef, |
117 | enum nl80211_radar_event event, |
118 | struct net_device *netdev, gfp_t gfp); |
119 | |
120 | void nl80211_send_ap_stopped(struct wireless_dev *wdev, unsigned int link_id); |
121 | |
122 | void cfg80211_rdev_free_coalesce(struct cfg80211_registered_device *rdev); |
123 | |
124 | /* peer measurement */ |
125 | int nl80211_pmsr_start(struct sk_buff *skb, struct genl_info *info); |
126 | |
127 | #endif /* __NET_WIRELESS_NL80211_H */ |
128 | |