Lines Matching refs:skb

20 static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb,  in udp6_ufo_fragment()  argument
33 mss = skb_shinfo(skb)->gso_size; in udp6_ufo_fragment()
34 if (unlikely(skb->len <= mss)) in udp6_ufo_fragment()
37 if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST)) { in udp6_ufo_fragment()
39 int type = skb_shinfo(skb)->gso_type; in udp6_ufo_fragment()
53 skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(skb->len, mss); in udp6_ufo_fragment()
56 if (!skb_shinfo(skb)->ip6_frag_id) in udp6_ufo_fragment()
57 ipv6_proxy_select_ident(dev_net(skb->dev), skb); in udp6_ufo_fragment()
63 if (skb->encapsulation && skb_shinfo(skb)->gso_type & in udp6_ufo_fragment()
65 segs = skb_udp_tunnel_segment(skb, features, true); in udp6_ufo_fragment()
70 if (!pskb_may_pull(skb, sizeof(struct udphdr))) in udp6_ufo_fragment()
77 uh = udp_hdr(skb); in udp6_ufo_fragment()
78 ipv6h = ipv6_hdr(skb); in udp6_ufo_fragment()
81 csum = skb_checksum(skb, 0, skb->len, 0); in udp6_ufo_fragment()
82 uh->check = udp_v6_check(skb->len, &ipv6h->saddr, in udp6_ufo_fragment()
88 skb->ip_summed = CHECKSUM_NONE; in udp6_ufo_fragment()
91 tnl_hlen = skb_tnl_header_len(skb); in udp6_ufo_fragment()
92 if (skb->mac_header < (tnl_hlen + frag_hdr_sz)) { in udp6_ufo_fragment()
93 if (gso_pskb_expand_head(skb, tnl_hlen + frag_hdr_sz)) in udp6_ufo_fragment()
100 unfrag_ip6hlen = ip6_find_1stfragopt(skb, &prevhdr); in udp6_ufo_fragment()
103 unfrag_len = (skb_network_header(skb) - skb_mac_header(skb)) + in udp6_ufo_fragment()
105 packet_start = (u8 *) skb->head + SKB_GSO_CB(skb)->mac_offset; in udp6_ufo_fragment()
108 SKB_GSO_CB(skb)->mac_offset -= frag_hdr_sz; in udp6_ufo_fragment()
109 skb->mac_header -= frag_hdr_sz; in udp6_ufo_fragment()
110 skb->network_header -= frag_hdr_sz; in udp6_ufo_fragment()
112 fptr = (struct frag_hdr *)(skb_network_header(skb) + unfrag_ip6hlen); in udp6_ufo_fragment()
115 if (!skb_shinfo(skb)->ip6_frag_id) in udp6_ufo_fragment()
116 ipv6_proxy_select_ident(dev_net(skb->dev), skb); in udp6_ufo_fragment()
117 fptr->identification = skb_shinfo(skb)->ip6_frag_id; in udp6_ufo_fragment()
122 segs = skb_segment(skb, features); in udp6_ufo_fragment()
130 struct sk_buff *skb) in udp6_gro_receive() argument
132 struct udphdr *uh = udp_gro_udphdr(skb); in udp6_gro_receive()
138 if (NAPI_GRO_CB(skb)->flush) in udp6_gro_receive()
141 if (skb_gro_checksum_validate_zero_check(skb, IPPROTO_UDP, uh->check, in udp6_gro_receive()
145 skb_gro_checksum_try_convert(skb, IPPROTO_UDP, uh->check, in udp6_gro_receive()
149 NAPI_GRO_CB(skb)->is_ipv6 = 1; in udp6_gro_receive()
150 return udp_gro_receive(head, skb, uh); in udp6_gro_receive()
153 NAPI_GRO_CB(skb)->flush = 1; in udp6_gro_receive()
157 static int udp6_gro_complete(struct sk_buff *skb, int nhoff) in udp6_gro_complete() argument
159 const struct ipv6hdr *ipv6h = ipv6_hdr(skb); in udp6_gro_complete()
160 struct udphdr *uh = (struct udphdr *)(skb->data + nhoff); in udp6_gro_complete()
163 skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL_CSUM; in udp6_gro_complete()
164 uh->check = ~udp_v6_check(skb->len - nhoff, &ipv6h->saddr, in udp6_gro_complete()
167 skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL; in udp6_gro_complete()
170 return udp_gro_complete(skb, nhoff); in udp6_gro_complete()