忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 6561 | 回复: 7

请教:内核中VLAN的实现 [复制链接]

论坛徽章:
0
发表于 2007-12-29 10:23 |显示全部楼层
请教各位老大,小弟刚开始接触内核,现在正在看Linux下VLAN的实现。

1、哪里可以找到VLAN实现的资料
    我这里有的资料都是介绍Bridge的,对VLAN了解很少,有资料的兄弟能否共享,谢谢:)

2、VLAN与Bridge实现的关系
    我理解应该先运行vlan_skb_recv()再送到桥或者IP层处理,但是2.6.16.20内核中,netif_receive_skb()先运行了handle_bridge(),
那么VLAN是在什么时候检查的?

3、跨VLAN的实现
    linux中跨VLAN的实现是和跨Bridge的实现结合的么? 如果是三层交换,应该在VLANIF(VSI)中配置IP,通过路由索引到出接口VLAN。
    但是在代码中没有看到这些操作,那Linux是如何实现三层交换的?是否和Bridge的br_pass_frame_up()有关?

大家一起讨论一下,知道的兄弟指点迷津,谢谢了!

论坛徽章:
0
发表于 2007-12-29 14:55 |显示全部楼层
看来阁下把linux看成了cisco交换机中的操作系统了,linux可承担不起

>>1、哪里可以找到VLAN实现的资料

代码不是已经给了吗


>>2、VLAN与Bridge实现的关系

在net_rx中

>>3、跨VLAN的实现

没有实现

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
发表于 2007-12-29 17:42 |显示全部楼层
为什么不google呢?莫非是hw的,听说不许上外网
对于端口的vlan有ieee802.1q标准

论坛徽章:
0
发表于 2008-01-02 10:07 |显示全部楼层
楼上的是怎么想的,不能上外网,他还能到CU提问,难道CU是hw的?

论坛徽章:
0
发表于 2008-01-02 14:28 |显示全部楼层
我以前用其他平台实现跨VLAN转发,是在三层入接口查路由得到出口是VSI,用VSI的源地址替换报文头中的源地址,用下一跳的MAC替换报文二层头中的目的MAC,再用这个目的MAC地址去查桥模式的CAM表,得到真实的出接口。可是Linux内核里没有找到这部分代码。
用Google,百度都找了一段时间资料了,除了802.1q的文档没有找到相关的资料,各种介绍Linux内核的书籍都是说的Bridge下的二层桥接,对VLAN涉及很少,所以在论坛里寻求帮助。
PS:HW很多人都有权限可以上外网,不过我不是HW的。

论坛徽章:
0
发表于 2008-01-03 19:04 |显示全部楼层

回复 #2 qtdszws 的帖子

感谢qtdszws大侠回帖,看代码时遇到的问题,请教:
1、如过报文带VLAN TAG,在netif_receive_skb()中匹配到协议后运行vlan_skb_recv
     如果配置了bridge,先运行handle_bridge,后面是怎么运行到vlan_skb_recv?
2、VLAN配置IP,那路由表中的出口dev是真实的物理设备还是注册VLAN时的vlan_dev_info结构的new_dev?

论坛徽章:
0
发表于 2018-01-21 14:39 |显示全部楼层
你好,你的这个问题解决了吗?也在看这个,报文时带有VLAN  TAG标签的,但是路由中没有802.1q这个协议,不支持VLAN,是否能在路由内核中配置是它可以识别带VLAN TAG标签的报文呢?

论坛徽章:
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
发表于 2018-02-02 21:41 |显示全部楼层
本帖最后由 nswcfd 于 2018-02-02 21:54 编辑

以下仅限于2.6.xx版本内核。

linux的vlan是个三层路由接口,linux的bridge没有vlan的概念。
所以很久以前都是用vlan+bridge一起实现类似其它交换机的功能,
缺陷是有多少vlan就得创建多少bridge,系统里存在大量虚接口。
注意物理口本身不是bridge的一部分。

netif_rx(in) -> in不是bridge port -> 根据协议类型进入vlan_rcv
-> 剥离tag -> 在in.xx上重新netif_rx(in.xx) -> in.xx是bridge port
-> 进入bridge hook
-> forward到另外一个out.xx(也是bridge port)
-> vlan_xmit(out.xx) -> 增加tag -> real_dev_xmit(out)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP