Source-Changes-HG archive

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

[src/trunk]: src/usr.sbin route6d: RIPng daemon (similar to route6d)



details:   https://anonhg.NetBSD.org/src/rev/036a1157a413
branches:  trunk
changeset: 474259:036a1157a413
user:      itojun <itojun%NetBSD.org@localhost>
date:      Fri Jul 02 11:47:12 1999 +0000

description:
route6d: RIPng daemon (similar to route6d)
rip6query: RIPng query (similar to ripquery)

NOTE: we usually do not run route6d on end nodes at startup (rtsol should do
the trick).  So I figured that route6d can be in /usr/sbin, not in /sbin
(routed is in /sbin).  Correct me if I'm wrong.

diffstat:

 usr.sbin/Makefile              |     4 +-
 usr.sbin/rip6query/Makefile    |     8 +
 usr.sbin/rip6query/rip6query.c |   146 ++
 usr.sbin/route6d/Makefile      |     8 +
 usr.sbin/route6d/route6d.8     |   231 +++
 usr.sbin/route6d/route6d.c     |  2822 ++++++++++++++++++++++++++++++++++++++++
 usr.sbin/route6d/route6d.h     |    89 +
 7 files changed, 3306 insertions(+), 2 deletions(-)

diffs (truncated from 3346 to 300 lines):

diff -r 4b8d0440c14d -r 036a1157a413 usr.sbin/Makefile
--- a/usr.sbin/Makefile Fri Jul 02 11:31:28 1999 +0000
+++ b/usr.sbin/Makefile Fri Jul 02 11:47:12 1999 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.114 1999/07/02 09:28:16 itojun Exp $
+#      $NetBSD: Makefile,v 1.115 1999/07/02 11:47:12 itojun Exp $
 #      from: @(#)Makefile      5.20 (Berkeley) 6/12/93
 
 # XXX Temporary for NO_SENDMAIL and BUILD_POSTFIX
@@ -22,7 +22,7 @@
        zdump zic
 
 # IPv6
-SUBDIR+=gifconfig ifmcstat ndp rtadvd traceroute6
+SUBDIR+=gifconfig ifmcstat ndp rip6query route6d rtadvd traceroute6
 
 .if !defined(NO_SENDMAIL)
 SUBDIR+=       sendmail
