diff options
-rw-r--r-- | include/linux/inetdevice.h | 2 | ||||
-rw-r--r-- | net/ipv4/devinet.c | 8 | ||||
-rw-r--r-- | 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 0a4a6cb35338..c796ce26c7c0 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
@@ -28,6 +28,8 @@ enum | |||
28 | IPV4_DEVCONF_ARPFILTER, | 28 | IPV4_DEVCONF_ARPFILTER, |
29 | IPV4_DEVCONF_MEDIUM_ID, | 29 | IPV4_DEVCONF_MEDIUM_ID, |
30 | IPV4_DEVCONF_FORCE_IGMP_VERSION, | 30 | IPV4_DEVCONF_FORCE_IGMP_VERSION, |
31 | IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL, | ||
32 | IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL, | ||
31 | IPV4_DEVCONF_NOXFRM, | 33 | IPV4_DEVCONF_NOXFRM, |
32 | IPV4_DEVCONF_NOPOLICY, | 34 | IPV4_DEVCONF_NOPOLICY, |
33 | IPV4_DEVCONF_ARP_ANNOUNCE, | 35 | IPV4_DEVCONF_ARP_ANNOUNCE, |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 87d47ce9fa33..a1b5bcbd04ae 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -73,6 +73,8 @@ static struct ipv4_devconf ipv4_devconf = { | |||
73 | [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, | 73 | [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1, |
74 | [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, | 74 | [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, |
75 | [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, | 75 | [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, |
76 | [IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL - 1] = 10000 /*ms*/, | ||
77 | [IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL - 1] = 1000 /*ms*/, | ||
76 | }, | 78 | }, |
77 | }; | 79 | }; |
78 | 80 | ||
@@ -83,6 +85,8 @@ static struct ipv4_devconf ipv4_devconf_dflt = { | |||
83 | [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, | 85 | [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1, |
84 | [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, | 86 | [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1, |
85 | [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE - 1] = 1, | 87 | [IPV4_DEVCONF_ACCEPT_SOURCE_ROUTE - 1] = 1, |
88 | [IPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL - 1] = 10000 /*ms*/, | ||
89 | [IPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL - 1] = 1000 /*ms*/, | ||
86 | }, | 90 | }, |
87 | }; | 91 | }; |
88 | 92 | ||
@@ -2096,6 +2100,10 @@ static struct devinet_sysctl_table { | |||
2096 | DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"), | 2100 | DEVINET_SYSCTL_RW_ENTRY(PROXY_ARP_PVLAN, "proxy_arp_pvlan"), |
2097 | DEVINET_SYSCTL_RW_ENTRY(FORCE_IGMP_VERSION, | 2101 | DEVINET_SYSCTL_RW_ENTRY(FORCE_IGMP_VERSION, |
2098 | "force_igmp_version"), | 2102 | "force_igmp_version"), |
2103 | DEVINET_SYSCTL_RW_ENTRY(IGMPV2_UNSOLICITED_REPORT_INTERVAL, | ||
2104 | "igmpv2_unsolicited_report_interval"), | ||
2105 | DEVINET_SYSCTL_RW_ENTRY(IGMPV3_UNSOLICITED_REPORT_INTERVAL, | ||
2106 | "igmpv3_unsolicited_report_interval"), | ||
2099 | 2107 | ||
2100 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"), | 2108 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"), |
2101 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"), | 2109 | DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"), |
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index ceb19ab9cf9d..d6c0e64ec97f 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
@@ -142,10 +142,25 @@ | |||
142 | 142 | ||
143 | static int unsolicited_report_interval(struct in_device *in_dev) | 143 | static int unsolicited_report_interval(struct in_device *in_dev) |
144 | { | 144 | { |
145 | int interval_ms, interval_jiffies; | ||
146 | |||
145 | if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) | 147 | if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev)) |
146 | return IGMP_V2_Unsolicited_Report_Interval; | 148 | interval_ms = IN_DEV_CONF_GET( |
149 | in_dev, | ||
150 | IGMPV2_UNSOLICITED_REPORT_INTERVAL); | ||
147 | else /* v3 */ | 151 | else /* v3 */ |
148 | return IGMP_V3_Unsolicited_Report_Interval; | 152 | interval_ms = IN_DEV_CONF_GET( |
153 | in_dev, | ||
154 | IGMPV3_UNSOLICITED_REPORT_INTERVAL); | ||
155 | |||
156 | interval_jiffies = msecs_to_jiffies(interval_ms); | ||
157 | |||
158 | /* _timer functions can't handle a delay of 0 jiffies so ensure | ||
159 | * we always return a positive value. | ||
160 | */ | ||
161 | if (interval_jiffies <= 0) | ||
162 | interval_jiffies = 1; | ||
163 | return interval_jiffies; | ||
149 | } | 164 | } |
150 | 165 | ||
151 | static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im); | 166 | static void igmpv3_add_delrec(struct in_device *in_dev, struct ip_mc_list *im); |