Module Name:    src
Committed By:   roy
Date:           Thu Sep 11 13:10:04 UTC 2014

Modified Files:
        src/distrib/sets/lists/base: mi
        src/doc: CHANGES
        src/etc/defaults: rc.conf
        src/etc/rc.d: network
        src/rescue: list.inet6
        src/sbin: Makefile
        src/sbin/ifconfig: ifconfig.8 ifconfig.c
        src/usr.sbin/postinstall: postinstall
        src/usr.sbin/rtsold: Makefile rtsold.8
Removed Files:
        src/etc/rc.d: rtsold
        src/sbin/rtsol: Makefile
        src/usr.sbin/rtsold: dump.c if.c probe.c rtsock.c rtsol.c rtsold.c
            rtsold.h

Log Message:
Remove rtsol(8) and rtsold(8) as their functionality is in dhcpcd(8).
Remove rtsol(8) from rc.d/network.
Add -w seconds command to ifconfig to wait for N seconds for until DAD
has finished on all addresses.
Use ifconfig -w in rc.d/network instead of a forced sleep.

As discussed on tech-net@


To generate a diff of this commit:
cvs rdiff -u -r1.1088 -r1.1089 src/distrib/sets/lists/base/mi
cvs rdiff -u -r1.1978 -r1.1979 src/doc/CHANGES
cvs rdiff -u -r1.123 -r1.124 src/etc/defaults/rc.conf
cvs rdiff -u -r1.66 -r1.67 src/etc/rc.d/network
cvs rdiff -u -r1.7 -r0 src/etc/rc.d/rtsold
cvs rdiff -u -r1.1 -r1.2 src/rescue/list.inet6
cvs rdiff -u -r1.126 -r1.127 src/sbin/Makefile
cvs rdiff -u -r1.106 -r1.107 src/sbin/ifconfig/ifconfig.8
cvs rdiff -u -r1.231 -r1.232 src/sbin/ifconfig/ifconfig.c
cvs rdiff -u -r1.13 -r0 src/sbin/rtsol/Makefile
cvs rdiff -u -r1.179 -r1.180 src/usr.sbin/postinstall/postinstall
cvs rdiff -u -r1.15 -r1.16 src/usr.sbin/rtsold/Makefile
cvs rdiff -u -r1.10 -r0 src/usr.sbin/rtsold/dump.c
cvs rdiff -u -r1.16 -r0 src/usr.sbin/rtsold/if.c src/usr.sbin/rtsold/rtsol.c
cvs rdiff -u -r1.12 -r0 src/usr.sbin/rtsold/probe.c
cvs rdiff -u -r1.7 -r0 src/usr.sbin/rtsold/rtsock.c
cvs rdiff -u -r1.33 -r1.34 src/usr.sbin/rtsold/rtsold.8
cvs rdiff -u -r1.42 -r0 src/usr.sbin/rtsold/rtsold.c
cvs rdiff -u -r1.11 -r0 src/usr.sbin/rtsold/rtsold.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/base/mi
diff -u src/distrib/sets/lists/base/mi:1.1088 src/distrib/sets/lists/base/mi:1.1089
--- src/distrib/sets/lists/base/mi:1.1088	Fri Aug 22 10:51:38 2014
+++ src/distrib/sets/lists/base/mi	Thu Sep 11 13:10:03 2014
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1088 2014/08/22 10:51:38 apb Exp $
+# $NetBSD: mi,v 1.1089 2014/09/11 13:10:03 roy Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -359,7 +359,7 @@
 ./sbin/route					base-netutil-root
 ./sbin/routed					base-router-root
 ./sbin/rrestore					base-netutil-root
-./sbin/rtsol					base-netutil-root	use_inet6
+./sbin/rtsol					base-obsolete		obsolete
 ./sbin/rump.cgdconfig				base-sysutil-root	crypto,rump
 ./sbin/rump.ifconfig				base-netutil-root	rump
 ./sbin/rump.modload				base-sysutil-root	rump
