Lines Matching refs:skb

81 static int xfrm_rcv_cb(struct sk_buff *skb, unsigned int family, u8 protocol,  in xfrm_rcv_cb()  argument
90 ret = afinfo->callback(skb, protocol, err); in xfrm_rcv_cb()
128 int xfrm_parse_spi(struct sk_buff *skb, u8 nexthdr, __be32 *spi, __be32 *seq) in xfrm_parse_spi() argument
145 if (!pskb_may_pull(skb, sizeof(struct ip_comp_hdr))) in xfrm_parse_spi()
147 *spi = htonl(ntohs(*(__be16 *)(skb_transport_header(skb) + 2))); in xfrm_parse_spi()
154 if (!pskb_may_pull(skb, hlen)) in xfrm_parse_spi()
157 *spi = *(__be32 *)(skb_transport_header(skb) + offset); in xfrm_parse_spi()
158 *seq = *(__be32 *)(skb_transport_header(skb) + offset_seq); in xfrm_parse_spi()
162 int xfrm_prepare_input(struct xfrm_state *x, struct sk_buff *skb) in xfrm_prepare_input() argument
167 err = x->outer_mode->afinfo->extract_input(x, skb); in xfrm_prepare_input()
172 inner_mode = xfrm_ip2inner_mode(x, XFRM_MODE_SKB_CB(skb)->protocol); in xfrm_prepare_input()
177 skb->protocol = inner_mode->afinfo->eth_proto; in xfrm_prepare_input()
178 return inner_mode->input2(x, skb); in xfrm_prepare_input()
182 int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type) in xfrm_input() argument
184 struct net *net = dev_net(skb->dev); in xfrm_input()
191 u32 mark = skb->mark; in xfrm_input()
199 x = xfrm_input_state(skb); in xfrm_input()
200 seq = XFRM_SKB_CB(skb)->seq.input.low; in xfrm_input()
205 daddr = (xfrm_address_t *)(skb_network_header(skb) + in xfrm_input()
206 XFRM_SPI_SKB_CB(skb)->daddroff); in xfrm_input()
207 family = XFRM_SPI_SKB_CB(skb)->family; in xfrm_input()
210 if (XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4) { in xfrm_input()
213 mark = be32_to_cpu(XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip4->parms.i_key); in xfrm_input()
216 mark = be32_to_cpu(XFRM_TUNNEL_SKB_CB(skb)->tunnel.ip6->parms.i_key); in xfrm_input()
222 if (!skb->sp || atomic_read(&skb->sp->refcnt) != 1) { in xfrm_input()
225 sp = secpath_dup(skb->sp); in xfrm_input()
230 if (skb->sp) in xfrm_input()
231 secpath_put(skb->sp); in xfrm_input()
232 skb->sp = sp; in xfrm_input()
236 if (!spi && (err = xfrm_parse_spi(skb, nexthdr, &spi, &seq)) != 0) { in xfrm_input()
242 if (skb->sp->len == XFRM_MAX_DEPTH) { in xfrm_input()
250 xfrm_audit_state_notfound(skb, family, spi, seq); in xfrm_input()
254 skb->sp->xvec[skb->sp->len++] = x; in xfrm_input()
272 if (x->repl->check(x, skb, seq)) { in xfrm_input()
284 if (xfrm_tunnel_check(skb, x, family)) { in xfrm_input()
291 XFRM_SKB_CB(skb)->seq.input.low = seq; in xfrm_input()
292 XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; in xfrm_input()
294 skb_dst_force(skb); in xfrm_input()
296 nexthdr = x->type->input(x, skb); in xfrm_input()
304 xfrm_audit_state_icvfail(x, skb, in xfrm_input()
315 if (async && x->repl->recheck(x, skb, seq)) { in xfrm_input()
322 x->curlft.bytes += skb->len; in xfrm_input()
327 XFRM_MODE_SKB_CB(skb)->protocol = nexthdr; in xfrm_input()
332 inner_mode = xfrm_ip2inner_mode(x, XFRM_MODE_SKB_CB(skb)->protocol); in xfrm_input()
337 if (inner_mode->input(x, skb)) { in xfrm_input()
354 err = xfrm_parse_spi(skb, nexthdr, &spi, &seq); in xfrm_input()
361 err = xfrm_rcv_cb(skb, family, x->type->proto, 0); in xfrm_input()
365 nf_reset(skb); in xfrm_input()
368 skb_dst_drop(skb); in xfrm_input()
369 netif_rx(skb); in xfrm_input()
372 return x->inner_mode->afinfo->transport_finish(skb, async); in xfrm_input()
378 xfrm_rcv_cb(skb, family, x && x->type ? x->type->proto : nexthdr, -1); in xfrm_input()
379 kfree_skb(skb); in xfrm_input()
384 int xfrm_input_resume(struct sk_buff *skb, int nexthdr) in xfrm_input_resume() argument
386 return xfrm_input(skb, nexthdr, 0, -1); in xfrm_input_resume()