- 论坛徽章:
- 1
|
我们的设备运行 linux-2.6.37,设备上有两个网卡,eth0 和eth1
把设备上的两个网卡eth0和eth1添加到网桥br0
然后eth0和eth1分别连接pc0和pc1
pc0 ip: 192.168.1.2
pc1 ip: 192.168.1.3
在pc0上ping pc1
当ping封包小于1472时,能够ping通
但是ping封包大于1472,就ping不通了
查看内核代码,调用路径应该是:
netif_receive_skb->handle_bridge->br_handle_frame->br_handle_frame_finish->br_forward->br_forward_finish->- int br_dev_queue_push_xmit(struct sk_buff *skb)
- {
- /* drop mtu oversized packets except gso */
- if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
- kfree_skb(skb);
- else {
- /* ip_refrag calls ip_fragment, doesn't copy the MAC header. */
- if (nf_bridge_maybe_copy_header(skb))
- kfree_skb(skb);
- else {
- skb_push(skb, ETH_HLEN);
- dev_queue_xmit(skb);
- }
- }
- return 0;
- }
复制代码 看起来当封包大于1500的时候,会被下面这句代码当掉:
if (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))
kfree_skb(skb);
但是,我的问题是,当封包大小大于1500的时候,难道协议栈不会分片,然后再调用br_dev_queue_push_xmit发送么?
内核里有没有这样的机制,我的猜测是有的,可能需要内核配置来开启,或者、、、
希望有经验的童鞋给出点建议
谢谢啦 |
|