@@ -1631,7 +1631,7 @@
 ./usr/sbin/rpcbind				base-rpcbind-bin
 ./usr/sbin/rtadvd				base-router-bin		use_inet6
 ./usr/sbin/rtquery				base-netutil-bin
-./usr/sbin/rtsold				base-netutil-bin	inet6
+./usr/sbin/rtsold				base-obsolete		obsolete
 ./usr/sbin/rump.envstat				base-sysutil-bin	rump
 ./usr/sbin/rump.powerd				base-sysutil-bin	rump
 ./usr/sbin/rump.traceroute			base-netutil-bin	rump

Index: src/doc/CHANGES
diff -u src/doc/CHANGES:1.1978 src/doc/CHANGES:1.1979
--- src/doc/CHANGES:1.1978	Mon Sep  8 11:08:07 2014
+++ src/doc/CHANGES	Thu Sep 11 13:10:03 2014
@@ -1,4 +1,4 @@
-# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.1978 $>
+# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.1979 $>
 #
 #
 # [Note: This file does not mention every change made to the NetBSD source tree.
@@ -46,3 +46,5 @@ Changes from NetBSD 7.0 to NetBSD 8.0:
 	awinrtc(4): Add support for AllWinner A10/A20 real-time clock.
 		[jmcneill 20140907]
 	awinmmc(4): Use DMA for MMC transfers. [jmcneill 20140908]
+	rtsol(8): Removed in favour of dhcpcd. [roy 20140911]
+	rtsold(8): Removed in favour of dhcpcd. [roy 20140911]

Index: src/etc/defaults/rc.conf
diff -u src/etc/defaults/rc.conf:1.123 src/etc/defaults/rc.conf:1.124
--- src/etc/defaults/rc.conf:1.123	Tue Jul 22 17:11:09 2014
+++ src/etc/defaults/rc.conf	Thu Sep 11 13:10:03 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: rc.conf,v 1.123 2014/07/22 17:11:09 wiz Exp $
+#	$NetBSD: rc.conf,v 1.124 2014/09/11 13:10:03 roy Exp $
 #
 # /etc/defaults/rc.conf --
 #	default configuration of /etc/rc.conf
@@ -253,7 +253,6 @@ routed=NO		routed_flags="-q"
 gated=NO
 mrouted=NO		mrouted_flags=""
 route6d=NO		route6d_flags=""
-rtsold=NO		rtsold_flags="-a"	# for ip6mode=autohost only
 ldpd=NO
 
 # Daemons used to boot other hosts over a network.

Index: src/etc/rc.d/network
diff -u src/etc/rc.d/network:1.66 src/etc/rc.d/network:1.67
--- src/etc/rc.d/network:1.66	Tue Apr 29 09:58:18 2014
+++ src/etc/rc.d/network	Thu Sep 11 13:10:03 2014
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: network,v 1.66 2014/04/29 09:58:18 uebayasi Exp $
+# $NetBSD: network,v 1.67 2014/09/11 13:10:03 roy Exp $
 #
 
 # PROVIDE: network
@@ -432,33 +432,26 @@ network_start_defaultroute6()
 network_start_ipv6_autoconf()
 {
 	# IPv6 interface autoconfiguration.
-	#
-	# wait till DAD is completed. always invoke it in case
-	# if are configured manually by ifconfig
-	#
-	echo 'Waiting for DAD completion for' \
-	    'statically configured addresses...'
+
 	dadcount=$(/sbin/sysctl -n net.inet6.ip6.dad_count 2>/dev/null)
-	sleep $dadcount
-	sleep 1
+	if [ -n "$dadcount" -a "$dadcount" != 0 ]; then
+		# wait till DAD is completed
+		echo 'Waiting for DAD to complete for' \
+		    'statically configured addresses...'
+		# Add 1 for MAX_RTR_SOLICITATION_DELAY and another
+		# to give time for the last DAD packet to respond and
+		# a few more for luck.
+		waitsecs=$((dadcount + 4))
+		/sbin/ifconfig -w $waitsecs
+	fi
 
-	if checkyesno rtsol; then
+	# dhcpcd will ensure DAD completes before forking
+	if checkyesno rtsol && !checkyesno dhcpcd; then
 		if [ "$ip6mode" = "autohost" ]; then
-			echo 'Sending router solicitation...'
-			/sbin/rtsol $rtsol_flags
-		else
 			echo
-			warn \
-		    "ip6mode must be set to 'autohost' to use rtsol."
+			warn "rtsol has been removed, " \
+			    "please configure dhcpcd in its place."
 		fi
-
-		# wait till DAD is completed, for global addresses
-		# configured by router advert message.
-		#
-		echo 'Waiting for DAD completion for' \
-		    'addresses configured by router advert message...'
-		sleep $dadcount
-		sleep 1
 	fi
 }
 

