Lines Matching refs:skb
22 static int ipv6_gso_pull_exthdrs(struct sk_buff *skb, int proto) in ipv6_gso_pull_exthdrs() argument
40 if (unlikely(!pskb_may_pull(skb, 8))) in ipv6_gso_pull_exthdrs()
43 opth = (void *)skb->data; in ipv6_gso_pull_exthdrs()
46 if (unlikely(!pskb_may_pull(skb, len))) in ipv6_gso_pull_exthdrs()
50 __skb_pull(skb, len); in ipv6_gso_pull_exthdrs()
56 static int ipv6_gso_send_check(struct sk_buff *skb) in ipv6_gso_send_check() argument
62 if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) in ipv6_gso_send_check()
65 ipv6h = ipv6_hdr(skb); in ipv6_gso_send_check()
66 __skb_pull(skb, sizeof(*ipv6h)); in ipv6_gso_send_check()
71 ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr)]); in ipv6_gso_send_check()
74 skb_reset_transport_header(skb); in ipv6_gso_send_check()
75 err = ops->callbacks.gso_send_check(skb); in ipv6_gso_send_check()
83 static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, in ipv6_gso_segment() argument
95 if (unlikely(skb_shinfo(skb)->gso_type & in ipv6_gso_segment()
105 if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) in ipv6_gso_segment()
108 ipv6h = ipv6_hdr(skb); in ipv6_gso_segment()
109 __skb_pull(skb, sizeof(*ipv6h)); in ipv6_gso_segment()
112 proto = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr); in ipv6_gso_segment()
116 skb_reset_transport_header(skb); in ipv6_gso_segment()
117 segs = ops->callbacks.gso_segment(skb, features); in ipv6_gso_segment()
124 for (skb = segs; skb; skb = skb->next) { in ipv6_gso_segment()
125 ipv6h = ipv6_hdr(skb); in ipv6_gso_segment()
126 ipv6h->payload_len = htons(skb->len - skb->mac_len - in ipv6_gso_segment()
129 unfrag_ip6hlen = ip6_find_1stfragopt(skb, &prevhdr); in ipv6_gso_segment()
130 fptr = (struct frag_hdr *)(skb_network_header(skb) + in ipv6_gso_segment()
133 if (skb->next != NULL) in ipv6_gso_segment()
145 struct sk_buff *skb) in ipv6_gro_receive() argument
158 off = skb_gro_offset(skb); in ipv6_gro_receive()
160 iph = skb_gro_header_fast(skb, off); in ipv6_gro_receive()
161 if (skb_gro_header_hard(skb, hlen)) { in ipv6_gro_receive()
162 iph = skb_gro_header_slow(skb, hlen, off); in ipv6_gro_receive()
167 skb_gro_pull(skb, sizeof(*iph)); in ipv6_gro_receive()
168 skb_set_transport_header(skb, skb_gro_offset(skb)); in ipv6_gro_receive()
170 flush += ntohs(iph->payload_len) != skb_gro_len(skb); in ipv6_gro_receive()
176 __pskb_pull(skb, skb_gro_offset(skb)); in ipv6_gro_receive()
177 proto = ipv6_gso_pull_exthdrs(skb, proto); in ipv6_gro_receive()
178 skb_gro_pull(skb, -skb_transport_offset(skb)); in ipv6_gro_receive()
179 skb_reset_transport_header(skb); in ipv6_gro_receive()
180 __skb_push(skb, skb_gro_offset(skb)); in ipv6_gro_receive()
186 iph = ipv6_hdr(skb); in ipv6_gro_receive()
189 NAPI_GRO_CB(skb)->proto = proto; in ipv6_gro_receive()
192 nlen = skb_network_header_len(skb); in ipv6_gro_receive()
217 NAPI_GRO_CB(skb)->flush |= flush; in ipv6_gro_receive()
219 csum = skb->csum; in ipv6_gro_receive()
220 skb_postpull_rcsum(skb, iph, skb_network_header_len(skb)); in ipv6_gro_receive()
222 pp = ops->callbacks.gro_receive(head, skb); in ipv6_gro_receive()
224 skb->csum = csum; in ipv6_gro_receive()
230 NAPI_GRO_CB(skb)->flush |= flush; in ipv6_gro_receive()
235 static int ipv6_gro_complete(struct sk_buff *skb) in ipv6_gro_complete() argument
238 struct ipv6hdr *iph = ipv6_hdr(skb); in ipv6_gro_complete()
241 iph->payload_len = htons(skb->len - skb_network_offset(skb) - in ipv6_gro_complete()
245 ops = rcu_dereference(inet6_offloads[NAPI_GRO_CB(skb)->proto]); in ipv6_gro_complete()
249 err = ops->callbacks.gro_complete(skb); in ipv6_gro_complete()