diff -r 4b8d0440c14d -r 036a1157a413 usr.sbin/rip6query/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/rip6query/Makefile       Fri Jul 02 11:47:12 1999 +0000
@@ -0,0 +1,8 @@
+# $NetBSD: Makefile,v 1.1 1999/07/02 11:47:12 itojun Exp $
+
+PROG=  rip6query
+NOMAN= yes
+
+CPPFLAGS+=     -DINET6 -I${.CURDIR}/../route6d
+
+.include <bsd.prog.mk>
diff -r 4b8d0440c14d -r 036a1157a413 usr.sbin/rip6query/rip6query.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/rip6query/rip6query.c    Fri Jul 02 11:47:12 1999 +0000
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <signal.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/if.h>
+#if defined(__FreeBSD__) && __FreeBSD__ >= 3
+#include <net/if_var.h>
+#endif /* __FreeBSD__ >= 3 */
+#include <netinet/in.h>
+#include <netinet/in_var.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+
+#include "route6d.h"
+
+int    s;
+extern int errno;
+struct sockaddr_in6 sin6;
+struct rip6    *ripbuf;
+
+#define        RIPSIZE(n)      (sizeof(struct rip6) + (n-1) * sizeof(struct netinfo6))
+
+int main __P((int, char **));
+void fatal __P((char *));
+const char *inet6_n2a __P((struct in6_addr *));
+
+int main(argc, argv)
+       int argc;
+       char **argv;
+{
+       struct netinfo6 *np;
+       struct sockaddr_in6 fsock;
+       struct hostent *hp;
+       char *hostname;
+       int i, n, len, flen;
+
+       if (argc != 2) {
+               fprintf(stderr, "Usage: %s address\n", *argv);
+               exit(-1);
+       }
+
+       if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0)
+               fatal("socket");
+
+       hp = (struct hostent *)gethostbyname2(argv[1], AF_INET6);
+       if (hp == NULL) {
+               if (inet_pton(AF_INET6, argv[1], (u_int32_t *)&sin6.sin6_addr)
+                       != 1) {
+                       fprintf(stderr, "%s: unknown host %s\n",
+                               argv[0], argv[1]);
+                       exit(-1);
+               }
+       } else {
+               bcopy(hp->h_addr, (caddr_t)&sin6.sin6_addr, hp->h_length);
+               hostname = strdup(hp->h_name);
+       }
+
+       sin6.sin6_len = sizeof(struct sockaddr_in6);
+       sin6.sin6_family = AF_INET6;
+       sin6.sin6_port = htons(RIP6_PORT);
+
+       if ((ripbuf = (struct rip6 *)malloc(BUFSIZ)) == NULL)
+               fatal("malloc");
+       ripbuf->rip6_cmd = RIP6_REQUEST;
+       ripbuf->rip6_vers = RIP6_VERSION;
+       ripbuf->rip6_res1[0] = 0;
+       ripbuf->rip6_res1[1] = 0;
+       np = ripbuf->rip6_nets;
+       bzero(&np->rip6_dest, sizeof(struct in6_addr));
+       np->rip6_tag = 0;
+       np->rip6_plen = 0;
+       np->rip6_metric = HOPCNT_INFINITY6;
+       if (sendto(s, ripbuf, RIPSIZE(1), 0,
+               (struct sockaddr *)&sin6, sizeof(struct sockaddr_in6)) < 0)
+               fatal("send");
+       do {
+               flen = sizeof(struct sockaddr_in6);
+               if ((len = recvfrom(s, ripbuf, BUFSIZ, 0,
+                       (struct sockaddr *)&fsock, &flen)) < 0)
+                       fatal("recvfrom");
+               printf("Response from %s len %d\n",
+                       inet6_n2a(&fsock.sin6_addr), len);
+               n = (len - sizeof(struct rip6) + sizeof(struct netinfo6)) /
+                       sizeof(struct netinfo6);
+               np = ripbuf->rip6_nets;
+               for (i = 0; i < n; i++, np++) {
+                       printf("\t%s/%d [%d]", inet6_n2a(&np->rip6_dest),
+                               np->rip6_plen, np->rip6_metric);
+                       if (np->rip6_tag)
+                               printf(" tag=0x%x", ntohs(np->rip6_tag));
+                       printf("\n");
+               }
+       } while (len == RIPSIZE(24));
+
+       exit(0);
+}
+
+void fatal(p)
+       char *p;
+{
+       fprintf(stderr, "%s: %s", p, strerror(errno));
+       exit(-1);
+}
+
+const char *inet6_n2a(p)
+       struct in6_addr *p;
+{
+       static char buf[BUFSIZ];
+
+       return inet_ntop(AF_INET6, (u_int32_t *)p, buf, sizeof(buf));
+}
diff -r 4b8d0440c14d -r 036a1157a413 usr.sbin/route6d/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/route6d/Makefile Fri Jul 02 11:47:12 1999 +0000
@@ -0,0 +1,8 @@
+# $NetBSD: Makefile,v 1.1 1999/07/02 11:47:12 itojun Exp $
+
+PROG=  route6d
+MAN=   route6d.8
+
+CPPFLAGS+=     -Dss_len=__ss_len -Dss_family=__ss_family -DADVAPI -DINET6
+
+.include <bsd.prog.mk>
diff -r 4b8d0440c14d -r 036a1157a413 usr.sbin/route6d/route6d.8
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.sbin/route6d/route6d.8        Fri Jul 02 11:47:12 1999 +0000
@@ -0,0 +1,231 @@
+.\" Copyright (c) 1996 WIDE Project. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modifications, are permitted provided that the above copyright notice
+.\" and this paragraph are duplicated in all such forms and that any
+.\" documentation, advertising materials, and other materials related to
+.\" such distribution and use acknowledge that the software was developed
+.\" by the WIDE Project, Japan. The name of the Project may not be used to
+.\" endorse or promote products derived from this software without
+.\" specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS''
+.\" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
+.\" LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+.\" A PARTICULAR PURPOSE.
+.Dd January 31, 1997
+.Dt ROUTE6D 8
+.Os
+.Sh NAME
+.Nm route6d
+.Nd RIP6 Routing Daemon
+.Sh SYNOPSIS
+.Nm route6d
+.Op Fl adDhlqsS
+.Op Fl R Ar routelog
+.Op Fl A Ar prefix/preflen,if1[,if2...]
+.Op Fl L Ar prefix/preflen,if1[,if2...]
+.Op Fl N Ar if1[,if2...]
+.Op Fl O Ar prefix/preflen,if1[,if2...]
+.Op Fl T Ar if1[,if2...]
+.Op Fl t Ar tag
+.\"
+.Sh DESCRIPTION
+The
+.Nm
+is a routing daemon which supports RIP over IPv6.
+.Pp
+Options are:
+.Bl -tag -width indent
+.\"
+.It Fl a
+Enables aging of the statically defined routes.
+With this option, any
+statically defined routes will be removed unless corresponding updates
+arrive as if the routes are received at the startup of
+.Nm route6d .
+.\"
+.It Fl R Ar routelog
+This option makes the
+.Nm
+to log the route change (add/delete) to the file
+.Ar routelog .
+.\"
+.It Fl A Ar prefix/preflen,if1[,if2...]
+This option is used for aggregating routes.
+.Ar prefix/preflen
+specifies the prefix and the prefix length of the
+aggregated route.
+When advertising routes,
+.Nm
+filters specific routes covered by the aggregate,
+and advertises the aggregated route
+.Ar prefix/preflen ,
+to the interfaces specified in the comma-separated interface list,
+.Ar if1[,if2...] .
+.Nm
+creates a static route to
+.Ar prefix/preflen
+with
+.Dv RTF_REJECT
+flag, into the kernel routing table.
+.\"
+.It Fl d
+Enables output of debugging message.
+This option also instructs
+.Nm
+to run in foreground mode
+.Pq does not become daemon .
+.\"
+.It Fl D
+Enables extensive output of debugging message.
+This option also instructs
+.Nm
+to run in foreground mode
+.Pq does not become daemon .
+.\"
+.It Fl h
+Disables the split horizon processing.
+.\"
+.It Fl l
+By default,
+.Nm
+will not exchange site local routes for safety reasons.
+This is because semantics of site local address space is rather vague,
+and there is no good way to define site local boundary.
+With
+.Fl l
+option,
+.Nm
+will exchange site local routes as well.
+It must not be used on site boundary routers,
+since
+.Fl l
+option assumes that all interfaces are in the same site.
+.\"
+.It Fl L Ar prefix/preflen,if1[,if2...]



Home | Main Index | Thread Index | Old Index