Index: src/rescue/list.inet6
diff -u src/rescue/list.inet6:1.1 src/rescue/list.inet6:1.2
--- src/rescue/list.inet6:1.1	Mon Jan 10 02:58:59 2005
+++ src/rescue/list.inet6	Thu Sep 11 13:10:03 2014
@@ -1,4 +1,3 @@
-#	$NetBSD: list.inet6,v 1.1 2005/01/10 02:58:59 lukem Exp $
+#	$NetBSD: list.inet6,v 1.2 2014/09/11 13:10:03 roy Exp $
 
 PROG	ping6
-PROG	rtsol

Index: src/sbin/Makefile
diff -u src/sbin/Makefile:1.126 src/sbin/Makefile:1.127
--- src/sbin/Makefile:1.126	Wed Dec 25 22:04:52 2013
+++ src/sbin/Makefile	Thu Sep 11 13:10:03 2014
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.126 2013/12/25 22:04:52 christos Exp $
+#	$NetBSD: Makefile,v 1.127 2014/09/11 13:10:03 roy Exp $
 #	@(#)Makefile	8.5 (Berkeley) 3/31/94
 
 # Not ported: XNSrouted enpload scsiformat startslip
@@ -55,7 +55,7 @@ SUBDIR+= cgdconfig
 .endif
 
 .if (${USE_INET6} != "no")
-SUBDIR+= ping6 rtsol
+SUBDIR+= ping6
 .endif
 
 .if (${MKISCSI} != "no")

Index: src/sbin/ifconfig/ifconfig.8
diff -u src/sbin/ifconfig/ifconfig.8:1.106 src/sbin/ifconfig/ifconfig.8:1.107
--- src/sbin/ifconfig/ifconfig.8:1.106	Tue Jan  7 20:25:24 2014
+++ src/sbin/ifconfig/ifconfig.8	Thu Sep 11 13:10:04 2014
@@ -1,4 +1,4 @@
-.\"	$NetBSD: ifconfig.8,v 1.106 2014/01/07 20:25:24 degroote Exp $
+.\"	$NetBSD: ifconfig.8,v 1.107 2014/09/11 13:10:04 roy Exp $
 .\"
 .\" Copyright (c) 1983, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -59,6 +59,9 @@
 .Fl s
 .Ar interface
 .Nm
+.Fl w
+.Ar secs
+.Nm
 .Fl C
 .Sh DESCRIPTION
 .Nm
@@ -860,6 +863,17 @@ flag except that it zeros the interface 
 after printing them.
 .Pp
 The
+.Fl w
+flag may be used to wait
+.Ar seconds
+seconds for the
+.Cm tentative
+flag to be removed from all addresses.
+0 seconds means to wait indefinitely until all addresses no longer have the
+.Cm tentative
+flag.
+.Pp
+The
 .Fl N
 flag is just the opposite of the
 .Fl n

