diff options
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/cfg80211.h | 83 | ||||
-rw-r--r-- | include/net/mac80211.h | 5 |
2 files changed, 88 insertions, 0 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 10eb53e2bc9f..885d4e5bc4b5 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -857,6 +857,8 @@ enum tx_power_setting { | |||
857 | * | 857 | * |
858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting | 858 | * @rfkill_poll: polls the hw rfkill line, use cfg80211 reporting |
859 | * functions to adjust rfkill hw state | 859 | * functions to adjust rfkill hw state |
860 | * | ||
861 | * @testmode_cmd: run a test mode command | ||
860 | */ | 862 | */ |
861 | struct cfg80211_ops { | 863 | struct cfg80211_ops { |
862 | int (*suspend)(struct wiphy *wiphy); | 864 | int (*suspend)(struct wiphy *wiphy); |
@@ -955,6 +957,10 @@ struct cfg80211_ops { | |||
955 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); | 957 | int (*get_tx_power)(struct wiphy *wiphy, int *dbm); |
956 | 958 | ||
957 | void (*rfkill_poll)(struct wiphy *wiphy); | 959 | void (*rfkill_poll)(struct wiphy *wiphy); |
960 | |||
961 | #ifdef CONFIG_NL80211_TESTMODE | ||
962 | int (*testmode_cmd)(struct wiphy *wiphy, void *data, int len); | ||
963 | #endif | ||
958 | }; | 964 | }; |
959 | 965 | ||
960 | /* | 966 | /* |
@@ -1705,4 +1711,81 @@ void wiphy_rfkill_start_polling(struct wiphy *wiphy); | |||
1705 | */ | 1711 | */ |
1706 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | 1712 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); |
1707 | 1713 | ||
1714 | #ifdef CONFIG_NL80211_TESTMODE | ||
1715 | /** | ||
1716 | * cfg80211_testmode_alloc_reply_skb - allocate testmode reply | ||
1717 | * @wiphy: the wiphy | ||
1718 | * @approxlen: an upper bound of the length of the data that will | ||
1719 | * be put into the skb | ||
1720 | * | ||
1721 | * This function allocates and pre-fills an skb for a reply to | ||
1722 | * the testmode command. Since it is intended for a reply, calling | ||
1723 | * it outside of the @testmode_cmd operation is invalid. | ||
1724 | * | ||
1725 | * The returned skb (or %NULL if any errors happen) is pre-filled | ||
1726 | * with the wiphy index and set up in a way that any data that is | ||
1727 | * put into the skb (with skb_put(), nla_put() or similar) will end | ||
1728 | * up being within the %NL80211_ATTR_TESTDATA attribute, so all that | ||
1729 | * needs to be done with the skb is adding data for the corresponding | ||
1730 | * userspace tool which can then read that data out of the testdata | ||
1731 | * attribute. You must not modify the skb in any other way. | ||
1732 | * | ||
1733 | * When done, call cfg80211_testmode_reply() with the skb and return | ||
1734 | * its error code as the result of the @testmode_cmd operation. | ||
1735 | */ | ||
1736 | struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, | ||
1737 | int approxlen); | ||
1738 | |||
1739 | /** | ||
1740 | * cfg80211_testmode_reply - send the reply skb | ||
1741 | * @skb: The skb, must have been allocated with | ||
1742 | * cfg80211_testmode_alloc_reply_skb() | ||
1743 | * | ||
1744 | * Returns an error code or 0 on success, since calling this | ||
1745 | * function will usually be the last thing before returning | ||
1746 | * from the @testmode_cmd you should return the error code. | ||
1747 | * Note that this function consumes the skb regardless of the | ||
1748 | * return value. | ||
1749 | */ | ||
1750 | int cfg80211_testmode_reply(struct sk_buff *skb); | ||
1751 | |||
1752 | /** | ||
1753 | * cfg80211_testmode_alloc_event_skb - allocate testmode event | ||
1754 | * @wiphy: the wiphy | ||
1755 | * @approxlen: an upper bound of the length of the data that will | ||
1756 | * be put into the skb | ||
1757 | * @gfp: allocation flags | ||
1758 | * | ||
1759 | * This function allocates and pre-fills an skb for an event on the | ||
1760 | * testmode multicast group. | ||
1761 | * | ||
1762 | * The returned skb (or %NULL if any errors happen) is set up in the | ||
1763 | * same way as with cfg80211_testmode_alloc_reply_skb() but prepared | ||
1764 | * for an event. As there, you should simply add data to it that will | ||
1765 | * then end up in the %NL80211_ATTR_TESTDATA attribute. Again, you must | ||
1766 | * not modify the skb in any other way. | ||
1767 | * | ||
1768 | * When done filling the skb, call cfg80211_testmode_event() with the | ||
1769 | * skb to send the event. | ||
1770 | */ | ||
1771 | struct sk_buff *cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, | ||
1772 | int approxlen, gfp_t gfp); | ||
1773 | |||
1774 | /** | ||
1775 | * cfg80211_testmode_event - send the event | ||
1776 | * @skb: The skb, must have been allocated with | ||
1777 | * cfg80211_testmode_alloc_event_skb() | ||
1778 | * @gfp: allocation flags | ||
1779 | * | ||
1780 | * This function sends the given @skb, which must have been allocated | ||
1781 | * by cfg80211_testmode_alloc_event_skb(), as an event. It always | ||
1782 | * consumes it. | ||
1783 | */ | ||
1784 | void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp); | ||
1785 | |||
1786 | #define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd), | ||
1787 | #else | ||
1788 | #define CFG80211_TESTMODE_CMD(cmd) | ||
1789 | #endif | ||
1790 | |||
1708 | #endif /* __NET_CFG80211_H */ | 1791 | #endif /* __NET_CFG80211_H */ |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index fe80771d95f1..ce7cb1b5d453 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -1416,6 +1416,8 @@ enum ieee80211_ampdu_mlme_action { | |||
1416 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also | 1416 | * @rfkill_poll: Poll rfkill hardware state. If you need this, you also |
1417 | * need to set wiphy->rfkill_poll to %true before registration, | 1417 | * need to set wiphy->rfkill_poll to %true before registration, |
1418 | * and need to call wiphy_rfkill_set_hw_state() in the callback. | 1418 | * and need to call wiphy_rfkill_set_hw_state() in the callback. |
1419 | * | ||
1420 | * @testmode_cmd: Implement a cfg80211 test mode command. | ||
1419 | */ | 1421 | */ |
1420 | struct ieee80211_ops { | 1422 | struct ieee80211_ops { |
1421 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1423 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
@@ -1466,6 +1468,9 @@ struct ieee80211_ops { | |||
1466 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1468 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
1467 | 1469 | ||
1468 | void (*rfkill_poll)(struct ieee80211_hw *hw); | 1470 | void (*rfkill_poll)(struct ieee80211_hw *hw); |
1471 | #ifdef CONFIG_NL80211_TESTMODE | ||
1472 | int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len); | ||
1473 | #endif | ||
1469 | }; | 1474 | }; |
1470 | 1475 | ||
1471 | /** | 1476 | /** |