diff options
Diffstat (limited to 'usr.sbin/route6d/route6d.c')
-rw-r--r-- | usr.sbin/route6d/route6d.c | 513 |
1 files changed, 207 insertions, 306 deletions
diff --git a/usr.sbin/route6d/route6d.c b/usr.sbin/route6d/route6d.c index 098f56c3e9c..1117807b829 100644 --- a/usr.sbin/route6d/route6d.c +++ b/usr.sbin/route6d/route6d.c @@ -1,4 +1,4 @@ -/* $OpenBSD: route6d.c,v 1.88 2016/07/13 08:40:46 mpi Exp $ */ +/* $OpenBSD: route6d.c,v 1.89 2016/08/05 11:32:28 jca Exp $ */ /* $KAME: route6d.c,v 1.111 2006/10/25 06:38:13 jinmei Exp $ */ /* @@ -55,11 +55,11 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <syslog.h> #include <time.h> #include <unistd.h> #include "route6d.h" +#include "log.h" #define MAXFILTER 40 @@ -172,8 +172,6 @@ struct sockaddr_storage ripsin; time_t nextalarm = 0; time_t sup_trig_update = 0; -FILE *rtlog = NULL; - static int seq = 0; volatile sig_atomic_t seenalrm; @@ -210,7 +208,7 @@ void ifrt_p2p(struct ifc *, int); void applyplen(struct in6_addr *, int); void ifrtdump(int); void ifdump(int); -void ifdump0(FILE *, const struct ifc *); +void ifdump0(const struct ifc *); void rtdump(int); void rt_entry(struct rt_msghdr *, int); __dead void rtdexit(void); @@ -233,12 +231,6 @@ struct in6_addr *plen2mask(int); struct riprt *rtsearch(struct netinfo6 *, struct riprt **); int ripinterval(int); time_t ripsuptrig(void); -void fatal(const char *, ...) - __attribute__((__format__(__printf__, 1, 2))); -void trace(int, const char *, ...) - __attribute__((__format__(__printf__, 2, 3))); -void tracet(int, const char *, ...) - __attribute__((__format__(__printf__, 2, 3))); unsigned int if_maxindex(void); struct ifc *ifc_find(char *); struct iff *iff_find(struct ifc *, int); @@ -253,7 +245,9 @@ main(int argc, char *argv[]) sigset_t mask, omask; char *ep; - while ((ch = getopt(argc, argv, "A:N:O:R:T:L:t:adDhlnqsS")) != -1) { + log_init(1); /* log to stderr until daemonized */ + + while ((ch = getopt(argc, argv, "A:N:O:T:L:t:adDhlnqsS")) != -1) { switch (ch) { case 'A': case 'N': @@ -261,7 +255,7 @@ main(int argc, char *argv[]) case 'T': case 'L': if (nfilter >= MAXFILTER) { - fatal("Exceeds MAXFILTER"); + fatalx("Exceeds MAXFILTER"); /*NOTREACHED*/ } filtertype[nfilter] = ch; @@ -271,13 +265,7 @@ main(int argc, char *argv[]) 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) { - fatal("Can not write to routelog"); + fatalx("invalid route tag"); /*NOTREACHED*/ } break; @@ -293,20 +281,20 @@ main(int argc, char *argv[]) FLAG('S', Sflag, 1); break; #undef FLAG default: - fatal("Invalid option specified, terminating"); + fatalx("Invalid option specified, terminating"); /*NOTREACHED*/ } } argc -= optind; argv += optind; if (argc > 0) { - fatal("bogus extra arguments"); + fatalx("bogus extra arguments"); /*NOTREACHED*/ } if (geteuid()) { nflag = 1; - fprintf(stderr, "No kernel update is allowed\n"); + log_warn("No kernel update is allowed"); } if (dflag == 0) { @@ -316,12 +304,12 @@ main(int argc, char *argv[]) } } - openlog("route6d", LOG_NDELAY|LOG_PID, LOG_DAEMON); + log_init(dflag); pid = getpid(); if ((ripbuf = calloc(RIP6_MAXMTU, 1)) == NULL) - fatal("calloc"); + fatal(NULL); ripbuf->rip6_cmd = RIP6_RESPONSE; ripbuf->rip6_vers = RIP6_VERSION; ripbuf->rip6_res1[0] = 0; @@ -336,8 +324,8 @@ main(int argc, char *argv[]) for (ifcp = ifc; ifcp; ifcp = ifcp->ifc_next) { if (ifcp->ifc_index < 0) { - fprintf(stderr, -"No ifindex found at %s (no link-local address?)\n", + log_warn( +"No ifindex found at %s (no link-local address?)", ifcp->ifc_name); error++; } @@ -345,7 +333,7 @@ main(int argc, char *argv[]) if (error) exit(1); if (loopifcp == NULL) { - fatal("No loopback found"); + fatalx("No loopback found"); /*NOTREACHED*/ } for (ifcp = ifc; ifcp; ifcp = ifcp->ifc_next) @@ -378,7 +366,7 @@ main(int argc, char *argv[]) sendrequest(ifcp); } - syslog(LOG_INFO, "**** Started ****"); + log_info("**** Started ****"); sigemptyset(&mask); sigaddset(&mask, SIGALRM); while (1) { @@ -459,8 +447,7 @@ rtdexit(void) } close(ripsock); close(rtsock); - syslog(LOG_INFO, "**** Terminated ****"); - closelog(); + log_info("**** Terminated ****"); exit(1); } @@ -532,11 +519,11 @@ init(void) hints.ai_flags = AI_PASSIVE; error = getaddrinfo(NULL, port, &hints, &res); if (error) { - fatal("%s", gai_strerror(error)); + fatalx(gai_strerror(error)); /*NOTREACHED*/ } if (res->ai_next) { - fatal(":: resolved to multiple address"); + fatalx(":: resolved to multiple address"); /*NOTREACHED*/ } @@ -583,11 +570,11 @@ init(void) hints.ai_socktype = SOCK_DGRAM; error = getaddrinfo(RIP6_DEST, port, &hints, &res); if (error) { - fatal("%s", gai_strerror(error)); + fatalx(gai_strerror(error)); /*NOTREACHED*/ } if (res->ai_next) { - fatal("%s resolved to multiple address", RIP6_DEST); + fatalx(RIP6_DEST " resolved to multiple address"); /*NOTREACHED*/ } memcpy(&ripsin, res->ai_addr, res->ai_addrlen); @@ -623,39 +610,39 @@ ripflush(struct ifc *ifcp, struct sockaddr_in6 *sin6) int error; if (ifcp) - tracet(1, "Send(%s): info(%d) to %s.%d\n", + log_debug("Send(%s): info(%d) to %s.%d", ifcp->ifc_name, nrt, inet6_n2p(&sin6->sin6_addr), ntohs(sin6->sin6_port)); else - tracet(1, "Send: info(%d) to %s.%d\n", + log_debug("Send: info(%d) to %s.%d", nrt, inet6_n2p(&sin6->sin6_addr), ntohs(sin6->sin6_port)); if (dflag >= 2) { np = ripbuf->rip6_nets; 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"); + log_enqueue(" NextHop reset"); else { - trace(2, " NextHop %s", + log_enqueue(" NextHop %s", inet6_n2p(&np->rip6_dest)); } } else { - trace(2, " %s/%d[%d]", + log_enqueue(" %s/%d[%d]", inet6_n2p(&np->rip6_dest), np->rip6_plen, np->rip6_metric); } if (np->rip6_tag) { - trace(2, " tag=0x%04x", + log_enqueue(" tag=0x%04x", ntohs(np->rip6_tag) & 0xffff); } - trace(2, "\n"); + log_debug(""); } } error = sendpacket(sin6, RIPSIZE(nrt)); if (error == EAFNOSUPPORT) { /* Protocol not supported */ - tracet(1, "Could not send info to %s (%s): " - "set IFF_UP to 0\n", + log_debug("Could not send info to %s (%s): " + "set IFF_UP to 0", ifcp->ifc_name, inet6_n2p(&ifcp->ifc_ripsin.sin6_addr)); ifcp->ifc_flags &= ~IFF_UP; /* As if down for AF_INET6 */ } @@ -937,7 +924,7 @@ sendpacket(struct sockaddr_in6 *sin6, int len) } if (sendmsg(ripsock, &m, 0) < 0) { - trace(1, "sendmsg: %s\n", strerror(errno)); + log_debug("sendmsg: %s", strerror(errno)); return errno; } @@ -999,8 +986,8 @@ riprecv(void) switch (cm->cmsg_type) { case IPV6_PKTINFO: if (cm->cmsg_len != CMSG_LEN(sizeof(*pi))) { - trace(1, - "invalid cmsg length for IPV6_PKTINFO\n"); + log_debug( + "invalid cmsg length for IPV6_PKTINFO"); return; } pi = (struct in6_pktinfo *)(CMSG_DATA(cm)); @@ -1008,8 +995,8 @@ riprecv(void) break; case IPV6_HOPLIMIT: if (cm->cmsg_len != CMSG_LEN(sizeof(int))) { - trace(1, - "invalid cmsg length for IPV6_HOPLIMIT\n"); + log_debug( + "invalid cmsg length for IPV6_HOPLIMIT"); return; } hlimp = (int *)CMSG_DATA(cm); @@ -1020,7 +1007,7 @@ riprecv(void) SET_IN6_LINKLOCAL_IFINDEX(fsock.sin6_addr, idx); if (len < sizeof(struct rip6)) { - trace(1, "Packet too short\n"); + log_debug("Packet too short"); return; } @@ -1032,7 +1019,7 @@ riprecv(void) * important, so it's better to discard the packet for safer * operation. */ - trace(1, "IPv6 packet information cannot be retrieved\n"); + log_debug("IPv6 packet information cannot be retrieved"); return; } @@ -1043,7 +1030,7 @@ riprecv(void) np = rp->rip6_nets; if (rp->rip6_vers != RIP6_VERSION) { - trace(1, "Incorrect RIP version %d\n", rp->rip6_vers); + log_debug("Incorrect RIP version %d", rp->rip6_vers); return; } if (rp->rip6_cmd == RIP6_REQUEST) { @@ -1057,18 +1044,18 @@ riprecv(void) } if (!IN6_IS_ADDR_LINKLOCAL(&fsock.sin6_addr)) { - trace(1, "Response from non-ll addr: %s\n", + log_debug("Response from non-ll addr: %s", inet6_n2p(&fsock.sin6_addr)); return; /* Ignore packets from non-link-local addr */ } if (ntohs(fsock.sin6_port) != RIP6_PORT) { - trace(1, "Response from non-rip port from %s\n", + log_debug("Response from non-rip port from %s", inet6_n2p(&fsock.sin6_addr)); return; } if (IN6_IS_ADDR_MULTICAST(&pi->ipi6_addr) && *hlimp != 255) { - trace(1, - "Response packet with a smaller hop limit (%d) from %s\n", + log_debug( + "Response packet with a smaller hop limit (%d) from %s", *hlimp, inet6_n2p(&fsock.sin6_addr)); return; } @@ -1085,9 +1072,9 @@ riprecv(void) * the limitation. */ if (!IN6_IS_ADDR_LINKLOCAL(&pi->ipi6_addr) && *hlimp != 255) { - trace(1, + log_debug( "Response packet possibly from an off-link node: " - "from %s to %s hlim=%d\n", + "from %s to %s hlim=%d", inet6_n2p(&fsock.sin6_addr), inet6_n2p(&pi->ipi6_addr), *hlimp); return; @@ -1096,13 +1083,13 @@ riprecv(void) idx = IN6_LINKLOCAL_IFINDEX(fsock.sin6_addr); ifcp = (idx < nindex2ifc) ? index2ifc[idx] : NULL; if (!ifcp) { - trace(1, "Packets to unknown interface index %d\n", idx); + log_debug("Packets to unknown interface index %d", idx); return; /* Ignore it */ } if (IN6_ARE_ADDR_EQUAL(&ifcp->ifc_mylladdr, &fsock.sin6_addr)) return; /* The packet is from me; ignore */ if (rp->rip6_cmd != RIP6_RESPONSE) { - trace(1, "Invalid command %d\n", rp->rip6_cmd); + log_debug("Invalid command %d", rp->rip6_cmd); return; } @@ -1110,7 +1097,7 @@ riprecv(void) if (iff_find(ifcp, 'N') != NULL) return; - tracet(1, "Recv(%s): from %s.%d info(%zd)\n", + log_debug("Recv(%s): from %s.%d info(%zd)", ifcp->ifc_name, inet6_n2p(&nh), ntohs(fsock.sin6_port), nn); t = time(NULL); @@ -1121,52 +1108,53 @@ riprecv(void) if (IN6_IS_ADDR_LINKLOCAL(&np->rip6_dest)) { nh = np->rip6_dest; SET_IN6_LINKLOCAL_IFINDEX(nh, idx); - trace(1, "\tNexthop: %s\n", inet6_n2p(&nh)); + log_debug("\tNexthop: %s", inet6_n2p(&nh)); } else if (IN6_IS_ADDR_UNSPECIFIED(&np->rip6_dest)) { nh = fsock.sin6_addr; - trace(1, "\tNexthop: %s\n", inet6_n2p(&nh)); + log_debug("\tNexthop: %s", inet6_n2p(&nh)); } else { nh = fsock.sin6_addr; - trace(1, "\tInvalid Nexthop: %s\n", + log_debug("\tInvalid Nexthop: %s", inet6_n2p(&np->rip6_dest)); } continue; } if (IN6_IS_ADDR_MULTICAST(&np->rip6_dest)) { - trace(1, "\tMulticast netinfo6: %s/%d [%d]\n", + log_debug("\tMulticast netinfo6: %s/%d [%d]", inet6_n2p(&np->rip6_dest), np->rip6_plen, np->rip6_metric); continue; } if (IN6_IS_ADDR_LOOPBACK(&np->rip6_dest)) { - trace(1, "\tLoopback netinfo6: %s/%d [%d]\n", + log_debug("\tLoopback netinfo6: %s/%d [%d]", inet6_n2p(&np->rip6_dest), np->rip6_plen, np->rip6_metric); continue; } if (IN6_IS_ADDR_LINKLOCAL(&np->rip6_dest)) { - trace(1, "\tLink Local netinfo6: %s/%d [%d]\n", + log_debug("\tLink Local netinfo6: %s/%d [%d]", inet6_n2p(&np->rip6_dest), np->rip6_plen, np->rip6_metric); continue; } /* may need to pass sitelocal prefix in some case, however*/ if (IN6_IS_ADDR_SITELOCAL(&np->rip6_dest) && !lflag) { - trace(1, "\tSite Local netinfo6: %s/%d [%d]\n", + log_debug("\tSite Local netinfo6: %s/%d [%d]", inet6_n2p(&np->rip6_dest), np->rip6_plen, np->rip6_metric); continue; } - trace(2, "\tnetinfo6: %s/%d [%d]", - inet6_n2p(&np->rip6_dest), - np->rip6_plen, np->rip6_metric); - if (np->rip6_tag) - trace(2, " tag=0x%04x", ntohs(np->rip6_tag) & 0xffff); if (dflag >= 2) { + log_enqueue("\tnetinfo6: %s/%d [%d]", + inet6_n2p(&np->rip6_dest), + np->rip6_plen, np->rip6_metric); + if (np->rip6_tag) + log_enqueue(" tag=0x%04x", + ntohs(np->rip6_tag) & 0xffff); ia = np->rip6_dest; applyplen(&ia, np->rip6_plen); if (!IN6_ARE_ADDR_EQUAL(&ia, &np->rip6_dest)) - trace(2, " [junk outside prefix]"); + log_enqueue(" [junk outside prefix]"); } /* @@ -1189,12 +1177,16 @@ riprecv(void) break; } } + if (!ok) { - trace(2, " (filtered)\n"); + if (dflag >= 2) + log_debug(" (filtered)"); continue; } - trace(2, "\n"); + if (dflag >= 2) + log_debug(""); + np->rip6_metric++; np->rip6_metric += ifcp->ifc_metric; if (np->rip6_metric > HOPCNT_INFINITY6) @@ -1310,13 +1302,13 @@ sendrequest(struct ifc *ifcp) np = ripbuf->rip6_nets; memset(np, 0, sizeof(struct netinfo6)); np->rip6_metric = HOPCNT_INFINITY6; - tracet(1, "Send rtdump Request to %s (%s)\n", + log_debug("Send rtdump Request to %s (%s)", ifcp->ifc_name, inet6_n2p(&ifcp->ifc_ripsin.sin6_addr)); error = sendpacket(&ifcp->ifc_ripsin, RIPSIZE(1)); if (error == EAFNOSUPPORT) { /* Protocol not supported */ - tracet(1, "Could not send rtdump Request to %s (%s): " - "set IFF_UP to 0\n", + log_debug("Could not send rtdump Request to %s (%s): " + "set IFF_UP to 0", ifcp->ifc_name, inet6_n2p(&ifcp->ifc_ripsin.sin6_addr)); ifcp->ifc_flags &= ~IFF_UP; /* As if down for AF_INET6 */ } @@ -1336,7 +1328,7 @@ riprequest(struct ifc *ifcp, struct netinfo6 *np, int nn, if (!(nn == 1 && IN6_IS_ADDR_UNSPECIFIED(&np->rip6_dest) && np->rip6_plen == 0 && np->rip6_metric == HOPCNT_INFINITY6)) { /* Specific response, don't split-horizon */ - trace(1, "\tRIP Request\n"); + log_debug("\tRIP Request"); for (i = 0; i < nn; i++, np++) { rrt = rtsearch(np, NULL); if (rrt) @@ -1348,7 +1340,7 @@ riprequest(struct ifc *ifcp, struct netinfo6 *np, int nn, return; } /* Whole routing table dump */ - trace(1, "\tRIP Request -- whole routing table\n"); + log_debug("\tRIP Request -- whole routing table"); ripsend(ifcp, sin6, RRTF_SENDANYWAY); } @@ -1394,16 +1386,16 @@ ifconfig(void) ifcp->ifc_addr = 0; ifcp->ifc_filter = 0; ifcp->ifc_flags = ifa->ifa_flags; - trace(1, "newif %s <%s>\n", ifcp->ifc_name, + log_debug("newif %s <%s>", ifcp->ifc_name, ifflags(ifcp->ifc_flags)); if (!strcmp(ifcp->ifc_name, LOOPBACK_IF)) loopifcp = ifcp; } else { /* update flag, this may be up again */ if (ifcp->ifc_flags != ifa->ifa_flags) { - trace(1, "%s: <%s> -> ", ifcp->ifc_name, + log_enqueue("%s: <%s> -> ", ifcp->ifc_name, ifflags(ifcp->ifc_flags)); - trace(1, "<%s>\n", ifflags(ifa->ifa_flags)); + log_debug("<%s>", ifflags(ifa->ifa_flags)); ifcp->ifc_cflags |= IFC_CHANGED; } ifcp->ifc_flags = ifa->ifa_flags; @@ -1415,10 +1407,10 @@ ifconfig(void) mreq.ipv6mr_interface = ifcp->ifc_index; if (setsockopt(ripsock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) < 0) { - fatal("IPV6_JOIN_GROUP"); + fatalx("IPV6_JOIN_GROUP"); /*NOTREACHED*/ } - trace(1, "join %s %s\n", ifcp->ifc_name, RIP6_DEST); + log_debug("join %s %s", ifcp->ifc_name, RIP6_DEST); ifcp->ifc_joined++; } } @@ -1471,10 +1463,10 @@ ifconfig1(const char *name, const struct sockaddr *sa, struct ifc *ifcp, int s) } ifa->ifa_raddr = ifr.ifr_dstaddr.sin6_addr; inet_ntop(AF_INET6, (void *)&ifa->ifa_raddr, buf, sizeof(buf)); - trace(1, "found address %s/%d -- %s\n", + log_debug("found address %s/%d -- %s", inet6_n2p(&ifa->ifa_addr), ifa->ifa_plen, buf); } else { - trace(1, "found address %s/%d\n", + log_debug("found address %s/%d", inet6_n2p(&ifa->ifa_addr), ifa->ifa_plen); } if (ifcp->ifc_index < 0 && IN6_IS_ADDR_LINKLOCAL(&ifa->ifa_addr)) { @@ -1492,7 +1484,7 @@ ifconfig1(const char *name, const struct sockaddr *sa, struct ifc *ifcp, int s) /*NOTREACHED*/ } ifcp->ifc_metric = ifr.ifr_metric; - trace(1, "\tindex: %d, mtu: %d, metric: %d\n", + log_debug("\tindex: %d, mtu: %d, metric: %d", ifcp->ifc_index, ifcp->ifc_mtu, ifcp->ifc_metric); } else ifcp->ifc_cflags |= IFC_CHANGED; @@ -1523,23 +1515,24 @@ rtrecv(void) exit(1); } if (len < sizeof(*rtm)) { - trace(1, "short read from rtsock: %d (should be > %zu)\n", + log_debug("short read from rtsock: %d (should be > %zu)", len, sizeof(*rtm)); return; } if (dflag >= 2) { - fprintf(stderr, "rtmsg:\n"); + log_debug("rtmsg:"); for (i = 0; i < len; i++) { - fprintf(stderr, "%02x ", buf[i] & 0xff); - if (i % 16 == 15) fprintf(stderr, "\n"); + log_enqueue("%02x ", buf[i] & 0xff); + if (i % 16 == 15) + log_debug(""); } - fprintf(stderr, "\n"); + log_debug(""); } for (p = buf; p - buf < len; p += ((struct rt_msghdr *)p)->rtm_msglen) { /* safety against bogus message */ if (((struct rt_msghdr *)p)->rtm_msglen <= 0) { - trace(1, "bogus rtmsg: length=%d\n", + log_debug("bogus rtmsg: length=%d", ((struct rt_msghdr *)p)->rtm_msglen); break; } @@ -1567,7 +1560,7 @@ rtrecv(void) q = (char *)(p + rtm->rtm_hdrlen); if (rtm->rtm_pid == pid) { #if 0 - trace(1, "rtmsg looped back to me, ignored\n"); + log_debug("rtmsg looped back to me, ignored"); #endif continue; } @@ -1581,18 +1574,18 @@ rtrecv(void) } } - trace(1, "rtsock: %s (addrs=%x)\n", + log_debug("rtsock: %s (addrs=%x)", rttypes((struct rt_msghdr *)p), addrs); - if (dflag >= 2) { - for (i = 0; - i < ((struct rt_msghdr *)p)->rtm_msglen; - i++) { - fprintf(stderr, "%02x ", p[i] & 0xff); - if (i % 16 == 15) fprintf(stderr, "\n"); + if (dflag >= 2) { + for (i = 0; + i < ((struct rt_msghdr *)p)->rtm_msglen; + i++) { + log_enqueue("%02x ", p[i] & 0xff); + if (i % 16 == 15) + log_debug(""); } - fprintf(stderr, "\n"); + log_debug(""); } - /* * Easy ones first. * @@ -1613,29 +1606,29 @@ rtrecv(void) case RTM_GET: case RTM_LOCK: /* nothing to be done here */ - trace(1, "\tnothing to be done, ignored\n"); + log_debug("\tnothing to be done, ignored"); continue; } #if 0 if (rta[RTAX_DST] == NULL) { - trace(1, "\tno destination, ignored\n"); + log_debug("\tno destination, ignored"); continue; } if (rta[RTAX_DST]->sin6_family != AF_INET6) { - trace(1, "\taf mismatch, ignored\n"); + log_debug("\taf mismatch, ignored"); continue; } if (IN6_IS_ADDR_LINKLOCAL(&rta[RTAX_DST]->sin6_addr)) { - trace(1, "\tlinklocal destination, ignored\n"); + log_debug("\tlinklocal destination, ignored"); continue; } if (IN6_ARE_ADDR_EQUAL(&rta[RTAX_DST]->sin6_addr, &in6addr_loopback)) { - trace(1, "\tloopback destination, ignored\n"); + log_debug("\tloopback destination, ignored"); continue; /* Loopback */ } if (IN6_IS_ADDR_MULTICAST(&rta[RTAX_DST]->sin6_addr)) { - trace(1, "\tmulticast destination, ignored\n"); + log_debug("\tmulticast destination, ignored"); continue; } #endif @@ -1651,12 +1644,12 @@ rtrecv(void) case RTM_GET: case RTM_LOCK: /* should already be handled */ - fatal("rtrecv: never reach here"); + fatalx("rtrecv: never reach here"); /*NOTREACHED*/ case RTM_DELETE: if (!rta[RTAX_DST] || !rta[RTAX_GATEWAY]) { - trace(1, "\tsome of dst/gw/netamsk are " - "unavailable, ignored\n"); + log_debug("\tsome of dst/gw/netmask are " + "unavailable, ignored"); break; } if ((rtm->rtm_flags & RTF_HOST) != 0) { @@ -1665,8 +1658,8 @@ rtrecv(void) sizeof(mask.sin6_addr)); rta[RTAX_NETMASK] = &mask; } else if (!rta[RTAX_NETMASK]) { - trace(1, "\tsome of dst/gw/netamsk are " - "unavailable, ignored\n"); + log_debug("\tsome of dst/gw/netmask are " + "unavailable, ignored"); break; } if (rt_del(rta[RTAX_DST], rta[RTAX_GATEWAY], @@ -1676,11 +1669,11 @@ rtrecv(void) break; case RTM_CHANGE: case RTM_REDIRECT: - trace(1, "\tnot supported yet, ignored\n"); + log_debug("\tnot supported yet, ignored"); break; case RTM_DELADDR: if (!rta[RTAX_NETMASK] || !rta[RTAX_IFA]) { - trace(1, "\tno netmask or ifa given, ignored\n"); + log_debug("\tno netmask or ifa given, ignored"); break; } if (ifam->ifam_index < nindex2ifc) @@ -1688,7 +1681,7 @@ rtrecv(void) else ifcp = NULL; if (!ifcp) { - trace(1, "\tinvalid ifam_index %d, ignored\n", + log_debug("\tinvalid ifam_index %d, ignored", ifam->ifam_index); break; } @@ -1700,7 +1693,7 @@ rtrecv(void) } if (iface) { - trace(1, "rtsock: reconfigure interfaces, refresh interface routes\n"); + log_debug("rtsock: reconfigure interfaces, refresh interface routes"); ifconfig(); for (ifcp = ifc; ifcp; ifcp = ifcp->ifc_next) if (ifcp->ifc_cflags & IFC_CHANGED) { @@ -1720,7 +1713,7 @@ rtrecv(void) } } if (rtable) { - trace(1, "rtsock: read routing table again\n"); + log_debug("rtsock: read routing table again"); krtread(1); } } @@ -1740,13 +1733,13 @@ rt_del(const struct sockaddr_in6 *sdst, const struct sockaddr_in6 *sgw, time_t t_lifetime; if (sdst->sin6_family != AF_INET6) { - trace(1, "\tother AF, ignored\n"); + log_debug("\tother AF, ignored"); return -1; } if (IN6_IS_ADDR_LINKLOCAL(&sdst->sin6_addr) || IN6_ARE_ADDR_EQUAL(&sdst->sin6_addr, &in6addr_loopback) || IN6_IS_ADDR_MULTICAST(&sdst->sin6_addr)) { - trace(1, "\taddress %s not interesting, ignored\n", + log_debug("\taddress %s not interesting, ignored", inet6_n2p(&sdst->sin6_addr)); return -1; } @@ -1763,7 +1756,7 @@ rt_del(const struct sockaddr_in6 *sdst, const struct sockaddr_in6 *sgw, * fresh list. */ struct riprt *longest; - trace(1, "\t%s is a interface route, guessing prefixlen\n", + log_debug("\t%s is a interface route, guessing prefixlen", inet6_n2p(dst)); longest = NULL; for (rrt = riprt; rrt; rrt = rrt->rrt_next) { @@ -1779,41 +1772,41 @@ rt_del(const struct sockaddr_in6 *sdst, const struct sockaddr_in6 *sgw, } rrt = longest; if (!rrt) { - trace(1, "\tno matching interface route found\n"); + log_debug("\tno matching interface route found"); return -1; } gw = &in6addr_loopback; prefix = rrt->rrt_info.rip6_plen; } else { - trace(1, "\tunsupported af: (gw=%d)\n", sgw->sin6_family); + log_debug("\tunsupported af: (gw=%d)", sgw->sin6_family); return -1; } - trace(1, "\tdeleting %s/%d ", inet6_n2p(dst), prefix); - trace(1, "gw %s\n", inet6_n2p(gw)); + log_enqueue("\tdeleting %s/%d ", inet6_n2p(dst), prefix); + log_debug("gw %s", inet6_n2p(gw)); t_lifetime = time(NULL) - RIP_LIFETIME; /* age route for interface address */ memset(&ni6, 0, sizeof(ni6)); ni6.rip6_dest = *dst; ni6.rip6_plen = prefix; applyplen(&ni6.rip6_dest, ni6.rip6_plen); /*to be sure*/ - trace(1, "\tfind route %s/%d\n", inet6_n2p(&ni6.rip6_dest), + log_debug("\tfind route %s/%d", inet6_n2p(&ni6.rip6_dest), ni6.rip6_plen); if (!rrt && (rrt = rtsearch(&ni6, NULL)) == NULL) { - trace(1, "\tno route found\n"); + log_debug("\tno route found"); return -1; } #if 0 if ((rrt->rrt_flags & RTF_STATIC) == 0) { - trace(1, "\tyou can delete static routes only\n"); + log_debug("\tyou can delete static routes only"); } else #endif if (!IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, gw)) { - trace(1, "\tgw mismatch: %s <-> ", + log_enqueue("\tgw mismatch: %s <-> ", inet6_n2p(&rrt->rrt_gw)); - trace(1, "%s\n", inet6_n2p(gw)); + log_debug("%s", inet6_n2p(gw)); } else { - trace(1, "\troute found, age it\n"); + log_debug("\troute found, age it"); if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) { rrt->rrt_t = t_lifetime; rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6; @@ -1838,23 +1831,23 @@ rt_deladdr(struct ifc *ifcp, const struct sockaddr_in6 *sifa, int updated = 0; if (sifa->sin6_family != AF_INET6) { - trace(1, "\tother AF, ignored\n"); + log_debug("\tother AF, ignored"); return -1; } addr = &sifa->sin6_addr; prefix = sin6mask2len(smask); - trace(1, "\tdeleting %s/%d from %s\n", + log_debug("\tdeleting %s/%d from %s", inet6_n2p(addr), prefix, ifcp->ifc_name); ifa = ifa_match(ifcp, addr, prefix); if (!ifa) { - trace(1, "\tno matching ifa found for %s/%d on %s\n", + log_debug("\tno matching ifa found for %s/%d on %s", inet6_n2p(addr), prefix, ifcp->ifc_name); return -1; } if (ifa->ifa_conf != ifcp) { - trace(1, "\taddress table corrupt: back pointer does not match " - "(%s != %s)\n", + log_debug("\taddress table corrupt: back pointer does not match " + "(%s != %s)", ifcp->ifc_name, ifa->ifa_conf->ifc_name); return -1; } @@ -1878,7 +1871,7 @@ rt_deladdr(struct ifc *ifcp, const struct sockaddr_in6 *sifa, ni6.rip6_dest = ifa->ifa_addr; ni6.rip6_plen = ifa->ifa_plen; applyplen(&ni6.rip6_dest, ni6.rip6_plen); - trace(1, "\tfind interface route %s/%d on %d\n", + log_debug("\tfind interface route %s/%d on %d", inet6_n2p(&ni6.rip6_dest), ni6.rip6_plen, ifcp->ifc_index); if ((rrt = rtsearch(&ni6, NULL)) != NULL) { struct in6_addr none; @@ -1886,33 +1879,33 @@ rt_deladdr(struct ifc *ifcp, const struct sockaddr_in6 *sifa, if (rrt->rrt_index == ifcp->ifc_index && (IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, &none) || IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw))) { - trace(1, "\troute found, age it\n"); + log_debug("\troute found, age it"); if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) { rrt->rrt_t = t_lifetime; rrt->rrt_info.rip6_metric = HOPCNT_INFINITY6; } updated++; } else { - trace(1, "\tnon-interface route found: %s/%d on %d\n", + log_debug("\tnon-interface route found: %s/%d on %d", inet6_n2p(&rrt->rrt_info.rip6_dest), rrt->rrt_info.rip6_plen, rrt->rrt_index); } } else - trace(1, "\tno interface route found\n"); + log_debug("\tno interface route found"); /* age route for p2p destination */ if (ifcp->ifc_flags & IFF_POINTOPOINT) { memset(&ni6, 0, sizeof(ni6)); ni6.rip6_dest = ifa->ifa_raddr; ni6.rip6_plen = 128; applyplen(&ni6.rip6_dest, ni6.rip6_plen); /*to be sure*/ - trace(1, "\tfind p2p route %s/%d on %d\n", + log_debug("\tfind p2p route %s/%d on %d", inet6_n2p(&ni6.rip6_dest), ni6.rip6_plen, ifcp->ifc_index); if ((rrt = rtsearch(&ni6, NULL)) != NULL) { if (rrt->rrt_index == ifcp->ifc_index && IN6_ARE_ADDR_EQUAL(&rrt->rrt_gw, &ifa->ifa_addr)) { - trace(1, "\troute found, age it\n"); + log_debug("\troute found, age it"); if (rrt->rrt_t == 0 || rrt->rrt_t > t_lifetime) { rrt->rrt_t = t_lifetime; rrt->rrt_info.rip6_metric = @@ -1920,13 +1913,13 @@ rt_deladdr(struct ifc *ifcp, const struct sockaddr_in6 *sifa, updated++; } } else { - trace(1, "\tnon-p2p route found: %s/%d on %d\n", + log_debug("\tnon-p2p route found: %s/%d on %d", inet6_n2p(&rrt->rrt_info.rip6_dest), rrt->rrt_info.rip6_plen, rrt->rrt_index); } } else - trace(1, "\tno p2p route found\n"); + log_debug("\tno p2p route found"); } return updated ? 0 : -1; } @@ -1957,22 +1950,22 @@ ifrt(struct ifc *ifcp, int again) for (ifa = ifcp->ifc_addr; ifa; ifa = ifa->ifa_next) { if (IN6_IS_ADDR_LINKLOCAL(&ifa->ifa_addr)) { #if 0 - trace(1, "route: %s on %s: " - "skip linklocal interface address\n", + log_debug("route: %s on %s: " + "skip linklocal interface address", inet6_n2p(&ifa->ifa_addr), ifcp->ifc_name); #endif continue; } if (IN6_IS_ADDR_UNSPECIFIED(&ifa->ifa_addr)) { #if 0 - trace(1, "route: %s: skip unspec interface address\n", + log_debug("route: %s: skip unspec interface address", ifcp->ifc_name); #endif continue; } if (IN6_IS_ADDR_LOOPBACK(&ifa->ifa_addr)) { #if 0 - trace(1, "route: %s: skip loopback address\n", + log_debug("route: %s: skip loopback address", ifcp->ifc_name); #endif continue; @@ -2001,8 +1994,8 @@ ifrt(struct ifc *ifcp, int again) rrt->rrt_info.rip6_metric) { /* Already have better route */ if (!again) { - trace(1, "route: %s/%d: " - "already registered (%s)\n", + log_debug("route: %s/%d: " + "already registered (%s)", inet6_n2p(&np->rip6_dest), np->rip6_plen, ifcp->ifc_name); } @@ -2016,7 +2009,7 @@ ifrt(struct ifc *ifcp, int again) delroute(&rrt->rrt_info, &rrt->rrt_gw); } /* Attach the route to the list */ - trace(1, "route: %s/%d: register route (%s)\n", + log_debug("route: %s/%d: register route (%s)", inet6_n2p(&np->rip6_dest), np->rip6_plen, ifcp->ifc_name); rrt->rrt_next = riprt; @@ -2161,8 +2154,8 @@ ifrt_p2p(struct ifc *ifcp, int again) if (IN6_IS_ADDR_UNSPECIFIED(&rrt->rrt_info.rip6_dest) || IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_info.rip6_dest)) { #if 0 - trace(1, "route: %s: skip unspec/linklocal " - "(%s on %s)\n", category, ifcp->ifc_name); + log_debug("route: %s: skip unspec/linklocal " + "(%s on %s)", category, ifcp->ifc_name); #endif free(rrt); continue; @@ -2178,8 +2171,8 @@ ifrt_p2p(struct ifc *ifcp, int again) orrt = rtsearch(np, &prevrrt); if (!orrt) { /* Attach the route to the list */ - trace(1, "route: %s/%d: register route " - "(%s on %s%s)\n", + log_debug("route: %s/%d: register route " + "(%s on %s%s)", inet6_n2p(&np->rip6_dest), np->rip6_plen, category, ifcp->ifc_name, noadv); rrt->rrt_next = riprt; @@ -2194,14 +2187,14 @@ ifrt_p2p(struct ifc *ifcp, int again) riprt = rrt; free(orrt); - trace(1, "route: %s/%d: update (%s on %s%s)\n", + log_debug("route: %s/%d: update (%s on %s%s)", inet6_n2p(&np->rip6_dest), np->rip6_plen, category, ifcp->ifc_name, noadv); } else { /* Already found */ if (!again) { - trace(1, "route: %s/%d: " - "already registered (%s on %s%s)\n", + log_debug("route: %s/%d: " + "already registered (%s on %s%s)", inet6_n2p(&np->rip6_dest), np->rip6_plen, category, ifcp->ifc_name, noadv); @@ -2237,7 +2230,7 @@ getifmtu(int ifindex) if (needed == 0) break; if ((buf = realloc(buf, needed)) == NULL) - fatal("malloc"); + fatal(NULL); if (sysctl(mib, 6, buf, &needed, NULL, 0) == -1) { if (errno == ENOMEM) continue; @@ -2398,11 +2391,10 @@ krtread(int again) } } while (retry < 5 && errmsg != NULL); if (errmsg) { - fatal("%s (with %d retries, msize=%zu)", errmsg, retry, - msize); + fatal(errmsg); /*NOTREACHED*/ } else if (1 < retry) - syslog(LOG_INFO, "NET_RT_DUMP %d retires", retry); + log_info("NET_RT_DUMP %d retries", retry); lim = buf + msize; for (p = buf; p < lim; p += rtm->rtm_msglen) { @@ -2500,7 +2492,7 @@ rt_entry(struct rt_msghdr *rtm, int again) if (orrt && orrt->rrt_info.rip6_metric != HOPCNT_INFINITY6) { /* Already found */ if (!again) { - trace(1, "route: %s/%d flags %s: already registered\n", + log_debug("route: %s/%d flags %s: already registered", inet6_n2p(&np->rip6_dest), np->rip6_plen, rtflags(rtm)); } @@ -2519,30 +2511,28 @@ rt_entry(struct rt_msghdr *rtm, int again) } else memset(&rrt->rrt_gw, 0, sizeof(struct in6_addr)); } - trace(1, "route: %s/%d flags %s", + log_enqueue("route: %s/%d flags %s", inet6_n2p(&np->rip6_dest), np->rip6_plen, rtflags(rtm)); - trace(1, " gw %s", inet6_n2p(&rrt->rrt_gw)); + log_enqueue(" gw %s", inet6_n2p(&rrt->rrt_gw)); /* Interface */ s = rtm->rtm_index; if (s < nindex2ifc && index2ifc[s]) ifname = index2ifc[s]->ifc_name; else { - trace(1, " not configured\n"); + log_debug(" not configured"); free(rrt); return; } - trace(1, " if %s sock %d", ifname, s); + log_debug(" if %s sock %d", ifname, s); rrt->rrt_index = s; - trace(1, "\n"); - /* Check gateway */ if (!IN6_IS_ADDR_LINKLOCAL(&rrt->rrt_gw) && !IN6_IS_ADDR_LOOPBACK(&rrt->rrt_gw)) { - trace(0, "***** Gateway %s is not a link-local address.\n", + log_warnx("***** Gateway %s is not a link-local address.", inet6_n2p(&rrt->rrt_gw)); - trace(0, "***** dest(%s) if(%s) -- Not optimized.\n", + log_warnx("***** dest(%s) if(%s) -- Not optimized.", inet6_n2p(&rrt->rrt_info.rip6_dest), ifname); rrt->rrt_rflags |= RRTF_NH_NOT_LLADDR; } @@ -2552,7 +2542,7 @@ rt_entry(struct rt_msghdr *rtm, int again) /* replace route list */ rrt->rrt_next = orrt->rrt_next; *orrt = *rrt; - trace(1, "route: %s/%d flags %s: replace new route\n", + log_debug("route: %s/%d flags %s: replace new route", inet6_n2p(&np->rip6_dest), np->rip6_plen, rtflags(rtm)); free(rrt); @@ -2574,13 +2564,10 @@ addroute(struct riprt *rrt, const struct in6_addr *gw, struct ifc *ifcp) np = &rrt->rrt_info; inet_ntop(AF_INET6, (const void *)gw, (char *)buf1, sizeof(buf1)); inet_ntop(AF_INET6, (void *)&ifcp->ifc_mylladdr, (char *)buf2, sizeof(buf2)); - tracet(1, "ADD: %s/%d gw %s [%d] ifa %s\n", - inet6_n2p(&np->rip6_dest), np->rip6_plen, buf1, - np->rip6_metric - 1, buf2); - if (rtlog) - fprintf(rtlog, "%s: ADD: %s/%d gw %s [%d] ifa %s\n", hms(), - inet6_n2p(&np->rip6_dest), np->rip6_plen, buf1, - np->rip6_metric - 1, buf2); + log_debug("RTADD: %s/%d gw %s [%d] ifa %s", + inet6_n2p(&np->rip6_dest), np->rip6_plen, buf1, + np->rip6_metric - 1, buf2); + if (nflag) return 0; @@ -2615,17 +2602,11 @@ addroute(struct riprt *rrt, const struct in6_addr *gw, struct ifc *ifcp) return 0; if (errno == EEXIST) { - trace(0, "ADD: Route already exists %s/%d gw %s\n", + log_warnx("RTADD: Route already exists %s/%d gw %s", inet6_n2p(&np->rip6_dest), np->rip6_plen, buf1); - if (rtlog) - fprintf(rtlog, "ADD: Route already exists %s/%d gw %s\n", - inet6_n2p(&np->rip6_dest), np->rip6_plen, buf1); } else { - trace(0, "Can not write to rtsock (addroute): %s\n", + log_warnx("RTADD: Can not write to rtsock (addroute): %s", strerror(errno)); - if (rtlog) - fprintf(rtlog, "\tCan not write to rtsock: %s\n", - strerror(errno)); } return -1; } @@ -2639,11 +2620,9 @@ delroute(struct netinfo6 *np, struct in6_addr *gw) int len; inet_ntop(AF_INET6, (void *)gw, (char *)buf2, sizeof(buf2)); - tracet(1, "DEL: %s/%d gw %s\n", inet6_n2p(&np->rip6_dest), - np->rip6_plen, buf2); - if (rtlog) - fprintf(rtlog, "%s: DEL: %s/%d gw %s\n", - hms(), inet6_n2p(&np->rip6_dest), np->rip6_plen, buf2); + log_debug("RTDEL: %s/%d gw %s", inet6_n2p(&np->rip6_dest), + np->rip6_plen, buf2); + if (nflag) return 0; @@ -2679,17 +2658,11 @@ delroute(struct netinfo6 *np, struct in6_addr *gw) return 0; if (errno == ESRCH) { - trace(0, "RTDEL: Route does not exist: %s/%d gw %s\n", + log_warnx("RTDEL: Route does not exist: %s/%d gw %s", inet6_n2p(&np->rip6_dest), np->rip6_plen, buf2); - if (rtlog) - fprintf(rtlog, "RTDEL: Route does not exist: %s/%d gw %s\n", - inet6_n2p(&np->rip6_dest), np->rip6_plen, buf2); } else { - trace(0, "Can not write to rtsock (delroute): %s\n", + log_warnx("RTDEL: Can not write to rtsock (delroute): %s", strerror(errno)); - if (rtlog) - fprintf(rtlog, "\tCan not write to rtsock: %s\n", - strerror(errno)); } return -1; } @@ -2760,19 +2733,12 @@ void ifdump(int sig) { struct ifc *ifcp; - FILE *dump; int i; - if (sig == 0) - dump = stderr; - else - if ((dump = fopen(ROUTE6D_DUMP, "a")) == NULL) - dump = stderr; - - fprintf(dump, "%s: Interface Table Dump\n", hms()); - fprintf(dump, " Number of interfaces: %d\n", nifc); + log_info("%s: Interface Table Dump", hms()); + log_info(" Number of interfaces: %d", nifc); for (i = 0; i < 2; i++) { - fprintf(dump, " %sadvertising interfaces:\n", i ? "non-" : ""); + log_info(" %sadvertising interfaces:", i ? "non-" : ""); for (ifcp = ifc; ifcp; ifcp = ifcp->ifc_next) { if (i == 0) { if ((ifcp->ifc_flags & IFF_UP) == 0) @@ -2783,16 +2749,14 @@ ifdump(int sig) if (ifcp->ifc_flags & IFF_UP) continue; } - ifdump0(dump, ifcp); + ifdump0(ifcp); } } - fprintf(dump, "\n"); - if (dump != stderr) - fclose(dump); + log_info(""); } void -ifdump0(FILE *dump, const struct ifc *ifcp) +ifdump0(const struct ifc *ifcp) { struct ifac *ifa; struct iff *iffp; @@ -2800,7 +2764,7 @@ ifdump0(FILE *dump, const struct ifc *ifcp) const char *ft; int addr; - fprintf(dump, " %s: index(%d) flags(%s) addr(%s) mtu(%d) metric(%d)\n", + log_info(" %s: index(%d) flags(%s) addr(%s) mtu(%d) metric(%d)", ifcp->ifc_name, ifcp->ifc_index, ifflags(ifcp->ifc_flags), inet6_n2p(&ifcp->ifc_mylladdr), ifcp->ifc_mtu, ifcp->ifc_metric); @@ -2808,17 +2772,17 @@ ifdump0(FILE *dump, const struct ifc *ifcp) if (ifcp->ifc_flags & IFF_POINTOPOINT) { inet_ntop(AF_INET6, (void *)&ifa->ifa_raddr, buf, sizeof(buf)); - fprintf(dump, "\t%s/%d -- %s\n", + log_info("\t%s/%d -- %s", inet6_n2p(&ifa->ifa_addr), ifa->ifa_plen, buf); } else { - fprintf(dump, "\t%s/%d\n", + log_info("\t%s/%d", inet6_n2p(&ifa->ifa_addr), ifa->ifa_plen); } } if (ifcp->ifc_filter) { - fprintf(dump, "\tFilter:"); + log_enqueue("\tFilter:"); for (iffp = ifcp->ifc_filter; iffp; iffp = iffp->iff_next) { addr = 0; switch (iffp->iff_type) { @@ -2838,13 +2802,13 @@ ifdump0(FILE *dump, const struct ifc *ifcp) addr++; break; } - fprintf(dump, " %s", ft); + log_enqueue(" %s", ft); if (addr) { - fprintf(dump, "(%s/%d)", inet6_n2p(&iffp->iff_addr), - iffp->iff_plen); + log_enqueue("(%s/%d)", + inet6_n2p(&iffp->iff_addr), iffp->iff_plen); } } - fprintf(dump, "\n"); + log_info(""); } } @@ -2853,17 +2817,10 @@ rtdump(int sig) { struct riprt *rrt; char buf[BUFSIZ]; - FILE *dump; time_t t, age; - if (sig == 0) - dump = stderr; - else - if ((dump = fopen(ROUTE6D_DUMP, "a")) == NULL) - dump = stderr; - t = time(NULL); - fprintf(dump, "\n%s: Routing Table Dump\n", hms()); + log_info("%s: Routing Table Dump", hms()); for (rrt = riprt; rrt; rrt = rrt->rrt_next) { if (rrt->rrt_t == 0) age = 0; @@ -2871,24 +2828,21 @@ rtdump(int sig) age = t - rrt->rrt_t; inet_ntop(AF_INET6, (void *)&rrt->rrt_info.rip6_dest, buf, sizeof(buf)); - fprintf(dump, " %s/%d if(%d:%s) gw(%s) [%d] age(%lld)", + log_enqueue(" %s/%d if(%d:%s) gw(%s) [%d] age(%lld)", buf, rrt->rrt_info.rip6_plen, rrt->rrt_index, index2ifc[rrt->rrt_index]->ifc_name, inet6_n2p(&rrt->rrt_gw), rrt->rrt_info.rip6_metric, (long long)age); if (rrt->rrt_info.rip6_tag) { - fprintf(dump, " tag(0x%04x)", + log_enqueue(" tag(0x%04x)", ntohs(rrt->rrt_info.rip6_tag) & 0xffff); } if (rrt->rrt_rflags & RRTF_NH_NOT_LLADDR) - fprintf(dump, " NOT-LL"); + log_enqueue(" NOT-LL"); if (rrt->rrt_rflags & RRTF_NOADVERTISE) - fprintf(dump, " NO-ADV"); - fprintf(dump, "\n"); + log_enqueue(" NO-ADV"); + log_info(""); } - fprintf(dump, "\n"); - if (dump != stderr) - fclose(dump); } /* @@ -2923,19 +2877,22 @@ filterconfig(void) iflp = p; } if ((p = strchr(ap, '/')) == NULL) { - fatal("no prefixlen specified for '%s'", ap); + log_warnx("no prefixlen specified for '%s'", ap); + fatalx("exiting"); /*NOTREACHED*/ } *p++ = '\0'; if (inet_pton(AF_INET6, ap, &ftmp.iff_addr) != 1) { - fatal("invalid prefix specified for '%s'", ap); + log_warnx("invalid prefix specified for '%s'", ap); + fatalx("exiting"); /*NOTREACHED*/ } errno = 0; ep = NULL; plen = strtoul(p, &ep, 10); if (errno || !*p || *ep || plen > sizeof(ftmp.iff_addr) * 8) { - fatal("invalid prefix length specified for '%s'", ap); + log_warnx("invalid prefix length specified for '%s'", ap); + fatalx("exiting"); /*NOTREACHED*/ } ftmp.iff_plen = plen; @@ -2944,7 +2901,8 @@ filterconfig(void) ifonly: ftmp.iff_type = filtertype[i]; if (iflp == NULL || *iflp == '\0') { - fatal("no interface specified for '%s'", ap); + log_warnx("no interface specified for '%s'", ap); + fatal("exiting"); /*NOTREACHED*/ } /* parse the interface listing portion */ @@ -2954,7 +2912,8 @@ ifonly: *iflp++ = '\0'; ifcp = ifc_find(ifname); if (ifcp == NULL) { - fatal("no interface %s exists", ifname); + log_warnx("no interface %s exists", ifname); + fatalx("exiting"); /*NOTREACHED*/ } iff_obj = malloc(sizeof(struct iff)); @@ -3011,7 +2970,7 @@ ifonly: /* Put the route to the list */ rrt->rrt_next = riprt; riprt = rrt; - trace(1, "Aggregate: %s/%d for %s\n", + log_debug("Aggregate: %s/%d for %s", inet6_n2p(&ftmp.iff_addr), ftmp.iff_plen, ifcp->ifc_name); /* Add this route to the kernel */ @@ -3197,64 +3156,6 @@ ripsuptrig(void) return t; } -void -fatal(const char *fmt, ...) -{ - va_list ap; - char buf[1024]; - - va_start(ap, fmt); - vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); - perror(buf); - if (errno) - syslog(LOG_ERR, "%s: %s", buf, strerror(errno)); - else - syslog(LOG_ERR, "%s", buf); - rtdexit(); -} - -void -tracet(int level, const char *fmt, ...) -{ - va_list ap; - - if (level <= dflag) { - va_start(ap, fmt); - fprintf(stderr, "%s: ", hms()); - vfprintf(stderr, fmt, ap); - va_end(ap); - } - if (dflag) { - va_start(ap, fmt); - if (level > 0) - vsyslog(LOG_DEBUG, fmt, ap); - else - vsyslog(LOG_WARNING, fmt, ap); - va_end(ap); - } -} - -void -trace(int level, const char *fmt, ...) -{ - va_list ap; - - if (level <= dflag) { - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - } - if (dflag) { - va_start(ap, fmt); - if (level > 0) - vsyslog(LOG_DEBUG, fmt, ap); - else - vsyslog(LOG_WARNING, fmt, ap); - va_end(ap); - } -} - unsigned int if_maxindex(void) { |