diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/net/mac80211.h | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index bbae3d9b1176..3a47877f4965 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/wireless.h> | 19 | #include <linux/wireless.h> |
20 | #include <linux/device.h> | 20 | #include <linux/device.h> |
21 | #include <linux/ieee80211.h> | 21 | #include <linux/ieee80211.h> |
22 | #include <linux/inetdevice.h> | ||
23 | #include <net/cfg80211.h> | 22 | #include <net/cfg80211.h> |
24 | 23 | ||
25 | /** | 24 | /** |
@@ -147,6 +146,7 @@ struct ieee80211_low_level_stats { | |||
147 | * enabled/disabled (beaconing modes) | 146 | * enabled/disabled (beaconing modes) |
148 | * @BSS_CHANGED_CQM: Connection quality monitor config changed | 147 | * @BSS_CHANGED_CQM: Connection quality monitor config changed |
149 | * @BSS_CHANGED_IBSS: IBSS join status changed | 148 | * @BSS_CHANGED_IBSS: IBSS join status changed |
149 | * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. | ||
150 | */ | 150 | */ |
151 | enum ieee80211_bss_change { | 151 | enum ieee80211_bss_change { |
152 | BSS_CHANGED_ASSOC = 1<<0, | 152 | BSS_CHANGED_ASSOC = 1<<0, |
@@ -161,10 +161,18 @@ enum ieee80211_bss_change { | |||
161 | BSS_CHANGED_BEACON_ENABLED = 1<<9, | 161 | BSS_CHANGED_BEACON_ENABLED = 1<<9, |
162 | BSS_CHANGED_CQM = 1<<10, | 162 | BSS_CHANGED_CQM = 1<<10, |
163 | BSS_CHANGED_IBSS = 1<<11, | 163 | BSS_CHANGED_IBSS = 1<<11, |
164 | BSS_CHANGED_ARP_FILTER = 1<<12, | ||
164 | 165 | ||
165 | /* when adding here, make sure to change ieee80211_reconfig */ | 166 | /* when adding here, make sure to change ieee80211_reconfig */ |
166 | }; | 167 | }; |
167 | 168 | ||
169 | /* | ||
170 | * The maximum number of IPv4 addresses listed for ARP filtering. If the number | ||
171 | * of addresses for an interface increase beyond this value, hardware ARP | ||
172 | * filtering will be disabled. | ||
173 | */ | ||
174 | #define IEEE80211_BSS_ARP_ADDR_LIST_LEN 4 | ||
175 | |||
168 | /** | 176 | /** |
169 | * struct ieee80211_bss_conf - holds the BSS's changing parameters | 177 | * struct ieee80211_bss_conf - holds the BSS's changing parameters |
170 | * | 178 | * |
@@ -200,6 +208,15 @@ enum ieee80211_bss_change { | |||
200 | * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value | 208 | * @cqm_rssi_thold: Connection quality monitor RSSI threshold, a zero value |
201 | * implies disabled | 209 | * implies disabled |
202 | * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis | 210 | * @cqm_rssi_hyst: Connection quality monitor RSSI hysteresis |
211 | * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The | ||
212 | * may filter ARP queries targeted for other addresses than listed here. | ||
213 | * The driver must allow ARP queries targeted for all address listed here | ||
214 | * to pass through. An empty list implies no ARP queries need to pass. | ||
215 | * @arp_addr_cnt: Number of addresses currently on the list. | ||
216 | * @arp_filter_enabled: Enable ARP filtering - if enabled, the hardware may | ||
217 | * filter ARP queries based on the @arp_addr_list, if disabled, the | ||
218 | * hardware must not perform any ARP filtering. Note, that the filter will | ||
219 | * be enabled also in promiscuous mode. | ||
203 | */ | 220 | */ |
204 | struct ieee80211_bss_conf { | 221 | struct ieee80211_bss_conf { |
205 | const u8 *bssid; | 222 | const u8 *bssid; |
@@ -220,6 +237,9 @@ struct ieee80211_bss_conf { | |||
220 | s32 cqm_rssi_thold; | 237 | s32 cqm_rssi_thold; |
221 | u32 cqm_rssi_hyst; | 238 | u32 cqm_rssi_hyst; |
222 | enum nl80211_channel_type channel_type; | 239 | enum nl80211_channel_type channel_type; |
240 | __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; | ||
241 | u8 arp_addr_cnt; | ||
242 | bool arp_filter_enabled; | ||
223 | }; | 243 | }; |
224 | 244 | ||
225 | /** | 245 | /** |
@@ -1529,16 +1549,6 @@ enum ieee80211_ampdu_mlme_action { | |||
1529 | * of the bss parameters has changed when a call is made. The callback | 1549 | * of the bss parameters has changed when a call is made. The callback |
1530 | * can sleep. | 1550 | * can sleep. |
1531 | * | 1551 | * |
1532 | * @configure_arp_filter: Configuration function for hardware ARP query filter. | ||
1533 | * This function is called with all the IP addresses configured to the | ||
1534 | * interface as argument - all ARP queries targeted to any of these | ||
1535 | * addresses must pass through. If the hardware filter does not support | ||
1536 | * enought addresses, hardware filtering must be disabled. The ifa_list | ||
1537 | * argument may be NULL, indicating that filtering must be disabled. | ||
1538 | * This function is called upon association complete with current | ||
1539 | * address(es), and while associated whenever the IP address(es) change. | ||
1540 | * The callback can sleep. | ||
1541 | * | ||
1542 | * @prepare_multicast: Prepare for multicast filter configuration. | 1552 | * @prepare_multicast: Prepare for multicast filter configuration. |
1543 | * This callback is optional, and its return value is passed | 1553 | * This callback is optional, and its return value is passed |
1544 | * to configure_filter(). This callback must be atomic. | 1554 | * to configure_filter(). This callback must be atomic. |
@@ -1678,9 +1688,6 @@ struct ieee80211_ops { | |||
1678 | struct ieee80211_vif *vif, | 1688 | struct ieee80211_vif *vif, |
1679 | struct ieee80211_bss_conf *info, | 1689 | struct ieee80211_bss_conf *info, |
1680 | u32 changed); | 1690 | u32 changed); |
1681 | int (*configure_arp_filter)(struct ieee80211_hw *hw, | ||
1682 | struct ieee80211_vif *vif, | ||
1683 | struct in_ifaddr *ifa_list); | ||
1684 | u64 (*prepare_multicast)(struct ieee80211_hw *hw, | 1691 | u64 (*prepare_multicast)(struct ieee80211_hw *hw, |
1685 | struct netdev_hw_addr_list *mc_list); | 1692 | struct netdev_hw_addr_list *mc_list); |
1686 | void (*configure_filter)(struct ieee80211_hw *hw, | 1693 | void (*configure_filter)(struct ieee80211_hw *hw, |