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

Commit 385add90 authored by David Ahern's avatar David Ahern Committed by David S. Miller
Browse files

net: Replace vrf_master_ifindex{, _rcu} with l3mdev equivalents



Replace calls to vrf_master_ifindex_rcu and vrf_master_ifindex with either
l3mdev_master_ifindex_rcu or l3mdev_master_ifindex.

The pattern:
    oif = vrf_master_ifindex(dev) ? : dev->ifindex;
is replaced with
    oif = l3mdev_fib_oif(dev);

And remove the now unused vrf macros.

Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ee15ee5d
Loading
Loading
Loading
Loading
+0 −41
Original line number Diff line number Diff line
@@ -34,37 +34,6 @@ struct net_vrf {


#if IS_ENABLED(CONFIG_NET_VRF)
/* called with rcu_read_lock() */
static inline int vrf_master_ifindex_rcu(const struct net_device *dev)
{
	struct net_vrf_dev *vrf_ptr;
	int ifindex = 0;

	if (!dev)
		return 0;

	if (netif_is_l3_master(dev)) {
		ifindex = dev->ifindex;
	} else {
		vrf_ptr = rcu_dereference(dev->vrf_ptr);
		if (vrf_ptr)
			ifindex = vrf_ptr->ifindex;
	}

	return ifindex;
}

static inline int vrf_master_ifindex(const struct net_device *dev)
{
	int ifindex;

	rcu_read_lock();
	ifindex = vrf_master_ifindex_rcu(dev);
	rcu_read_unlock();

	return ifindex;
}

/* called with rcu_read_lock */
static inline u32 vrf_dev_table_rcu(const struct net_device *dev)
{
@@ -139,16 +108,6 @@ static inline struct rtable *vrf_dev_get_rth(const struct net_device *dev)
}

#else
static inline int vrf_master_ifindex_rcu(const struct net_device *dev)
{
	return 0;
}

static inline int vrf_master_ifindex(const struct net_device *dev)
{
	return 0;
}

static inline u32 vrf_dev_table_rcu(const struct net_device *dev)
{
	return 0;
+3 −2
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@
#include <net/rtnetlink.h>
#include <net/xfrm.h>
#include <net/vrf.h>
#include <net/l3mdev.h>
#include <trace/events/fib.h>

#ifndef CONFIG_IP_MULTIPLE_TABLES
@@ -332,7 +333,7 @@ static int __fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
	bool dev_match;

	fl4.flowi4_oif = 0;
	fl4.flowi4_iif = vrf_master_ifindex_rcu(dev);
	fl4.flowi4_iif = l3mdev_master_ifindex_rcu(dev);
	if (!fl4.flowi4_iif)
		fl4.flowi4_iif = oif ? : LOOPBACK_IFINDEX;
	fl4.daddr = src;
@@ -366,7 +367,7 @@ static int __fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst,
		if (nh->nh_dev == dev) {
			dev_match = true;
			break;
		} else if (vrf_master_ifindex_rcu(nh->nh_dev) == dev->ifindex) {
		} else if (l3mdev_master_ifindex_rcu(nh->nh_dev) == dev->ifindex) {
			dev_match = true;
			break;
		}
+4 −4
Original line number Diff line number Diff line
@@ -96,7 +96,7 @@
#include <net/xfrm.h>
#include <net/inet_common.h>
#include <net/ip_fib.h>
#include <net/vrf.h>
#include <net/l3mdev.h>

/*
 *	Build xmit assembly blocks
@@ -309,7 +309,7 @@ static bool icmpv4_xrlim_allow(struct net *net, struct rtable *rt,

	rc = false;
	if (icmp_global_allow()) {
		int vif = vrf_master_ifindex(dst->dev);
		int vif = l3mdev_master_ifindex(dst->dev);
		struct inet_peer *peer;

		peer = inet_getpeer_v4(net->ipv4.peers, fl4->daddr, vif, 1);
@@ -427,7 +427,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
	fl4.flowi4_mark = mark;
	fl4.flowi4_tos = RT_TOS(ip_hdr(skb)->tos);
	fl4.flowi4_proto = IPPROTO_ICMP;
	fl4.flowi4_oif = vrf_master_ifindex(skb->dev);
	fl4.flowi4_oif = l3mdev_master_ifindex(skb->dev);
	security_skb_classify_flow(skb, flowi4_to_flowi(&fl4));
	rt = ip_route_output_key(net, &fl4);
	if (IS_ERR(rt))
@@ -461,7 +461,7 @@ static struct rtable *icmp_route_lookup(struct net *net,
	fl4->flowi4_proto = IPPROTO_ICMP;
	fl4->fl4_icmp_type = type;
	fl4->fl4_icmp_code = code;
	fl4->flowi4_oif = vrf_master_ifindex(skb_in->dev);
	fl4->flowi4_oif = l3mdev_master_ifindex(skb_in->dev);

	security_skb_classify_flow(skb_in, flowi4_to_flowi(fl4));
	rt = __ip_route_output_key(net, fl4);
+3 −3
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@
#include <linux/inet.h>
#include <linux/netfilter_ipv4.h>
#include <net/inet_ecn.h>
#include <net/vrf.h>
#include <net/l3mdev.h>

/* NOTE. Logic of IP defragmentation is parallel to corresponding IPv6
 * code now. If you change something here, _PLEASE_ update ipv6/reassembly.c
@@ -78,7 +78,7 @@ struct ipq {
	u8		ecn; /* RFC3168 support */
	u16		max_df_size; /* largest frag with DF set seen */
	int             iif;
	int             vif;   /* VRF device index */
	int             vif;   /* L3 master device index */
	unsigned int    rid;
	struct inet_peer *peer;
};
@@ -657,7 +657,7 @@ static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
int ip_defrag(struct sk_buff *skb, u32 user)
{
	struct net_device *dev = skb->dev ? : skb_dst(skb)->dev;
	int vif = vrf_master_ifindex_rcu(dev);
	int vif = l3mdev_master_ifindex_rcu(dev);
	struct net *net = dev_net(dev);
	struct ipq *qp;

+4 −3
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@
#include <net/secure_seq.h>
#include <net/ip_tunnels.h>
#include <net/vrf.h>
#include <net/l3mdev.h>

#define RT_FL_TOS(oldflp4) \
	((oldflp4)->flowi4_tos & (IPTOS_RT_MASK | RTO_ONLINK))
@@ -847,7 +848,7 @@ void ip_rt_send_redirect(struct sk_buff *skb)
		return;
	}
	log_martians = IN_DEV_LOG_MARTIANS(in_dev);
	vif = vrf_master_ifindex_rcu(rt->dst.dev);
	vif = l3mdev_master_ifindex_rcu(rt->dst.dev);
	rcu_read_unlock();

	net = dev_net(rt->dst.dev);
@@ -941,7 +942,7 @@ static int ip_error(struct sk_buff *skb)
	}

	peer = inet_getpeer_v4(net->ipv4.peers, ip_hdr(skb)->saddr,
			       vrf_master_ifindex(skb->dev), 1);
			       l3mdev_master_ifindex(skb->dev), 1);

	send = true;
	if (peer) {
@@ -1739,7 +1740,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
	 *	Now we are ready to route packet.
	 */
	fl4.flowi4_oif = 0;
	fl4.flowi4_iif = vrf_master_ifindex_rcu(dev) ? : dev->ifindex;
	fl4.flowi4_iif = l3mdev_fib_oif_rcu(dev);
	fl4.flowi4_mark = skb->mark;
	fl4.flowi4_tos = tos;
	fl4.flowi4_scope = RT_SCOPE_UNIVERSE;
Loading