diff options
author | brian <brian@cvs.openbsd.org> | 1997-11-23 20:27:41 +0000 |
---|---|---|
committer | brian <brian@cvs.openbsd.org> | 1997-11-23 20:27:41 +0000 |
commit | 2cb79b0580b6b5629530c4d142a73a9a654f282f (patch) | |
tree | 8b062ff5e99e22ec2c95145149e22b58b7fc0e22 /usr.sbin/ppp/log.c | |
parent | 518c0071f44dfb9716d70e0d8781585db7a3bd7d (diff) |
Import version 1.5 of ppp.
<sales>
This is a user-level ppp implementation that uses the
tun driver. It was originally created by a Japanese
ISP. It's now piled with features. Check the man pages
for details.
</sales>
The sources are identical to the ones in FreeBSD, except
for the Makefile.
IP aliasing (NAT) is disabled, and can be enabled by simply
doing a ``make install'' of libalias, then rebuilding
ppp. I'll create libalias as a port soon.
Diffstat (limited to 'usr.sbin/ppp/log.c')
-rw-r--r-- | usr.sbin/ppp/log.c | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/usr.sbin/ppp/log.c b/usr.sbin/ppp/log.c new file mode 100644 index 00000000000..b6a52c61d5b --- /dev/null +++ b/usr.sbin/ppp/log.c @@ -0,0 +1,222 @@ +/* + * $Id: log.c,v 1.1 1997/11/23 20:27:34 brian Exp $ + */ + +#include <sys/param.h> +#include <netinet/in.h> +#include <sys/socket.h> + +#include <stdarg.h> +#include <stdio.h> +#include <syslog.h> + +#include "command.h" +#include "mbuf.h" +#include "log.h" +#include "loadalias.h" +#include "defs.h" +#include "vars.h" + +static const char *LogNames[] = { + "Async", + "Carrier", + "CCP", + "Chat", + "Command", + "Connect", + "Debug", + "HDLC", + "ID0", + "IPCP", + "LCP", + "Link", + "LQM", + "Phase", + "TCP/IP", + "Tun", + "Warning", + "Error", + "Alert" +}; + +#define MSK(n) (1<<((n)-1)) + +static u_long LogMask = MSK(LogLINK) | MSK(LogCARRIER) | MSK(LogPHASE); +static u_long LogMaskLocal = MSK(LogERROR) | MSK(LogALERT) | MSK(LogWARN); +static int LogTunno = -1; + +static int +syslogLevel(int lev) +{ + switch (lev) { + case LogDEBUG:return LOG_DEBUG; + case LogWARN: + return LOG_WARNING; + case LogERROR: + return LOG_ERR; + case LogALERT: + return LOG_ALERT; + } + return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0; +} + +const char * +LogName(int id) +{ + return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id - 1]; +} + +void +LogKeep(int id) +{ + if (id >= LogMIN && id <= LogMAXCONF) + LogMask |= MSK(id); +} + +void +LogKeepLocal(int id) +{ + if (id >= LogMIN && id <= LogMAXCONF) + LogMaskLocal |= MSK(id); +} + +void +LogDiscard(int id) +{ + if (id >= LogMIN && id <= LogMAXCONF) + LogMask &= ~MSK(id); +} + +void +LogDiscardLocal(int id) +{ + if (id >= LogMIN && id <= LogMAXCONF) + LogMaskLocal &= ~MSK(id); +} + +void +LogDiscardAll() +{ + LogMask = 0; +} + +void +LogDiscardAllLocal() +{ + LogMaskLocal = 0; +} + +int +LogIsKept(int id) +{ + if (id < LogMIN || id > LogMAX) + return 0; + if (id > LogMAXCONF) + return LOG_KEPT_LOCAL | LOG_KEPT_SYSLOG; + + return ((LogMaskLocal & MSK(id)) ? LOG_KEPT_LOCAL : 0) | + ((LogMask & MSK(id)) ? LOG_KEPT_SYSLOG : 0); +} + +void +LogOpen(const char *Name) +{ + openlog(Name, LOG_PID, LOG_DAEMON); +} + +void +LogSetTun(int tunno) +{ + LogTunno = tunno; +} + +void +LogClose() +{ + closelog(); + LogTunno = -1; +} + +void +LogPrintf(int lev, const char *fmt,...) +{ + va_list ap; + + va_start(ap, fmt); + if (LogIsKept(lev)) { + static char nfmt[200]; + + if ((LogIsKept(lev) & LOG_KEPT_LOCAL) && VarTerm) { + if ((LogIsKept(LogTUN) & LOG_KEPT_LOCAL) && LogTunno != -1) + snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s", + LogTunno, LogName(lev), fmt); + else + snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt); + vfprintf(VarTerm, nfmt, ap); + fflush(VarTerm); + } + + if ((LogIsKept(lev) & LOG_KEPT_SYSLOG) && (lev != LogWARN || !VarTerm)) { + if ((LogIsKept(LogTUN) & LOG_KEPT_SYSLOG) && LogTunno != -1) + snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s", + LogTunno, LogName(lev), fmt); + else + snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt); + vsyslog(syslogLevel(lev), nfmt, ap); + } + } + va_end(ap); +} + +void +LogDumpBp(int lev, const char *hdr, const struct mbuf * bp) +{ + if (LogIsKept(lev)) { + char buf[50]; + char *b; + u_char *ptr; + int f; + + if (hdr && *hdr) + LogPrintf(lev, "%s\n", hdr); + + b = buf; + do { + f = bp->cnt; + ptr = MBUF_CTOP(bp); + while (f--) { + sprintf(b, " %02x", (int) *ptr++); + b += 3; + if (b == buf + sizeof buf - 2) { + strcpy(b, "\n"); + LogPrintf(lev, buf); + b = buf; + } + } + } while ((bp = bp->next) != NULL); + + if (b > buf) { + strcpy(b, "\n"); + LogPrintf(lev, buf); + } + } +} + +void +LogDumpBuff(int lev, const char *hdr, const u_char * ptr, int n) +{ + if (LogIsKept(lev)) { + char buf[50]; + char *b; + + if (hdr && *hdr) + LogPrintf(lev, "%s\n", hdr); + while (n > 0) { + b = buf; + for (b = buf; b != buf + sizeof(buf) - 2 && n--; b += 3) + sprintf(b, " %02x", (int) *ptr++); + strcpy(b, "\n"); + LogPrintf(lev, buf); + } + } +} |