- xfrm_vec[xfrm_nr++].xvec = x;
-
- iph = skb->nh.iph;
-
- if (x->props.mode) {
- if (iph->protocol != IPPROTO_IPIP)
- goto drop;
- if (!pskb_may_pull(skb, sizeof(struct iphdr)))
- goto drop;
- if (skb_cloned(skb) &&
- pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
- goto drop;
- if (!(x->props.flags & XFRM_STATE_NOECN))
- ipip_ecn_decapsulate(skb);
- skb->mac.raw = memmove(skb->data - skb->mac_len,
- skb->mac.raw, skb->mac_len);
- skb->nh.raw = skb->data;
- memset(&(IPCB(skb)->opt), 0, sizeof(struct ip_options));
+ xfrm_vec[xfrm_nr++] = x;
+
+ if (x->mode->input(x, skb))
+ goto drop;
+
+ if (x->props.mode == XFRM_MODE_TUNNEL) {