mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Work continues in various areas:
* port authorized event for 4-way-HS offload (Avi)
* enable MFP optional for such devices (Emmanuel)
* Kees's timer setup patch for mac80211 mesh
(the part that isn't trivially scripted)
* improve VLAN vs. TXQ handling (myself)
* load regulatory database as firmware file (myself)
* with various other small improvements and cleanups
I merged net-next once in the meantime to allow Kees's
timer setup patch to go in.
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEExu3sM/nZ1eRSfR9Ha3t4Rpy0AB0FAlneDzEACgkQa3t4Rpy0
AB3EHBAAhQana6YiMx0Ag4ANGlll3xnxFCZlkmlBoJ/EwKgQhPonylHntuvtkXf6
kZRsOr4uA+wpN/opHLGfMJzat9uxztHVo2sT4rxVnvZq4DYcB/JdlhTMLZDsdDgm
kHRpUEKh/+2FAgq2A4VEUpVb+Mtg0dq8iJJXFw89xb3Sw5UhNA6ljWQZ4zpXuI0P
xOB8Z52LqAcMNnspP+L2TRpanu2ETLcl4Laj+cMl1Yiut2GHkclXUoGvbZ1al5SO
CYqpjVKk67ENLJMrmhQ7DVzj0rpwlV+Eh756RU9DhamPAWbxqWLWJgfuGBskRXnI
GneCUQkLZ5j1kUJjvQdXBv1UmpkCG4/3yITZX8kL3UR+AbhSCqzVQDo7it5hsWEf
XTNAlhdTDhSn7OQQ6XOxvWeydAiaaz671bhPuIvKEo9D/+7Uv0PxHmvu8QqUm0xH
Wvyh0LYRrblDz7fgEkaFctjJKYKnwviQ9O2LGx98C8NVam+Qyti2MlLA4AO5E+it
ky97W3Dh5ftjQhFD0Ip9P4+BO/9hvNELlCRWUXI197n6B0/KH7FWX1eqw/vpnKc4
w7VB/V59mB8zMmZ1QUdwT1/Ru+MD++6ds93STttZvH/0P3H0dDRGuxUK4m32YHiX
s97uSBAbBMy2UH6b8HyxjVMGWvmW3KRakBID1zv2NRSIXtyfWj4=
=gW8q
-----END PGP SIGNATURE-----
Merge tag 'mac80211-next-for-davem-2017-10-11' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
Johannes Berg says:
====================
Work continues in various areas:
* port authorized event for 4-way-HS offload (Avi)
* enable MFP optional for such devices (Emmanuel)
* Kees's timer setup patch for mac80211 mesh
(the part that isn't trivially scripted)
* improve VLAN vs. TXQ handling (myself)
* load regulatory database as firmware file (myself)
* with various other small improvements and cleanups
I merged net-next once in the meantime to allow Kees's
timer setup patch to go in.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
df2fd38a08
47 changed files with 1278 additions and 899 deletions
|
|
@ -4346,19 +4346,6 @@ static inline int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
|
|||
return ieee80211_data_to_8023_exthdr(skb, NULL, addr, iftype);
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_data_from_8023 - convert an 802.3 frame to 802.11
|
||||
* @skb: the 802.3 frame
|
||||
* @addr: the device MAC address
|
||||
* @iftype: the virtual interface type
|
||||
* @bssid: the network bssid (used only for iftype STATION and ADHOC)
|
||||
* @qos: build 802.11 QoS data frame
|
||||
* Return: 0 on success, or a negative error code.
|
||||
*/
|
||||
int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr,
|
||||
enum nl80211_iftype iftype, const u8 *bssid,
|
||||
bool qos);
|
||||
|
||||
/**
|
||||
* ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame
|
||||
*
|
||||
|
|
@ -5441,9 +5428,6 @@ cfg80211_connect_timeout(struct net_device *dev, const u8 *bssid,
|
|||
* @req_ie_len: association request IEs length
|
||||
* @resp_ie: association response IEs (may be %NULL)
|
||||
* @resp_ie_len: assoc response IEs length
|
||||
* @authorized: true if the 802.1X authentication was done by the driver or is
|
||||
* not needed (e.g., when Fast Transition protocol was used), false
|
||||
* otherwise. Ignored for networks that don't use 802.1X authentication.
|
||||
*/
|
||||
struct cfg80211_roam_info {
|
||||
struct ieee80211_channel *channel;
|
||||
|
|
@ -5453,7 +5437,6 @@ struct cfg80211_roam_info {
|
|||
size_t req_ie_len;
|
||||
const u8 *resp_ie;
|
||||
size_t resp_ie_len;
|
||||
bool authorized;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -5477,6 +5460,23 @@ struct cfg80211_roam_info {
|
|||
void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info,
|
||||
gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_port_authorized - notify cfg80211 of successful security association
|
||||
*
|
||||
* @dev: network device
|
||||
* @bssid: the BSSID of the AP
|
||||
* @gfp: allocation flags
|
||||
*
|
||||
* This function should be called by a driver that supports 4 way handshake
|
||||
* offload after a security association was successfully established (i.e.,
|
||||
* the 4 way handshake was completed successfully). The call to this function
|
||||
* should be preceded with a call to cfg80211_connect_result(),
|
||||
* cfg80211_connect_done(), cfg80211_connect_bss() or cfg80211_roamed() to
|
||||
* indicate the 802.11 association.
|
||||
*/
|
||||
void cfg80211_port_authorized(struct net_device *dev, const u8 *bssid,
|
||||
gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_disconnected - notify cfg80211 that connection was dropped
|
||||
*
|
||||
|
|
@ -5934,7 +5934,8 @@ int cfg80211_get_p2p_attr(const u8 *ies, unsigned int len,
|
|||
* @ies: the IE buffer
|
||||
* @ielen: the length of the IE buffer
|
||||
* @ids: an array with element IDs that are allowed before
|
||||
* the split
|
||||
* the split. A WLAN_EID_EXTENSION value means that the next
|
||||
* EID in the list is a sub-element of the EXTENSION IE.
|
||||
* @n_ids: the size of the element ID array
|
||||
* @after_ric: array IE types that come after the RIC element
|
||||
* @n_after_ric: size of the @after_ric array
|
||||
|
|
@ -5965,7 +5966,8 @@ size_t ieee80211_ie_split_ric(const u8 *ies, size_t ielen,
|
|||
* @ies: the IE buffer
|
||||
* @ielen: the length of the IE buffer
|
||||
* @ids: an array with element IDs that are allowed before
|
||||
* the split
|
||||
* the split. A WLAN_EID_EXTENSION value means that the next
|
||||
* EID in the list is a sub-element of the EXTENSION IE.
|
||||
* @n_ids: the size of the element ID array
|
||||
* @offset: offset where to start splitting in the buffer
|
||||
*
|
||||
|
|
|
|||
|
|
@ -90,6 +90,13 @@ typedef void fq_skb_free_t(struct fq *,
|
|||
struct fq_flow *,
|
||||
struct sk_buff *);
|
||||
|
||||
/* Return %true to filter (drop) the frame. */
|
||||
typedef bool fq_skb_filter_t(struct fq *,
|
||||
struct fq_tin *,
|
||||
struct fq_flow *,
|
||||
struct sk_buff *,
|
||||
void *);
|
||||
|
||||
typedef struct fq_flow *fq_flow_get_default_t(struct fq *,
|
||||
struct fq_tin *,
|
||||
int idx,
|
||||
|
|
|
|||
|
|
@ -12,24 +12,22 @@
|
|||
|
||||
/* functions that are embedded into includer */
|
||||
|
||||
static struct sk_buff *fq_flow_dequeue(struct fq *fq,
|
||||
struct fq_flow *flow)
|
||||
static void fq_adjust_removal(struct fq *fq,
|
||||
struct fq_flow *flow,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct fq_tin *tin = flow->tin;
|
||||
struct fq_flow *i;
|
||||
struct sk_buff *skb;
|
||||
|
||||
lockdep_assert_held(&fq->lock);
|
||||
|
||||
skb = __skb_dequeue(&flow->queue);
|
||||
if (!skb)
|
||||
return NULL;
|
||||
|
||||
tin->backlog_bytes -= skb->len;
|
||||
tin->backlog_packets--;
|
||||
flow->backlog -= skb->len;
|
||||
fq->backlog--;
|
||||
fq->memory_usage -= skb->truesize;
|
||||
}
|
||||
|
||||
static void fq_rejigger_backlog(struct fq *fq, struct fq_flow *flow)
|
||||
{
|
||||
struct fq_flow *i;
|
||||
|
||||
if (flow->backlog == 0) {
|
||||
list_del_init(&flow->backlogchain);
|
||||
|
|
@ -43,6 +41,21 @@ static struct sk_buff *fq_flow_dequeue(struct fq *fq,
|
|||
list_move_tail(&flow->backlogchain,
|
||||
&i->backlogchain);
|
||||
}
|
||||
}
|
||||
|
||||
static struct sk_buff *fq_flow_dequeue(struct fq *fq,
|
||||
struct fq_flow *flow)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
lockdep_assert_held(&fq->lock);
|
||||
|
||||
skb = __skb_dequeue(&flow->queue);
|
||||
if (!skb)
|
||||
return NULL;
|
||||
|
||||
fq_adjust_removal(fq, flow, skb);
|
||||
fq_rejigger_backlog(fq, flow);
|
||||
|
||||
return skb;
|
||||
}
|
||||
|
|
@ -188,6 +201,45 @@ static void fq_tin_enqueue(struct fq *fq,
|
|||
}
|
||||
}
|
||||
|
||||
static void fq_flow_filter(struct fq *fq,
|
||||
struct fq_flow *flow,
|
||||
fq_skb_filter_t filter_func,
|
||||
void *filter_data,
|
||||
fq_skb_free_t free_func)
|
||||
{
|
||||
struct fq_tin *tin = flow->tin;
|
||||
struct sk_buff *skb, *tmp;
|
||||
|
||||
lockdep_assert_held(&fq->lock);
|
||||
|
||||
skb_queue_walk_safe(&flow->queue, skb, tmp) {
|
||||
if (!filter_func(fq, tin, flow, skb, filter_data))
|
||||
continue;
|
||||
|
||||
__skb_unlink(skb, &flow->queue);
|
||||
fq_adjust_removal(fq, flow, skb);
|
||||
free_func(fq, tin, flow, skb);
|
||||
}
|
||||
|
||||
fq_rejigger_backlog(fq, flow);
|
||||
}
|
||||
|
||||
static void fq_tin_filter(struct fq *fq,
|
||||
struct fq_tin *tin,
|
||||
fq_skb_filter_t filter_func,
|
||||
void *filter_data,
|
||||
fq_skb_free_t free_func)
|
||||
{
|
||||
struct fq_flow *flow;
|
||||
|
||||
lockdep_assert_held(&fq->lock);
|
||||
|
||||
list_for_each_entry(flow, &tin->new_flows, flowchain)
|
||||
fq_flow_filter(fq, flow, filter_func, filter_data, free_func);
|
||||
list_for_each_entry(flow, &tin->old_flows, flowchain)
|
||||
fq_flow_filter(fq, flow, filter_func, filter_data, free_func);
|
||||
}
|
||||
|
||||
static void fq_flow_reset(struct fq *fq,
|
||||
struct fq_flow *flow,
|
||||
fq_skb_free_t free_func)
|
||||
|
|
|
|||
|
|
@ -5441,8 +5441,14 @@ void ieee80211_mark_rx_ba_filtered_frames(struct ieee80211_sta *pubsta, u8 tid,
|
|||
*/
|
||||
void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);
|
||||
|
||||
/**
|
||||
* ieee80211_manage_rx_ba_offl - helper to queue an RX BA work
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback
|
||||
* @addr: station mac address
|
||||
* @tid: the rx tid
|
||||
*/
|
||||
void ieee80211_manage_rx_ba_offl(struct ieee80211_vif *vif, const u8 *addr,
|
||||
unsigned int bit);
|
||||
unsigned int tid);
|
||||
|
||||
/**
|
||||
* ieee80211_start_rx_ba_session_offl - start a Rx BA session
|
||||
|
|
|
|||
Loading…
Reference in a new issue