Michael Buesch wrote:
Does it strip ICV and FCS?

The driver always strips FCS (unconditionally).

The device does not strip ICV even when hardware decryption is in use, it gets included at the end of the frame, and I guess we should also handle that.

in bcm43xx-softmac we use memmove to move the wireless header 4 bytes
up and after that strip the first 4 bytes of the skb.
I don't think there is another easy way to handle this. You'd have
to modify the stack and softmac. And this would probably result in more
overhead than the simple memove of 24 bytes.

softmac doesn't need modifying, and the ieee80211 modification is very simple. See the attached patch. ieee80211 could also be modified very easily to drop the ICV.

Surely this is nicer than adding IEEE802.11 header parsing code to zd1211rw rx path (currently there is none, which is nice) and a memmove?

Daniel

Index: linux/net/ieee80211/ieee80211_rx.c
===================================================================
--- linux.orig/net/ieee80211/ieee80211_rx.c
+++ linux/net/ieee80211/ieee80211_rx.c
@@ -655,6 +655,11 @@ int ieee80211_rx(struct ieee80211_device
 		goto rx_dropped;
 	}
 
+	/* If the device does decryption but leaves the IV in place then we
+	 * need to kill it. */
+	if (!can_be_decrypted && (fc & IEEE80211_FCTL_PROTECTED))
+		hdrlen += 4;
+
 	/* skb: hdr + (possible reassembled) full plaintext payload */
 
 	payload = skb->data + hdrlen;

Reply via email to