Lines Matching full:mtu
144 struct sk_buff *skb, unsigned int mtu) in ip6_finish_output_gso_slowpath_drop() argument
152 * egress MTU. in ip6_finish_output_gso_slowpath_drop()
167 /* Last GSO segment can be smaller than gso_size (and MTU). in ip6_finish_output_gso_slowpath_drop()
171 err = segs->len > mtu ? in ip6_finish_output_gso_slowpath_drop()
182 struct sk_buff *skb, unsigned int mtu) in ip6_finish_output_gso() argument
185 !skb_gso_validate_network_len(skb, mtu)) in ip6_finish_output_gso()
186 return ip6_finish_output_gso_slowpath_drop(net, sk, skb, mtu); in ip6_finish_output_gso()
193 unsigned int mtu; in __ip6_finish_output() local
203 mtu = ip6_skb_dst_mtu(skb); in __ip6_finish_output()
205 return ip6_finish_output_gso(net, sk, skb, mtu); in __ip6_finish_output()
207 if (skb->len > mtu || in __ip6_finish_output()
279 u32 mtu; in ip6_xmit() local
344 mtu = dst_mtu(dst); in ip6_xmit()
345 if ((skb->len <= mtu) || skb->ignore_df || skb_is_gso(skb)) { in ip6_xmit()
367 ipv6_local_error((struct sock *)sk, EMSGSIZE, fl6, mtu); in ip6_xmit()
475 static bool ip6_pkt_too_big(const struct sk_buff *skb, unsigned int mtu) in ip6_pkt_too_big() argument
477 if (skb->len <= mtu) in ip6_pkt_too_big()
481 if (IP6CB(skb)->frag_max_size && IP6CB(skb)->frag_max_size > mtu) in ip6_pkt_too_big()
487 if (skb_is_gso(skb) && skb_gso_validate_network_len(skb, mtu)) in ip6_pkt_too_big()
501 u32 mtu; in ip6_forward() local
633 mtu = ip6_dst_mtu_maybe_forward(dst, true); in ip6_forward()
634 if (mtu < IPV6_MIN_MTU) in ip6_forward()
635 mtu = IPV6_MIN_MTU; in ip6_forward()
637 if (ip6_pkt_too_big(skb, mtu)) { in ip6_forward()
640 icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); in ip6_forward()
758 void ip6_frag_init(struct sk_buff *skb, unsigned int hlen, unsigned int mtu, in ip6_frag_init() argument
767 state->mtu = mtu; in ip6_frag_init()
787 /* IF: it doesn't fit, use 'mtu' - the data space left */ in ip6_frag_next()
788 if (len > state->mtu) in ip6_frag_next()
789 len = state->mtu; in ip6_frag_next()
864 unsigned int mtu, hlen, nexthdr_offset; in ip6_fragment() local
877 mtu = ip6_skb_dst_mtu(skb); in ip6_fragment()
879 /* We must not fragment if the socket is set to force MTU discovery in ip6_fragment()
882 if (unlikely(!skb->ignore_df && skb->len > mtu)) in ip6_fragment()
886 if (IP6CB(skb)->frag_max_size > mtu) in ip6_fragment()
890 mtu = IP6CB(skb)->frag_max_size; in ip6_fragment()
891 if (mtu < IPV6_MIN_MTU) in ip6_fragment()
892 mtu = IPV6_MIN_MTU; in ip6_fragment()
898 if (frag_size && frag_size < mtu) in ip6_fragment()
899 mtu = frag_size; in ip6_fragment()
901 if (mtu < hlen + sizeof(struct frag_hdr) + 8) in ip6_fragment()
903 mtu -= hlen + sizeof(struct frag_hdr); in ip6_fragment()
919 if (first_len - hlen > mtu || in ip6_fragment()
927 if (frag->len > mtu || in ip6_fragment()
1001 ip6_frag_init(skb, hlen, mtu, rt->dst.dev->needed_tailroom, in ip6_fragment()
1033 icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); in ip6_fragment()
1308 static void ip6_append_data_mtu(unsigned int *mtu, in ip6_append_data_mtu() argument
1318 *mtu = orig_mtu - rt->dst.header_len; in ip6_append_data_mtu()
1325 *mtu = orig_mtu; in ip6_append_data_mtu()
1327 *maxfraglen = ((*mtu - fragheaderlen) & ~7) in ip6_append_data_mtu()
1337 unsigned int mtu, frag_size; in ip6_setup_cork() local
1381 mtu = READ_ONCE(np->pmtudisc) >= IPV6_PMTUDISC_PROBE ? in ip6_setup_cork()
1382 READ_ONCE(rt->dst.dev->mtu) : dst_mtu(&rt->dst); in ip6_setup_cork()
1384 mtu = READ_ONCE(np->pmtudisc) >= IPV6_PMTUDISC_PROBE ? in ip6_setup_cork()
1385 READ_ONCE(rt->dst.dev->mtu) : dst_mtu(xfrm_dst_path(&rt->dst)); in ip6_setup_cork()
1388 if (frag_size && frag_size < mtu) in ip6_setup_cork()
1389 mtu = frag_size; in ip6_setup_cork()
1391 cork->base.fragsize = mtu; in ip6_setup_cork()
1416 unsigned int maxfraglen, fragheaderlen, mtu, orig_mtu, pmtu; in __ip6_append_data() local
1440 mtu = cork->gso_size ? IP6_MAX_MTU : cork->fragsize; in __ip6_append_data()
1441 orig_mtu = mtu; in __ip6_append_data()
1452 if (mtu <= fragheaderlen || in __ip6_append_data()
1453 ((mtu - fragheaderlen) & ~7) + fragheaderlen <= sizeof(struct frag_hdr)) in __ip6_append_data()
1456 maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen - in __ip6_append_data()
1462 if (headersize + transhdrlen > mtu) in __ip6_append_data()
1465 if (cork->length + length > mtu - headersize && ipc6->dontfrag && in __ip6_append_data()
1469 ipv6_local_rxpmtu(sk, fl6, mtu - headersize + in __ip6_append_data()
1477 maxnonfragsize = mtu; in __ip6_append_data()
1481 pmtu = max_t(int, mtu - headersize + sizeof(struct ipv6hdr), 0); in __ip6_append_data()
1491 length <= mtu - headersize && in __ip6_append_data()
1544 * Use MTU if total length of the message fits into the MTU. in __ip6_append_data()
1564 copy = (cork->length <= mtu ? mtu : maxfraglen) - skb->len; in __ip6_append_data()
1581 /* update mtu and maxfraglen if necessary */ in __ip6_append_data()
1583 ip6_append_data_mtu(&mtu, &maxfraglen, in __ip6_append_data()
1590 * If remaining data exceeds the mtu, in __ip6_append_data()
1595 if (datalen > (cork->length <= mtu ? mtu : maxfraglen) - fragheaderlen) in __ip6_append_data()
1606 * (without MSG_MORE) fits into the MTU. in __ip6_append_data()
1612 alloclen = mtu; in __ip6_append_data()