xref: /freebsd/usr.sbin/ppp/log.c (revision 927145be97d8d5b69a0a1a86dc7e9d637102c7d0)
1927145beSBrian Somers #include <sys/types.h>
2927145beSBrian Somers #include <sys/socket.h>
3927145beSBrian Somers #include <sys/param.h>
4927145beSBrian Somers #include <netinet/in.h>
5927145beSBrian Somers #include <syslog.h>
653c9f6c0SAtsushi Murai #include <stdarg.h>
753c9f6c0SAtsushi Murai #include <stdio.h>
8927145beSBrian Somers #include "mbuf.h"
9927145beSBrian Somers #include "log.h"
10927145beSBrian Somers #include "loadalias.h"
11927145beSBrian Somers #include "vars.h"
12af57ed9fSAtsushi Murai 
13927145beSBrian Somers static char *LogNames[] = {
14927145beSBrian Somers     "Async",
15927145beSBrian Somers     "Carrier",
16927145beSBrian Somers     "Chat",
17927145beSBrian Somers     "Command",
18927145beSBrian Somers     "Connect",
19927145beSBrian Somers     "Debug",
20927145beSBrian Somers     "HDLC",
21927145beSBrian Somers     "LCP",
22927145beSBrian Somers     "Link",
23927145beSBrian Somers     "LQM",
24927145beSBrian Somers     "Phase",
25927145beSBrian Somers     "TCP/IP",
26927145beSBrian Somers     "Tun",
27927145beSBrian Somers     "Warning",
28927145beSBrian Somers     "Error",
29927145beSBrian Somers     "Alert"
30927145beSBrian Somers };
31af57ed9fSAtsushi Murai 
32927145beSBrian Somers #define MSK(n) (1<<((n)-1))
33af57ed9fSAtsushi Murai 
34927145beSBrian Somers static u_long LogMask = MSK(LogLINK) | MSK(LogCARRIER) | MSK(LogPHASE);
35927145beSBrian Somers static int LogTunno = -1;
36af57ed9fSAtsushi Murai 
37927145beSBrian Somers static int
38927145beSBrian Somers syslogLevel(int lev)
39927145beSBrian Somers {
40927145beSBrian Somers     switch (lev) {
41927145beSBrian Somers         case LogDEBUG:	return LOG_DEBUG;
42927145beSBrian Somers         case LogWARN:	return LOG_WARNING;
43927145beSBrian Somers         case LogERROR:	return LOG_ERR;
44927145beSBrian Somers         case LogALERT:	return LOG_ALERT;
45927145beSBrian Somers     }
46927145beSBrian Somers     return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0;
47927145beSBrian Somers }
48af57ed9fSAtsushi Murai 
49927145beSBrian Somers const char *
50927145beSBrian Somers LogName(int id)
51927145beSBrian Somers {
52927145beSBrian Somers     return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id-1];
53927145beSBrian Somers }
54af57ed9fSAtsushi Murai 
55af57ed9fSAtsushi Murai void
56927145beSBrian Somers LogKeep(int id)
57af57ed9fSAtsushi Murai {
58927145beSBrian Somers     if (id >= LogMIN && id <= LogMAXCONF)
59927145beSBrian Somers         LogMask |= MSK(id);
60af57ed9fSAtsushi Murai }
61927145beSBrian Somers 
62927145beSBrian Somers void
63927145beSBrian Somers LogDiscard(int id)
64927145beSBrian Somers {
65927145beSBrian Somers     if (id >= LogMIN && id <= LogMAXCONF)
66927145beSBrian Somers         LogMask &= ~MSK(id);
67927145beSBrian Somers }
68927145beSBrian Somers 
69927145beSBrian Somers void
70927145beSBrian Somers LogDiscardAll()
71927145beSBrian Somers {
72927145beSBrian Somers     LogMask = 0;
73af57ed9fSAtsushi Murai }
74af57ed9fSAtsushi Murai 
75af57ed9fSAtsushi Murai int
76927145beSBrian Somers LogIsKept(int id)
77af57ed9fSAtsushi Murai {
78927145beSBrian Somers     if (id < LogMIN)
79927145beSBrian Somers         return 0;
80927145beSBrian Somers     if (id <= LogMAXCONF)
81927145beSBrian Somers         return LogMask & MSK(id);
82927145beSBrian Somers     return id <= LogMAX;
83af57ed9fSAtsushi Murai }
84af57ed9fSAtsushi Murai 
85af57ed9fSAtsushi Murai void
86927145beSBrian Somers LogOpen(const char *Name)
87af57ed9fSAtsushi Murai {
88927145beSBrian Somers     openlog(Name, LOG_PID, LOG_DAEMON);
89af57ed9fSAtsushi Murai }
90af57ed9fSAtsushi Murai 
91af57ed9fSAtsushi Murai void
92927145beSBrian Somers LogSetTun(int tunno)
93af57ed9fSAtsushi Murai {
94927145beSBrian Somers     LogTunno = tunno;
95af57ed9fSAtsushi Murai }
96af57ed9fSAtsushi Murai 
97af57ed9fSAtsushi Murai void
98af57ed9fSAtsushi Murai LogClose()
99af57ed9fSAtsushi Murai {
100927145beSBrian Somers     closelog();
101927145beSBrian Somers     LogTunno = -1;
1026ed9fb2fSBrian Somers }
103af57ed9fSAtsushi Murai 
104af57ed9fSAtsushi Murai void
105927145beSBrian Somers LogPrintf(int lev, char *fmt, ...)
10653c9f6c0SAtsushi Murai {
10753c9f6c0SAtsushi Murai     va_list ap;
108927145beSBrian Somers     va_start(ap, fmt);
109927145beSBrian Somers     if (LogIsKept(lev)) {
110927145beSBrian Somers         static char nfmt[200];
11153c9f6c0SAtsushi Murai 
112927145beSBrian Somers         if (LogIsKept(LogTUN) && LogTunno != -1)
113927145beSBrian Somers             snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s",
114927145beSBrian Somers                      LogTunno, LogName(lev), fmt);
115927145beSBrian Somers         else
116927145beSBrian Somers             snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt);
117927145beSBrian Somers         if ((lev == LogERROR || lev == LogALERT || lev == LogWARN) && VarTerm)
118927145beSBrian Somers           vfprintf(VarTerm, fmt, ap);
119927145beSBrian Somers         if (lev != LogWARN || !VarTerm)
120927145beSBrian Somers           vsyslog(syslogLevel(lev), nfmt, ap);
121927145beSBrian Somers     }
12253c9f6c0SAtsushi Murai     va_end(ap);
12353c9f6c0SAtsushi Murai }
12453c9f6c0SAtsushi Murai 
12553c9f6c0SAtsushi Murai void
126927145beSBrian Somers LogDumpBp(int lev, char *hdr, struct mbuf *bp)
127af57ed9fSAtsushi Murai {
128927145beSBrian Somers     LogDumpBuff(lev, hdr, MBUF_CTOP(bp), bp->cnt);
129af57ed9fSAtsushi Murai }
130af57ed9fSAtsushi Murai 
131af57ed9fSAtsushi Murai void
132927145beSBrian Somers LogDumpBuff(int lev, char *hdr, u_char *ptr, int n)
133af57ed9fSAtsushi Murai {
134927145beSBrian Somers     if (LogIsKept(lev)) {
135927145beSBrian Somers         char buf[49];
136927145beSBrian Somers         char *b;
137927145beSBrian Somers         int f;
138af57ed9fSAtsushi Murai 
139927145beSBrian Somers         if (hdr && *hdr)
140927145beSBrian Somers             LogPrintf(lev, "%s", hdr);
141927145beSBrian Somers         while (n > 0) {
142927145beSBrian Somers             b = buf;
143927145beSBrian Somers             for (f = 0; f < 16 && n--; f++, b += 3)
144927145beSBrian Somers                sprintf(b, " %02x", (int)*ptr++);
145927145beSBrian Somers             LogPrintf(lev, buf);
146af57ed9fSAtsushi Murai         }
147af57ed9fSAtsushi Murai     }
148c6c740beSBrian Somers }
149