Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72cb6962 authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller
Browse files

[IPSEC]: Add xfrm_init_state



This patch adds xfrm_init_state which is simply a wrapper that calls
xfrm_get_type and subsequently x->type->init_state.  It also gets rid
of the unused args argument.

Abstracting it out allows us to add common initialisation code, e.g.,
to set family-specific flags.

The add_time setting in xfrm_user.c was deleted because it's already
set by xfrm_state_alloc.

Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Acked-by: default avatarJames Morris <jmorris@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3f7a87d2
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -225,7 +225,7 @@ struct xfrm_type
	struct module		*owner;
	__u8			proto;

	int			(*init_state)(struct xfrm_state *x, void *args);
	int			(*init_state)(struct xfrm_state *x);
	void			(*destructor)(struct xfrm_state *);
	int			(*input)(struct xfrm_state *, struct xfrm_decap_state *, struct sk_buff *skb);
	int			(*post_input)(struct xfrm_state *, struct xfrm_decap_state *, struct sk_buff *skb);
@@ -839,6 +839,7 @@ extern int xfrm_replay_check(struct xfrm_state *x, u32 seq);
extern void xfrm_replay_advance(struct xfrm_state *x, u32 seq);
extern int xfrm_state_check(struct xfrm_state *x, struct sk_buff *skb);
extern int xfrm_state_mtu(struct xfrm_state *x, int mtu);
extern int xfrm_init_state(struct xfrm_state *x);
extern int xfrm4_rcv(struct sk_buff *skb);
extern int xfrm4_output(struct sk_buff *skb);
extern int xfrm4_tunnel_register(struct xfrm_tunnel *handler);
+1 −1
Original line number Diff line number Diff line
@@ -200,7 +200,7 @@ static void ah4_err(struct sk_buff *skb, u32 info)
	xfrm_state_put(x);
}

static int ah_init_state(struct xfrm_state *x, void *args)
static int ah_init_state(struct xfrm_state *x)
{
	struct ah_data *ahp = NULL;
	struct xfrm_algo_desc *aalg_desc;
+1 −1
Original line number Diff line number Diff line
@@ -362,7 +362,7 @@ static void esp_destroy(struct xfrm_state *x)
	kfree(esp);
}

static int esp_init_state(struct xfrm_state *x, void *args)
static int esp_init_state(struct xfrm_state *x)
{
	struct esp_data *esp = NULL;

+3 −8
Original line number Diff line number Diff line
@@ -237,14 +237,9 @@ static struct xfrm_state *ipcomp_tunnel_create(struct xfrm_state *x)
	t->props.saddr.a4 = x->props.saddr.a4;
	t->props.flags = x->props.flags;

	t->type = xfrm_get_type(IPPROTO_IPIP, t->props.family);
	if (t->type == NULL)
	if (xfrm_init_state(t))
		goto error;

	if (t->type->init_state(t, NULL))
		goto error;

	t->km.state = XFRM_STATE_VALID;
	atomic_set(&t->tunnel_users, 1);
out:
	return t;
@@ -422,7 +417,7 @@ static void ipcomp_destroy(struct xfrm_state *x)
	kfree(ipcd);
}

static int ipcomp_init_state(struct xfrm_state *x, void *args)
static int ipcomp_init_state(struct xfrm_state *x)
{
	int err;
	struct ipcomp_data *ipcd;
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ static void ipip_err(struct sk_buff *skb, u32 info)
		handler->err_handler(skb, &arg);
}

static int ipip_init_state(struct xfrm_state *x, void *args)
static int ipip_init_state(struct xfrm_state *x)
{
	if (!x->props.mode)
		return -EINVAL;
Loading