瀏覽代碼

qcacmn: Do WDS source port learning if it is a 4-addr pkt

Added one more check for wds source port learning only
if it is a 4-address pkt.

Change-Id: I85c7859008fd6e5c060c7bf444e49e86c96e32c4
Tallapragada Kalyan 7 年之前
父節點
當前提交
85a1455795
共有 2 個文件被更改,包括 28 次插入0 次删除
  1. 5 0
      dp/wifi3.0/dp_rx.h
  2. 23 0
      dp/wifi3.0/hal_rx.h

+ 5 - 0
dp/wifi3.0/dp_rx.h

@@ -356,6 +356,11 @@ dp_rx_wds_srcport_learn(struct dp_soc *soc,
 	uint32_t ret = 0;
 	uint8_t wds_src_mac[IEEE80211_ADDR_LEN];
 
+	/* Do wds source port learning only if it is a 4-address mpdu */
+	if (!(qdf_nbuf_is_chfrag_start(nbuf) &&
+		hal_rx_get_mpdu_mac_ad4_valid(rx_tlv_hdr)))
+		return;
+
 	memcpy(wds_src_mac, (qdf_nbuf_data(nbuf) + IEEE80211_ADDR_LEN),
 		IEEE80211_ADDR_LEN);
 

+ 23 - 0
dp/wifi3.0/hal_rx.h

@@ -2976,6 +2976,29 @@ uint8_t hal_rx_get_mpdu_frame_control_valid(uint8_t *buf)
 	return frm_ctrl_valid;
 }
 
+#define HAL_RX_MPDU_GET_MAC_AD4_VALID(_rx_mpdu_info)		\
+	(_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info,		\
+		RX_MPDU_INFO_2_MAC_ADDR_AD4_VALID_OFFSET)),	\
+		RX_MPDU_INFO_2_MAC_ADDR_AD4_VALID_MASK,		\
+		RX_MPDU_INFO_2_MAC_ADDR_AD4_VALID_LSB))
+/*
+ * hal_rx_get_mpdu_mac_ad4_valid(): Retrieves if mpdu 4th addr is valid
+ *
+ * @nbuf: Network buffer
+ * Returns: value of mpdu 4th address vaild field
+ */
+static inline
+bool hal_rx_get_mpdu_mac_ad4_valid(uint8_t *buf)
+{
+	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
+	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
+	bool ad4_valid = 0;
+
+	ad4_valid = HAL_RX_MPDU_GET_MAC_AD4_VALID(rx_mpdu_info);
+
+	return ad4_valid;
+}
+
 /*
  * hal_rx_clear_mpdu_desc_info(): Clears mpdu_desc_info
  *