Source-Changes-HG archive

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

[src/trunk]: src/usr.sbin/route6d sync with more recent kame.



details:   https://anonhg.NetBSD.org/src/rev/709be07a8f81
branches:  trunk
changeset: 494605:709be07a8f81
user:      itojun <itojun%NetBSD.org@localhost>
date:      Sun Jul 09 03:06:18 2000 +0000

description:
sync with more recent kame.
- fix memory leak with realloc()
- warn if we see packets with junk outside of IPv6 prefix length
- cosmetic

diffstat:

 usr.sbin/route6d/route6d.8 |   18 +++++++-
 usr.sbin/route6d/route6d.c |  100 +++++++++++++++++++++++++++++---------------
 2 files changed, 81 insertions(+), 37 deletions(-)

diffs (253 lines):

diff -r 9816ea314ac8 -r 709be07a8f81 usr.sbin/route6d/route6d.8
--- a/usr.sbin/route6d/route6d.8        Sun Jul 09 03:03:35 2000 +0000
+++ b/usr.sbin/route6d/route6d.8        Sun Jul 09 03:06:18 2000 +0000
@@ -1,5 +1,5 @@
-.\"    $NetBSD: route6d.8,v 1.6 2000/05/16 14:04:32 itojun Exp $
-.\"    $KAME: route6d.8,v 1.6 2000/05/13 01:29:47 itojun Exp $
+.\"    $NetBSD: route6d.8,v 1.7 2000/07/09 03:06:18 itojun Exp $
+.\"    $KAME: route6d.8,v 1.8 2000/05/31 17:00:09 itojun Exp $
 .\"
 .\" Copyright (c) 1996 WIDE Project. All rights reserved.
 .\"
@@ -23,13 +23,27 @@
 .Sh SYNOPSIS
 .Nm route6d
 .Op Fl adDhlqsS
+.Bk -words
 .Op Fl R Ar routelog
+.Ek
+.Bk -words
 .Op Fl A Ar prefix/preflen,if1[,if2...]
+.Ek
+.Bk -words
 .Op Fl L Ar prefix/preflen,if1[,if2...]
+.Ek
+.Bk -words
 .Op Fl N Ar if1[,if2...]
+.Ek
+.Bk -words
 .Op Fl O Ar prefix/preflen,if1[,if2...]
+.Ek
+.Bk -words
 .Op Fl T Ar if1[,if2...]
+.Ek
+.Bk -words
 .Op Fl t Ar tag
+.Ek
 .\"
 .Sh DESCRIPTION
 The
diff -r 9816ea314ac8 -r 709be07a8f81 usr.sbin/route6d/route6d.c
--- a/usr.sbin/route6d/route6d.c        Sun Jul 09 03:03:35 2000 +0000
+++ b/usr.sbin/route6d/route6d.c        Sun Jul 09 03:06:18 2000 +0000
@@ -1,5 +1,5 @@
-/*     $NetBSD: route6d.c,v 1.13 2000/05/18 13:23:43 itojun Exp $      */
-/*     $KAME: route6d.c,v 1.25 2000/05/17 09:05:36 itojun Exp $        */
+/*     $NetBSD: route6d.c,v 1.14 2000/07/09 03:06:18 itojun Exp $      */
+/*     $KAME: route6d.c,v 1.30 2000/06/04 06:48:03 itojun Exp $        */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -32,7 +32,7 @@
 
 #include <sys/cdefs.h>
 #ifndef        lint
-__RCSID("$NetBSD: route6d.c,v 1.13 2000/05/18 13:23:43 itojun Exp $");
+__RCSID("$NetBSD: route6d.c,v 1.14 2000/07/09 03:06:18 itojun Exp $");
 #endif
 
 #include <stdio.h>
@@ -182,7 +182,7 @@
 int    lflag = 0;      /* exchange site local routes */
 int    sflag = 0;      /* announce static routes w/ split horizon */
 int    Sflag = 0;      /* announce static routes to every interface */
