- 论坛徽章:
- 1
|
在查看linux2.6.36 网桥代码时,先假设关闭CONFIG_BRIDGE_NETFILTER,跟踪源码时发现
从br_handle_frame进入到达br_handle_frame_finish,然后进行转发处理br_forward(dst->dst, skb, skb2);
static inline int should_deliver(const struct net_bridge_port *p,
const struct sk_buff *skb)
{
return (((p->flags & BR_HAIRPIN_MODE) || skb->dev != p->dev) &&
p->state == BR_STATE_FORWARDING);
}
那么此时将不满足skb->dev != p->dev,最终会将kfree掉这个skb,如此相当于丢弃。但是我在做如下实验时,mac1到mac2是可以通的,并且从打印中看到数据包确实在此处判断后kfree掉
br0
eth1
mac1 mac2
请教大神们为什么网桥代码会有这样一个判断??我做的实验又如何解释,有其他的处理流程吗,
谢谢! |
|