int raw_rcv(struct sock *sk, struct sk_buff *skb, struct device *dev, __u32 saddr, __u32 daddr) { /* Now we need to copy this into memory. */ skb->sk = sk; skb_trim(skb,ntohs(skb->ip_hdr->tot_len)); skb->h.raw = (unsigned char *) skb->ip_hdr; skb->dev = dev; skb->saddr = daddr; skb->daddr = saddr; #if 0 /* * For no adequately explained reasons BSD likes to mess up the header of * the received frame. */ if(sk->bsdism) skb->ip_hdr->tot_len=ntohs(skb->ip_hdr->tot_len-4*skb->ip_hdr->ihl); #endif if (sk->users) { __skb_queue_tail(&sk->back_log, skb); return 0; } raw_rcv_skb(sk, skb); return 0; }
/* * This is the prot->rcv() function. It's called when we have * backlogged packets from core/sock.c if we couldn't receive it * when the packet arrived. */ static int raw_rcv_redo(struct sk_buff *skb, struct device *dev, struct options *opt, __u32 daddr, unsigned short len, __u32 saddr, int redo, struct inet_protocol * protocol) { raw_rcv_skb(skb->sk, skb); return 0; }
int raw_rcv(struct sock *sk, struct sk_buff *skb) { skb_push(skb, skb->data - skb->nh.raw); raw_rcv_skb(sk, skb); return 0; }
int raw_rcv(struct sock *sk, struct sk_buff *skb) { if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) { kfree_skb(skb); return NET_RX_DROP; } skb_push(skb, skb->data - skb->nh.raw); raw_rcv_skb(sk, skb); return 0; }
int raw_rcv(struct sock *sk, struct sk_buff *skb) { if (!xfrm4_policy_check(sk, XFRM_POLICY_IN, skb)) { kfree_skb(skb); return NET_RX_DROP; } nf_reset(skb); skb_push(skb, skb->data - skb_network_header(skb)); raw_rcv_skb(sk, skb); return 0; }