-int    routetag = 0;   /* route tag attached on originating case */
+unsigned long routetag = 0;    /* route tag attached on originating case */
 
 char   *filter[MAXFILTER];
 int    filtertype[MAXFILTER];
@@ -277,6 +277,7 @@
        sigset_t mask, omask;
        FILE    *pidfile;
        char *progname;
+       char *ep;
 
        progname = strrchr(*argv, '/');
        if (progname)
@@ -292,35 +293,41 @@
                case 'O':
                case 'T':
                case 'L':
-                       if (nfilter >= MAXFILTER)
+                       if (nfilter >= MAXFILTER) {
                                fatal("Exceeds MAXFILTER");
+                               /*NOTREACHED*/
+                       }
                        filtertype[nfilter] = ch;
                        filter[nfilter++] = allocopy(optarg);
                        break;
                case 't':
-                       sscanf(optarg, "%i", &routetag);
-                       if (routetag & ~0xffff) {
+                       ep = NULL;
+                       routetag = strtoul(optarg, &ep, 0);
+                       if (!ep || *ep != '\0' || (routetag & ~0xffff) != 0) {
                                fatal("invalid route tag");
                                /*NOTREACHED*/
                        }
                        break;
                case 'R':
-                       if ((rtlog = fopen(optarg, "w")) == NULL)
+                       if ((rtlog = fopen(optarg, "w")) == NULL) {
                                fatal("Can not write to routelog");
+                               /*NOTREACHED*/
+                       }
                        break;
-#define        FLAG(c, flag, n)        case c: flag = n; break
-               FLAG('a', aflag, 1);
-               FLAG('d', dflag, 1);
-               FLAG('D', dflag, 2);
-               FLAG('h', hflag, 1);
-               FLAG('l', lflag, 1);
-               FLAG('n', nflag, 1);
-               FLAG('q', qflag, 1);
-               FLAG('s', sflag, 1);
-               FLAG('S', Sflag, 1);
+#define        FLAG(c, flag, n)        case c: do { flag = n; break; } while(0)
+               FLAG('a', aflag, 1); break;
+               FLAG('d', dflag, 1); break;
+               FLAG('D', dflag, 2); break;
+               FLAG('h', hflag, 1); break;
+               FLAG('l', lflag, 1); break;
+               FLAG('n', nflag, 1); break;
+               FLAG('q', qflag, 1); break;
+               FLAG('s', sflag, 1); break;
+               FLAG('S', Sflag, 1); break;
 #undef FLAG
                default:
                        fatal("Invalid option specified, terminating");
+                       /*NOTREACHED*/
                }
        }
        argc -= optind;
@@ -583,7 +590,8 @@
                rtsock = -1;    /*just for safety */
 }
 
-#define        RIPSIZE(n)      (sizeof(struct rip6) + (n-1) * sizeof(struct netinfo6))
+#define        RIPSIZE(n) \
+       (sizeof(struct rip6) + ((n)-1) * sizeof(struct netinfo6))
 
 /*
  * ripflush flushes the rip datagram stored in the rip buffer
@@ -611,7 +619,7 @@
                for (i = 0; i < nrt; i++, np++) {
                        if (np->rip6_metric == NEXTHOP_METRIC) {
                                if (IN6_IS_ADDR_UNSPECIFIED(&np->rip6_dest))
-                                               trace(2, "    NextHop reset");
+                                       trace(2, "    NextHop reset");
                                else {
                                        trace(2, "    NextHop %s",
                                                inet6_n2p(&np->rip6_dest));
@@ -1038,6 +1046,12 @@
                        np->rip6_plen, np->rip6_metric);
                if (np->rip6_tag)
                        trace(2, "  tag=0x%04x", ntohs(np->rip6_tag) & 0xffff);
+               if (dflag >= 2) {
+                       ia = np->rip6_dest;
+                       applyplen(&ia, np->rip6_plen);
+                       if (!IN6_ARE_ADDR_EQUAL(&ia, &np->rip6_dest))
+                               trace(2, " [junk outside prefix]");
+               }
 
                /* Listen-only filter */
                ok = 1;         /* if there's no L filter, it is ok */
