All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin LaHaise <bcrl@kvack.org>
To: William Manley <william.manley@youview.com>
Cc: netdev@vger.kernel.org, luky-37@hotmail.com,
	sergei.shtylyov@cogentembedded.com, bhutchings@solarflare.com,
	davem@davemloft.net, hannes@stressinduktion.org
Subject: Re: [PATCH v4 3/3] net: igmp: Allow user-space configuration of igmp unsolicited report interval
Date: Wed, 7 Aug 2013 09:43:41 -0400	[thread overview]
Message-ID: <20130807134341.GM8043@kvack.org> (raw)
In-Reply-To: <1375812195-6575-4-git-send-email-william.manley@youview.com>

On Tue, Aug 06, 2013 at 07:03:15PM +0100, William Manley wrote:
> Adds the new procfs knobs:
> 
>     /proc/sys/net/ipv4/conf/*/igmpv2_unsolicited_report_interval
>     /proc/sys/net/ipv4/conf/*/igmpv3_unsolicited_report_interval
> 
> Which will allow userspace configuration of the IGMP unsolicited report
> interval (see below) in milliseconds.  The defaults are 10000ms for IGMPv2
> and 1000ms for IGMPv3 in accordance with RFC2236 and RFC3376.
> 
> Background:
> 
> If an IGMP join packet is lost you will not receive data sent to the
> multicast group so if no data arrives from that multicast group in a
> period of time after the IGMP join a second IGMP join will be sent.  The
> delay between joins is the "IGMP Unsolicited Report Interval".
> 
> Prior to this patch this value was hard coded in the kernel to 10s for
> IGMPv2 and 1s for IGMPv3.  10s is unsuitable for some use-cases, such as
> IPTV as it can cause channel change to be slow in the presence of packet
> loss.
> 
> This patch allows the value to be overridden from userspace for both
> IGMPv2 and IGMPv3 such that it can be tuned accoding to the network.
> 
> Tested with Wireshark and a simple program to join a (non-existent)
> multicast group.  The distribution of timings for the second join differ
> based upon setting the procfs knobs.
> 
> igmpvX_unsolicited_report_interval is intended to follow the pattern
> established by force_igmp_version, and while a procfs entry has been added
> a corresponding sysctl knob has not as it is my understanding that sysctl
> is deprecated[1].
> 
> [1]: http://lwn.net/Articles/247243/
> 
> Signed-off-by: William Manley <william.manley@youview.com>

Acked-by: Benjamin LaHaise <bcrl@kvack.org>

Also good.  Thanks!

		-ben

> ---
>  include/linux/inetdevice.h |    2 ++
>  net/ipv4/devinet.c         |    8 ++++++++
>  net/ipv4/igmp.c            |   19 +++++++++++++++++--
>  3 files changed, 27 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
> index d4c56fc..43b3c72 100644
> --- a/include/linux/inetdevice.h
> +++ b/include/linux/inetdevice.h
> @@ -28,6 +28,8 @@ enum
>  	IPV4_DEVCONF_ARPFILTER,
>  	IPV4_DEVCONF_MEDIUM_ID,
>  	IPV4_DEVCONF_FORCE_IGMP_VERSION,
> +	IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL,
> +	IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL,
>  	IPV4_DEVCONF_NOXFRM,
>  	IPV4_DEVCONF_NOPOLICY,
>  	IPV4_DEVCONF_ARP_ANNOUNCE,
> diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
> index a9561c4..56ecb1b 100644
> --- a/net/ipv4/devinet.c
> +++ b/net/ipv4/devinet.c
> @@ -73,6 +73,8 @@ static struct ipv4_devconf ipv4_devconf = {
>  		[IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
>  		[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
>  		[IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
> +		[IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL - 1] = 10000 /*ms*/,
> +		[IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL - 1] =  1000 /*ms*/,
>  	},
>  };
>  
> @@ -83,6 +85,8 @@ static struct ipv4_devconf ipv4_devconf_dflt = {
>  		[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
>  		[IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
>  		[IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE - 1] = 1,
> +		[IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL - 1] = 10000 /*ms*/,
> +		[IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL - 1] =  1000 /*ms*/,
>  	},
>  };
>  
> @@ -2096,6 +2100,10 @@ static struct devinet_sysctl_table {
>  		DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"),
>  		DEVINET_SYSCTL_RW_ENTRY(FORCE_IGMP_VERSION,
>  					"force_igmp_version"),
> +		DEVINET_SYSCTL_RW_ENTRY(IGMPV2_UNSOLICITED_REPORT_INTERVAL,
> +					"igmpv2_unsolicited_report_interval"),
> +		DEVINET_SYSCTL_RW_ENTRY(IGMPV3_UNSOLICITED_REPORT_INTERVAL,
> +					"igmpv3_unsolicited_report_interval"),
>  
>  		DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"),
>  		DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),
> diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
> index 9f0aaea..c5541da 100644
> --- a/net/ipv4/igmp.c
> +++ b/net/ipv4/igmp.c
> @@ -141,10 +141,25 @@
>  
>  static int unsolicited_report_interval(struct in_device *in_dev)
>  {
> +	int interval_ms, interval_jiffies;
> +
>  	if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev))
> -		return IGMP_V2_Unsolicited_Report_Interval;
> +		interval_ms = IN_DEV_CONF_GET(
> +			in_dev,
> +			IGMPV2_UNSOLICITED_REPORT_INTERVAL);
>  	else /* v3 */
> -		return IGMP_V3_Unsolicited_Report_Interval;
> +		interval_ms = IN_DEV_CONF_GET(
> +			in_dev,
> +			IGMPV3_UNSOLICITED_REPORT_INTERVAL);
> +
> +	interval_jiffies = msecs_to_jiffies(interval_ms);
> +
> +	/* _timer functions can't handle a delay of 0 jiffies so ensure
> +	 *  we always return a positive value.
> +	 */
> +	if (interval_jiffies <= 0)
> +		interval_jiffies = 1;
> +	return interval_jiffies;
>  }
>  
>  static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im);
> -- 
> 1.7.10.4

