diff options
Diffstat (limited to 'include/net/cfg80211.h')
-rw-r--r-- | include/net/cfg80211.h | 83 |
1 files changed, 83 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 */ |