Re: [Madwifi-devel] possible error when de-capsulating packets?
Status: Beta
Brought to you by:
otaku
From: Holger S. <hs...@ma...> - 2007-08-24 07:46:58
|
> this check in MADwifi is probably correct. Maybe you're right. I looked again at orinico_cs, and they *DO* check for both OID 00:00:00 and 00:00:f8: --------------------------------------------------------- /* Does the frame have a SNAP header indicating it should be * de-encapsulated to Ethernet-II? */ static inline int is_ethersnap(void *_hdr) { u8 *hdr = _hdr; /* We de-encapsulate all packets which, a) have SNAP headers * (i.e. SSAP=DSAP=0xaa and CTRL=0x3 in the 802.2 LLC header * and where b) the OUI of the SNAP header is 00:00:00 or * 00:00:f8 - we need both because different APs appear to use * different OUIs for some reason */ return (memcmp(hdr, &encaps_hdr, 5) == 0) && ( (hdr[5] == 0x00) || (hdr[5] == 0xf8) ); } --------------------------------------------------------- mac80211 (in linux/net/mac80211/ieee80211.c) check also for both: --------------------------------------------------------- /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ static const unsigned char rfc1042_header[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ static const unsigned char bridge_tunnel_header[] = { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; [...] ethertype = (payload[6] << 8) | payload[7]; if (likely((compare_ether_addr(payload, rfc1042_header) == 0 && ethertype != ETH_P_AARP && ethertype != ETH_P_IPX) || compare_ether_addr(payload, bridge_tunnel_header) == 0)) { /* remove RFC1042 or Bridge-Tunnel encapsulation and * replace EtherType */ skb_pull(skb, hdrlen + 6); memcpy(skb_push(skb, ETH_ALEN), src, ETH_ALEN); memcpy(skb_push(skb, ETH_ALEN), dst, ETH_ALEN); } else { --------------------------------------------------------- > The real question is why your AP packs the ARP frame into an > LLC-SNAP header with the vendor OID set to 00-00-f8 instead > of 00-00-00. You may look into the config of your AP for > something like a 'SNAP type table'. There is no such table in the AP. In fact, the AP has hardly anything to set up at all ... But now that I saw that both orinoco_cs and mac80211 checks for the OID 00:00:f8, this seemed to be happen for other people, too. Without my patch, I saw the LLC encapsulation in userspace, with my patch, it was gone. The ARP code in Linux was then seeing what it expected and things start to work. The question for a new patch is now just: which check is right? The examples I gave have subtle differences. |