cfg80211: configuration for WoWLAN over TCP
Intel Wireless devices are able to make a TCP connection after suspending, sending some data and waking up when the connection receives wakeup data (or breaks). Add the WoWLAN configuration and feature advertising API for it. Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
a0497f9f57
commit
2a0e047ed6
4 changed files with 474 additions and 4 deletions
|
@ -2991,6 +2991,17 @@ struct nl80211_wowlan_pattern_support {
|
|||
* @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN: Original length of the 802.3
|
||||
* packet, may be bigger than the @NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023
|
||||
* attribute if the packet was truncated somewhere.
|
||||
* @NL80211_WOWLAN_TRIG_TCP_CONNECTION: TCP connection wake, see DOC section
|
||||
* "TCP connection wakeup" for more details. This is a nested attribute
|
||||
* containing the exact information for establishing and keeping alive
|
||||
* the TCP connection.
|
||||
* @NL80211_WOWLAN_TRIG_TCP_WAKEUP_MATCH: For wakeup reporting only, the
|
||||
* wakeup packet was received on the TCP connection
|
||||
* @NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST: For wakeup reporting only, the
|
||||
* TCP connection was lost or failed to be established
|
||||
* @NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS: For wakeup reporting only,
|
||||
* the TCP connection ran out of tokens to use for data to send to the
|
||||
* service
|
||||
* @NUM_NL80211_WOWLAN_TRIG: number of wake on wireless triggers
|
||||
* @MAX_NL80211_WOWLAN_TRIG: highest wowlan trigger attribute number
|
||||
*
|
||||
|
@ -3012,12 +3023,126 @@ enum nl80211_wowlan_triggers {
|
|||
NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN,
|
||||
NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023,
|
||||
NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN,
|
||||
NL80211_WOWLAN_TRIG_TCP_CONNECTION,
|
||||
NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH,
|
||||
NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST,
|
||||
NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_WOWLAN_TRIG,
|
||||
MAX_NL80211_WOWLAN_TRIG = NUM_NL80211_WOWLAN_TRIG - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* DOC: TCP connection wakeup
|
||||
*
|
||||
* Some devices can establish a TCP connection in order to be woken up by a
|
||||
* packet coming in from outside their network segment, or behind NAT. If
|
||||
* configured, the device will establish a TCP connection to the given
|
||||
* service, and periodically send data to that service. The first data
|
||||
* packet is usually transmitted after SYN/ACK, also ACKing the SYN/ACK.
|
||||
* The data packets can optionally include a (little endian) sequence
|
||||
* number (in the TCP payload!) that is generated by the device, and, also
|
||||
* optionally, a token from a list of tokens. This serves as a keep-alive
|
||||
* with the service, and for NATed connections, etc.
|
||||
*
|
||||
* During this keep-alive period, the server doesn't send any data to the
|
||||
* client. When receiving data, it is compared against the wakeup pattern
|
||||
* (and mask) and if it matches, the host is woken up. Similarly, if the
|
||||
* connection breaks or cannot be established to start with, the host is
|
||||
* also woken up.
|
||||
*
|
||||
* Developer's note: ARP offload is required for this, otherwise TCP
|
||||
* response packets might not go through correctly.
|
||||
*/
|
||||
|
||||
/**
|
||||
* struct nl80211_wowlan_tcp_data_seq - WoWLAN TCP data sequence
|
||||
* @start: starting value
|
||||
* @offset: offset of sequence number in packet
|
||||
* @len: length of the sequence value to write, 1 through 4
|
||||
*
|
||||
* Note: don't confuse with the TCP sequence number(s), this is for the
|
||||
* keepalive packet payload. The actual value is written into the packet
|
||||
* in little endian.
|
||||
*/
|
||||
struct nl80211_wowlan_tcp_data_seq {
|
||||
__u32 start, offset, len;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nl80211_wowlan_tcp_data_token - WoWLAN TCP data token config
|
||||
* @offset: offset of token in packet
|
||||
* @len: length of each token
|
||||
* @token_stream: stream of data to be used for the tokens, the length must
|
||||
* be a multiple of @len for this to make sense
|
||||
*/
|
||||
struct nl80211_wowlan_tcp_data_token {
|
||||
__u32 offset, len;
|
||||
__u8 token_stream[];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct nl80211_wowlan_tcp_data_token_feature - data token features
|
||||
* @min_len: minimum token length
|
||||
* @max_len: maximum token length
|
||||
* @bufsize: total available token buffer size (max size of @token_stream)
|
||||
*/
|
||||
struct nl80211_wowlan_tcp_data_token_feature {
|
||||
__u32 min_len, max_len, bufsize;
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_wowlan_tcp_attrs - WoWLAN TCP connection parameters
|
||||
* @__NL80211_WOWLAN_TCP_INVALID: invalid number for nested attributes
|
||||
* @NL80211_WOWLAN_TCP_SRC_IPV4: source IPv4 address (in network byte order)
|
||||
* @NL80211_WOWLAN_TCP_DST_IPV4: destination IPv4 address
|
||||
* (in network byte order)
|
||||
* @NL80211_WOWLAN_TCP_DST_MAC: destination MAC address, this is given because
|
||||
* route lookup when configured might be invalid by the time we suspend,
|
||||
* and doing a route lookup when suspending is no longer possible as it
|
||||
* might require ARP querying.
|
||||
* @NL80211_WOWLAN_TCP_SRC_PORT: source port (u16); optional, if not given a
|
||||
* socket and port will be allocated
|
||||
* @NL80211_WOWLAN_TCP_DST_PORT: destination port (u16)
|
||||
* @NL80211_WOWLAN_TCP_DATA_PAYLOAD: data packet payload, at least one byte.
|
||||
* For feature advertising, a u32 attribute holding the maximum length
|
||||
* of the data payload.
|
||||
* @NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ: data packet sequence configuration
|
||||
* (if desired), a &struct nl80211_wowlan_tcp_data_seq. For feature
|
||||
* advertising it is just a flag
|
||||
* @NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN: data packet token configuration,
|
||||
* see &struct nl80211_wowlan_tcp_data_token and for advertising see
|
||||
* &struct nl80211_wowlan_tcp_data_token_feature.
|
||||
* @NL80211_WOWLAN_TCP_DATA_INTERVAL: data interval in seconds, maximum
|
||||
* interval in feature advertising (u32)
|
||||
* @NL80211_WOWLAN_TCP_WAKE_PAYLOAD: wake packet payload, for advertising a
|
||||
* u32 attribute holding the maximum length
|
||||
* @NL80211_WOWLAN_TCP_WAKE_MASK: Wake packet payload mask, not used for
|
||||
* feature advertising. The mask works like @NL80211_WOWLAN_PKTPAT_MASK
|
||||
* but on the TCP payload only.
|
||||
* @NUM_NL80211_WOWLAN_TCP: number of TCP attributes
|
||||
* @MAX_NL80211_WOWLAN_TCP: highest attribute number
|
||||
*/
|
||||
enum nl80211_wowlan_tcp_attrs {
|
||||
__NL80211_WOWLAN_TCP_INVALID,
|
||||
NL80211_WOWLAN_TCP_SRC_IPV4,
|
||||
NL80211_WOWLAN_TCP_DST_IPV4,
|
||||
NL80211_WOWLAN_TCP_DST_MAC,
|
||||
NL80211_WOWLAN_TCP_SRC_PORT,
|
||||
NL80211_WOWLAN_TCP_DST_PORT,
|
||||
NL80211_WOWLAN_TCP_DATA_PAYLOAD,
|
||||
NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ,
|
||||
NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN,
|
||||
NL80211_WOWLAN_TCP_DATA_INTERVAL,
|
||||
NL80211_WOWLAN_TCP_WAKE_PAYLOAD,
|
||||
NL80211_WOWLAN_TCP_WAKE_MASK,
|
||||
|
||||
/* keep last */
|
||||
NUM_NL80211_WOWLAN_TCP,
|
||||
MAX_NL80211_WOWLAN_TCP = NUM_NL80211_WOWLAN_TCP - 1
|
||||
};
|
||||
|
||||
/**
|
||||
* enum nl80211_iface_limit_attrs - limit attributes
|
||||
* @NL80211_IFACE_LIMIT_UNSPEC: (reserved)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue