summaryrefslogtreecommitdiffstats
path: root/net/ipv6/route.c
diff options
context:
space:
mode:
authorDavid Ahern2019-03-28 04:53:58 +0100
committerDavid S. Miller2019-03-29 18:48:04 +0100
commit979e276ebebd537782797c439c9cb42b6d3aba27 (patch)
treee1b340126841f37f96730a0e84d9428344612273 /net/ipv6/route.c
parentnet: Add fib_nh_common and update fib_nh and fib6_nh (diff)
downloadkernel-qcow2-linux-979e276ebebd537782797c439c9cb42b6d3aba27.tar.gz
kernel-qcow2-linux-979e276ebebd537782797c439c9cb42b6d3aba27.tar.xz
kernel-qcow2-linux-979e276ebebd537782797c439c9cb42b6d3aba27.zip
net: Use common nexthop init and release helpers
With fib_nh_common in place, move common initialization and release code into helpers used by both ipv4 and ipv6. For the moment, the init is just the lwt encap and the release is both the netdev reference and the the lwt state reference. More will be added later. Signed-off-by: David Ahern <dsahern@gmail.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Acked-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/route.c')
-rw-r--r--net/ipv6/route.c21
1 files changed, 5 insertions, 16 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 79ef590b7bc5..e0ee30cbd079 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2934,18 +2934,6 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
fib6_nh->fib_nh_flags |= RTNH_F_ONLINK;
}
- if (cfg->fc_encap) {
- struct lwtunnel_state *lwtstate;
-
- err = lwtunnel_build_state(cfg->fc_encap_type,
- cfg->fc_encap, AF_INET6, cfg,
- &lwtstate, extack);
- if (err)
- goto out;
-
- fib6_nh->fib_nh_lws = lwtstate_get(lwtstate);
- }
-
fib6_nh->fib_nh_weight = 1;
/* We cannot add true routes via loopback here,
@@ -2999,6 +2987,10 @@ int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
!netif_carrier_ok(dev))
fib6_nh->fib_nh_flags |= RTNH_F_LINKDOWN;
+ err = fib_nh_common_init(&fib6_nh->nh_common, cfg->fc_encap,
+ cfg->fc_encap_type, cfg, gfp_flags, extack);
+ if (err)
+ goto out;
set_dev:
fib6_nh->fib_nh_dev = dev;
fib6_nh->fib_nh_oif = dev->ifindex;
@@ -3019,10 +3011,7 @@ out:
void fib6_nh_release(struct fib6_nh *fib6_nh)
{
- lwtstate_put(fib6_nh->fib_nh_lws);
-
- if (fib6_nh->fib_nh_dev)
- dev_put(fib6_nh->fib_nh_dev);
+ fib_nh_common_release(&fib6_nh->nh_common);
}
static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,