summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/route.c
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>1997-06-09 03:27:43 +0000
committerbrian <brian@FreeBSD.org>1997-06-09 03:27:43 +0000
commit94d661ac8cb907e0a869759f76cd7134c9105e6c (patch)
tree5fa88c28cbdec0d4a0d3d118b33c1042dc49c526 /usr.sbin/ppp/route.c
parent328d28c6502cfec45b8ead98e18b2d8638499efb (diff)
downloadFreeBSD-src-94d661ac8cb907e0a869759f76cd7134c9105e6c.zip
FreeBSD-src-94d661ac8cb907e0a869759f76cd7134c9105e6c.tar.gz
Overhaul ppp:
o Use syslog o Remove references to stdout/stderr (incl perror()) o Introduce VarTerm - the interactive terminal or zero o Allow "set timeout" to affect current session o Change "set debug" to "set log" o Allow "set log [+|-]flag" o Make MSEXT and PASSWDAUTH stuff the default o Move all #ifdef DEBUG stuff into the code - this shouldn't be too much overhead. It's now controlled with "set log +debug" o Add "set log command, debug, tun, warn, error, alert" o Remove cdefs.h, and assume an ansi compiler. o Improve all diagnostic output o Don't trap SIGSEGV o SIGHUP now terminates again (log files are controlled by syslog) o Call CloseModem() when changing devices o Fix parsing of third arg of "delete" I think this fixes the "magic is same" problems that some people have been experiencing. The man page is being rewritten. It'll follow soon.
Diffstat (limited to 'usr.sbin/ppp/route.c')
-rw-r--r--usr.sbin/ppp/route.c142
1 files changed, 56 insertions, 86 deletions
diff --git a/usr.sbin/ppp/route.c b/usr.sbin/ppp/route.c
index c475935..7fcbd49 100644
--- a/usr.sbin/ppp/route.c
+++ b/usr.sbin/ppp/route.c
@@ -17,7 +17,7 @@
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * $Id: route.c,v 1.12 1997/02/22 16:10:49 peter Exp $
+ * $Id: route.c,v 1.13 1997/05/10 01:22:18 brian Exp $
*
*/
#include <sys/types.h>
@@ -25,11 +25,7 @@
#include <sys/ioctl.h>
#include <sys/param.h>
#include <sys/socket.h>
-#if (BSD >= 199306)
#include <sys/sysctl.h>
-#else
-#include <sys/kinfo.h>
-#endif
#include <sys/time.h>
#include <errno.h>
@@ -45,6 +41,8 @@
#include <arpa/inet.h>
#include "log.h"
+#include "loadalias.h"
+#include "vars.h"
static int IfIndex;
@@ -70,7 +68,7 @@ struct in_addr mask;
s = socket(PF_ROUTE, SOCK_RAW, 0);
if (s < 0)
- logprintf("socket\n");
+ LogPrintf(LogERROR, "socket: %s", strerror(errno));
bzero(&rtmes, sizeof(rtmes));
rtmes.m_rtm.rtm_version = RTM_VERSION;
@@ -113,12 +111,11 @@ struct in_addr mask;
rtmes.m_rtm.rtm_msglen = nb;
wb = write(s, &rtmes, nb);
if (wb < 0) {
- LogPrintf(LOG_TCPIP_BIT, "Already set route addr dst=%x, gateway=%x\n"
+ LogPrintf(LogTCPIP, "Already set route addr dst=%x, gateway=%x\n"
,dst.s_addr, gateway.s_addr);
}
-#ifdef DEBUG
- logprintf("wrote %d: dst = %x, gateway = %x\n", nb, dst.s_addr, gateway.s_addr);
-#endif
+ LogPrintf(LogDEBUG, "wrote %d: dst = %x, gateway = %x\n", nb,
+ dst.s_addr, gateway.s_addr);
close(s);
}
@@ -127,12 +124,14 @@ p_sockaddr(sa, width)
struct sockaddr *sa;
int width;
{
- register char *cp;
- register struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+ if (VarTerm) {
+ register char *cp;
+ register struct sockaddr_in *sin = (struct sockaddr_in *)sa;
- cp = (sin->sin_addr.s_addr == 0) ? "default" :
+ cp = (sin->sin_addr.s_addr == 0) ? "default" :
inet_ntoa(sin->sin_addr);
- printf("%-*.*s ", width, width, cp);
+ fprintf(VarTerm, "%-*.*s ", width, width, cp);
+ }
}
struct bits {
@@ -156,14 +155,16 @@ p_flags(f, format)
register int f;
char *format;
{
- char name[33], *flags;
- register struct bits *p = bits;
-
- for (flags = name; p->b_mask; p++)
- if (p->b_mask & f)
- *flags++ = p->b_val;
- *flags = '\0';
- printf(format, name);
+ if (VarTerm) {
+ char name[33], *flags;
+ register struct bits *p = bits;
+
+ for (flags = name; p->b_mask; p++)
+ if (p->b_mask & f)
+ *flags++ = p->b_val;
+ *flags = '\0';
+ fprintf(VarTerm, format, name);
+ }
}
int
@@ -176,11 +177,11 @@ ShowRoute()
int *lp;
int needed, nb;
u_long mask;
-#if (BSD >= 199306)
int mib[6];
-#endif
-#if (BSD >= 199306)
+ if (!VarTerm)
+ return 1;
+
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
@@ -188,28 +189,21 @@ ShowRoute()
mib[4] = NET_RT_DUMP;
mib[5] = 0;
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) {
- perror("sysctl-estimate");
+ LogPrintf(LogERROR, "sysctl: estimate: %s", strerror(errno));
return(1);
}
-#else
- needed = getkerninfo(KINFO_RT_DUMP, 0, 0, 0);
-#endif
+
if (needed < 0)
return(1);
sp = malloc(needed);
if (sp == NULL)
return(1);
-#if (BSD >= 199306)
if (sysctl(mib, 6, sp, &needed, NULL, 0) < 0) {
- perror("sysctl-getroute");
+ LogPrintf(LogERROR, "sysctl: getroute: %s", strerror(errno));
free(sp);
return(1);
}
-#else
- if (getkerninfo(KINFO_RT_DUMP, sp, &needed, 0) < 0)
- free(sp);
- return(1);
-#endif
+
ep = sp + needed;
for (cp = sp; cp < ep; cp += rtm->rtm_msglen) {
@@ -227,9 +221,7 @@ ShowRoute()
p_sockaddr(sa, 18);
lp = (int *)(sa->sa_len + (char *)sa);
if ((char *)lp < (char *)wp && *lp) {
-#ifdef DEBUG
- logprintf(" flag = %x, rest = %d", rtm->rtm_flags, *lp);
-#endif
+ LogPrintf(LogDEBUG, " flag = %x, rest = %d", rtm->rtm_flags, *lp);
wp = (u_char *)(lp + 1);
mask = 0;
for (nb = *(char *)lp; nb > 4; nb--) {
@@ -240,12 +232,12 @@ ShowRoute()
mask <<= 8;
}
}
- printf("%08lx ", mask);
+ fprintf(VarTerm, "%08lx ", mask);
p_flags(rtm->rtm_flags & (RTF_UP|RTF_GATEWAY|RTF_HOST), "%-6.6s ");
- printf("(%d)\n", rtm->rtm_index);
+ fprintf(VarTerm, "(%d)\n", rtm->rtm_index);
}
free(sp);
- return(1);
+ return 0;
}
/*
@@ -263,14 +255,10 @@ int all;
u_long mask;
int *lp, nb;
u_char *wp;
-#if (BSD >= 199306)
int mib[6];
-#endif
-#ifdef DEBUG
- logprintf("DeleteIfRoutes (%d)\n", IfIndex);
-#endif
-#if (BSD >= 199306)
+ LogPrintf(LogDEBUG, "DeleteIfRoutes (%d)\n", IfIndex);
+
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
@@ -278,12 +266,9 @@ int all;
mib[4] = NET_RT_DUMP;
mib[5] = 0;
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) {
- perror("sysctl-estimate");
+ LogPrintf(LogERROR, "sysctl: estimate: %s", strerror(errno));
return;
}
-#else
- needed = getkerninfo(KINFO_RT_DUMP, 0, 0, 0);
-#endif
if (needed < 0)
return;
@@ -292,28 +277,20 @@ int all;
if (sp == NULL)
return;
-#if (BSD >= 199306)
if (sysctl(mib, 6, sp, &needed, NULL, 0) < 0) {
- free(sp);
- perror("sysctl-getroute");
- return;
- }
-#else
- if (getkerninfo(KINFO_RT_DUMP, sp, &needed, 0) < 0) {
+ LogPrintf(LogERROR, "sysctl: getroute: %s", strerror(errno));
free(sp);
return;
}
-#endif
ep = sp + needed;
for (cp = sp; cp < ep; cp += rtm->rtm_msglen) {
rtm = (struct rt_msghdr *)cp;
sa = (struct sockaddr *)(rtm + 1);
-#ifdef DEBUG
- logprintf("addrs: %x, index: %d, flags: %x, dstnet: %x\n",
- rtm->rtm_addrs, rtm->rtm_index, rtm->rtm_flags,
- ((struct sockaddr_in *)sa)->sin_addr);
-#endif
+ LogPrintf(LogDEBUG, "DeleteIfRoutes: addrs: %x, index: %d, flags: %x,"
+ " dstnet: %x\n",
+ rtm->rtm_addrs, rtm->rtm_index, rtm->rtm_flags,
+ ((struct sockaddr_in *)sa)->sin_addr);
if (rtm->rtm_addrs != RTA_DST &&
(rtm->rtm_index == IfIndex) &&
(all || (rtm->rtm_flags & RTF_GATEWAY))) {
@@ -326,9 +303,8 @@ int all;
lp = (int *)(sa->sa_len + (char *)sa);
mask = 0;
if ((char *)lp < (char *)wp && *lp) {
-#ifdef DEBUG
- printf(" flag = %x, rest = %d", rtm->rtm_flags, *lp);
-#endif
+ LogPrintf(LogDEBUG, "DeleteIfRoutes: flag = %x, rest = %d",
+ rtm->rtm_flags, *lp);
wp = (u_char *)(lp + 1);
for (nb = *lp; nb > 4; nb--) {
mask <<= 8;
@@ -337,10 +313,9 @@ int all;
for (nb = 8 - *lp; nb > 0; nb--)
mask <<= 8;
}
-#ifdef DEBUG
- logprintf("## %s ", inet_ntoa(dstnet));
- logprintf(" %s %d\n", inet_ntoa(gateway), rtm->rtm_index);
-#endif
+ LogPrintf(LogDEBUG, "DeleteIfRoutes: Dest: %s\n", inet_ntoa(dstnet));
+ LogPrintf(LogDEBUG, "DeleteIfRoutes: Gw: %s\n", inet_ntoa(gateway));
+ LogPrintf(LogDEBUG, "DeleteIfRoutes: Index: %d\n", rtm->rtm_index);
if (dstnet.s_addr == INADDR_ANY) {
gateway.s_addr = INADDR_ANY;
mask = INADDR_ANY;
@@ -348,11 +323,9 @@ int all;
maddr.s_addr = htonl(mask);
OsSetRoute(RTM_DELETE, dstnet, gateway, maddr);
}
-#ifdef DEBUG
- else if (rtm->rtm_index == IfIndex) {
- logprintf("??? addrs: %x, flags = %x\n", rtm->rtm_addrs, rtm->rtm_flags);
- }
-#endif
+ else if(rtm->rtm_index == IfIndex)
+ LogPrintf(LogDEBUG, "DeleteIfRoutes: Ignoring (looking for index %d)\n",
+ IfIndex);
}
free(sp);
}
@@ -374,7 +347,7 @@ char *name;
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0) {
- perror("socket");
+ LogPrintf(LogERROR, "socket: %s", strerror(errno));
return(-1);
}
@@ -388,13 +361,11 @@ char *name;
oldbufsize = ifconfs.ifc_len;
bufsize += 1+sizeof(struct ifreq);
buffer = realloc((void *)buffer, bufsize); /* Make it bigger */
-#ifdef DEBUG
- logprintf ("Growing buffer to %d\n", bufsize);
-#endif
+ LogPrintf(LogDEBUG, "GetIfIndex: Growing buffer to %d\n", bufsize);
ifconfs.ifc_len = bufsize;
ifconfs.ifc_buf = buffer;
if (ioctl(s, SIOCGIFCONF, &ifconfs) < 0) {
- perror("IFCONF");
+ LogPrintf(LogERROR, "ioctl(SIOCGIFCONF): %s", strerror(errno));
free(buffer);
return(-1);
}
@@ -406,10 +377,9 @@ char *name;
for (len = ifconfs.ifc_len; len > 0; len -= sizeof(struct ifreq)) {
elen = ifrp->ifr_addr.sa_len - sizeof(struct sockaddr);
if (ifrp->ifr_addr.sa_family == AF_LINK) {
-#ifdef DEBUG
- logprintf("%d: %-*.*s, %d, %d\n", index, IFNAMSIZ, IFNAMSIZ, ifrp->ifr_name,
- ifrp->ifr_addr.sa_family, elen);
-#endif
+ LogPrintf(LogDEBUG, "GetIfIndex: %d: %-*.*s, %d, %d\n",
+ index, IFNAMSIZ, IFNAMSIZ, ifrp->ifr_name,
+ ifrp->ifr_addr.sa_family, elen);
if (strcmp(ifrp->ifr_name, name) == 0) {
IfIndex = index;
free(buffer);
OpenPOWER on IntegriCloud