@@ -2101,7 +2115,11 @@
 rttypes(rtm)
        struct rt_msghdr *rtm;
 {
-#define        RTTYPE(s, f)    if (rtm->rtm_type == (f)) return (s)
+#define        RTTYPE(s, f) \
+do { \
+       if (rtm->rtm_type == (f)) \
+               return (s); \
+} while (0)
        RTTYPE("ADD", RTM_ADD);
        RTTYPE("DELETE", RTM_DELETE);
        RTTYPE("CHANGE", RTM_CHANGE);
@@ -2127,7 +2145,11 @@
        static char buf[BUFSIZ];
 
        strcpy(buf, "");
-#define        RTFLAG(s, f)    if (rtm->rtm_flags & (f)) strcat(buf, (s))
+#define        RTFLAG(s, f) \
+do { \
+       if (rtm->rtm_flags & (f)) \
+               strcat(buf, (s)); \
+} while (0)
        RTFLAG("U", RTF_UP);
        RTFLAG("G", RTF_GATEWAY);
        RTFLAG("H", RTF_HOST);
@@ -2156,8 +2178,14 @@
        static char buf[BUFSIZ];
 
        strcpy(buf, "");
-#define        IFFLAG(s, f)    \
-       if (flags & f) { if (buf[0]) strcat(buf, ","); strcat(buf, s); }
+#define        IFFLAG(s, f) \
+do { \
+       if (flags & f) { \
+               if (buf[0]) \
+                       strcat(buf, ","); \
+               strcat(buf, s); \
+       } \
+} while (0)
        IFFLAG("UP", IFF_UP);
        IFFLAG("BROADCAST", IFF_BROADCAST);
        IFFLAG("DEBUG", IFF_DEBUG);
@@ -2862,14 +2890,14 @@
        }
        if (j < lenlim) {
                switch (*p) {
-#define        MASKLEN(m, l)   case m: i += l; break
-               MASKLEN(0xfe, 7);
-               MASKLEN(0xfc, 6);
-               MASKLEN(0xf8, 5);
-               MASKLEN(0xf0, 4);
-               MASKLEN(0xe0, 3);
-               MASKLEN(0xc0, 2);
-               MASKLEN(0x80, 1);
+#define        MASKLEN(m, l)   case m: do { i += l; break; } while (0)
+               MASKLEN(0xfe, 7); break;
+               MASKLEN(0xfc, 6); break;
+               MASKLEN(0xf8, 5); break;
+               MASKLEN(0xf0, 4); break;
+               MASKLEN(0xe0, 3); break;
+               MASKLEN(0xc0, 2); break;
+               MASKLEN(0x80, 1); break;
 #undef MASKLEN
                }
        }
@@ -3114,6 +3142,7 @@
        struct ifc *ifcp;
 {
        int n;
+       struct ifc **p;
 
        if (!index2ifc) {
                nindex2ifc = 5; /*initial guess*/
@@ -3127,10 +3156,11 @@
        while (nindex2ifc <= index)
                nindex2ifc *= 2;
        if (n != nindex2ifc) {
-               index2ifc = (struct ifc **)
-                       realloc(index2ifc, sizeof(*index2ifc) * nindex2ifc);
-               if (index2ifc == NULL)
+               p = (struct ifc **)realloc(index2ifc,
+                   sizeof(*index2ifc) * nindex2ifc);
+               if (p == NULL)
                        fatal("realloc");
+               index2ifc = p;
        }
        index2ifc[index] = ifcp;
 }



Home | Main Index | Thread Index | Old Index