diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/base.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/base.c | 14 | 
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c index 1d4677460711..01f56c7df8b5 100644 --- a/drivers/net/wireless/rtlwifi/base.c +++ b/drivers/net/wireless/rtlwifi/base.c @@ -1315,7 +1315,8 @@ static void setup_arp_tx(struct rtl_priv *rtlpriv, struct rtl_ps_ctl *ppsc)  }  /*should call before software enc*/ -u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx) +u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx, +		       bool is_enc)  {  	struct rtl_priv *rtlpriv = rtl_priv(hw);  	struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); @@ -1344,7 +1345,9 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)  		break;  	} -	offset = mac_hdr_len + SNAP_SIZE + encrypt_header_len; +	offset = mac_hdr_len + SNAP_SIZE; +	if (is_enc) +		offset += encrypt_header_len;  	ether_type = be16_to_cpup((__be16 *)(skb->data + offset));  	if (ETH_P_IP == ether_type) { @@ -1386,8 +1389,11 @@ u8 rtl_is_special_data(struct ieee80211_hw *hw, struct sk_buff *skb, u8 is_tx)  		}  		return true; -	} else if (0x86DD == ether_type) { -		return true; +	} else if (ETH_P_IPV6 == ether_type) { +		/* TODO: Handle any IPv6 cases that need special handling. +		 * For now, always return false +		 */ +		goto end;  	}  end:  |