【发布时间】:2019-10-06 09:14:52
【问题描述】:
我现在正在研究 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]到底是做什么的?几天前,我试图猜测这行代码的作用,但我仍然没有任何线索。
如果我的问题太集中或含糊不清,我很抱歉。这件事困扰了我一段时间,如果有人能与我分享他们的知识,我将不胜感激。非常感谢您。
【问题讨论】: