All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ido Schimmel <idosch@mellanox.com>
To: David Ahern <dsahern@kernel.org>
Cc: "davem@davemloft.net" <davem@davemloft.net>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	Jiri Pirko <jiri@mellanox.com>,
	Saeed Mahameed <saeedm@mellanox.com>,
	David Ahern <dsahern@gmail.com>
Subject: Re: [PATCH net-next 05/13] ipv6: Create init helper for fib6_nh
Date: Wed, 27 Mar 2019 08:34:12 +0000	[thread overview]
Message-ID: <20190327083409.GA14334@splinter> (raw)
In-Reply-To: <20190327032942.20473-6-dsahern@kernel.org>

On Tue, Mar 26, 2019 at 08:29:34PM -0700, David Ahern wrote:
> +int fib6_nh_init(struct net *net, struct fib6_nh *fib6_nh,
> +		 struct fib6_config *cfg, gfp_t gfp_flags,
> +		 struct netlink_ext_ack *extack)
> +{
> +	struct net_device *dev = NULL;
> +	struct inet6_dev *idev = NULL;
> +	int addr_type;
> +	int err;
> +
> +	err = -ENODEV;
> +	if (cfg->fc_ifindex) {
> +		dev = dev_get_by_index(net, cfg->fc_ifindex);
> +		if (!dev)
> +			goto out;
> +		idev = in6_dev_get(dev);
> +		if (!idev)
> +			goto out;
> +	}
> +
> +	if (cfg->fc_flags & RTNH_F_ONLINK) {
> +		if (!dev) {
> +			NL_SET_ERR_MSG(extack,
> +				       "Nexthop device required for onlink");
> +			goto out;
> +		}
> +
> +		if (!(dev->flags & IFF_UP)) {
> +			NL_SET_ERR_MSG(extack, "Nexthop device is not up");
> +			err = -ENETDOWN;
> +			goto out;
> +		}
> +
> +		fib6_nh->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->nh_lwtstate = lwtstate_get(lwtstate);
> +	}
> +
> +	fib6_nh->nh_weight = 1;
> +
> +	/* We cannot add true routes via loopback here,
> +	 * they would result in kernel looping; promote them to reject routes
> +	 */
> +	addr_type = ipv6_addr_type(&cfg->fc_dst);
> +	if ((cfg->fc_flags & RTF_REJECT) ||
> +	    (dev && (dev->flags & IFF_LOOPBACK) &&
> +	     !(addr_type & IPV6_ADDR_LOOPBACK) &&
> +	     !(cfg->fc_flags & RTF_LOCAL))) {
> +		/* hold loopback dev/idev if we haven't done so. */
> +		if (dev != net->loopback_dev) {
> +			if (dev) {
> +				dev_put(dev);
> +				in6_dev_put(idev);
> +			}
> +			dev = net->loopback_dev;
> +			dev_hold(dev);
> +			idev = in6_dev_get(dev);
> +			if (!idev) {
> +				err = -ENODEV;
> +				goto out;

Same comment as previous patch. Earlier in the function you take a
reference on the LWT object, but don't drop it in error path and instead
rely on the error path of ip6_route_info_create() to take care of that.

> +			}
> +		}
> +		cfg->fc_flags = RTF_REJECT | RTF_NONEXTHOP;
> +		goto set_dev;
> +	}
> +
> +	if (cfg->fc_flags & RTF_GATEWAY) {
> +		err = ip6_validate_gw(net, cfg, &dev, &idev, extack);
> +		if (err)
> +			goto out;
> +
> +		fib6_nh->nh_gw = cfg->fc_gateway;
> +	}
> +
> +	err = -ENODEV;
> +	if (!dev)
> +		goto out;
> +
> +	if (idev->cnf.disable_ipv6) {
> +		NL_SET_ERR_MSG(extack, "IPv6 is disabled on nexthop device");
> +		err = -EACCES;
> +		goto out;
> +	}
> +
> +	if (!(dev->flags & IFF_UP) && !cfg->fc_ignore_dev_down) {
> +		NL_SET_ERR_MSG(extack, "Nexthop device is not up");
> +		err = -ENETDOWN;
> +		goto out;
> +	}
> +
> +	if (!(cfg->fc_flags & (RTF_LOCAL | RTF_ANYCAST)) &&
> +	    !netif_carrier_ok(dev))
> +		fib6_nh->nh_flags |= RTNH_F_LINKDOWN;
> +
> +set_dev:
> +	fib6_nh->nh_dev = dev;
> +	err = 0;
> +out:
> +	if (idev)
> +		in6_dev_put(idev);
> +
> +	if (err && dev)
> +		dev_put(dev);
> +
> +	return err;
> +}

  reply	other threads:[~2019-03-27  8:34 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-27  3:29 [PATCH net-next 00/13] net: Move fib_nh and fib6_nh to a common struct David Ahern
2019-03-27  3:29 ` [PATCH net-next 01/13] ipv4: Define fib_get_nhs when CONFIG_IP_ROUTE_MULTIPATH is disabled David Ahern
2019-03-27  7:40   ` Ido Schimmel
2019-03-27  3:29 ` [PATCH net-next 02/13] ipv4: Move IN_DEV_IGNORE_ROUTES_WITH_LINKDOWN to helper David Ahern
2019-03-27  7:44   ` Ido Schimmel
2019-03-27  3:29 ` [PATCH net-next 03/13] ipv4: Create init helper for fib_nh David Ahern
2019-03-27  8:12   ` Ido Schimmel
2019-03-27 14:17     ` David Ahern
2019-03-27  3:29 ` [PATCH net-next 04/13] ipv4: Create cleanup " David Ahern
2019-03-27  8:17   ` Ido Schimmel
2019-03-27  3:29 ` [PATCH net-next 05/13] ipv6: Create init helper for fib6_nh David Ahern
2019-03-27  8:34   ` Ido Schimmel [this message]
2019-03-27  3:29 ` [PATCH net-next 06/13] ipv6: Create cleanup " David Ahern
2019-03-27  8:38   ` Ido Schimmel
2019-03-27 14:17     ` David Ahern
2019-03-27  3:29 ` [PATCH net-next 07/13] ipv6: Move gateway checks to a fib6_nh setting David Ahern
2019-03-27  9:08   ` Ido Schimmel
2019-03-27 14:21     ` David Ahern
2019-03-27  3:29 ` [PATCH net-next 08/13] ipv6: Refactor fib6_ignore_linkdown David Ahern
2019-03-27  9:19   ` Ido Schimmel
2019-03-27  3:29 ` [PATCH net-next 09/13] ipv6: Change rt6_add_nexthop and rt6_nexthop_info to take fib6_nh David Ahern
2019-03-27  9:24   ` Ido Schimmel
2019-03-27  3:29 ` [PATCH net-next 10/13] ipv4: Rename fib_nh entries David Ahern
2019-03-27  3:29 ` [PATCH net-next 11/13] ipv6: Rename fib6_nh entries David Ahern
2019-03-27  3:29 ` [PATCH net-next 12/13] net: Add fib_nh_common and update fib_nh and fib6_nh David Ahern
2019-03-27  9:54   ` Ido Schimmel
2019-03-27  3:29 ` [PATCH net-next 13/13] net: Use common nexthop init and release helpers David Ahern
2019-03-27  9:46   ` Ido Schimmel
2019-03-27 14:22     ` 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=20190327083409.GA14334@splinter \
    --to=idosch@mellanox.com \
    --cc=davem@davemloft.net \
    --cc=dsahern@gmail.com \
    --cc=dsahern@kernel.org \
    --cc=jiri@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=saeedm@mellanox.com \
    /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.