Lines Matching refs:skb

154 bool ip_call_ra_chain(struct sk_buff *skb)  in ip_call_ra_chain()  argument
157 u8 protocol = ip_hdr(skb)->protocol; in ip_call_ra_chain()
159 struct net_device *dev = skb->dev; in ip_call_ra_chain()
171 if (ip_is_fragment(ip_hdr(skb))) { in ip_call_ra_chain()
172 if (ip_defrag(net, skb, IP_DEFRAG_CALL_RA_CHAIN)) in ip_call_ra_chain()
176 struct sk_buff *skb2 = skb_clone(skb, GFP_ATOMIC); in ip_call_ra_chain()
185 raw_rcv(last, skb); in ip_call_ra_chain()
191 static int ip_local_deliver_finish(struct net *net, struct sock *sk, struct sk_buff *skb) in ip_local_deliver_finish() argument
193 __skb_pull(skb, skb_network_header_len(skb)); in ip_local_deliver_finish()
197 int protocol = ip_hdr(skb)->protocol; in ip_local_deliver_finish()
202 raw = raw_local_deliver(skb, protocol); in ip_local_deliver_finish()
209 if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) { in ip_local_deliver_finish()
210 kfree_skb(skb); in ip_local_deliver_finish()
213 nf_reset(skb); in ip_local_deliver_finish()
215 ret = ipprot->handler(skb); in ip_local_deliver_finish()
223 if (xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) { in ip_local_deliver_finish()
225 icmp_send(skb, ICMP_DEST_UNREACH, in ip_local_deliver_finish()
228 kfree_skb(skb); in ip_local_deliver_finish()
231 consume_skb(skb); in ip_local_deliver_finish()
244 int ip_local_deliver(struct sk_buff *skb) in ip_local_deliver() argument
249 struct net *net = dev_net(skb->dev); in ip_local_deliver()
251 if (ip_is_fragment(ip_hdr(skb))) { in ip_local_deliver()
252 if (ip_defrag(net, skb, IP_DEFRAG_LOCAL_DELIVER)) in ip_local_deliver()
257 net, NULL, skb, skb->dev, NULL, in ip_local_deliver()
261 static inline bool ip_rcv_options(struct sk_buff *skb) in ip_rcv_options() argument
265 struct net_device *dev = skb->dev; in ip_rcv_options()
274 if (skb_cow(skb, skb_headroom(skb))) { in ip_rcv_options()
279 iph = ip_hdr(skb); in ip_rcv_options()
280 opt = &(IPCB(skb)->opt); in ip_rcv_options()
283 if (ip_options_compile(dev_net(dev), opt, skb)) { in ip_rcv_options()
301 if (ip_options_rcv_srr(skb)) in ip_rcv_options()
311 struct sk_buff *skb) in ip_rcv_finish_core() argument
313 const struct iphdr *iph = ip_hdr(skb); in ip_rcv_finish_core()
314 int (*edemux)(struct sk_buff *skb); in ip_rcv_finish_core()
315 struct net_device *dev = skb->dev; in ip_rcv_finish_core()
320 !skb_dst(skb) && in ip_rcv_finish_core()
321 !skb->sk && in ip_rcv_finish_core()
328 err = edemux(skb); in ip_rcv_finish_core()
332 iph = ip_hdr(skb); in ip_rcv_finish_core()
340 if (!skb_valid_dst(skb)) { in ip_rcv_finish_core()
341 err = ip_route_input_noref(skb, iph->daddr, iph->saddr, in ip_rcv_finish_core()
348 if (unlikely(skb_dst(skb)->tclassid)) { in ip_rcv_finish_core()
350 u32 idx = skb_dst(skb)->tclassid; in ip_rcv_finish_core()
352 st[idx&0xFF].o_bytes += skb->len; in ip_rcv_finish_core()
354 st[(idx>>16)&0xFF].i_bytes += skb->len; in ip_rcv_finish_core()
358 if (iph->ihl > 5 && ip_rcv_options(skb)) in ip_rcv_finish_core()
361 rt = skb_rtable(skb); in ip_rcv_finish_core()
363 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INMCAST, skb->len); in ip_rcv_finish_core()
365 __IP_UPD_PO_STATS(net, IPSTATS_MIB_INBCAST, skb->len); in ip_rcv_finish_core()
366 } else if (skb->pkt_type == PACKET_BROADCAST || in ip_rcv_finish_core()
367 skb->pkt_type == PACKET_MULTICAST) { in ip_rcv_finish_core()
393 kfree_skb(skb); in ip_rcv_finish_core()
402 static int ip_rcv_finish(struct net *net, struct sock *sk, struct sk_buff *skb) in ip_rcv_finish() argument
409 skb = l3mdev_ip_rcv(skb); in ip_rcv_finish()
410 if (!skb) in ip_rcv_finish()
413 ret = ip_rcv_finish_core(net, sk, skb); in ip_rcv_finish()
415 ret = dst_input(skb); in ip_rcv_finish()
422 static struct sk_buff *ip_rcv_core(struct sk_buff *skb, struct net *net) in ip_rcv_core() argument
430 if (skb->pkt_type == PACKET_OTHERHOST) in ip_rcv_core()
434 __IP_UPD_PO_STATS(net, IPSTATS_MIB_IN, skb->len); in ip_rcv_core()
436 skb = skb_share_check(skb, GFP_ATOMIC); in ip_rcv_core()
437 if (!skb) { in ip_rcv_core()
442 if (!pskb_may_pull(skb, sizeof(struct iphdr))) in ip_rcv_core()
445 iph = ip_hdr(skb); in ip_rcv_core()
466 max_t(unsigned short, 1, skb_shinfo(skb)->gso_segs)); in ip_rcv_core()
468 if (!pskb_may_pull(skb, iph->ihl*4)) in ip_rcv_core()
471 iph = ip_hdr(skb); in ip_rcv_core()
477 if (skb->len < len) { in ip_rcv_core()
487 if (pskb_trim_rcsum(skb, len)) { in ip_rcv_core()
492 skb->transport_header = skb->network_header + iph->ihl*4; in ip_rcv_core()
495 memset(IPCB(skb), 0, sizeof(struct inet_skb_parm)); in ip_rcv_core()
496 IPCB(skb)->iif = skb->skb_iif; in ip_rcv_core()
499 skb_orphan(skb); in ip_rcv_core()
501 return skb; in ip_rcv_core()
508 kfree_skb(skb); in ip_rcv_core()
516 int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, in ip_rcv() argument
521 skb = ip_rcv_core(skb, net); in ip_rcv()
522 if (skb == NULL) in ip_rcv()
525 net, NULL, skb, dev, NULL, in ip_rcv()
531 struct sk_buff *skb, *next; in ip_sublist_rcv_finish() local
533 list_for_each_entry_safe(skb, next, head, list) { in ip_sublist_rcv_finish()
534 list_del(&skb->list); in ip_sublist_rcv_finish()
538 skb->next = NULL; in ip_sublist_rcv_finish()
539 dst_input(skb); in ip_sublist_rcv_finish()
547 struct sk_buff *skb, *next; in ip_list_rcv_finish() local
551 list_for_each_entry_safe(skb, next, head, list) { in ip_list_rcv_finish()
554 list_del(&skb->list); in ip_list_rcv_finish()
558 skb = l3mdev_ip_rcv(skb); in ip_list_rcv_finish()
559 if (!skb) in ip_list_rcv_finish()
561 if (ip_rcv_finish_core(net, sk, skb) == NET_RX_DROP) in ip_list_rcv_finish()
564 dst = skb_dst(skb); in ip_list_rcv_finish()
573 list_add_tail(&skb->list, &sublist); in ip_list_rcv_finish()
593 struct sk_buff *skb, *next; in ip_list_rcv() local
597 list_for_each_entry_safe(skb, next, head, list) { in ip_list_rcv()
598 struct net_device *dev = skb->dev; in ip_list_rcv()
601 list_del(&skb->list); in ip_list_rcv()
602 skb = ip_rcv_core(skb, net); in ip_list_rcv()
603 if (skb == NULL) in ip_list_rcv()
615 list_add_tail(&skb->list, &sublist); in ip_list_rcv()