All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA
@ 2015-01-17  1:02 Harout Hedeshian
  2015-01-19 19:07 ` Hannes Frederic Sowa
  2015-01-19 20:58 ` David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: Harout Hedeshian @ 2015-01-17  1:02 UTC (permalink / raw
  To: netdev; +Cc: Harout Hedeshian

The kernel forcefully applies MTU values received in router
advertisements provided the new MTU is less than the current. This
behavior is undesirable when the user space is managing the MTU. Instead
a sysctl flag 'accept_ra_mtu' is introduced such that the user space
can control whether or not RA provided MTU updates should be applied. The
default behavior is unchanged; user space must explicitly set this flag
to 0 for RA MTUs to be ignored.

Signed-off-by: Harout Hedeshian <harouth@codeaurora.org>
---
 Documentation/networking/ip-sysctl.txt | 7 +++++++
 include/linux/ipv6.h                   | 1 +
 include/uapi/linux/ipv6.h              | 1 +
 kernel/sysctl_binary.c                 | 1 +
 net/ipv6/addrconf.c                    | 9 +++++++++
 net/ipv6/ndisc.c                       | 2 +-
 6 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 85b0221..da50faa 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -1287,6 +1287,13 @@ accept_ra_rtr_pref - BOOLEAN
 	Functional default: enabled if accept_ra is enabled.
 			    disabled if accept_ra is disabled.
 
+accept_ra_mtu - BOOLEAN
+	Apply the MTU value specified in RA option 5 (RFC4861). If
+	disabled, the MTU specified in the RA will be ignored.
+
+	Functional default: enabled if accept_ra is enabled.
+                            disabled if accept_ra is disabled.
+
 accept_redirects - BOOLEAN
 	Accept Redirects.
 
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index c694e7b..2805062 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -52,6 +52,7 @@ struct ipv6_devconf {
 	__s32		force_tllao;
 	__s32           ndisc_notify;
 	__s32		suppress_frag_ndisc;
+	__s32		accept_ra_mtu;
 	void		*sysctl;
 };
 
diff --git a/include/uapi/linux/ipv6.h b/include/uapi/linux/ipv6.h
index 73cb02d..437a6a4 100644
--- a/include/uapi/linux/ipv6.h
+++ b/include/uapi/linux/ipv6.h
@@ -169,6 +169,7 @@ enum {
 	DEVCONF_SUPPRESS_FRAG_NDISC,
 	DEVCONF_ACCEPT_RA_FROM_LOCAL,
 	DEVCONF_USE_OPTIMISTIC,
+	DEVCONF_ACCEPT_RA_MTU,
 	DEVCONF_MAX
 };
 
diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c
index 7e7746a..16091e5 100644
--- a/kernel/sysctl_binary.c
+++ b/kernel/sysctl_binary.c
@@ -523,6 +523,7 @@ static const struct bin_table bin_net_ipv6_conf_var_table[] = {
 	{ CTL_INT,	NET_IPV6_PROXY_NDP,			"proxy_ndp" },
 	{ CTL_INT,	NET_IPV6_ACCEPT_SOURCE_ROUTE,		"accept_source_route" },
 	{ CTL_INT,	NET_IPV6_ACCEPT_RA_FROM_LOCAL,		"accept_ra_from_local" },
+	{ CTL_INT,	NET_IPV6_ACCEPT_RA_MTU,			"accept_ra_mtu" },
 	{}
 };
 
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index f7c8bbe..cdd70ed 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -201,6 +201,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
 	.disable_ipv6		= 0,
 	.accept_dad		= 1,
 	.suppress_frag_ndisc	= 1,
+	.accept_ra_mtu		= 1,
 };
 
 static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
@@ -238,6 +239,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
 	.disable_ipv6		= 0,
 	.accept_dad		= 1,
 	.suppress_frag_ndisc	= 1,
+	.accept_ra_mtu		= 1,
 };
 
 /* Check if a valid qdisc is available */
@@ -5253,6 +5255,13 @@ static struct addrconf_sysctl_table
 			.proc_handler	= proc_dointvec,
 		},
 		{
+			.procname	= "accept_ra_mtu",
+			.data		= &ipv6_devconf.accept_ra_mtu,
+			.maxlen		= sizeof(int),
+			.mode		= 0644,
+			.proc_handler	= proc_dointvec,
+		},
+		{
 			/* sentinel */
 		}
 	},
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 6828667..83332cd 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -1348,7 +1348,7 @@ skip_routeinfo:
 		}
 	}
 
