linux kernel/net/bridge收包流程。

一、通过brctl addif br xxx命令间接调用到br_add_if函数。

br_add_if => br_if.c

{

    ....

    //此处修改了dev对应收包处理函数为br_handle_frame。

    netdev_rx_handler_register(dev, br_handle_frame, p);

    ....

}

二、收包函数br_handle_frame。

br_handle_frame => br_input.c

{    

    //1、is_link_local_ether_addr函数判断目的mac是否是特殊地址(stp等),是则转入本地处理。

    //2、获取skb->dev指向的数据struct net_bridge_port *p。

    //3、p->state == BR_STATE_FORWARDING :先执行ebtables-broute表规则,再执行下面BR_STATE_LEARNING相关部分。

    //4、p->state == BR_STATE_LEARNING : 先执行 NF_BR_PRE_ROUTING 链规则,之后进入br_handle_frame_finish。

}

三、函数br_handle_frame_finish。

br_handle_frame_finish

{

    //1、根据目地mac地址寻找出口。分三种情况,广播mac地址,多播mac地址,fdb表查询mac地址

    //2、如果找到出口,执行br_forward函数,否则执行br_flood_forward,将遍历网桥下的所有接口(不包含当前收入接口),逐个接口发送数据包。

    //3、如果是发往本地的执行 br_pass_frame_up。

}

 

未完,待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值