2

我正在尝试在 linux 内核 3.3.2 上编写一个虚拟网络设备驱动程序。我的驱动程序的某些功能在传输数据包时需要路由信息,因此我使用函数 skb_dst(struct sk_buff *) 来获取 dst_entry 指针。但无论我做什么,无论我在哪里 ping,每当我尝试时,skb_dst() 总是返回 NULL。我不知道为什么,这个错误让我困惑了一个多星期。谁能帮我?

4

3 回答 3

2

我找到原因了!这是因为在 kernel: 中添加了一个标志IFF_XMIT_DST_RELEASE,如果分配的虚拟设备的标志设置为,内核将在发送到设备0时丢弃路由信息。sk_buff感谢 Kristof Provost 的回复,很抱歉这么晚才结束这个问题。

于 2012-11-29T11:49:26.267 回答
1

Ping 使用 RAW 套接字。他们可能会绕过部分路由基础设施。

尝试查看raw_send_hdrincraw_sendmsg进入net/ipv4/raw.c

于 2012-05-23T07:00:12.470 回答
0

为了清楚起见,添加dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;到设置功能

于 2019-05-23T08:05:22.260 回答