-	if (ndopts.nd_opts_mtu) {
+	if (ndopts.nd_opts_mtu  && in6_dev->cnf.accept_ra_mtu) {
 		__be32 n;
 		u32 mtu;
 
-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project

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

* Re: [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA
  2015-01-17  1:02 [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA Harout Hedeshian
@ 2015-01-19 19:07 ` Hannes Frederic Sowa
  2015-01-19 20:58 ` David Miller
  1 sibling, 0 replies; 4+ messages in thread
From: Hannes Frederic Sowa @ 2015-01-19 19:07 UTC (permalink / raw
  To: Harout Hedeshian; +Cc: netdev

On Fr, 2015-01-16 at 18:02 -0700, Harout Hedeshian wrote:
> The kernel forcefully applies MTU values received in router
> advertisements provided the new MTU is less than the current. This
> behavior is undesirable when the user space is managing the MTU. Instead
> a sysctl flag 'accept_ra_mtu' is introduced such that the user space
> can control whether or not RA provided MTU updates should be applied. The
> default behavior is unchanged; user space must explicitly set this flag
> to 0 for RA MTUs to be ignored.
> 
> Signed-off-by: Harout Hedeshian <harouth@codeaurora.org>

Makes sense!

Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>

Thanks,
Hannes

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

* Re: [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA
  2015-01-17  1:02 [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA Harout Hedeshian
  2015-01-19 19:07 ` Hannes Frederic Sowa
@ 2015-01-19 20:58 ` David Miller
  2015-01-19 21:31   ` Harout Hedeshian
  1 sibling, 1 reply; 4+ messages in thread
From: David Miller @ 2015-01-19 20:58 UTC (permalink / raw
  To: harouth; +Cc: netdev

From: Harout Hedeshian <harouth@codeaurora.org>
Date: Fri, 16 Jan 2015 18:02:38 -0700

> The kernel forcefully applies MTU values received in router
> advertisements provided the new MTU is less than the current. This
> behavior is undesirable when the user space is managing the MTU. Instead
> a sysctl flag 'accept_ra_mtu' is introduced such that the user space
> can control whether or not RA provided MTU updates should be applied. The
> default behavior is unchanged; user space must explicitly set this flag
> to 0 for RA MTUs to be ignored.
> 
> Signed-off-by: Harout Hedeshian <harouth@codeaurora.org>

A really sloppy submission, sorry I can't apply this.

> +	{ CTL_INT,	NET_IPV6_ACCEPT_RA_MTU,			"accept_ra_mtu" },

This isn't defined anywhere, you left out some file while creating
your patch.

kernel/sysctl_binary.c:526:13: error: ‘NET_IPV6_ACCEPT_RA_MTU’ undeclared here (not in a function)


> -	if (ndopts.nd_opts_mtu) {
> +	if (ndopts.nd_opts_mtu  && in6_dev->cnf.accept_ra_mtu) {

Too many spaced before the &&

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

* RE: [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA
  2015-01-19 20:58 ` David Miller
@ 2015-01-19 21:31   ` Harout Hedeshian
  0 siblings, 0 replies; 4+ messages in thread
From: Harout Hedeshian @ 2015-01-19 21:31 UTC (permalink / raw
  To: 'David Miller'; +Cc: netdev



> -----Original Message-----
> From: David Miller [mailto:davem@davemloft.net]
> Sent: Monday, January 19, 2015 1:58 PM
> To: harouth@codeaurora.org
> Cc: netdev@vger.kernel.org
> Subject: Re: [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU
> updates from RA
> 
> From: Harout Hedeshian <harouth@codeaurora.org>
> Date: Fri, 16 Jan 2015 18:02:38 -0700
> 
> > The kernel forcefully applies MTU values received in router
> > advertisements provided the new MTU is less than the current. This
> > behavior is undesirable when the user space is managing the MTU.
> > Instead a sysctl flag 'accept_ra_mtu' is introduced such that the user
> > space can control whether or not RA provided MTU updates should be
> > applied. The default behavior is unchanged; user space must explicitly
> > set this flag to 0 for RA MTUs to be ignored.
> >
> > Signed-off-by: Harout Hedeshian <harouth@codeaurora.org>
> 
> A really sloppy submission, sorry I can't apply this.
> 
> > +	{ CTL_INT,	NET_IPV6_ACCEPT_RA_MTU,
> 	"accept_ra_mtu" },

Yes, it appears include/uapi/linux/sysctl.h was missed during a rebase. I
will correct this.

> This isn't defined anywhere, you left out some file while creating your
patch.
> 
> kernel/sysctl_binary.c:526:13: error: ?NET_IPV6_ACCEPT_RA_MTU?
> undeclared here (not in a function)
> 
> 
> > -	if (ndopts.nd_opts_mtu) {
> > +	if (ndopts.nd_opts_mtu  && in6_dev->cnf.accept_ra_mtu) {
> 
> Too many spaced before the &&

Hmm. Looks like checkpatch.pl did does not catch this mistake. I only get
one warning about a line being too long:

harouth@harouth-lnx:/local/vg_local/lv_mainline/net_next/net-next$
./scripts/checkpatch.pl
0001-net-ipv6-Add-sysctl-entry-to-disable-MTU-updates-fro.patch
WARNING: line over 80 characters
#74: FILE: kernel/sysctl_binary.c:526:
+       { CTL_INT,      NET_IPV6_ACCEPT_RA_MTU,
"accept_ra_mtu" },

total: 0 errors, 1 warnings, 0 checks, 69 lines checked

0001-net-ipv6-Add-sysctl-entry-to-disable-MTU-updates-fro.patch has style
problems, please review.

I will send an updated patch (v2) in a moment.

V2 patch passes compilation in sysctl_binary.c:
harouth@harouth-lnx:/local/vg_local/lv_mainline/net_next/net-next$ make -j8
ARCH=um
..
  CC      kernel/sysctl.o
  CC      kernel/sysctl_binary.o
..

Thanks,
Harout

--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux
Foundation Collaborative Project

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

end of thread, other threads:[~2015-01-19 21:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-17  1:02 [PATCH net-next] net: ipv6: Add sysctl entry to disable MTU updates from RA Harout Hedeshian
2015-01-19 19:07 ` Hannes Frederic Sowa
2015-01-19 20:58 ` David Miller
2015-01-19 21:31   ` Harout Hedeshian

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.