aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/mac80211.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r--include/net/mac80211.h151
1 files changed, 95 insertions, 56 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 5ff45553a985..855754d4c50d 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -467,7 +467,6 @@ enum ieee80211_if_types {
467 * @mac_addr: pointer to MAC address of the interface. This pointer is valid 467 * @mac_addr: pointer to MAC address of the interface. This pointer is valid
468 * until the interface is removed (i.e. it cannot be used after 468 * until the interface is removed (i.e. it cannot be used after
469 * remove_interface() callback was called for this interface). 469 * remove_interface() callback was called for this interface).
470 * This pointer will be %NULL for monitor interfaces, be careful.
471 * 470 *
472 * This structure is used in add_interface() and remove_interface() 471 * This structure is used in add_interface() and remove_interface()
473 * callbacks of &struct ieee80211_hw. 472 * callbacks of &struct ieee80211_hw.
@@ -653,13 +652,9 @@ struct ieee80211_hw {
653 652
654/* hole at 8 */ 653/* hole at 8 */
655 654
656 /* Device is capable of performing full monitor mode even during 655/* hole at 9 */
657 * normal operation. */
658#define IEEE80211_HW_MONITOR_DURING_OPER (1<<9)
659 656
660 /* Device does not need BSSID filter set to broadcast in order to 657/* hole at 10 */
661 * receive all probe responses while scanning */
662#define IEEE80211_HW_NO_PROBE_FILTERING (1<<10)
663 658
664 /* Channels are already configured to the default regulatory domain 659 /* Channels are already configured to the default regulatory domain
665 * specified in the device's EEPROM */ 660 * specified in the device's EEPROM */
@@ -694,6 +689,39 @@ static inline void SET_IEEE80211_PERM_ADDR(struct ieee80211_hw *hw, u8 *addr)
694 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN); 689 memcpy(hw->wiphy->perm_addr, addr, ETH_ALEN);
695} 690}
696 691
692/*
693 * flags for change_filter_flags()
694 *
695 * Note that e.g. if PROMISC_IN_BSS is unset then
696 * you should still do MAC address filtering if
697 * possible even if OTHER_BSS is set to indicate
698 * no BSSID filtering should be done.
699 */
700/*
701 * promiscuous mode within your BSS,
702 * think of the BSS as your network segment and then this corresponds
703 * to the regular ethernet device promiscuous mode
704 */
705#define FIF_PROMISC_IN_BSS 0x01
706/* show all multicast frames */
707#define FIF_ALLMULTI 0x02
708/* show frames with failed FCS, but set RX_FLAG_FAILED_FCS_CRC for them */
709#define FIF_FCSFAIL 0x04
710/* show frames with failed PLCP CRC, but set RX_FLAG_FAILED_PLCP_CRC for them */
711#define FIF_PLCPFAIL 0x08
712/*
713 * This flag is set during scanning to indicate to the hardware
714 * that it should not filter beacons or probe responses by BSSID.
715 */
716#define FIF_BCN_PRBRESP_PROMISC 0x10
717/*
718 * show control frames, if PROMISC_IN_BSS is not set then
719 * only those addressed to this station
720 */
721#define FIF_CONTROL 0x20
722/* show frames from other BSSes */
723#define FIF_OTHER_BSS 0x40
724
697/* Configuration block used by the low-level driver to tell the 802.11 code 725/* Configuration block used by the low-level driver to tell the 802.11 code
698 * about supported hardware features and to pass function pointers to callback 726 * about supported hardware features and to pass function pointers to callback
699 * functions. */ 727 * functions. */
@@ -706,32 +734,55 @@ struct ieee80211_ops {
706 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb, 734 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb,
707 struct ieee80211_tx_control *control); 735 struct ieee80211_tx_control *control);
708 736
709 /* Handler that is called when any netdevice attached to the hardware 737 /*
710 * device is set UP for the first time. This can be used, e.g., to 738 * Called before the first netdevice attached to the hardware
711 * enable interrupts and beacon sending. */ 739 * is enabled. This should turn on the hardware and must turn on
712 int (*open)(struct ieee80211_hw *hw); 740 * frame reception (for possibly enabled monitor interfaces.)
713 741 * Returns negative error codes, these may be seen in userspace,
714 /* Handler that is called when the last netdevice attached to the 742 * or zero.
715 * hardware device is set DOWN. This can be used, e.g., to disable 743 * When the device is started it should not have a MAC address
716 * interrupts and beacon sending. */ 744 * to avoid acknowledging frames before a non-monitor device
717 int (*stop)(struct ieee80211_hw *hw); 745 * is added.
718 746 *
719 /* Handler for asking a driver if a new interface can be added (or, 747 * Must be implemented.
720 * more exactly, set UP). If the handler returns zero, the interface 748 */
721 * is added. Driver should perform any initialization it needs prior 749 int (*start)(struct ieee80211_hw *hw);
722 * to returning zero. By returning non-zero addition of the interface 750
723 * is inhibited. Unless monitor_during_oper is set, it is guaranteed 751 /*
724 * that monitor interfaces and normal interfaces are mutually 752 * Called after last netdevice attached to the hardware
725 * exclusive. If assigned, the open() handler is called after 753 * is disabled. This should turn off the hardware (at least
726 * add_interface() if this is the first device added. The 754 * it must turn off frame reception.)
727 * add_interface() callback has to be assigned because it is the only 755 * May be called right after add_interface if that rejects
728 * way to obtain the requested MAC address for any interface. 756 * an interface.
757 *
758 * Must be implemented.
759 */
760 void (*stop)(struct ieee80211_hw *hw);
761
762 /*
763 * Called when a netdevice attached to the hardware is enabled.
764 * Because it is not called for monitor mode devices, open()
765 * and stop() must be implemented.
766 * The driver should perform any initialization it needs before
767 * the device can be enabled. The initial configuration for the
768 * interface is given in the conf parameter.
769 *
770 * Must be implemented.
729 */ 771 */
730 int (*add_interface)(struct ieee80211_hw *hw, 772 int (*add_interface)(struct ieee80211_hw *hw,
731 struct ieee80211_if_init_conf *conf); 773 struct ieee80211_if_init_conf *conf);
732 774
733 /* Notify a driver that an interface is going down. The stop() handler 775 /*
734 * is called prior to this if this is a last interface. */ 776 * Notifies a driver that an interface is going down. The stop() handler
777 * is called after this if it is the last interface and no monitor
778 * interfaces are present.
779 * When all interfaces are removed, the MAC address in the hardware
780 * must be cleared so the device no longer acknowledges packets,
781 * the mac_addr member of the conf structure is, however, set to the
782 * MAC address of the device going away.
783 *
784 * Hence, this callback must be implemented.
785 */
735 void (*remove_interface)(struct ieee80211_hw *hw, 786 void (*remove_interface)(struct ieee80211_hw *hw,
736 struct ieee80211_if_init_conf *conf); 787 struct ieee80211_if_init_conf *conf);
737 788
@@ -744,15 +795,21 @@ struct ieee80211_ops {
744 int (*config_interface)(struct ieee80211_hw *hw, 795 int (*config_interface)(struct ieee80211_hw *hw,
745 int if_id, struct ieee80211_if_conf *conf); 796 int if_id, struct ieee80211_if_conf *conf);
746 797
747 /* ieee80211 drivers do not have access to the &struct net_device 798 /*
748 * that is (are) connected with their device. Hence (and because 799 * Configure the device's RX filter.
749 * we need to combine the multicast lists and flags for multiple 800 *
750 * virtual interfaces), they cannot assign set_multicast_list. 801 * The multicast address filter must be changed if the hardware flags
751 * The parameters here replace dev->flags and dev->mc_count, 802 * indicate that one is present.
752 * dev->mc_list is replaced by calling ieee80211_get_mc_list_item. 803 *
753 * Must be atomic. */ 804 * All unsupported flags in 'total_flags' must be cleared,
754 void (*set_multicast_list)(struct ieee80211_hw *hw, 805 * clear all bits except those you honoured.
755 unsigned short flags, int mc_count); 806 *
807 * The callback must be implemented and must be atomic.
808 */
809 void (*configure_filter)(struct ieee80211_hw *hw,
810 unsigned int changed_flags,
811 unsigned int *total_flags,
812 int mc_count, struct dev_addr_list *mc_list);
756 813
757 /* Set TIM bit handler. If the hardware/firmware takes care of beacon 814 /* Set TIM bit handler. If the hardware/firmware takes care of beacon
758 * generation, IEEE 802.11 code uses this function to tell the 815 * generation, IEEE 802.11 code uses this function to tell the
@@ -1155,24 +1212,6 @@ void ieee80211_stop_queues(struct ieee80211_hw *hw);
1155 */ 1212 */
1156void ieee80211_wake_queues(struct ieee80211_hw *hw); 1213void ieee80211_wake_queues(struct ieee80211_hw *hw);
1157 1214
1158/**
1159 * ieee80211_get_mc_list_item - iteration over items in multicast list
1160 * @hw: pointer as obtained from ieee80211_alloc_hw().
1161 * @prev: value returned by previous call to ieee80211_get_mc_list_item() or
1162 * NULL to start a new iteration.
1163 * @ptr: pointer to buffer of void * type for internal usage of
1164 * ieee80211_get_mc_list_item().
1165 *
1166 * Iterates over items in multicast list of given device. To get the first
1167 * item, pass NULL in @prev and in *@ptr. In subsequent calls, pass the
1168 * value returned by previous call in @prev. Don't alter *@ptr during
1169 * iteration. When there are no more items, NULL is returned.
1170 */
1171struct dev_mc_list *
1172ieee80211_get_mc_list_item(struct ieee80211_hw *hw,
1173 struct dev_mc_list *prev,
1174 void **ptr);
1175
1176/* called by driver to notify scan status completed */ 1215/* called by driver to notify scan status completed */
1177void ieee80211_scan_completed(struct ieee80211_hw *hw); 1216void ieee80211_scan_completed(struct ieee80211_hw *hw);
1178 1217