我正在尝试在 linux 内核 3.3.2 上编写一个虚拟网络设备驱动程序。我的驱动程序的某些功能在传输数据包时需要路由信息,因此我使用函数 skb_dst(struct sk_buff *) 来获取 dst_entry 指针。但无论我做什么,无论我在哪里 ping,每当我尝试时,skb_dst() 总是返回 NULL。我不知道为什么,这个错误让我困惑了一个多星期。谁能帮我?
问问题
725 次
3 回答
2
我找到原因了!这是因为在 kernel: 中添加了一个标志IFF_XMIT_DST_RELEASE
,如果分配的虚拟设备的标志设置为,内核将在发送到设备0
时丢弃路由信息。sk_buff
感谢 Kristof Provost 的回复,很抱歉这么晚才结束这个问题。
于 2012-11-29T11:49:26.267 回答
1
Ping 使用 RAW 套接字。他们可能会绕过部分路由基础设施。
尝试查看raw_send_hdrinc
并raw_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 回答