]> err.no Git - linux-2.6/blobdiff - net/xfrm/xfrm_output.c
[IPSEC]: Move xfrm_state_check into xfrm_output.c
[linux-2.6] / net / xfrm / xfrm_output.c
index 75f289b488a709f2876afcd9aff16b24e05ff044..5b1c978a323c34a3cbb35020e17e6f4fc5943146 100644 (file)
 #include <net/dst.h>
 #include <net/xfrm.h>
 
+static int xfrm_state_check_space(struct xfrm_state *x, struct sk_buff *skb)
+{
+       int nhead = x->props.header_len + LL_RESERVED_SPACE(skb->dst->dev)
+               - skb_headroom(skb);
+
+       if (nhead > 0)
+               return pskb_expand_head(skb, nhead, 0, GFP_ATOMIC);
+
+       /* Check tail too... */
+       return 0;
+}
+
+static int xfrm_state_check(struct xfrm_state *x, struct sk_buff *skb)
+{
+       int err = xfrm_state_check_expire(x);
+       if (err < 0)
+               goto err;
+       err = xfrm_state_check_space(x, skb);
+err:
+       return err;
+}
+
 int xfrm_output(struct sk_buff *skb)
 {
        struct dst_entry *dst = skb->dst;