Lines Matching refs:skb

51 				struct sk_buff *skb)  in ip6_rcv_finish_core()  argument
53 void (*edemux)(struct sk_buff *skb); in ip6_rcv_finish_core()
55 if (net->ipv4.sysctl_ip_early_demux && !skb_dst(skb) && skb->sk == NULL) { in ip6_rcv_finish_core()
58 ipprot = rcu_dereference(inet6_protos[ipv6_hdr(skb)->nexthdr]); in ip6_rcv_finish_core()
60 edemux(skb); in ip6_rcv_finish_core()
62 if (!skb_valid_dst(skb)) in ip6_rcv_finish_core()
63 ip6_route_input(skb); in ip6_rcv_finish_core()
66 int ip6_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb) in ip6_rcv_finish() argument
71 skb = l3mdev_ip6_rcv(skb); in ip6_rcv_finish()
72 if (!skb) in ip6_rcv_finish()
74 ip6_rcv_finish_core(net, sk, skb); in ip6_rcv_finish()
76 return dst_input(skb); in ip6_rcv_finish()
81 struct sk_buff *skb, *next; in ip6_sublist_rcv_finish() local
83 list_for_each_entry_safe(skb, next, head, list) in ip6_sublist_rcv_finish()
84 dst_input(skb); in ip6_sublist_rcv_finish()
91 struct sk_buff *skb, *next; in ip6_list_rcv_finish() local
95 list_for_each_entry_safe(skb, next, head, list) { in ip6_list_rcv_finish()
98 list_del(&skb->list); in ip6_list_rcv_finish()
102 skb = l3mdev_ip6_rcv(skb); in ip6_list_rcv_finish()
103 if (!skb) in ip6_list_rcv_finish()
105 ip6_rcv_finish_core(net, sk, skb); in ip6_list_rcv_finish()
106 dst = skb_dst(skb); in ip6_list_rcv_finish()
115 list_add_tail(&skb->list, &sublist); in ip6_list_rcv_finish()
121 static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev, in ip6_rcv_core() argument
128 if (skb->pkt_type == PACKET_OTHERHOST) { in ip6_rcv_core()
129 kfree_skb(skb); in ip6_rcv_core()
135 idev = __in6_dev_get(skb->dev); in ip6_rcv_core()
137 __IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_IN, skb->len); in ip6_rcv_core()
139 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL || in ip6_rcv_core()
145 memset(IP6CB(skb), 0, sizeof(struct inet6_skb_parm)); in ip6_rcv_core()
158 IP6CB(skb)->iif = skb_valid_dst(skb) ? ip6_dst_idev(skb_dst(skb))->dev->ifindex : dev->ifindex; in ip6_rcv_core()
160 if (unlikely(!pskb_may_pull(skb, sizeof(*hdr)))) in ip6_rcv_core()
163 hdr = ipv6_hdr(skb); in ip6_rcv_core()
171 max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); in ip6_rcv_core()
190 if (!(skb->pkt_type == PACKET_LOOPBACK || in ip6_rcv_core()
201 (skb->pkt_type == PACKET_BROADCAST || in ip6_rcv_core()
202 skb->pkt_type == PACKET_MULTICAST) && in ip6_rcv_core()
223 skb->transport_header = skb->network_header + sizeof(*hdr); in ip6_rcv_core()
224 IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr); in ip6_rcv_core()
230 if (pkt_len + sizeof(struct ipv6hdr) > skb->len) { in ip6_rcv_core()
235 if (pskb_trim_rcsum(skb, pkt_len + sizeof(struct ipv6hdr))) { in ip6_rcv_core()
239 hdr = ipv6_hdr(skb); in ip6_rcv_core()
243 if (ipv6_parse_hopopts(skb) < 0) { in ip6_rcv_core()
253 skb_orphan(skb); in ip6_rcv_core()
255 return skb; in ip6_rcv_core()
260 kfree_skb(skb); in ip6_rcv_core()
264 int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device… in ipv6_rcv() argument
266 struct net *net = dev_net(skb->dev); in ipv6_rcv()
268 skb = ip6_rcv_core(skb, dev, net); in ipv6_rcv()
269 if (skb == NULL) in ipv6_rcv()
272 net, NULL, skb, dev, NULL, in ipv6_rcv()
290 struct sk_buff *skb, *next; in ipv6_list_rcv() local
294 list_for_each_entry_safe(skb, next, head, list) { in ipv6_list_rcv()
295 struct net_device *dev = skb->dev; in ipv6_list_rcv()
298 list_del(&skb->list); in ipv6_list_rcv()
299 skb = ip6_rcv_core(skb, dev, net); in ipv6_list_rcv()
300 if (skb == NULL) in ipv6_list_rcv()
312 list_add_tail(&skb->list, &sublist); in ipv6_list_rcv()
323 static int ip6_input_finish(struct net *net, struct sock *sk, struct sk_buff *skb) in ip6_input_finish() argument
338 idev = ip6_dst_idev(skb_dst(skb)); in ip6_input_finish()
339 if (!pskb_pull(skb, skb_transport_offset(skb))) in ip6_input_finish()
341 nhoff = IP6CB(skb)->nhoff; in ip6_input_finish()
342 nexthdr = skb_network_header(skb)[nhoff]; in ip6_input_finish()
345 raw = raw6_local_deliver(skb, nexthdr); in ip6_input_finish()
368 nf_reset(skb); in ip6_input_finish()
370 skb_postpull_rcsum(skb, skb_network_header(skb), in ip6_input_finish()
371 skb_network_header_len(skb)); in ip6_input_finish()
372 hdr = ipv6_hdr(skb); in ip6_input_finish()
374 !ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, in ip6_input_finish()
376 !ipv6_is_mld(skb, nexthdr, skb_network_header_len(skb))) in ip6_input_finish()
380 !xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) in ip6_input_finish()
383 ret = ipprot->handler(skb); in ip6_input_finish()
401 if (xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) { in ip6_input_finish()
404 icmpv6_send(skb, ICMPV6_PARAMPROB, in ip6_input_finish()
407 kfree_skb(skb); in ip6_input_finish()
410 consume_skb(skb); in ip6_input_finish()
419 kfree_skb(skb); in ip6_input_finish()
424 int ip6_input(struct sk_buff *skb) in ip6_input() argument
427 dev_net(skb->dev), NULL, skb, skb->dev, NULL, in ip6_input()
432 int ip6_mc_input(struct sk_buff *skb) in ip6_mc_input() argument
437 __IP6_UPD_PO_STATS(dev_net(skb_dst(skb)->dev), in ip6_mc_input()
438 __in6_dev_get_safely(skb->dev), IPSTATS_MIB_INMCAST, in ip6_mc_input()
439 skb->len); in ip6_mc_input()
441 hdr = ipv6_hdr(skb); in ip6_mc_input()
442 deliver = ipv6_chk_mcast_addr(skb->dev, &hdr->daddr, NULL); in ip6_mc_input()
448 if (dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding && in ip6_mc_input()
451 likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) { in ip6_mc_input()
457 struct inet6_skb_parm *opt = IP6CB(skb); in ip6_mc_input()
476 offset = ipv6_skip_exthdr(skb, sizeof(*hdr), in ip6_mc_input()
481 if (ipv6_is_mld(skb, nexthdr, offset)) in ip6_mc_input()
490 skb2 = skb_clone(skb, GFP_ATOMIC); in ip6_mc_input()
492 skb2 = skb; in ip6_mc_input()
493 skb = NULL; in ip6_mc_input()
503 ip6_input(skb); in ip6_mc_input()
506 kfree_skb(skb); in ip6_mc_input()