免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 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
3 [报告]
发表于 2007-12-29 17:42 |只看该作者
为什么不google呢?莫非是hw的,听说不许上外网
对于端口的vlan有ieee802.1q标准

论坛徽章:
0
4 [报告]
发表于 2008-01-02 10:07 |只看该作者
楼上的是怎么想的,不能上外网,他还能到CU提问,难道CU是hw的?

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

论坛徽章:
0
6 [报告]
发表于 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
7 [报告]
发表于 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
8 [报告]
发表于 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号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP