Lines Matching refs:skb
18 static struct sk_buff *gre_gso_segment(struct sk_buff *skb, in gre_gso_segment() argument
25 u16 mac_offset = skb->mac_header; in gre_gso_segment()
26 int mac_len = skb->mac_len; in gre_gso_segment()
27 __be16 protocol = skb->protocol; in gre_gso_segment()
31 if (unlikely(skb_shinfo(skb)->gso_type & in gre_gso_segment()
43 if (!skb->encapsulation) in gre_gso_segment()
46 if (unlikely(!pskb_may_pull(skb, sizeof(*greh)))) in gre_gso_segment()
49 greh = (struct gre_base_hdr *)skb_transport_header(skb); in gre_gso_segment()
51 ghl = skb_inner_mac_header(skb) - skb_transport_header(skb); in gre_gso_segment()
57 skb->encap_hdr_csum = 1; in gre_gso_segment()
60 skb->protocol = greh->protocol; in gre_gso_segment()
61 skb->encapsulation = 0; in gre_gso_segment()
63 if (unlikely(!pskb_may_pull(skb, ghl))) in gre_gso_segment()
66 __skb_pull(skb, ghl); in gre_gso_segment()
67 skb_reset_mac_header(skb); in gre_gso_segment()
68 skb_set_network_header(skb, skb_inner_network_offset(skb)); in gre_gso_segment()
69 skb->mac_len = skb_inner_network_offset(skb); in gre_gso_segment()
72 enc_features = skb->dev->hw_enc_features & features; in gre_gso_segment()
73 segs = skb_mac_gso_segment(skb, enc_features); in gre_gso_segment()
75 skb_gso_error_unwind(skb, protocol, ghl, mac_offset, mac_len); in gre_gso_segment()
79 skb = segs; in gre_gso_segment()
80 tnl_hlen = skb_tnl_header_len(skb); in gre_gso_segment()
82 __skb_push(skb, ghl); in gre_gso_segment()
86 if (skb_has_shared_frag(skb)) { in gre_gso_segment()
89 err = __skb_linearize(skb); in gre_gso_segment()
97 skb_reset_transport_header(skb); in gre_gso_segment()
100 skb_transport_header(skb); in gre_gso_segment()
103 *(__sum16 *)pcsum = gso_make_checksum(skb, 0); in gre_gso_segment()
105 __skb_push(skb, tnl_hlen - ghl); in gre_gso_segment()
107 skb_reset_inner_headers(skb); in gre_gso_segment()
108 skb->encapsulation = 1; in gre_gso_segment()
110 skb_reset_mac_header(skb); in gre_gso_segment()
111 skb_set_network_header(skb, mac_len); in gre_gso_segment()
112 skb->mac_len = mac_len; in gre_gso_segment()
113 skb->protocol = protocol; in gre_gso_segment()
114 } while ((skb = skb->next)); in gre_gso_segment()
120 struct sk_buff *skb) in gre_gro_receive() argument
131 off = skb_gro_offset(skb); in gre_gro_receive()
133 greh = skb_gro_header_fast(skb, off); in gre_gro_receive()
134 if (skb_gro_header_hard(skb, hlen)) { in gre_gro_receive()
135 greh = skb_gro_header_slow(skb, hlen, off); in gre_gro_receive()
165 if (skb_gro_header_hard(skb, hlen)) { in gre_gro_receive()
166 greh = skb_gro_header_slow(skb, hlen, off); in gre_gro_receive()
172 if ((greh->flags & GRE_CSUM) && !NAPI_GRO_CB(skb)->flush) { in gre_gro_receive()
173 if (skb_gro_checksum_simple_validate(skb)) in gre_gro_receive()
176 skb_gro_checksum_try_convert(skb, IPPROTO_GRE, 0, in gre_gro_receive()
212 skb_gro_pull(skb, grehlen); in gre_gro_receive()
215 skb_gro_postpull_rcsum(skb, greh, grehlen); in gre_gro_receive()
217 pp = ptype->callbacks.gro_receive(head, skb); in gre_gro_receive()
222 NAPI_GRO_CB(skb)->flush |= flush; in gre_gro_receive()
227 static int gre_gro_complete(struct sk_buff *skb, int nhoff) in gre_gro_complete() argument
229 struct gre_base_hdr *greh = (struct gre_base_hdr *)(skb->data + nhoff); in gre_gro_complete()
235 skb->encapsulation = 1; in gre_gro_complete()
236 skb_shinfo(skb)->gso_type = SKB_GSO_GRE; in gre_gro_complete()
248 err = ptype->callbacks.gro_complete(skb, nhoff + grehlen); in gre_gro_complete()
252 skb_set_inner_mac_header(skb, nhoff + grehlen); in gre_gro_complete()