LINUX.ORG.RU

получить указатель на ARP из sk_buff


0

1

Всем привет.

Ядро 2.4.20, встроенный линукс. В своем драйвере необходимо получить доступ к ARP заголовку, включая поля с MAC-адресами. Заглянул в include/linux/if_arp.h, но там в структуре arphdr как раз закоментарены эти поля (видимо потому, что размер аппаратных адресов может варьироваться в зависимости от технологии). Тогда попытался сделать так: определил в своем коде arp-вструктур:

struct arp_hdr
{
  // все поля из include/linux/if_arp.h
  // и добавляем нужное
  unsigned char       ar_sha[ETH_ALEN];
  unsigned char       ar_sip[4];
  unsigned char       ar_tha[ETH_ALEN];
  unsigned char       ar_tip[4];
}

int my_func(struct sk_buff *skb)
{
   struct aro_hdr *arph;

   arph = (struct arp_hdr *)skb->nh.raw;

   // здесь распечатываю содержимое arp пакета, но получаю мусор.
}

Почему я получаю мусор и как правильно сделать то, что мне нужно?

Заранее спасибо!

★★

если они закомменчены то значит эти поля никто и не инициализирует их.

true_admin ★★★★★
()
Ответ на: комментарий от x4DA

> endianness?

Не похоже, значения каждый раз разные и огромные (например, поле length of hardware address может быть 255 или 189). Как будто, полученный указатель сдвинут на N позиций и я читаю вовсе не arp заголовок.

cruz7 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.