
The removed patches were applied upstream. Remove the 300-mac80211-optimize-skb-resizing.patch. This patch was not applied upstream, but it conflicts with upstream changes and needs bigger changes. It was applied with Felix to remove this patch for now. It should be reworked and then send upstream later. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
110 lines
2.9 KiB
Diff
110 lines
2.9 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Fri, 21 Aug 2020 05:51:58 +0200
|
|
Subject: [PATCH] mac80211: notify the driver when a sta uses 4-address
|
|
mode
|
|
|
|
This is needed for encapsulation offload of 4-address mode packets
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/include/net/mac80211.h
|
|
+++ b/include/net/mac80211.h
|
|
@@ -3843,6 +3843,8 @@ enum ieee80211_reconfig_type {
|
|
* This callback may sleep.
|
|
* @update_vif_config: Update virtual interface offload flags
|
|
* This callback may sleep.
|
|
+ * @sta_set_4addr: Called to notify the driver when a station starts/stops using
|
|
+ * 4-address mode
|
|
*/
|
|
struct ieee80211_ops {
|
|
void (*tx)(struct ieee80211_hw *hw,
|
|
@@ -4156,6 +4158,8 @@ struct ieee80211_ops {
|
|
struct ieee80211_sta *sta, u8 tids);
|
|
void (*update_vif_offload)(struct ieee80211_hw *hw,
|
|
struct ieee80211_vif *vif);
|
|
+ void (*sta_set_4addr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|
+ struct ieee80211_sta *sta, bool enabled);
|
|
};
|
|
|
|
/**
|
|
--- a/net/mac80211/cfg.c
|
|
+++ b/net/mac80211/cfg.c
|
|
@@ -1696,6 +1696,7 @@ static int ieee80211_change_station(stru
|
|
|
|
rcu_assign_pointer(vlansdata->u.vlan.sta, sta);
|
|
__ieee80211_check_fast_rx_iface(vlansdata);
|
|
+ drv_sta_set_4addr(local, sta->sdata, &sta->sta, true);
|
|
}
|
|
|
|
if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
|
|
--- a/net/mac80211/driver-ops.h
|
|
+++ b/net/mac80211/driver-ops.h
|
|
@@ -1399,4 +1399,18 @@ static inline void drv_update_vif_offloa
|
|
trace_drv_return_void(local);
|
|
}
|
|
|
|
+static inline void drv_sta_set_4addr(struct ieee80211_local *local,
|
|
+ struct ieee80211_sub_if_data *sdata,
|
|
+ struct ieee80211_sta *sta, bool enabled)
|
|
+{
|
|
+ sdata = get_bss_sdata(sdata);
|
|
+ if (!check_sdata_in_driver(sdata))
|
|
+ return;
|
|
+
|
|
+ trace_drv_sta_set_4addr(local, sdata, sta, enabled);
|
|
+ if (local->ops->sta_set_4addr)
|
|
+ local->ops->sta_set_4addr(&local->hw, &sdata->vif, sta, enabled);
|
|
+ trace_drv_return_void(local);
|
|
+}
|
|
+
|
|
#endif /* __MAC80211_DRIVER_OPS */
|
|
--- a/net/mac80211/mlme.c
|
|
+++ b/net/mac80211/mlme.c
|
|
@@ -3523,6 +3523,9 @@ static bool ieee80211_assoc_success(stru
|
|
goto out;
|
|
}
|
|
|
|
+ if (sdata->wdev.use_4addr)
|
|
+ drv_sta_set_4addr(local, sdata, &sta->sta, true);
|
|
+
|
|
mutex_unlock(&sdata->local->sta_mtx);
|
|
|
|
/*
|
|
--- a/net/mac80211/trace.h
|
|
+++ b/net/mac80211/trace.h
|
|
@@ -2740,6 +2740,33 @@ DEFINE_EVENT(local_sdata_addr_evt, drv_u
|
|
TP_ARGS(local, sdata)
|
|
);
|
|
|
|
+TRACE_EVENT(drv_sta_set_4addr,
|
|
+ TP_PROTO(struct ieee80211_local *local,
|
|
+ struct ieee80211_sub_if_data *sdata,
|
|
+ struct ieee80211_sta *sta, bool enabled),
|
|
+
|
|
+ TP_ARGS(local, sdata, sta, enabled),
|
|
+
|
|
+ TP_STRUCT__entry(
|
|
+ LOCAL_ENTRY
|
|
+ VIF_ENTRY
|
|
+ STA_ENTRY
|
|
+ __field(bool, enabled)
|
|
+ ),
|
|
+
|
|
+ TP_fast_assign(
|
|
+ LOCAL_ASSIGN;
|
|
+ VIF_ASSIGN;
|
|
+ STA_ASSIGN;
|
|
+ __entry->enabled = enabled;
|
|
+ ),
|
|
+
|
|
+ TP_printk(
|
|
+ LOCAL_PR_FMT VIF_PR_FMT STA_PR_FMT " enabled:%d",
|
|
+ LOCAL_PR_ARG, VIF_PR_ARG, STA_PR_ARG, __entry->enabled
|
|
+ )
|
|
+);
|
|
+
|
|
#endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */
|
|
|
|
#undef TRACE_INCLUDE_PATH
|