Ordem de envio de dados de “Frame Control Field” de um frame 802.11?
Abaixo está o formato de bit para o campo FC para dados de QoS:
00|01|0001 01000010
Os primeiros 2 bits representam a versão, o próximo tipo de 2 bits, o próximo subtipo de 4 bits, com ToDS = 0, FromDS = 1, Protection bit = 1.
Então, em que ordem os dados acima são enviados através da interface no ar? (ou seja, da esquerda para a direita ou da direita para a esquerda)
Eu vejo o wireshark pegando os dados como "8842"(no último segmento onde mostra os dados brutos do pacote).
Mas, se eu escrever o código a seguir para imprimir dados de campo do FC:
struct mgmt_header_t {
u_int16_t fc; /* 2 bytes */
u_int16_t duration; /* 2 bytes */
u_int8_t addr1[6]; /* 6 bytes */
u_int8_t addr2[6]; /* 6 bytes */
u_int8_t addr3[6]; /* 6 bytes */
u_int16_t seq_ctrl; /* 2 bytes */
};
void my_callback(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
int radiotapheader_length = (unsigned short int)(*(packet+2));
struct mgmt_header_t *mac_header = (struct mgmt_header_t *) (packet+radiotapheader_length);
printf("FC = %X\n", mac_header->fc);
}
A saída é:
FC = 4288
Então, minha pergunta secundária é: não deveria imprimir8842 ao invés de4288?
Atualizar: Estou atualizando a questão para ser mais claro sobre a minha dúvida.
Digamos que eu queira enviar um pacote de dados de QoS cujo campo FC esteja no formato abaixo:
00|01|0001 01000010
Então, devo escrever:
mac_header->fc = 0x1142 /* value if read from left to right */
Ou
mac_header->fc = 0x4211
Ou
mac_header->fc = 0x4288 /* value if read from right to left */
Ou
mac_header->fc = 0x8842
O meu é uma pequena máquina endian.