netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v3] af_mpls: fix undefined reference to ip6_route_output
@ 2015-07-28  0:41 Roopa Prabhu
  2015-07-28  4:20 ` David Miller
  0 siblings, 1 reply; 3+ messages in thread
From: Roopa Prabhu @ 2015-07-28  0:41 UTC (permalink / raw)
  To: davem, tgraf; +Cc: netdev

From: Roopa Prabhu <roopa@cumulusnetworks.com>

This patch fixes undefined reference to ip6_route_output and
ip_route_output with CONFIG_INET=n and CONFIG_IPV6=n.

The patch adds new CONFIG_MPLS_NEXTHOP_DEVLOOKUP
to lookup nexthop device if user has not specified it
in RTA_OIF attribute. Make CONFIG_MPLS_NEXTHOP_DEVLOOKUP
depend on INET and (IPV6 || IPV6=n) because it
uses ip6_route_output and ip_route_output.

Reported-by: kbuild test robot <fengguang.wu@intel.com>
Reported-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
---
v1 - v2: use IS_BUILTIN

v2 - v3: Use new Kconfig option that depends on (IPV6 || IPV6=n) as
	 suggested by Dave. Also uses IS_ERR as suggested by Thomas.

Dave, Instead of adding it only for IPV6, the new Kconfig variable
depends on INET and (IPV6 || IPV6=n). If you think something like
CONFIG_MPLS_NEXTHOP_IPV6_DEVLOOKUP to cover just IPV6 (which was the
problem case) is preferable, I will respin.


 net/mpls/Kconfig   |    7 +++++++
 net/mpls/af_mpls.c |   19 ++++++++++++++++++-
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/net/mpls/Kconfig b/net/mpls/Kconfig
index 5c467ef..ec8f972 100644
--- a/net/mpls/Kconfig
+++ b/net/mpls/Kconfig
@@ -33,4 +33,11 @@ config MPLS_IPTUNNEL
 	---help---
 	 mpls ip tunnel support.
 
+config MPLS_NEXTHOP_DEVLOOKUP
+	bool "MPLS: nexthop oif dev lookup"
+	depends on MPLS_ROUTING && INET && (IPV6 || IPV6=n)
+	---help---
+	 This enables mpls route nexthop dev lookup when oif is not
+	 specified by user
+
 endif # MPLS
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 49f1b0e..3e0c0212d 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -331,6 +331,7 @@ static unsigned find_free_label(struct net *net)
 	return LABEL_NOT_SPECIFIED;
 }
 
+#if IS_ENABLED(CONFIG_MPLS_NEXTHOP_DEVLOOKUP)
 static struct net_device *inet_fib_lookup_dev(struct net *net, void *addr)
 {
 	struct net_device *dev = NULL;
@@ -350,7 +351,14 @@ static struct net_device *inet_fib_lookup_dev(struct net *net, void *addr)
 errout:
 	return dev;
 }
+#else
+static struct net_device *inet_fib_lookup_dev(struct net *net, void *addr)
+{
+	return ERR_PTR(-EAFNOSUPPORT);
+}
+#endif
 
+#if IS_ENABLED(CONFIG_MPLS_NEXTHOP_DEVLOOKUP) && IS_ENABLED(CONFIG_IPV6)
 static struct net_device *inet6_fib_lookup_dev(struct net *net, void *addr)
 {
 	struct net_device *dev = NULL;
@@ -371,6 +379,12 @@ errout:
 
 	return dev;
 }
+#else
+static struct net_device *inet6_fib_lookup_dev(struct net *net, void *addr)
+{
+	return ERR_PTR(-EAFNOSUPPORT);
+}
+#endif
 
 static struct net_device *find_outdev(struct net *net,
 				      struct mpls_route_config *cfg)
@@ -427,8 +441,11 @@ static int mpls_route_add(struct mpls_route_config *cfg)
 
 	err = -ENODEV;
 	dev = find_outdev(net, cfg);
-	if (!dev)
+	if (IS_ERR(dev)) {
+		err = PTR_ERR(dev);
+		dev = NULL;
 		goto errout;
+	}
 
 	/* Ensure this is a supported device */
 	err = -EINVAL;
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v3] af_mpls: fix undefined reference to ip6_route_output
  2015-07-28  0:41 [PATCH net-next v3] af_mpls: fix undefined reference to ip6_route_output Roopa Prabhu
@ 2015-07-28  4:20 ` David Miller
  2015-07-28  4:30   ` roopa
  0 siblings, 1 reply; 3+ messages in thread
From: David Miller @ 2015-07-28  4:20 UTC (permalink / raw)
  To: roopa; +Cc: tgraf, netdev

From: Roopa Prabhu <roopa@cumulusnetworks.com>
Date: Mon, 27 Jul 2015 17:41:17 -0700

> @@ -33,4 +33,11 @@ config MPLS_IPTUNNEL
>  	---help---
>  	 mpls ip tunnel support.
>  
> +config MPLS_NEXTHOP_DEVLOOKUP
> +	bool "MPLS: nexthop oif dev lookup"
> +	depends on MPLS_ROUTING && INET && (IPV6 || IPV6=n)
> +	---help---
> +	 This enables mpls route nexthop dev lookup when oif is not
> +	 specified by user


This still allows the illegal combination, how did you test this?

CONFIG_IPV6=m
CONFIG_MPLS=y
CONFIG_NET_MPLS_GSO=y
CONFIG_MPLS_ROUTING=y
CONFIG_MPLS_IPTUNNEL=y
CONFIG_MPLS_NEXTHOP_DEVLOOKUP=y

net/built-in.o: In function `find_outdev':
af_mpls.c:(.text+0x17df41): undefined reference to `ip6_route_output'

The situation that must be prevented is MPLS_ROUTING=y + IPV6=m,
but that's exactly what is being allowed even after your patch.

Again, how did you test this?  Did you try the case that causes
problems as indicated in the failure reports?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net-next v3] af_mpls: fix undefined reference to ip6_route_output
  2015-07-28  4:20 ` David Miller