Index: src/sbin/ifconfig/ifconfig.c
diff -u src/sbin/ifconfig/ifconfig.c:1.231 src/sbin/ifconfig/ifconfig.c:1.232
--- src/sbin/ifconfig/ifconfig.c:1.231	Sat Oct 19 00:35:30 2013
+++ src/sbin/ifconfig/ifconfig.c	Thu Sep 11 13:10:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ifconfig.c,v 1.231 2013/10/19 00:35:30 christos Exp $	*/
+/*	$NetBSD: ifconfig.c,v 1.232 2014/09/11 13:10:04 roy Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -63,7 +63,7 @@
 #ifndef lint
 __COPYRIGHT("@(#) Copyright (c) 1983, 1993\
  The Regents of the University of California.  All rights reserved.");
-__RCSID("$NetBSD: ifconfig.c,v 1.231 2013/10/19 00:35:30 christos Exp $");
+__RCSID("$NetBSD: ifconfig.c,v 1.232 2014/09/11 13:10:04 roy Exp $");
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -102,10 +102,13 @@ __RCSID("$NetBSD: ifconfig.c,v 1.231 201
 #include "env.h"
 #include "prog_ops.h"
 
-static bool bflag, dflag, hflag, sflag, uflag;
+#define WAIT_DAD	10000000 /* nanoseconds between each poll, 10ms */
+
+static bool bflag, dflag, hflag, sflag, uflag, wflag;
 bool lflag, Nflag, vflag, zflag;
+static long wflag_secs;
 
-static char gflags[10 + 26 * 2 + 1] = "AabCdhlNsuvz";
+static char gflags[10 + 26 * 2 + 1] = "AabCdhlNsuvw:z";
 bool gflagset[10 + 26 * 2];
 
 static int carrier(prop_dictionary_t);
@@ -115,6 +118,7 @@ static int flag_index(int);
 static void init_afs(void);
 static int list_cloners(prop_dictionary_t, prop_dictionary_t);
 static int media_status_exec(prop_dictionary_t, prop_dictionary_t);
+static int wait_dad_exec(prop_dictionary_t, prop_dictionary_t);
 static int no_cmds_exec(prop_dictionary_t, prop_dictionary_t);
 static int notrailers(prop_dictionary_t, prop_dictionary_t);
 static void printall(const char *, prop_dictionary_t);
@@ -223,6 +227,9 @@ static struct kwinst familykw[24];
 struct pterm cloneterm = PTERM_INITIALIZER(&cloneterm, "list cloners",
     list_cloners, "none");
 
+struct pterm wait_dad = PTERM_INITIALIZER(&wait_dad, "wait DAD", wait_dad_exec,
+    "none");
+
 struct pterm no_cmds = PTERM_INITIALIZER(&no_cmds, "no commands", no_cmds_exec,
     "none");
 
@@ -506,6 +513,70 @@ no_cmds_exec(prop_dictionary_t env, prop
 }
 
 static int
