xref: /freebsd/usr.sbin/ppp/log.c (revision cb611434af6db6982dbe30dadd191016039b00be)
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",
16cb611434SBrian Somers     "CCP",
17927145beSBrian Somers     "Chat",
18927145beSBrian Somers     "Command",
19927145beSBrian Somers     "Connect",
20927145beSBrian Somers     "Debug",
21927145beSBrian Somers     "HDLC",
22cb611434SBrian Somers     "IPCP",
23927145beSBrian Somers     "LCP",
24927145beSBrian Somers     "Link",
25927145beSBrian Somers     "LQM",
26927145beSBrian Somers     "Phase",
27927145beSBrian Somers     "TCP/IP",
28927145beSBrian Somers     "Tun",
29927145beSBrian Somers     "Warning",
30927145beSBrian Somers     "Error",
31927145beSBrian Somers     "Alert"
32927145beSBrian Somers };
33af57ed9fSAtsushi Murai 
34927145beSBrian Somers #define MSK(n) (1<<((n)-1))
35af57ed9fSAtsushi Murai 
36927145beSBrian Somers static u_long LogMask = MSK(LogLINK) | MSK(LogCARRIER) | MSK(LogPHASE);
37927145beSBrian Somers static int LogTunno = -1;
38af57ed9fSAtsushi Murai 
39927145beSBrian Somers static int
40927145beSBrian Somers syslogLevel(int lev)
41927145beSBrian Somers {
42927145beSBrian Somers     switch (lev) {
43927145beSBrian Somers         case LogDEBUG:	return LOG_DEBUG;
44927145beSBrian Somers         case LogWARN:	return LOG_WARNING;
45927145beSBrian Somers         case LogERROR:	return LOG_ERR;
46927145beSBrian Somers         case LogALERT:	return LOG_ALERT;
47927145beSBrian Somers     }
48927145beSBrian Somers     return lev >= LogMIN && lev <= LogMAX ? LOG_INFO : 0;
49927145beSBrian Somers }
50af57ed9fSAtsushi Murai 
51927145beSBrian Somers const char *
52927145beSBrian Somers LogName(int id)
53927145beSBrian Somers {
54927145beSBrian Somers     return id < LogMIN || id > LogMAX ? "Unknown" : LogNames[id-1];
55927145beSBrian Somers }
56af57ed9fSAtsushi Murai 
57af57ed9fSAtsushi Murai void
58927145beSBrian Somers LogKeep(int id)
59af57ed9fSAtsushi Murai {
60927145beSBrian Somers     if (id >= LogMIN && id <= LogMAXCONF)
61927145beSBrian Somers         LogMask |= MSK(id);
62af57ed9fSAtsushi Murai }
63927145beSBrian Somers 
64927145beSBrian Somers void
65927145beSBrian Somers LogDiscard(int id)
66927145beSBrian Somers {
67927145beSBrian Somers     if (id >= LogMIN && id <= LogMAXCONF)
68927145beSBrian Somers         LogMask &= ~MSK(id);
69927145beSBrian Somers }
70927145beSBrian Somers 
71927145beSBrian Somers void
72927145beSBrian Somers LogDiscardAll()
73927145beSBrian Somers {
74927145beSBrian Somers     LogMask = 0;
75af57ed9fSAtsushi Murai }
76af57ed9fSAtsushi Murai 
77af57ed9fSAtsushi Murai int
78927145beSBrian Somers LogIsKept(int id)
79af57ed9fSAtsushi Murai {
80927145beSBrian Somers     if (id < LogMIN)
81927145beSBrian Somers         return 0;
82927145beSBrian Somers     if (id <= LogMAXCONF)
83927145beSBrian Somers         return LogMask & MSK(id);
84927145beSBrian Somers     return id <= LogMAX;
85af57ed9fSAtsushi Murai }
86af57ed9fSAtsushi Murai 
87af57ed9fSAtsushi Murai void
88927145beSBrian Somers LogOpen(const char *Name)
89af57ed9fSAtsushi Murai {
90927145beSBrian Somers     openlog(Name, LOG_PID, LOG_DAEMON);
91af57ed9fSAtsushi Murai }
92af57ed9fSAtsushi Murai 
93af57ed9fSAtsushi Murai void
94927145beSBrian Somers LogSetTun(int tunno)
95af57ed9fSAtsushi Murai {
96927145beSBrian Somers     LogTunno = tunno;
97af57ed9fSAtsushi Murai }
98af57ed9fSAtsushi Murai 
99af57ed9fSAtsushi Murai void
100af57ed9fSAtsushi Murai LogClose()
101af57ed9fSAtsushi Murai {
102927145beSBrian Somers     closelog();
103927145beSBrian Somers     LogTunno = -1;
1046ed9fb2fSBrian Somers }
105af57ed9fSAtsushi Murai 
106af57ed9fSAtsushi Murai void
107927145beSBrian Somers LogPrintf(int lev, char *fmt, ...)
10853c9f6c0SAtsushi Murai {
10953c9f6c0SAtsushi Murai     va_list ap;
110927145beSBrian Somers     va_start(ap, fmt);
111927145beSBrian Somers     if (LogIsKept(lev)) {
112927145beSBrian Somers         static char nfmt[200];
11353c9f6c0SAtsushi Murai 
114927145beSBrian Somers         if (LogIsKept(LogTUN) && LogTunno != -1)
115927145beSBrian Somers             snprintf(nfmt, sizeof nfmt, "tun%d: %s: %s",
116927145beSBrian Somers                      LogTunno, LogName(lev), fmt);
117927145beSBrian Somers         else
118927145beSBrian Somers             snprintf(nfmt, sizeof nfmt, "%s: %s", LogName(lev), fmt);
119927145beSBrian Somers         if ((lev == LogERROR || lev == LogALERT || lev == LogWARN) && VarTerm)
120927145beSBrian Somers           vfprintf(VarTerm, fmt, ap);
121927145beSBrian Somers         if (lev != LogWARN || !VarTerm)
122927145beSBrian Somers           vsyslog(syslogLevel(lev), nfmt, ap);
123927145beSBrian Somers     }
12453c9f6c0SAtsushi Murai     va_end(ap);
12553c9f6c0SAtsushi Murai }
12653c9f6c0SAtsushi Murai 
12753c9f6c0SAtsushi Murai void
128927145beSBrian Somers LogDumpBp(int lev, char *hdr, struct mbuf *bp)
129af57ed9fSAtsushi Murai {
130927145beSBrian Somers     LogDumpBuff(lev, hdr, MBUF_CTOP(bp), bp->cnt);
131af57ed9fSAtsushi Murai }
132af57ed9fSAtsushi Murai 
133af57ed9fSAtsushi Murai void
134927145beSBrian Somers LogDumpBuff(int lev, char *hdr, u_char *ptr, int n)
135af57ed9fSAtsushi Murai {
136927145beSBrian Somers     if (LogIsKept(lev)) {
137927145beSBrian Somers         char buf[49];
138927145beSBrian Somers         char *b;
139927145beSBrian Somers         int f;
140af57ed9fSAtsushi Murai 
141927145beSBrian Somers         if (hdr && *hdr)
142927145beSBrian Somers             LogPrintf(lev, "%s", hdr);
143927145beSBrian Somers         while (n > 0) {
144927145beSBrian Somers             b = buf;
145927145beSBrian Somers             for (f = 0; f < 16 && n--; f++, b += 3)
146927145beSBrian Somers                sprintf(b, " %02x", (int)*ptr++);
147927145beSBrian Somers             LogPrintf(lev, buf);
148af57ed9fSAtsushi Murai         }
149af57ed9fSAtsushi Murai     }
150c6c740beSBrian Somers }
151