]> err.no Git - linux-2.6/blobdiff - net/xfrm/xfrm_state.c
[PATCH] hpet: fix drift and url
[linux-2.6] / net / xfrm / xfrm_state.c
index e068bd7210504f464703ece5dcb77048a39e5fb7..9d206c282cf193a9867ff3b2c0078a683588a066 100644 (file)
@@ -836,7 +836,7 @@ static void km_state_expired(struct xfrm_state *x, int hard)
        struct km_event c;
 
        c.data.hard = hard;
-       c.event = XFRM_SAP_EXPIRED;
+       c.event = XFRM_MSG_EXPIRE;
        km_state_notify(x, &c);
 
        if (hard)
@@ -884,7 +884,7 @@ void km_policy_expired(struct xfrm_policy *pol, int dir, int hard)
        struct km_event c;
 
        c.data.hard = hard;
-       c.event = XFRM_SAP_EXPIRED;
+       c.event = XFRM_MSG_POLEXPIRE;
        km_policy_notify(pol, dir, &c);
 
        if (hard)
@@ -1055,6 +1055,43 @@ int xfrm_state_mtu(struct xfrm_state *x, int mtu)
 }
 
 EXPORT_SYMBOL(xfrm_state_mtu);
+
+int xfrm_init_state(struct xfrm_state *x)
+{
+       struct xfrm_state_afinfo *afinfo;
+       int family = x->props.family;
+       int err;
+
+       err = -EAFNOSUPPORT;
+       afinfo = xfrm_state_get_afinfo(family);
+       if (!afinfo)
+               goto error;
+
+       err = 0;
+       if (afinfo->init_flags)
+               err = afinfo->init_flags(x);
+
+       xfrm_state_put_afinfo(afinfo);
+
+       if (err)
+               goto error;
+
+       err = -EPROTONOSUPPORT;
+       x->type = xfrm_get_type(x->id.proto, family);
+       if (x->type == NULL)
+               goto error;
+
+       err = x->type->init_state(x);
+       if (err)
+               goto error;
+
+       x->km.state = XFRM_STATE_VALID;
+
+error:
+       return err;
+}
+
+EXPORT_SYMBOL(xfrm_init_state);
  
 void __init xfrm_state_init(void)
 {