@ 2015-07-28  4:30   ` roopa
  0 siblings, 0 replies; 3+ messages in thread
From: roopa @ 2015-07-28  4:30 UTC (permalink / raw)
  To: David Miller; +Cc: tgraf, netdev

On 7/27/15, 9:20 PM, David Miller wrote:
> From: Roopa Prabhu <roopa@cumulusnetworks.com>
> Date: Mon, 27 Jul 2015 17:41:17 -0700
>
>> @@ -33,4 +33,11 @@ config MPLS_IPTUNNEL
>>   	---help---
>>   	 mpls ip tunnel support.
>>   
>> +config MPLS_NEXTHOP_DEVLOOKUP
>> +	bool "MPLS: nexthop oif dev lookup"
>> +	depends on MPLS_ROUTING && INET && (IPV6 || IPV6=n)
>> +	---help---
>> +	 This enables mpls route nexthop dev lookup when oif is not
>> +	 specified by user
>
> This still allows the illegal combination, how did you test this?
>
> CONFIG_IPV6=m
> CONFIG_MPLS=y
> CONFIG_NET_MPLS_GSO=y
> CONFIG_MPLS_ROUTING=y
> CONFIG_MPLS_IPTUNNEL=y
> CONFIG_MPLS_NEXTHOP_DEVLOOKUP=y
>
> net/built-in.o: In function `find_outdev':
> af_mpls.c:(.text+0x17df41): undefined reference to `ip6_route_output'
>
> The situation that must be prevented is MPLS_ROUTING=y + IPV6=m,
> but that's exactly what is being allowed even after your patch.
>
> Again, how did you test this?  Did you try the case that causes
> problems as indicated in the failure reports?
yes, I did test exactly the combination above. And also CONFIG_IPV6=m + 
CONFIG_MPLS_ROUTING=m and others with CONFIG_IPV6=n. Am not sure how I 
missed the error.... I will look again. Sorry about the iteration.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-07-28  4:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-28  0:41 [PATCH net-next v3] af_mpls: fix undefined reference to ip6_route_output Roopa Prabhu
2015-07-28  4:20 ` David Miller
2015-07-28  4:30   ` roopa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).