-- 
"Thought is the essence of where you are now."

  parent reply	other threads:[~2013-08-07 13:43 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-22 20:43 IGMP Unsolicited Report Interval too long for IGMPv3? William Manley
2013-07-22 21:09 ` Ben Hutchings
2013-07-24 13:38   ` [PATCH] net: igmp: Reduce Unsolicited report interval to 1s when using IGMPv3 William Manley
2013-07-24 13:45     ` William Manley
2013-07-24 14:51     ` Sergei Shtylyov
2013-07-25 12:14   ` [PATCH 1/2] " William Manley
2013-07-25 12:14     ` [PATCH 2/2] net: igmp: Allow user-space configuration of igmp unsolicited report interval William Manley
2013-07-26 16:36       ` Hannes Frederic Sowa
2013-07-29 14:21         ` [PATCH v3 1/2] net: igmp: Reduce Unsolicited report interval to 1s when using IGMPv3 William Manley
2013-07-29 14:21           ` [PATCH v3 2/2] net: igmp: Allow user-space configuration of igmp unsolicited report interval William Manley
2013-07-30  6:14             ` Hannes Frederic Sowa
2013-07-30 23:55               ` David Miller
2013-07-31  6:34                 ` Hannes Frederic Sowa
2013-07-31  9:47                   ` William Manley
2013-08-06 18:03                   ` IGMP Unsolicited report interval patches William Manley
2013-08-06 18:03                     ` [PATCH v4 1/3] net: igmp: Reduce Unsolicited report interval to 1s when using IGMPv3 William Manley
2013-08-07  0:45                       ` Hannes Frederic Sowa
2013-08-07 13:43                       ` Benjamin LaHaise
2013-08-06 18:03                     ` [PATCH v4 2/3] net: igmp: Don't flush routing cache when force_igmp_version is modified William Manley
2013-08-07  0:45                       ` Hannes Frederic Sowa
2013-08-07 13:43                       ` Benjamin LaHaise
2013-08-06 18:03                     ` [PATCH v4 3/3] net: igmp: Allow user-space configuration of igmp unsolicited report interval William Manley
2013-08-07  1:00                       ` Hannes Frederic Sowa
2013-08-07 13:43                       ` Benjamin LaHaise [this message]
2013-08-07  1:03                     ` IGMP Unsolicited report interval patches Hannes Frederic Sowa
2013-08-08  9:01                       ` Hannes Frederic Sowa
2013-08-09 18:28                     ` David Miller
2013-07-31  5:07             ` [PATCH v3 2/2] net: igmp: Allow user-space configuration of igmp unsolicited report interval Bill Fink
2013-07-29 21:34           ` [PATCH v3 1/2] net: igmp: Reduce Unsolicited report interval to 1s when using IGMPv3 Hannes Frederic Sowa
2013-07-26 16:32     ` [PATCH " Hannes Frederic Sowa
2013-07-26 16:39       ` Hannes Frederic Sowa
2013-07-29 14:39         ` William Manley
2013-07-29 14:56           ` Hannes Frederic Sowa
2013-07-22 21:18 ` IGMP Unsolicited Report Interval too long for IGMPv3? Benjamin LaHaise
2013-07-22 21:51   ` Hannes Frederic Sowa
2013-07-25 23:42     ` David Miller
2013-07-26 13:11       ` Benjamin LaHaise
2013-07-26 15:06         ` Hannes Frederic Sowa
2013-07-26 15:15           ` Benjamin LaHaise
2013-07-22 22:06   ` Lukas Tribus
2013-07-22 22:30     ` Hannes Frederic Sowa

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=20130807134341.GM8043@kvack.org \
    --to=bcrl@kvack.org \
    --cc=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=hannes@stressinduktion.org \
    --cc=luky-37@hotmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=sergei.shtylyov@cogentembedded.com \
    --cc=william.manley@youview.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.