Lines Matching refs:skb

64 void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi,  in gre_build_header()  argument
69 skb_push(skb, hdr_len); in gre_build_header()
71 skb_reset_transport_header(skb); in gre_build_header()
72 greh = (struct gre_base_hdr *)skb->data; in gre_build_header()
88 !(skb_shinfo(skb)->gso_type & in gre_build_header()
91 *(__sum16 *)ptr = csum_fold(skb_checksum(skb, 0, in gre_build_header()
92 skb->len, 0)); in gre_build_header()
98 static int parse_gre_header(struct sk_buff *skb, struct tnl_ptk_info *tpi, in parse_gre_header() argument
105 if (unlikely(!pskb_may_pull(skb, sizeof(struct gre_base_hdr)))) in parse_gre_header()
108 greh = (struct gre_base_hdr *)skb_transport_header(skb); in parse_gre_header()
115 if (!pskb_may_pull(skb, hdr_len)) in parse_gre_header()
118 greh = (struct gre_base_hdr *)skb_transport_header(skb); in parse_gre_header()
123 if (skb_checksum_simple_validate(skb)) { in parse_gre_header()
128 skb_checksum_try_convert(skb, IPPROTO_GRE, 0, in parse_gre_header()
154 if (!pskb_may_pull(skb, hdr_len)) in parse_gre_header()
159 return iptunnel_pull_header(skb, hdr_len, tpi->proto); in parse_gre_header()
162 static int gre_cisco_rcv(struct sk_buff *skb) in gre_cisco_rcv() argument
169 if (ipv4_is_multicast(ip_hdr(skb)->daddr)) { in gre_cisco_rcv()
171 if (rt_is_output_route(skb_rtable(skb))) in gre_cisco_rcv()
176 if (parse_gre_header(skb, &tpi, &csum_err) < 0) in gre_cisco_rcv()
187 ret = proto->handler(skb, &tpi); in gre_cisco_rcv()
195 icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); in gre_cisco_rcv()
197 kfree_skb(skb); in gre_cisco_rcv()
201 static void gre_cisco_err(struct sk_buff *skb, u32 info) in gre_cisco_err() argument
217 const int type = icmp_hdr(skb)->type; in gre_cisco_err()
218 const int code = icmp_hdr(skb)->code; in gre_cisco_err()
223 if (parse_gre_header(skb, &tpi, &csum_err)) { in gre_cisco_err()
229 ipv4_update_pmtu(skb, dev_net(skb->dev), info, in gre_cisco_err()
230 skb->dev->ifindex, 0, IPPROTO_GRE, 0); in gre_cisco_err()
234 ipv4_redirect(skb, dev_net(skb->dev), skb->dev->ifindex, 0, in gre_cisco_err()
247 if (proto->err_handler(skb, info, &tpi) == PACKET_RCVD) in gre_cisco_err()
255 static int gre_rcv(struct sk_buff *skb) in gre_rcv() argument
261 if (!pskb_may_pull(skb, 12)) in gre_rcv()
264 ver = skb->data[1]&0x7f; in gre_rcv()
272 ret = proto->handler(skb); in gre_rcv()
279 kfree_skb(skb); in gre_rcv()
283 static void gre_err(struct sk_buff *skb, u32 info) in gre_err() argument
286 const struct iphdr *iph = (const struct iphdr *)skb->data; in gre_err()
287 u8 ver = skb->data[(iph->ihl<<2) + 1]&0x7f; in gre_err()
295 proto->err_handler(skb, info); in gre_err()