Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-7]: src/sys/netinet6 Pull up following revision(s) (requested by ...



details:   https://anonhg.NetBSD.org/src/rev/dddde7f18822
branches:  netbsd-7
changeset: 799645:dddde7f18822
user:      riz <riz%NetBSD.org@localhost>
date:      Thu Nov 05 20:36:03 2015 +0000

description:
Pull up following revision(s) (requested by ozaki-r in ticket #982):
        sys/netinet6/icmp6.c: revision 1.177
Update icmp6_redirect_timeout_q when changing net.inet6.icmp6.redirtimeout
We have to update icmp6_redirect_timeout_q as well as icmp6_redirtimeout
when changing net.inet6.icmp6.redirtimeout via sysctl. The updating logic
is copied from sysctl_net_inet_icmp_redirtimeout.
This change is from s-yamaguchi@IIJ (with KNF by ozaki-r) and fixes
PR kern/50240.

diffstat:

 sys/netinet6/icmp6.c |  39 ++++++++++++++++++++++++++++++++++++---
 1 files changed, 36 insertions(+), 3 deletions(-)

diffs (67 lines):

diff -r e2ebf481598b -r dddde7f18822 sys/netinet6/icmp6.c
--- a/sys/netinet6/icmp6.c      Thu Nov 05 20:34:26 2015 +0000
+++ b/sys/netinet6/icmp6.c      Thu Nov 05 20:36:03 2015 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: icmp6.c,v 1.169 2014/06/06 01:02:47 rmind Exp $        */
+/*     $NetBSD: icmp6.c,v 1.169.2.1 2015/11/05 20:36:03 riz Exp $      */
 /*     $KAME: icmp6.c,v 1.217 2001/06/20 15:03:29 jinmei Exp $ */
 
 /*
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.169 2014/06/06 01:02:47 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: icmp6.c,v 1.169.2.1 2015/11/05 20:36:03 riz Exp $");
 
 #include "opt_inet.h"
 #include "opt_ipsec.h"
@@ -2756,6 +2756,38 @@
        return (NETSTAT_SYSCTL(icmp6stat_percpu, ICMP6_NSTATS));
 }
 
+static int
+sysctl_net_inet6_icmp6_redirtimeout(SYSCTLFN_ARGS)
+{
+       int error, tmp;
+       struct sysctlnode node;
+
+       node = *rnode;
+       node.sysctl_data = &tmp;
+       tmp = icmp6_redirtimeout;
+       error = sysctl_lookup(SYSCTLFN_CALL(&node));
+       if (error || newp == NULL)
+               return error;
+       if (tmp < 0)
+               return EINVAL;
+       icmp6_redirtimeout = tmp;
+
+       if (icmp6_redirect_timeout_q != NULL) {
+               if (icmp6_redirtimeout == 0) {
+                       rt_timer_queue_destroy(icmp6_redirect_timeout_q,
+                           true);
+               } else {
+                       rt_timer_queue_change(icmp6_redirect_timeout_q,
+                           icmp6_redirtimeout);
+               }
+       } else if (icmp6_redirtimeout > 0) {
+               icmp6_redirect_timeout_q =
+                   rt_timer_queue_create(icmp6_redirtimeout);
+       }
+
+       return 0;
+}
+
 static void
 sysctl_net_inet6_icmp6_setup(struct sysctllog **clog)
 {
@@ -2791,7 +2823,8 @@
                       CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
                       CTLTYPE_INT, "redirtimeout",
                       SYSCTL_DESCR("Redirect generated route lifetime"),
-                      NULL, 0, &icmp6_redirtimeout, 0,
+                      sysctl_net_inet6_icmp6_redirtimeout, 0,
+                      &icmp6_redirtimeout, 0,
                       CTL_NET, PF_INET6, IPPROTO_ICMPV6,
                       ICMPV6CTL_REDIRTIMEOUT, CTL_EOL);
 #if 0 /* obsoleted */



Home | Main Index | Thread Index | Old Index