Chinaunix

标题: br_handle_frame为什么要求是leaning状态才转发? [打印本页]

作者: jiahehao01    时间: 2012-07-11 10:07
标题: br_handle_frame为什么要求是leaning状态才转发?
    小弟在看网桥的代码,看到br_handle_frame函数的时候觉得有点奇怪。
   内核版本是2.6.32.

    其中br_handle_frame函数在forward流程处理的时候是如下代码:

   forward:
        switch (p->state) {
        case BR_STATE_FORWARDING:
                rhook = rcu_dereference(br_should_route_hook);
                if (rhook != NULL) {
                        if (rhook(skb))
                                return skb;
                        dest = eth_hdr(skb)->h_dest;
                }
                /* fall through */
        case BR_STATE_LEARNING:                if (!compare_ether_addr(p->br->dev->dev_addr, dest))
                        skb->pkt_type = PACKET_HOST;

                NF_HOOK(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,
                        br_handle_frame_finish);
                break;
        default:

    我觉得如果该端口状态是forward状态,那才应该做转发呀。结果是走到三层转发。
   而端口是learning状态的时候,居然直到br_handle_frame_finish的通知链做二层转发去了。

   我一直觉得,learning状态是一个不稳定的状态啊。。。。。。。。求大神指点我上面的逻辑或者理解错误。
   
作者: zhenggn123    时间: 2012-07-11 18:31
仔细看代码
作者: MoWaters    时间: 2012-07-11 19:42
第一个case后面没有break哦。
作者: jiahehao01    时间: 2012-07-12 08:42
多谢楼上两位兄弟。。。。。。

呵呵,粗心啊粗心,自责。。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2