|
@@ -41,17 +41,13 @@ static inline unsigned packet_length(const struct sk_buff *skb)
|
|
|
|
|
|
int br_dev_queue_push_xmit(struct sk_buff *skb)
|
|
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))
|
|
|
|
|
|
+ /* ip_fragment doesn't copy the MAC header */
|
|
|
|
+ if (nf_bridge_maybe_copy_header(skb) ||
|
|
|
|
+ (packet_length(skb) > skb->dev->mtu && !skb_is_gso(skb))) {
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
- else {
|
|
|
|
- /* 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);
|
|
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
+ skb_push(skb, ETH_HLEN);
|
|
|
|
+ dev_queue_xmit(skb);
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|