Lines Matching refs:skb
14 static struct sk_buff *gre_gso_segment(struct sk_buff *skb, in gre_gso_segment() argument
17 int tnl_hlen = skb_inner_mac_header(skb) - skb_transport_header(skb); in gre_gso_segment()
20 u16 mac_offset = skb->mac_header; in gre_gso_segment()
21 __be16 protocol = skb->protocol; in gre_gso_segment()
22 u16 mac_len = skb->mac_len; in gre_gso_segment()
25 if (!skb->encapsulation) in gre_gso_segment()
31 if (unlikely(!pskb_may_pull(skb, tnl_hlen))) in gre_gso_segment()
35 skb->encapsulation = 0; in gre_gso_segment()
36 SKB_GSO_CB(skb)->encap_level = 0; in gre_gso_segment()
37 __skb_pull(skb, tnl_hlen); in gre_gso_segment()
38 skb_reset_mac_header(skb); in gre_gso_segment()
39 skb_set_network_header(skb, skb_inner_network_offset(skb)); in gre_gso_segment()
40 skb->mac_len = skb_inner_network_offset(skb); in gre_gso_segment()
41 skb->protocol = skb->inner_protocol; in gre_gso_segment()
43 need_csum = !!(skb_shinfo(skb)->gso_type & SKB_GSO_GRE_CSUM); in gre_gso_segment()
44 skb->encap_hdr_csum = need_csum; in gre_gso_segment()
46 features &= skb->dev->hw_enc_features; in gre_gso_segment()
50 need_ipsec = skb_dst(skb) && dst_xfrm(skb_dst(skb)); in gre_gso_segment()
53 (skb->dev->features & NETIF_F_HW_CSUM)); in gre_gso_segment()
56 segs = skb_mac_gso_segment(skb, features); in gre_gso_segment()
58 skb_gso_error_unwind(skb, protocol, tnl_hlen, mac_offset, in gre_gso_segment()
65 outer_hlen = skb_tnl_header_len(skb); in gre_gso_segment()
67 skb = segs; in gre_gso_segment()
73 if (skb->ip_summed == CHECKSUM_PARTIAL) { in gre_gso_segment()
74 skb_reset_inner_headers(skb); in gre_gso_segment()
75 skb->encapsulation = 1; in gre_gso_segment()
78 skb->mac_len = mac_len; in gre_gso_segment()
79 skb->protocol = protocol; in gre_gso_segment()
81 __skb_push(skb, outer_hlen); in gre_gso_segment()
82 skb_reset_mac_header(skb); in gre_gso_segment()
83 skb_set_network_header(skb, mac_len); in gre_gso_segment()
84 skb_set_transport_header(skb, gre_offset); in gre_gso_segment()
89 greh = (struct gre_base_hdr *)skb_transport_header(skb); in gre_gso_segment()
92 if (gso_partial && skb_is_gso(skb)) { in gre_gso_segment()
99 partial_adj = skb->len + skb_headroom(skb) - in gre_gso_segment()
100 SKB_GSO_CB(skb)->data_offset - in gre_gso_segment()
101 skb_shinfo(skb)->gso_size; in gre_gso_segment()
108 if (skb->encapsulation || !offload_csum) { in gre_gso_segment()
109 *pcsum = gso_make_checksum(skb, 0); in gre_gso_segment()
111 skb->ip_summed = CHECKSUM_PARTIAL; in gre_gso_segment()
112 skb->csum_start = skb_transport_header(skb) - skb->head; in gre_gso_segment()
113 skb->csum_offset = sizeof(*greh); in gre_gso_segment()
115 } while ((skb = skb->next)); in gre_gso_segment()
121 struct sk_buff *skb) in gre_gro_receive() argument
132 if (NAPI_GRO_CB(skb)->encap_mark) in gre_gro_receive()
135 NAPI_GRO_CB(skb)->encap_mark = 1; in gre_gro_receive()
137 off = skb_gro_offset(skb); in gre_gro_receive()
139 greh = skb_gro_header_fast(skb, off); in gre_gro_receive()
140 if (skb_gro_header_hard(skb, hlen)) { in gre_gro_receive()
141 greh = skb_gro_header_slow(skb, hlen, off); in gre_gro_receive()
160 if ((greh->flags & GRE_CSUM) && NAPI_GRO_CB(skb)->is_fou) in gre_gro_receive()
179 if (skb_gro_header_hard(skb, hlen)) { in gre_gro_receive()
180 greh = skb_gro_header_slow(skb, hlen, off); in gre_gro_receive()
186 if ((greh->flags & GRE_CSUM) && !NAPI_GRO_CB(skb)->flush) { in gre_gro_receive()
187 if (skb_gro_checksum_simple_validate(skb)) in gre_gro_receive()
190 skb_gro_checksum_try_convert(skb, IPPROTO_GRE, in gre_gro_receive()
224 skb_gro_pull(skb, grehlen); in gre_gro_receive()
227 skb_gro_postpull_rcsum(skb, greh, grehlen); in gre_gro_receive()
229 pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); in gre_gro_receive()
235 skb_gro_flush_final(skb, pp, flush); in gre_gro_receive()
240 static int gre_gro_complete(struct sk_buff *skb, int nhoff) in gre_gro_complete() argument
242 struct gre_base_hdr *greh = (struct gre_base_hdr *)(skb->data + nhoff); in gre_gro_complete()
248 skb->encapsulation = 1; in gre_gro_complete()
249 skb_shinfo(skb)->gso_type = SKB_GSO_GRE; in gre_gro_complete()
261 err = ptype->callbacks.gro_complete(skb, nhoff + grehlen); in gre_gro_complete()
265 skb_set_inner_mac_header(skb, nhoff + grehlen); in gre_gro_complete()