+wait_dad_exec(prop_dictionary_t env, prop_dictionary_t oenv)
+{
+#ifdef INET6
+	bool waiting;
+	struct ifaddrs *ifaddrs, *ifa;
+	struct in6_ifreq ifr6;
+	int s;
+	const struct timespec ts = { .tv_sec = 0, .tv_nsec = WAIT_DAD };
+	const struct timespec add = { .tv_sec = wflag_secs, .tv_nsec = 0};
+	struct timespec now, end;
+
+	if (wflag_secs) {
+		if (clock_gettime(CLOCK_MONOTONIC, &now) == -1)
+			err(EXIT_FAILURE, "clock_gettime");
+		timespecadd(&now, &add, &end);
+	}
+
+	if (getifaddrs(&ifaddrs) == -1)
+		err(EXIT_FAILURE, "getifaddrs");
+
+	for (;;) {
+		waiting = false;
+		for (ifa = ifaddrs; ifa; ifa = ifa->ifa_next) {
+			if (ifa->ifa_addr == NULL)
+				continue;
+			switch (ifa->ifa_addr->sa_family) {
+			case AF_INET6:
+				memset(&ifr6, 0, sizeof(ifr6));
+				strncpy(ifr6.ifr_name,
+				    ifa->ifa_name, sizeof(ifr6.ifr_name));
+				ifr6.ifr_addr =
+				    *(struct sockaddr_in6 *)ifa->ifa_addr;
+				if ((s = getsock(AF_INET6)) == -1)
+					err(EXIT_FAILURE,
+					    "%s: getsock", __func__);
+				if (ioctl(s, SIOCGIFAFLAG_IN6, &ifr6) == -1)
+					err(EXIT_FAILURE, "SIOCGIFAFLAG_IN6");
+				if (ifr6.ifr_ifru.ifru_flags6 &
+				    IN6_IFF_TENTATIVE)
+				{
+					waiting = true;
+					break;
+				}
+			}
+			if (waiting)
+				break;
+		}
+		if (!waiting)
+			break;
+		nanosleep(&ts, NULL);
+		if (wflag_secs) {
+			if (clock_gettime(CLOCK_MONOTONIC, &now) == -1)
+				err(EXIT_FAILURE, "clock_gettime");
+			if (timespeccmp(&now, &end, >))
+				errx(EXIT_FAILURE, "timed out");
+		}
+	}
+
+	freeifaddrs(ifaddrs);
+#endif
+	exit(EXIT_SUCCESS);
+}
+
+static int
 media_status_exec(prop_dictionary_t env, prop_dictionary_t oenv)
 {
 	const char *ifname;
@@ -549,6 +620,7 @@ main(int argc, char **argv)
 	int ch, narg = 0, rc;
 	prop_dictionary_t env, oenv;
 	const char *ifname;
+	char *end;
 
 	memset(match, 0, sizeof(match));
 
@@ -605,6 +677,14 @@ main(int argc, char **argv)
 			vflag = true;
 			break;
 
+		case 'w':
+			wflag = true;
+			wflag_secs = strtol(optarg, &end, 10);
+			if ((end != NULL && *end != '\0') ||
+			    wflag_secs < 0 || wflag_secs >= INT32_MAX)
+				errx(EXIT_FAILURE, "%s: not a number", optarg);
+			break;
+
 		case 'z':
 			zflag = true;
 			break;
@@ -636,6 +716,9 @@ main(int argc, char **argv)
 			    start != &opt_family_only.pb_parser)
 				start = &iface_only.pif_parser;
 			break;
+		case 'w':
+			start = &wait_dad.pt_parser;
+			break;
 		default:
 			break;
 		}
@@ -644,19 +727,23 @@ main(int argc, char **argv)
 	argv += optind;
 
 	/*
-	 * -l means "list all interfaces", and is mutally exclusive with
+	 * -l means "list all interfaces", and is mutually exclusive with
 	 * all other flags/commands.
 	 *
 	 * -C means "list all names of cloners", and it mutually exclusive
 	 * with all other flags/commands.
 	 *
 	 * -a means "print status of all interfaces".
+	 *
+	 * -w means "spin until DAD completes for all addreseses", and is
+	 * mutually exclusivewith all other flags/commands.
 	 */
-	if ((lflag || Cflag) && (aflag || get_flag('m') || vflag || zflag))
+	if ((lflag || Cflag || wflag) &&
+	    (aflag || get_flag('m') || vflag || zflag))
 		usage();
-	if ((lflag || Cflag) && get_flag('L'))
+	if ((lflag || Cflag || wflag) && get_flag('L'))
 		usage();
-	if (lflag && Cflag)
+	if ((lflag && Cflag) || (lflag & wflag) || (Cflag && wflag))
 		usage();
 
 	nmatch = __arraycount(match);
@@ -1399,10 +1486,11 @@ usage(void)
 		"       %s -a [-b] [-d] [-h] %s[-u] [-v] [-z] [ af ]\n"
 		"       %s -l [-b] [-d] [-s] [-u]\n"
 		"       %s -C\n"
+		"       %s -w n\n"
 		"       %s interface create\n"
 		"       %s interface destroy\n",
 		progname, flag_is_registered(gflags, 'm') ? "[-m] " : "",
-		progname, progname, progname, progname);
+		progname, progname, progname, progname, progname);
 
 	prop_object_release((prop_object_t)env);
 	exit(EXIT_FAILURE);

