diff options
author | David Ahern | 2019-04-06 01:30:27 +0200 |
---|---|---|
committer | David S. Miller | 2019-04-09 00:22:40 +0200 |
commit | 1550c171935d264f522581fd037db5e64a716bb6 (patch) | |
tree | c043f42751289b3cb3a93e0a5f883a6d086240f4 /net/mpls/mpls_iptunnel.c | |
parent | net: Replace nhc_has_gw with nhc_gw_family (diff) | |
download | kernel-qcow2-linux-1550c171935d264f522581fd037db5e64a716bb6.tar.gz kernel-qcow2-linux-1550c171935d264f522581fd037db5e64a716bb6.tar.xz kernel-qcow2-linux-1550c171935d264f522581fd037db5e64a716bb6.zip |
ipv4: Prepare rtable for IPv6 gateway
To allow the gateway to be either an IPv4 or IPv6 address, remove
rt_uses_gateway from rtable and replace with rt_gw_family. If
rt_gw_family is set it implies rt_uses_gateway. Rename rt_gateway
to rt_gw4 to represent the IPv4 version.
Signed-off-by: David Ahern <dsahern@gmail.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/mpls/mpls_iptunnel.c')
-rw-r--r-- | net/mpls/mpls_iptunnel.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/mpls/mpls_iptunnel.c b/net/mpls/mpls_iptunnel.c index f3a8557494d6..1f61b4e53686 100644 --- a/net/mpls/mpls_iptunnel.c +++ b/net/mpls/mpls_iptunnel.c @@ -137,10 +137,13 @@ static int mpls_xmit(struct sk_buff *skb) mpls_stats_inc_outucastpkts(out_dev, skb); - if (rt) - err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt->rt_gateway, - skb); - else if (rt6) { + if (rt) { + if (rt->rt_gw_family == AF_INET) + err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt->rt_gw4, + skb); + else + err = -EAFNOSUPPORT; + } else if (rt6) { if (ipv6_addr_v4mapped(&rt6->rt6i_gateway)) { /* 6PE (RFC 4798) */ err = neigh_xmit(NEIGH_ARP_TABLE, out_dev, &rt6->rt6i_gateway.s6_addr32[3], |