免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7489 | 回复: 7
打印 上一主题 下一主题

发送IP包时,skb->dev是在哪里被设置的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-10 16:29 |只看该作者 |倒序浏览
我想在linux下实现一个虚拟的网卡设备,自己实现一个struct net_device,从IP层接收IP包.
我知道ip向下层发送数据时,是调用dev_queue_xmit(struct sk_buff *skb)来实现的,但在调用这个函数前,skb中的dev已经被设置好了,我想请教一下,这个skb->dev是在什么时候被设置的,如果我要让这个包发送到我的虚拟设备上,需要怎么做?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2011-11-10 16:49 |只看该作者
ip_finish_output
{
        struct net_device *dev = skb->dst->dev;

        skb->dev = dev;
        ..........
}

skb->dst->dev这个是路由模块设置的

论坛徽章:
0
3 [报告]
发表于 2011-11-10 20:07 |只看该作者
楼上正解

论坛徽章:
0
4 [报告]
发表于 2011-11-11 08:43 |只看该作者
本帖最后由 llhao86 于 2011-11-11 09:39 编辑

谢谢lyl19!
我还想再问一下,路由里面是怎么确定这个dev的?
假如一开始,路由表为空的时候,主机上有两个dev(dev1,dev2)时,这时候要发送一个包,那么它会从默认端口发送,这个默认端口会是哪个dev呀?

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
5 [报告]
发表于 2015-10-23 10:17 |只看该作者
问题解决了吗?我也有这个问题回复 4# llhao86


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
6 [报告]
发表于 2015-10-23 21:57 |只看该作者
路由表为空的时候报文根本就不会到达dev_queue_xmit

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-07-14 06:20:00
7 [报告]
发表于 2015-11-16 17:34 |只看该作者
本帖最后由 ken1980 于 2015-11-16 17:40 编辑

路由子系统根据路由表查询来设置dst_entry,这个dev就是经过路由查询到的路由输出设备接口,另外只要在网络设备上设置IP了地址,系统都会自动添加同网段的接口路由表,路由表为空的情况是啥网络信息也没有,这时还发送啥数据啊?
如果对互联网发送数据,默认路由这个东西,就是你说的系统怎么知道从两个设备的哪一个发出去
    struct dst_entry
    {
        struct dst_entry        *next;
        atomic_t    __refcnt;
        int         __use;
        struct dst_entry    *child;
       struct net_device   *dev;
        ...
    }

论坛徽章:
1
平安夜徽章
日期:2015-12-26 00:06:30
8 [报告]
发表于 2015-11-21 21:45 |只看该作者
可以使用原始套接字,通过指定sockaddr_ll的 ifindex就可以指定你想使用的虚接口(netdev)发送报文
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP