Я сейчас изучаю XDP-коды, и у меня возникла путаница в отношении того, как программы подходят к определенным частям заголовка пакета. Так! Когда я смотрю на код, который получает IP-адрес пакета, он выглядит следующим образом:
static inline int parse_ipv4(void *data, u64 nh_off, void *data_end) {
struct iphdr *iph = data + nh_off;
if ((void*)&iph[1] > data_end)
return 0;
return iph->protocol;
}
Теперь вот некоторые вещи, которые меня смущают:
struct iphdr *iph = data + nh_off;
Я думал, nh_off
- это значение смещения для следующего заголовка, поэтому, если вы добавите data + nh_off
, разве это не приведет вас к следующему пакету? Потому что, насколько я понимаю, если вы добавите следующее смещение заголовка к данным, должен быть следующий пакет, ожидающий обработки!
Что означает
(void*)&iph[1]
точно? Я пытался угадать, что эта строка кода делает в течение нескольких дней, но у меня все еще нет никакой подсказки.
Мне очень жаль, если мои вопросы слишком поглощены или расплывчаты. меня это беспокоило некоторое время, и я был бы очень признателен, если бы кто-то поделился со мной своими знаниями. Заранее большое спасибо.