Index: src/usr.sbin/postinstall/postinstall
diff -u src/usr.sbin/postinstall/postinstall:1.179 src/usr.sbin/postinstall/postinstall:1.180
--- src/usr.sbin/postinstall/postinstall:1.179	Tue Aug 12 09:12:18 2014
+++ src/usr.sbin/postinstall/postinstall	Thu Sep 11 13:10:04 2014
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: postinstall,v 1.179 2014/08/12 09:12:18 apb Exp $
+# $NetBSD: postinstall,v 1.180 2014/09/11 13:10:04 roy Exp $
 #
 # Copyright (c) 2002-2008 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -1332,7 +1332,7 @@ do_rc()
 		quota \
 		racoon rpcbind raidframe raidframeparity random_seed rarpd \
 		rbootd rndctl root route6d routed rtadvd rtclocaltime \
-		rtsold rwho \
+		rwho \
 		savecore screenblank securelevel sshd \
 		staticroute swap1 swap2 sysctl sysdb syslogd \
 		timed tpctl ttys \

Index: src/usr.sbin/rtsold/Makefile
diff -u src/usr.sbin/rtsold/Makefile:1.15 src/usr.sbin/rtsold/Makefile:1.16
--- src/usr.sbin/rtsold/Makefile:1.15	Tue Mar 18 00:16:49 2014
+++ src/usr.sbin/rtsold/Makefile	Thu Sep 11 13:10:04 2014
@@ -1,17 +1,6 @@
-# $NetBSD: Makefile,v 1.15 2014/03/18 00:16:49 christos Exp $
-
-WARNS?=6
-USE_FORT?= yes	# network client (local server)
-
-PROG=	rtsold
-SRCS=	rtsold.c rtsol.c if.c probe.c dump.c rtsock.c
-
-CPPFLAGS+=-DUSE_RTSOCK
+# $NetBSD: Makefile,v 1.16 2014/09/11 13:10:04 roy Exp $
 
 MAN=	rtsold.8
 MLINKS=	rtsold.8 rtsol.8
 
-LDADD+=	-lutil
-DPADD+=	${LIBUTIL}
-
 .include <bsd.prog.mk>

Index: src/usr.sbin/rtsold/rtsold.8
diff -u src/usr.sbin/rtsold/rtsold.8:1.33 src/usr.sbin/rtsold/rtsold.8:1.34
--- src/usr.sbin/rtsold/rtsold.8:1.33	Sun May 26 17:25:53 2013
+++ src/usr.sbin/rtsold/rtsold.8	Thu Sep 11 13:10:04 2014
@@ -1,4 +1,4 @@
-.\"	$NetBSD: rtsold.8,v 1.33 2013/05/26 17:25:53 wiz Exp $
+.\"	$NetBSD: rtsold.8,v 1.34 2014/09/11 13:10:04 roy Exp $
 .\"	$KAME: rtsold.8,v 1.17 2001/07/09 22:30:37 itojun Exp $
 .\"
 .\" Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -28,7 +28,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd May 24, 2013
+.Dd September 9, 2014
 .Dt RTSOLD 8
 .Os
 .\"
@@ -36,184 +36,9 @@
 .Nm rtsold
 .Nd router solicitation daemon
 .\"
-.Sh SYNOPSIS
-.Nm rtsold
-.Op Fl 1Ddfm
-.Ar interface ...
-.Nm rtsold
-.Op Fl 1Ddfm
-.Fl a
-.Nm rtsol
-.Op Fl Dd
-.Ar interface ...
-.Nm rtsol
-.Op Fl Dd
-.Fl a
-.\"
 .Sh DESCRIPTION
 .Nm
