Skip to content

Commit

Permalink
xfrm: place af number into xfrm_mode struct
Browse files Browse the repository at this point in the history
This will be useful to know if we're supposed to decode ipv4 or ipv6.

While at it, make the unregister function return void, all module_exit
functions did just BUG(); there is never a point in doing error checks
if there is no way to handle such error.

Signed-off-by: Florian Westphal <fw@strlen.de>
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
  • Loading branch information
Florian Westphal authored and klassert committed Apr 8, 2019
1 parent f981c57 commit b262a69
Show file tree
Hide file tree
Showing 9 changed files with 32 additions and 52 deletions.
9 changes: 5 additions & 4 deletions include/net/xfrm.h
Original file line number Diff line number Diff line change
Expand Up @@ -482,17 +482,18 @@ struct xfrm_mode {

struct xfrm_state_afinfo *afinfo;
struct module *owner;
unsigned int encap;
int flags;
u8 encap;
u8 family;
u8 flags;
};

/* Flags for xfrm_mode. */
enum {
XFRM_MODE_FLAG_TUNNEL = 1,
};

int xfrm_register_mode(struct xfrm_mode *mode, int family);
int xfrm_unregister_mode(struct xfrm_mode *mode, int family);
int xfrm_register_mode(struct xfrm_mode *mode);
void xfrm_unregister_mode(struct xfrm_mode *mode);

static inline int xfrm_af2proto(unsigned int family)
{
Expand Down
8 changes: 3 additions & 5 deletions net/ipv4/xfrm4_mode_beet.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,19 +134,17 @@ static struct xfrm_mode xfrm4_beet_mode = {
.owner = THIS_MODULE,
.encap = XFRM_MODE_BEET,
.flags = XFRM_MODE_FLAG_TUNNEL,
.family = AF_INET,
};

static int __init xfrm4_beet_init(void)
{
return xfrm_register_mode(&xfrm4_beet_mode, AF_INET);
return xfrm_register_mode(&xfrm4_beet_mode);
}

static void __exit xfrm4_beet_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm4_beet_mode, AF_INET);
BUG_ON(err);
xfrm_unregister_mode(&xfrm4_beet_mode);
}

module_init(xfrm4_beet_init);
Expand Down
8 changes: 3 additions & 5 deletions net/ipv4/xfrm4_mode_transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,19 +93,17 @@ static struct xfrm_mode xfrm4_transport_mode = {
.xmit = xfrm4_transport_xmit,
.owner = THIS_MODULE,
.encap = XFRM_MODE_TRANSPORT,
.family = AF_INET,
};

static int __init xfrm4_transport_init(void)
{
return xfrm_register_mode(&xfrm4_transport_mode, AF_INET);
return xfrm_register_mode(&xfrm4_transport_mode);
}

static void __exit xfrm4_transport_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm4_transport_mode, AF_INET);
BUG_ON(err);
xfrm_unregister_mode(&xfrm4_transport_mode);
}

module_init(xfrm4_transport_init);
Expand Down
8 changes: 3 additions & 5 deletions net/ipv4/xfrm4_mode_tunnel.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,19 +131,17 @@ static struct xfrm_mode xfrm4_tunnel_mode = {
.owner = THIS_MODULE,
.encap = XFRM_MODE_TUNNEL,
.flags = XFRM_MODE_FLAG_TUNNEL,
.family = AF_INET,
};

static int __init xfrm4_mode_tunnel_init(void)
{
return xfrm_register_mode(&xfrm4_tunnel_mode, AF_INET);
return xfrm_register_mode(&xfrm4_tunnel_mode);
}

static void __exit xfrm4_mode_tunnel_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm4_tunnel_mode, AF_INET);
BUG_ON(err);
xfrm_unregister_mode(&xfrm4_tunnel_mode);
}

module_init(xfrm4_mode_tunnel_init);
Expand Down
8 changes: 3 additions & 5 deletions net/ipv6/xfrm6_mode_beet.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,19 +110,17 @@ static struct xfrm_mode xfrm6_beet_mode = {
.owner = THIS_MODULE,
.encap = XFRM_MODE_BEET,
.flags = XFRM_MODE_FLAG_TUNNEL,
.family = AF_INET6,
};

static int __init xfrm6_beet_init(void)
{
return xfrm_register_mode(&xfrm6_beet_mode, AF_INET6);
return xfrm_register_mode(&xfrm6_beet_mode);
}

static void __exit xfrm6_beet_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm6_beet_mode, AF_INET6);
BUG_ON(err);
xfrm_unregister_mode(&xfrm6_beet_mode);
}

