ipv4: use ip_skb_dst_mtu to determine mtu in ip_fragment
ip_skb_dst_mtu mostly falls back to ip_dst_mtu_maybe_forward if no socket is attached to the skb (in case of forwarding) or determines the mtu like we do in ip_finish_output, which actually checks if we should branch to ip_fragment. Thus use the same function to determine the mtu here, too. This is important for the introduction of IP_PMTUDISC_OMIT, where we want the packets getting cut in pieces of the size of the outgoing interface mtu. IPv6 already does this correctly. Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a960ff81f0
commit
69647ce46a
|
@ -449,7 +449,6 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
|
|||
__be16 not_last_frag;
|
||||
struct rtable *rt = skb_rtable(skb);
|
||||
int err = 0;
|
||||
bool forwarding = IPCB(skb)->flags & IPSKB_FORWARDED;
|
||||
|
||||
dev = rt->dst.dev;
|
||||
|
||||
|
@ -459,7 +458,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
|
|||
|
||||
iph = ip_hdr(skb);
|
||||
|
||||
mtu = ip_dst_mtu_maybe_forward(&rt->dst, forwarding);
|
||||
mtu = ip_skb_dst_mtu(skb);
|
||||
if (unlikely(((iph->frag_off & htons(IP_DF)) && !skb->local_df) ||
|
||||
(IPCB(skb)->frag_max_size &&
|
||||
IPCB(skb)->frag_max_size > mtu))) {
|
||||
|
|
Loading…
Reference in New Issue