-is the daemon program to send ICMPv6 Router Solicitation messages
-on the specified interfaces.
-If a node (re)attaches to a link,
-.Nm
-sends some Router Solicitations on the link destined to the link-local scope
-all-routers multicast address to discover new routers
-and to get non link-local addresses.
-.Pp
-.Nm
-should be used on IPv6 hosts
-.Pq non-router nodes
-only.
-.Pp
-If you invoke the program as
-.Nm rtsol ,
-it will transmit probes from the specified
-.Ar interface ,
-without becoming a daemon.
-In other words,
-.Nm rtsol
-behaves as
-.Dq rtsold -f1 interface ... .
-.Pp
-Specifically,
-.Nm
-sends at most 3 Router Solicitations on an interface
-after one of the following events:
-.Bl -bullet
-.It
-Just after invocation of the
-.Nm
-daemon.
-.It
-The interface is up after a temporary interface failure.
-.Nm
-detects such failures by periodically probing to see if the status
-of the interface is active or not.
-Note that some network cards and drivers do not allow the extraction
-of link state.
-In such cases,
-.Nm
-cannot detect the change of the interface status.
-.It
-Every 60 seconds if the
-.Fl m
-option is specified and the
-.Nm
-daemon cannot get the interface status.
-This feature does not conform to the IPv6 neighbor discovery
-specification, but is provided for mobile stations.
-The default interval for router advertisements,
-which is approximately 10 minutes,
-is slightly long for mobile stations.
-This feature is provided
-for such stations so that they can find new routers as soon as possible
-when they attach to another link.
-.El
-.Pp
-Once
-.Nm
-has sent a Router Solicitation, and has received a valid Router Advertisement,
-it refrains from sending additional solicitations on that interface, until
-the next time one of the above events occurs.
-.Pp
-When sending a Router Solicitation on an interface,
-.Nm
-includes a Source Link-layer address option if the interface
-has a link-layer address.
-.Pp
-Upon receipt of signal
-.Dv SIGUSR1 ,
-.Nm
-will dump the current internal state into
-.Pa /var/run/rtsold.dump .
-Also note that
-.Nm
-will not be able to update the kernel routing tables unless
-.Xr sysctl 8
-reports that
-net.inet6.ip6.accept_rtadv=1.
-.\"
-.Pp
-The options are as follows:
-.Bl -tag -width indent
-.It Fl 1
-Perform only one probe.
-Transmit Router Solicitation packets until at least one valid Router
-Advertisement packet has arrived on each
-.Ar interface ,
-then exit.
-.It Fl a
-Autoprobe outgoing interfaces.
-.Nm
-will try to find a non-loopback, non-point-to-point, IPv6-capable interfaces,
-and send router solicitation messages on all of them.
-.It Fl D
-Enable more debugging (than that offered by the
-.Fl d
-option) including the printing of internal timer information.
-.It Fl d
-Enable debugging.
-.It Fl f
-This option prevents
-.Nm
-from becoming a daemon (foreground mode).
-Warning messages are generated to standard error
-instead of
-.Xr syslog 3 .
-.It Fl m
-Enable mobility support.
-If this option is specified,
-.Nm
-sends probing packets to default routers that have advertised Router
-Advertisements
-when the node (re)attaches to an interface.
-Moreover, if the option is specified,
-.Nm
-periodically sends Router Solicitation on an interface that does not support
-the
-.Dv SIOCGIFMEDIA
-ioctl.
-.El
-.\"
-.Sh EXIT STATUS
-.Ex -std rtsold
-.\"
-.Sh FILES
-.Bl -tag -width /var/run/rtsold.dumpXX -compact
-.It Pa /var/run/rtsold.pid
-The PID of the currently running
-.Nm rtsold .
-.It Pa /var/run/rtsold.dump
-Internal state dump file.
-.El
-.\"
-.Sh SEE ALSO
-.Xr rtadvd 8 ,
-.Xr sysctl 8
-.\"
-.Sh HISTORY
-The
-.Nm
-command is based on the
+and
 .Nm rtsol
-command, which first appeared in the WIDE/KAME IPv6 protocol stack kit.
-.Nm rtsol
-is now integrated into
-.Nm .
-.\"
-.Sh BUGS
-In some operating systems, when a PCMCIA network card is removed
-and reinserted, the corresponding interface index is changed.
-However,
-.Nm
-assumes such changes will not occur, and always uses the index that
-it got at invocation.
-As a result,
-.Nm
-may not work if you reinsert a network card.
-In such a case,
-.Nm
-should be killed and restarted.
-.Pp
-You may see kernel error messages if you try to autoconfigure a host with
-multiple interfaces.
+have been removed from NetBSD as their functionality is now included in
+.Xr dhcpcd 8 .

Reply via email to