All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
To: David Ahern <dsa@cumulusnetworks.com>, netdev@vger.kernel.org
Subject: Re: [PATCH net-next 01/11] net: Introduce L3 Master device abstraction
Date: Sat, 26 Sep 2015 15:24:22 +0200	[thread overview]
Message-ID: <56069C86.6040400@cumulusnetworks.com> (raw)
In-Reply-To: <1443140467-69297-2-git-send-email-dsa@cumulusnetworks.com>

<<<snip>>>
> + *	l3mdev_master_ifindex - get index of L3 master device
> + *	@dev: targeted interface
> + */
> +
> +int l3mdev_master_ifindex_rcu(struct net_device *dev)
> +{
> +	int ifindex = 0;
> +
> +	if (!dev)
> +		return 0;
> +
> +	if (netif_is_l3_master(dev)) {
> +		ifindex = dev->ifindex;
> +
^^
Extra empty line.

> +	} else if (dev->flags & IFF_SLAVE) {
> +		struct net_device *master;
> +
> +		master = netdev_master_upper_dev_get_rcu(dev);
> +		if (netif_is_l3_master(master))
^^
maybe check if master is non-null, otherwise this imposes a new
restriction on the ordering of iff_slave / master_upper setting,
also a very old driver that uses iff_slave/master doesn't set the
master_upper, but only the flag (eql).
Actually, is this bisectable ? I see netif_is_l3_master() being
introduced in the next patch, so I don't think you can compile
this one.

> +			ifindex = master->ifindex;
> +	}
> +
> +	return ifindex;
> +}
> +
> +/**
> + *	l3mdev_fib_table - get FIB table id associated with an L3
> + *                             master interface
> + *	@dev: targeted interface
> + */
> +
> +u32 l3mdev_fib_table_rcu(const struct net_device *dev)
> +{
> +	u32 tb_id = 0;
> +
> +	if (!dev)
> +		return 0;
> +
> +	if (netif_is_l3_master(dev)) {
> +		if (dev->l3mdev_ops->l3mdev_fib_table)
> +			tb_id = dev->l3mdev_ops->l3mdev_fib_table(dev);
> +
^^
Extra empty line.

> +	} else if (dev->flags & IFF_SLAVE) {
> +		/* TO-DO: remove the need for typecast.
> +		 * Users of netdev_master_upper_dev_get_rcu need non-const,
> +		 * but current inet_*type functions take a const
> +		 */
> +		struct net_device *_dev = (struct net_device *) dev;
> +		const struct net_device *master;
> +
> +		master = netdev_master_upper_dev_get_rcu(_dev);
> +		if (!master)
> +			return 0;
> +
> +		if (netif_is_l3_master(master) &&
> +		    master->l3mdev_ops->l3mdev_fib_table)
> +			tb_id = master->l3mdev_ops->l3mdev_fib_table(master);
> +	}
> +
> +	return tb_id;
> +}
> +
> +u32 l3mdev_fib_table_by_index(struct net *net, int ifindex)
> +{
> +	struct net_device *dev;
> +	u32 tb_id = 0;
> +
> +	if (!ifindex)
> +		return 0;
> +
> +	rcu_read_lock();
> +
> +	dev = dev_get_by_index_rcu(net, ifindex);
> +	if (dev)
> +		tb_id = l3mdev_fib_table_rcu(dev);
> +
> +	rcu_read_unlock();
> +
> +	return tb_id;
> +}
> 

  reply	other threads:[~2015-09-26 13:24 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-25  0:20 [PATCH net-next 00/11] net: L3 master device David Ahern
2015-09-25  0:20 ` [PATCH net-next 01/11] net: Introduce L3 Master device abstraction David Ahern
2015-09-26 13:24   ` Nikolay Aleksandrov [this message]
2015-09-25  0:20 ` [PATCH net-next 02/11] net: Rename IFF_VRF_MASTER to IFF_L3MDEV_MASTER David Ahern
2015-09-25  0:20 ` [PATCH net-next 03/11] net: Add support for l3mdev ops to VRF driver David Ahern
2015-09-25  0:21 ` [PATCH net-next 04/11] net: Replace vrf_master_ifindex{,_rcu} with l3mdev equivalents David Ahern
2015-09-25  0:21 ` [PATCH net-next 05/11] net: Replace vrf_dev_table and friends David Ahern
2015-09-25  0:21 ` [PATCH net-next 06/11] net: Replace calls to vrf_dev_get_rth David Ahern
2015-09-25  0:21 ` [PATCH net-next 07/11] net: Remove the now unused vrf_ptr David Ahern
2015-09-25  0:21 ` [PATCH net-next 08/11] net: Remove vrf header file David Ahern
2015-09-25  0:21 ` [PATCH net-next 09/11] net: Move netif_index_is_l3_master to l3mdev.h David Ahern
2015-09-25  0:21 ` [PATCH net-next 10/11] net: Rename FLOWI_FLAG_VRFSRC to FLOWI_FLAG_L3MDEV_SRC David Ahern
2015-09-25  0:21 ` [PATCH net-next 11/11] net: Add netif_is_l3_slave David Ahern

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56069C86.6040400@cumulusnetworks.com \
    --to=nikolay@cumulusnetworks.com \
    --cc=dsa@cumulusnetworks.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.