hlen и sizeof (struct ip) в ip_output.c - PullRequest
0 голосов
/ 14 мая 2011

В ip_output есть две строки кода, которые я не могу понять:

mhlen = sizeof(struct ip)

и

if (hlen > sizeof(struct ip)) { ...

зачем нам сравнивать длину hlen, которая является длиной заголовка исходного ip-пакета, с sizeof (struct ip)?

Не могли бы вы помочь?

Ответы [ 2 ]

0 голосов
/ 14 мая 2011

IP-заголовки могут иметь дополнительные параметры (например, исходная запись маршрута , для трассировки).Общий размер заголовка IP кодируется в поле hlen как число 32-битных слов, поэтому оно будет 5 (для 20 байтов), если нет параметров IP, и больше, если есть параметры IP.*

0 голосов
/ 14 мая 2011

Похоже, что это из функции BSD ip_fragment?одна из этих переменных - mhlen, а одна - hlen, поэтому они могут отличаться.IP-заголовок переменной длины.struct ip имеет фиксированную часть.Переменная hlen имеет фактическую длину, включая параметры переменной длины в конце.

...