- 论坛徽章:
- 0
|
小弟在看网桥的代码,看到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状态是一个不稳定的状态啊。。。。。。。。求大神指点我上面的逻辑或者理解错误。
|
|