免费注册 查看新帖 |

Chinaunix

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

[内核入门] linux-2.6.36下内核的桥转发流程入口在那里? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-23 10:27 |只看该作者 |倒序浏览

在linux-2.6.21下内核的数据包转发流程入口是netif_receive_skb函数,而在这个函数中我找到的桥转发的入口:

if (handle_bridge(&skb, &pt_prev, &ret, orig_dev))
                goto out;

但在linux-2.6.36里面却找不到这样的入口,并且netif_receive_skb函数要跳转到__netif_receive_skb中去,而在__netif_receive_skb中却多了这样的函数:

rx_handler = rcu_dereference(skb->dev->rx_handler);
        if (rx_handler)
        {
                if (pt_prev)
                {
                        ret = deliver_skb(skb, pt_prev, orig_dev);
                        pt_prev = NULL;
                }
                skb = rx_handler(skb);
                if (!skb)
                        goto out;
        }

这是干嘛的,难道桥转发在这里?

菜鸟坐等大神解答。。。。。。。。。。。。

论坛徽章:
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
2 [报告]
发表于 2015-07-24 11:43 |只看该作者
正解,增加了一个新接口netdev_rx_handler_register

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2015-07-24 13:12 |只看该作者
回复 1# wk_cyclone
commit ab95bfe01f9872459c8678572ccadbf646badad0
Author: Jiri Pirko <jpirko@redhat.com>
Date:   Tue Jun 1 21:52:08 2010 +0000

    net: replace hooks in __netif_receive_skb V5
   
    What this patch does is it removes two receive frame hooks (for bridge and for
    macvlan) from __netif_receive_skb. These are replaced them with a single
    hook for both. It only supports one hook per device because it makes no
    sense to do bridging and macvlan on the same device.
   
    Then a network driver (of virtual netdev like macvlan or bridge) can register
    an rx_handler for needed net device.
   
    Signed-off-by: Jiri Pirko <jpirko@redhat.com>
    Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>



net/bridge/br_if.c:
   err = netdev_rx_handler_register(dev, br_handle_frame, p);
   

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:13:29
4 [报告]
发表于 2015-07-25 11:17 |只看该作者
最近也在分析网桥相关的代码,可以一起学习

论坛徽章:
0
5 [报告]
发表于 2015-08-02 15:35 |只看该作者
可以啊,不过菜鸟一枚,还是不太懂

   

论坛徽章:
0
6 [报告]
发表于 2015-08-02 15:38 |只看该作者
那这是如何实现一个钩子函数指向多个函数,它如何知道什么时候调用brige,或是macvlan、ipvlan


   

论坛徽章:
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
7 [报告]
发表于 2015-08-03 10:29 |只看该作者
不能,一个Dev上只能挂一个钩子,这意味着每个dev只能完成一种功能。

当然,理论上也能把bridge/macvlan/ipvlan集成在一个函数里,
关键得定义清楚,什么时候走bridge逻辑,什么时候走macvlan等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP