Lines Matching defs:gso_skb

480 struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
483 struct sock *sk = gso_skb->sk;
493 mss = skb_shinfo(gso_skb)->gso_size;
494 if (gso_skb->len <= sizeof(*uh) + mss)
497 if (unlikely(skb_checksum_start(gso_skb) !=
498 skb_transport_header(gso_skb) &&
499 !(skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST)))
505 if (gso_skb->ip_summed != CHECKSUM_PARTIAL)
508 if (skb_gso_ok(gso_skb, features | NETIF_F_GSO_ROBUST)) {
510 skb_shinfo(gso_skb)->gso_segs = DIV_ROUND_UP(gso_skb->len - sizeof(*uh),
515 if (skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST) {
517 if (skb_pagelen(gso_skb) - sizeof(*uh) == skb_shinfo(gso_skb)->gso_size)
518 return __udp_gso_segment_list(gso_skb, features, is_ipv6);
520 ret = __skb_linearize(gso_skb);
525 gso_skb->csum_start = skb_transport_header(gso_skb) - gso_skb->head;
526 gso_skb->csum_offset = offsetof(struct udphdr, check);
527 gso_skb->ip_summed = CHECKSUM_PARTIAL;
529 uh = udp_hdr(gso_skb);
531 uh->check = ~udp_v6_check(gso_skb->len,
532 &ipv6_hdr(gso_skb)->saddr,
533 &ipv6_hdr(gso_skb)->daddr, 0);
535 uh->check = ~udp_v4_check(gso_skb->len,
536 ip_hdr(gso_skb)->saddr,
537 ip_hdr(gso_skb)->daddr, 0);
540 skb_pull(gso_skb, sizeof(*uh));
543 copy_dtor = gso_skb->destructor == sock_wfree;
545 gso_skb->destructor = NULL;
546 gso_skb->sk = NULL;
549 segs = skb_segment(gso_skb, features);
552 gso_skb->destructor = sock_wfree;
553 gso_skb->sk = sk;
569 skb_shinfo(seg)->tskey = skb_shinfo(gso_skb)->tskey;
571 (skb_shinfo(gso_skb)->tx_flags & SKBTX_ANY_TSTAMP);
616 * segment skbs we actually need to set it on the gso_skb.
618 if (gso_skb->ip_summed == CHECKSUM_NONE)
619 gso_skb->ip_summed = CHECKSUM_UNNECESSARY;
623 int delta = sum_truesize - gso_skb->truesize;