[Click] WIFI 802.11 - 4 Address frames (DS to DS mode)

Javier Sánchez javier.recacha at gmail.com
Tue Jun 23 06:43:07 EDT 2009


Hi,

After reading http://www.ieee802.org/1/files/public/802_architecture_group/802-11/4-address-format.doc
 (2005-07-19) I think there is a fault at the implementation of
encapsulating WIFI frames at DS to DS mode. The main error consist
that this frames have 4 address fields.

Resuming:

To/From DS values	Meaning
To DS = 0, From DS = 0	A data frame direct from one STA to another STA
within the same IBSS, as well as all management and control type
frames.
To DS = 0, From DS = 1	Data frame exiting the DS.
To DS = 1, From DS = 0	Data frame destined for the DS.
To DS = 1, From DS = 1	Wireless distribution system (WDS) frame being
distributed from one AP to another AP.

Fields:

ID	Mode	ToDS	FromDS	# of Address Fields
A	Ad hoc	0	0	3
B	LAN access	0	1	3
C	LAN access	1	0	3
D	4A	1	1	4

Hence, “WDS” is simply a mechanism for constructing 802.11 frames
using the 4-address format, as shown in the last row of Table 4 and
subsequently the last row of Table 5/710-T01.  The application of the
four-address addressing type and procedures for operating STAs that
uses that type of addressing are not defined or described by IEEE
802.11-1999.

The IEEE 802.11-1999 standard does not define how to construct any
such implementations or how stations interact to arrange for
exchanging frames of this format, it merely defines the 4-address
frame format that makes it possible.  Neither does the standard define
all the other supporting operations or protocols that would be
required to build such devices.

I suggest the implementation of wifiencap4A, wifidecap4A and the
definition of 802.11 4 address frames.

- Define 802.11 4 addresss frames at wifi.h, somethig like:

struct click_wifi_4A {
	uint8_t		i_fc[2];
	uint8_t		i_dur[2];
	uint8_t		i_addr1[WIFI_ADDR_LEN]; //RA
	uint8_t		i_addr2[WIFI_ADDR_LEN]; //TA
	uint8_t		i_addr3[WIFI_ADDR_LEN]; //DA
 	uint8_t		i_addr4[WIFI_ADDR_LEN]; //SA
	uint8_t		i_seq[2];
} CLICK_SIZE_PACKED_ATTRIBUTE;

- Implement wifiencap4A, wifidecap4A:

...

struct click_wifi *w = (struct click_wifi_4A *) p->data();
dir = w->i_fc[1] & WIFI_FC1_DIR_MASK;
if dir ==  WIFI_FC1_DIR_MASK; // process the 4A frame
else //this is not a 4A frame

...

I think that the directly conversion of 802.11 4A frames to Ethernet
frames is incorrect, the main use of this frames should be bridges,
repeaters, distribution ... at WIFI level.

Salutations
Javier Sánchez



More information about the click mailing list