mirror of https://gitee.com/openkylin/linux.git
ip6_output: fragment outgoing reassembled skb properly
If reassembled packet would fit into outdev MTU, it is not fragmented according the original frag size and it is send as single big packet. The second case is if skb is gso. In that case fragmentation does not happen according to the original frag size. This patch fixes these. Signed-off-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4e3faf8863
commit
9037c3579a
|
@ -125,7 +125,8 @@ static int ip6_finish_output2(struct sk_buff *skb)
|
||||||
static int ip6_finish_output(struct sk_buff *skb)
|
static int ip6_finish_output(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
|
if ((skb->len > ip6_skb_dst_mtu(skb) && !skb_is_gso(skb)) ||
|
||||||
dst_allfrag(skb_dst(skb)))
|
dst_allfrag(skb_dst(skb)) ||
|
||||||
|
(IP6CB(skb)->frag_max_size && skb->len > IP6CB(skb)->frag_max_size))
|
||||||
return ip6_fragment(skb, ip6_finish_output2);
|
return ip6_fragment(skb, ip6_finish_output2);
|
||||||
else
|
else
|
||||||
return ip6_finish_output2(skb);
|
return ip6_finish_output2(skb);
|
||||||
|
|
Loading…
Reference in New Issue