首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

发送IP包时,skb->dev是在哪里被设置的解决思路

2012-02-09 
发送IP包时,skb-dev是在哪里被设置的我想在linux下实现一个虚拟的网卡设备,自己实现一个struct net_devic

发送IP包时,skb->dev是在哪里被设置的
我想在linux下实现一个虚拟的网卡设备,自己实现一个struct net_device,从IP层接收IP包.
我知道ip向下层发送数据时,是调用dev_queue_xmit(struct sk_buff *skb)来实现的,但在调用这个函数前,skb中的dev已经被设置好了,我想请教一下,这个skb->dev是在什么时候被设置的,如果我要让这个包发送到我的虚拟设备上,需要怎么做?
谢谢

[解决办法]
这个是在ip层的时候,检查路由的时候设置上去的,应该是系统检测目标ip,根据路由表查找需要从哪个device出去,然后就设置这里的路由;

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}
[解决办法]
"当路由要发送一个包时,发现该包的地址不在路由表中",这个时候会使用默认的路由选项,即默认的端口把包送出去。

“如果从dev1中收到该包的回应,就会在路由表中建立该项,以后发往该地址的包就会从dev1中发送.”,这句话说的不对。收包时记录路由表,它可不知道什么“回应”。发包时查路由表,看目的IP是否在路由表上已存在。

热点排行