module_init(xfrm6_beet_init);
Expand Down
8 changes: 3 additions & 5 deletions net/ipv6/xfrm6_mode_ro.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,19 +64,17 @@ static struct xfrm_mode xfrm6_ro_mode = {
.output = xfrm6_ro_output,
.owner = THIS_MODULE,
.encap = XFRM_MODE_ROUTEOPTIMIZATION,
.family = AF_INET6,
};

static int __init xfrm6_ro_init(void)
{
return xfrm_register_mode(&xfrm6_ro_mode, AF_INET6);
return xfrm_register_mode(&xfrm6_ro_mode);
}

static void __exit xfrm6_ro_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm6_ro_mode, AF_INET6);
BUG_ON(err);
xfrm_unregister_mode(&xfrm6_ro_mode);
}

module_init(xfrm6_ro_init);
Expand Down
8 changes: 3 additions & 5 deletions net/ipv6/xfrm6_mode_transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,19 +100,17 @@ static struct xfrm_mode xfrm6_transport_mode = {
.xmit = xfrm6_transport_xmit,
.owner = THIS_MODULE,
.encap = XFRM_MODE_TRANSPORT,
.family = AF_INET6,
};

static int __init xfrm6_transport_init(void)
{
return xfrm_register_mode(&xfrm6_transport_mode, AF_INET6);
return xfrm_register_mode(&xfrm6_transport_mode);
}

static void __exit xfrm6_transport_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm6_transport_mode, AF_INET6);
BUG_ON(err);
xfrm_unregister_mode(&xfrm6_transport_mode);
}

module_init(xfrm6_transport_init);
Expand Down
8 changes: 3 additions & 5 deletions net/ipv6/xfrm6_mode_tunnel.c
Original file line number Diff line number Diff line change
Expand Up @@ -130,19 +130,17 @@ static struct xfrm_mode xfrm6_tunnel_mode = {
.owner = THIS_MODULE,
.encap = XFRM_MODE_TUNNEL,
.flags = XFRM_MODE_FLAG_TUNNEL,
.family = AF_INET6,
};

static int __init xfrm6_mode_tunnel_init(void)
{
return xfrm_register_mode(&xfrm6_tunnel_mode, AF_INET6);
return xfrm_register_mode(&xfrm6_tunnel_mode);
}

static void __exit xfrm6_mode_tunnel_exit(void)
{
int err;

err = xfrm_unregister_mode(&xfrm6_tunnel_mode, AF_INET6);
BUG_ON(err);
xfrm_unregister_mode(&xfrm6_tunnel_mode);
}

module_init(xfrm6_mode_tunnel_init);
Expand Down
19 changes: 6 additions & 13 deletions net/xfrm/xfrm_state.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,7 @@ static void xfrm_put_type_offload(const struct xfrm_type_offload *type)
}

static DEFINE_SPINLOCK(xfrm_mode_lock);
int xfrm_register_mode(struct xfrm_mode *mode, int family)
int xfrm_register_mode(struct xfrm_mode *mode)
{
struct xfrm_state_afinfo *afinfo;
struct xfrm_mode **modemap;
Expand All @@ -340,7 +340,7 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family)
if (unlikely(mode->encap >= XFRM_MODE_MAX))
return -EINVAL;

afinfo = xfrm_state_get_afinfo(family);
afinfo = xfrm_state_get_afinfo(mode->family);
if (unlikely(afinfo == NULL))
return -EAFNOSUPPORT;

Expand All @@ -365,31 +365,24 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family)
}
EXPORT_SYMBOL(xfrm_register_mode);

int xfrm_unregister_mode(struct xfrm_mode *mode, int family)
void xfrm_unregister_mode(struct xfrm_mode *mode)
{
struct xfrm_state_afinfo *afinfo;
struct xfrm_mode **modemap;
int err;

if (unlikely(mode->encap >= XFRM_MODE_MAX))
return -EINVAL;

afinfo = xfrm_state_get_afinfo(family);
if (unlikely(afinfo == NULL))
return -EAFNOSUPPORT;
afinfo = xfrm_state_get_afinfo(mode->family);
if (WARN_ON_ONCE(!afinfo))
return;

err = -ENOENT;
modemap = afinfo->mode_map;
spin_lock_bh(&xfrm_mode_lock);
if (likely(modemap[mode->encap] == mode)) {
modemap[mode->encap] = NULL;
module_put(mode->afinfo->owner);
err = 0;
}

spin_unlock_bh(&xfrm_mode_lock);
rcu_read_unlock();
return err;
}
EXPORT_SYMBOL(xfrm_unregister_mode);

Expand Down

0 comments on commit b262a69

Please sign in to comment.