On Nov 26, 2007 6:35 PM, Johannes Berg <johannes@xxxxxxxxxxxxxxxx> wrote: > > On Mon, 2007-11-26 at 16:14 +0200, Ron Rindjunsky wrote: > > This patch adds the ability to receive and handle A-MSDU frames. > > > > Signed-off-by: Ron Rindjunsky <ron.rindjunsky@xxxxxxxxx> > > Acked-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx> > > Thanks for your patience on this. I have another question that is > identical in the other code and that we should, if necessary, fix in a > separate patch to fix both instances of this: > > > > + payload = frame->data; > > + ethertype = (payload[6] << 8) | payload[7]; > > + > > + if (likely((compare_ether_addr(payload, rfc1042_header) == 0 && > [...] > > + } else { > > + memcpy(skb_push(frame, sizeof(__be16)), &len, > > + sizeof(__be16)); > > + memcpy(skb_push(frame, ETH_ALEN), src, ETH_ALEN); > > + memcpy(skb_push(frame, ETH_ALEN), dst, ETH_ALEN); > > Here, as well as in the regular data frame handler, we push the length > of the frame into the ethernet header. Later then, eth_type_trans() will > load up the skb->protocol field. The thing I'm not entirely sure about > is this: We can have frames longer than 1536 bytes, but only if the > length is smaller than 1536 does eth_type_trans() assume that it's a > length, if we have a frame longer won't it go wrong? I haven't quite > managed to wrap my head around the rules for wrapping data into an > 802.11 frame nor in an 802.3 setting so this may be totally incorrect. > Just grabbed this from wikipedia ' values of that field between 0 and 1500 indicated the use of the original 802.3 Ethernet format with a length field, while values of 1536 decimal (0600 hexadecimal) and greater indicated the use of the DIX frame format with an EtherType sub-protocol identifier ' > johannes > - To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html