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()
49 opth = (void *)skb->data; in ipv6_gso_pull_exthdrs()
51 __skb_pull(skb, len); in ipv6_gso_pull_exthdrs()
57 static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, in ipv6_gso_segment() argument
70 if (unlikely(skb_shinfo(skb)->gso_type & in ipv6_gso_segment()
86 skb_reset_network_header(skb); in ipv6_gso_segment()
87 nhoff = skb_network_header(skb) - skb_mac_header(skb); in ipv6_gso_segment()
88 if (unlikely(!pskb_may_pull(skb, sizeof(*ipv6h)))) in ipv6_gso_segment()
91 encap = SKB_GSO_CB(skb)->encap_level > 0; in ipv6_gso_segment()
93 features &= skb->dev->hw_enc_features; in ipv6_gso_segment()
94 SKB_GSO_CB(skb)->encap_level += sizeof(*ipv6h); in ipv6_gso_segment()
96 ipv6h = ipv6_hdr(skb); in ipv6_gso_segment()
97 __skb_pull(skb, sizeof(*ipv6h)); in ipv6_gso_segment()
100 proto = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr); in ipv6_gso_segment()
102 if (skb->encapsulation && in ipv6_gso_segment()
103 skb_shinfo(skb)->gso_type & (SKB_GSO_SIT|SKB_GSO_IPIP)) in ipv6_gso_segment()
106 udpfrag = proto == IPPROTO_UDP && !skb->encapsulation; in ipv6_gso_segment()
110 skb_reset_transport_header(skb); in ipv6_gso_segment()
111 segs = ops->callbacks.gso_segment(skb, features); in ipv6_gso_segment()
117 for (skb = segs; skb; skb = skb->next) { in ipv6_gso_segment()
118 ipv6h = (struct ipv6hdr *)(skb_mac_header(skb) + nhoff); in ipv6_gso_segment()
119 ipv6h->payload_len = htons(skb->len - nhoff - sizeof(*ipv6h)); in ipv6_gso_segment()
120 skb->network_header = (u8 *)ipv6h - skb->head; in ipv6_gso_segment()
123 int err = ip6_find_1stfragopt(skb, &prevhdr); in ipv6_gso_segment()
130 if (skb->next != NULL) in ipv6_gso_segment()
136 skb_reset_inner_headers(skb); in ipv6_gso_segment()
170 struct sk_buff *skb) in ipv6_gro_receive() argument
182 off = skb_gro_offset(skb); in ipv6_gro_receive()
184 iph = skb_gro_header_fast(skb, off); in ipv6_gro_receive()
185 if (skb_gro_header_hard(skb, hlen)) { in ipv6_gro_receive()
186 iph = skb_gro_header_slow(skb, hlen, off); in ipv6_gro_receive()
191 skb_set_network_header(skb, off); in ipv6_gro_receive()
192 skb_gro_pull(skb, sizeof(*iph)); in ipv6_gro_receive()
193 skb_set_transport_header(skb, skb_gro_offset(skb)); in ipv6_gro_receive()
195 flush += ntohs(iph->payload_len) != skb_gro_len(skb); in ipv6_gro_receive()
201 __pskb_pull(skb, skb_gro_offset(skb)); in ipv6_gro_receive()
202 proto = ipv6_gso_pull_exthdrs(skb, proto); in ipv6_gro_receive()
203 skb_gro_pull(skb, -skb_transport_offset(skb)); in ipv6_gro_receive()
204 skb_reset_transport_header(skb); in ipv6_gro_receive()
205 __skb_push(skb, skb_gro_offset(skb)); in ipv6_gro_receive()
211 iph = ipv6_hdr(skb); in ipv6_gro_receive()
214 NAPI_GRO_CB(skb)->proto = proto; in ipv6_gro_receive()
217 nlen = skb_network_header_len(skb); in ipv6_gro_receive()
249 NAPI_GRO_CB(skb)->flush |= flush; in ipv6_gro_receive()
251 skb_gro_postpull_rcsum(skb, iph, nlen); in ipv6_gro_receive()
253 pp = ops->callbacks.gro_receive(head, skb); in ipv6_gro_receive()
259 NAPI_GRO_CB(skb)->flush |= flush; in ipv6_gro_receive()
265 struct sk_buff *skb) in sit_gro_receive() argument
267 if (NAPI_GRO_CB(skb)->encap_mark) { in sit_gro_receive()
268 NAPI_GRO_CB(skb)->flush = 1; in sit_gro_receive()
272 NAPI_GRO_CB(skb)->encap_mark = 1; in sit_gro_receive()
274 return ipv6_gro_receive(head, skb); in sit_gro_receive()
277 static int ipv6_gro_complete(struct sk_buff *skb, int nhoff) in ipv6_gro_complete() argument
280 struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + nhoff); in ipv6_gro_complete()
283 iph->payload_len = htons(skb->len - nhoff - sizeof(*iph)); in ipv6_gro_complete()
291 err = ops->callbacks.gro_complete(skb, nhoff); in ipv6_gro_complete()