发送IP包时,skb->dev是在哪里被设置的
时间:2011-11-10
来源:互联网
我想在linux下实现一个虚拟的网卡设备,自己实现一个struct net_device,从IP层接收IP包.
我知道ip向下层发送数据时,是调用dev_queue_xmit(struct sk_buff *skb)来实现的,但在调用这个函数前,skb中的dev已经被设置好了,我想请教一下,这个skb->dev是在什么时候被设置的,如果我要让这个包发送到我的虚拟设备上,需要怎么做?
谢谢
我知道ip向下层发送数据时,是调用dev_queue_xmit(struct sk_buff *skb)来实现的,但在调用这个函数前,skb中的dev已经被设置好了,我想请教一下,这个skb->dev是在什么时候被设置的,如果我要让这个包发送到我的虚拟设备上,需要怎么做?
谢谢
作者: llhktv1986 发布时间: 2011-11-10
这个是在ip层的时候,检查路由的时候设置上去的,应该是系统检测目标ip,根据路由表查找需要从哪个device出去,然后就设置这里的路由;
C/C++ code
如果仅仅是为了测试,可以用 route 命令设置一下路由,让指定的目标ip的包从你的device出去。
然后随便 ping一下指定ip就可以测试了。
C/C++ code
308int ip_output(struct sk_buff *skb) 309{ 310 struct net_device *dev = skb_dst(skb)->dev; 311 312 IP_UPD_PO_STATS(dev_net(dev), IPSTATS_MIB_OUT, skb->len); 313 314 skb->dev = dev; 315 skb->protocol = htons(ETH_P_IP); 316 317 return NF_HOOK_COND(NFPROTO_IPV4, NF_INET_POST_ROUTING, skb, NULL, dev, 318 ip_finish_output, 319 !(IPCB(skb)->flags & IPSKB_REROUTED)); 320}
如果仅仅是为了测试,可以用 route 命令设置一下路由,让指定的目标ip的包从你的device出去。
然后随便 ping一下指定ip就可以测试了。
作者: lvyinghong 发布时间: 2011-11-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28