summaryrefslogtreecommitdiffstats
path: root/sbin/routed/trace.c
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>1999-05-02 13:14:16 +0000
committermarkm <markm@FreeBSD.org>1999-05-02 13:14:16 +0000
commitc74fc4e83b599157005f6adfcfebde46851bd0d4 (patch)
treee8f3c95ddb4dcfbbc332816196635e042e72873b /sbin/routed/trace.c
parenta60c9cfa3a8359247f7ca33b3ebc8574c5c7194a (diff)
downloadFreeBSD-src-c74fc4e83b599157005f6adfcfebde46851bd0d4.zip
FreeBSD-src-c74fc4e83b599157005f6adfcfebde46851bd0d4.tar.gz
Merge-o-matic and add a bunch of $Id's
Diffstat (limited to 'sbin/routed/trace.c')
-rw-r--r--sbin/routed/trace.c288
1 files changed, 144 insertions, 144 deletions
diff --git a/sbin/routed/trace.c b/sbin/routed/trace.c
index e632cc2..48d383a 100644
--- a/sbin/routed/trace.c
+++ b/sbin/routed/trace.c
@@ -11,7 +11,7 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
+ * must display the following acknowledgment:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
@@ -29,22 +29,25 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
+ *
+ * $Id$
*/
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)trace.c 8.1 (Berkeley) 6/5/93";
-#endif
-static const char rcsid[] =
- "$Id$";
-#endif /* not lint */
-
#define RIPCMDS
#include "defs.h"
#include "pathnames.h"
#include <sys/stat.h>
+#include <sys/signal.h>
#include <fcntl.h>
+#if !defined(sgi) && !defined(__NetBSD__)
+static char sccsid[] __attribute__((unused)) = "@(#)trace.c 8.1 (Berkeley) 6/5/93";
+#elif defined(__NetBSD__)
+__RCSID("$NetBSD$");
+#endif
+#ident "$Revision: 2.17 $"
+
+
#ifdef sgi
/* use *stat64 for files on large filesystems */
#define stat stat64
@@ -54,12 +57,13 @@ static const char rcsid[] =
int tracelevel, new_tracelevel;
FILE *ftrace = stdout; /* output trace file */
-static char *sigtrace_pat = "%s\n";
+static const char *sigtrace_pat = "%s";
static char savetracename[MAXPATHLEN+1];
char inittracename[MAXPATHLEN+1];
int file_trace; /* 1=tracing to file, not stdout */
static void trace_dump(void);
+static void tmsg(const char *, ...) PATTRIB(1,2);
/* convert string to printable characters
@@ -136,7 +140,7 @@ naddr_ntoa(naddr a)
}
-char *
+const char *
saddr_ntoa(struct sockaddr *sa)
{
return (sa == 0) ? "?" : naddr_ntoa(S_ADDR(sa));
@@ -151,7 +155,7 @@ ts(time_t secs) {
#ifdef sgi
(void)cftime(s, "%T", &secs);
#else
- bcopy(ctime(&secs)+11, s, 8);
+ memcpy(s, ctime(&secs)+11, 8);
s[8] = '\0';
#endif
return s;
@@ -176,7 +180,7 @@ lastlog(void)
static void
-tmsg(char *p, ...)
+tmsg(const char *p, ...)
{
va_list args;
@@ -184,13 +188,14 @@ tmsg(char *p, ...)
lastlog();
va_start(args, p);
vfprintf(ftrace, p, args);
+ (void)fputc('\n',ftrace);
fflush(ftrace);
}
}
-static void
-trace_close(void)
+void
+trace_close(int zap_stdio)
{
int fd;
@@ -198,14 +203,17 @@ trace_close(void)
fflush(stdout);
fflush(stderr);
- if (ftrace != 0 && file_trace) {
+ if (ftrace != 0 && zap_stdio) {
if (ftrace != stdout)
fclose(ftrace);
ftrace = 0;
fd = open(_PATH_DEVNULL, O_RDWR);
- (void)dup2(fd, STDIN_FILENO);
- (void)dup2(fd, STDOUT_FILENO);
- (void)dup2(fd, STDERR_FILENO);
+ if (isatty(STDIN_FILENO))
+ (void)dup2(fd, STDIN_FILENO);
+ if (isatty(STDOUT_FILENO))
+ (void)dup2(fd, STDOUT_FILENO);
+ if (isatty(STDERR_FILENO))
+ (void)dup2(fd, STDERR_FILENO);
(void)close(fd);
}
lastlog_time.tv_sec = 0;
@@ -218,13 +226,13 @@ trace_flush(void)
if (ftrace != 0) {
fflush(ftrace);
if (ferror(ftrace))
- trace_off("tracing off: ", strerror(ferror(ftrace)));
+ trace_off("tracing off: %s", strerror(ferror(ftrace)));
}
}
void
-trace_off(char *p, ...)
+trace_off(const char *p, ...)
{
va_list args;
@@ -233,8 +241,9 @@ trace_off(char *p, ...)
lastlog();
va_start(args, p);
vfprintf(ftrace, p, args);
+ (void)fputc('\n',ftrace);
}
- trace_close();
+ trace_close(file_trace);
new_tracelevel = tracelevel = 0;
}
@@ -243,16 +252,16 @@ trace_off(char *p, ...)
/* log a change in tracing
*/
void
-tracelevel_msg(char *pat,
+tracelevel_msg(const char *pat,
int dump) /* -1=no dump, 0=default, 1=force */
{
- static char *off_msgs[MAX_TRACELEVEL] = {
+ static const char *off_msgs[MAX_TRACELEVEL] = {
"Tracing actions stopped",
"Tracing packets stopped",
"Tracing packet contents stopped",
"Tracing kernel changes stopped",
};
- static char *on_msgs[MAX_TRACELEVEL] = {
+ static const char *on_msgs[MAX_TRACELEVEL] = {
"Tracing actions started",
"Tracing packets started",
"Tracing packet contents started",
@@ -287,13 +296,13 @@ tracelevel_msg(char *pat,
void
-set_tracefile(char *filename,
- char *pat,
+set_tracefile(const char *filename,
+ const char *pat,
int dump) /* -1=no dump, 0=default, 1=force */
{
struct stat stbuf;
FILE *n_ftrace;
- char *fn;
+ const char *fn;
/* Allow a null filename to increase the level if the trace file
@@ -335,8 +344,7 @@ set_tracefile(char *filename,
/* If the new tracefile exists, it must be a regular file.
*/
- if (stat(filename, &stbuf) >= 0
- && (stbuf.st_mode & S_IFMT) != S_IFREG) {
+ if (stat(filename, &stbuf) >= 0 && !S_ISREG(stbuf.st_mode)) {
msglog("wrong type (%#x) of trace file \"%s\"",
stbuf.st_mode, filename);
return;
@@ -355,10 +363,9 @@ set_tracefile(char *filename,
return;
}
- tmsg("switch to trace file %s\n", fn);
+ tmsg("switch to trace file %s", fn);
- file_trace = 1;
- trace_close();
+ trace_close(file_trace = 1);
if (fn != savetracename)
strncpy(savetracename, fn, sizeof(savetracename)-1);
@@ -378,19 +385,19 @@ set_tracefile(char *filename,
/* ARGSUSED */
void
-sigtrace_on(int s)
+sigtrace_on(int s UNUSED)
{
new_tracelevel++;
- sigtrace_pat = "SIGUSR1: %s\n";
+ sigtrace_pat = "SIGUSR1: %s";
}
/* ARGSUSED */
void
-sigtrace_off(int s)
+sigtrace_off(int s UNUSED)
{
new_tracelevel--;
- sigtrace_pat = "SIGUSR2: %s\n";
+ sigtrace_pat = "SIGUSR2: %s";
}
@@ -461,9 +468,9 @@ addrname(naddr addr, /* in network byte order */
/* display a bit-field
*/
struct bits {
- int bits_mask;
- int bits_clear;
- char *bits_name;
+ u_int bits_mask;
+ u_int bits_clear;
+ const char *bits_name;
};
static struct bits if_bits[] = {
@@ -530,11 +537,11 @@ static struct bits rs_bits[] = {
static void
-trace_bits(struct bits *tbl,
+trace_bits(const struct bits *tbl,
u_int field,
int force)
{
- int b;
+ u_int b;
char c;
if (force) {
@@ -570,17 +577,17 @@ trace_bits(struct bits *tbl,
}
-static char *
-trace_pair(naddr dst,
- naddr mask,
- char *gate)
+char *
+rtname(naddr dst,
+ naddr mask,
+ naddr gate)
{
static char buf[3*4+3+1+2+3 /* "xxx.xxx.xxx.xxx/xx-->" */
+3*4+3+1]; /* "xxx.xxx.xxx.xxx" */
int i;
i = sprintf(buf, "%-16s-->", addrname(dst, mask, 0));
- (void)sprintf(&buf[i], "%-*s", 15+20-MAX(20,i), gate);
+ (void)sprintf(&buf[i], "%-*s", 15+20-MAX(20,i), naddr_ntoa(gate));
return buf;
}
@@ -593,6 +600,9 @@ print_rts(struct rt_spare *rts,
int force_tag, /* -1=suppress, 0=default, 1=display */
int force_time) /* 0=suppress, 1=display */
{
+ int i;
+
+
if (force_metric >= 0)
(void)fprintf(ftrace, "metric=%-2d ", rts->rts_metric);
if (force_ifp >= 0)
@@ -606,14 +616,19 @@ print_rts(struct rt_spare *rts,
(void)fprintf(ftrace, "%s ", ts(rts->rts_time));
if (force_tag > 0
|| (force_tag == 0 && rts->rts_tag != 0))
- (void)fprintf(ftrace, "tag=%#x ",
- ntohs(rts->rts_tag));
+ (void)fprintf(ftrace, "tag=%#x ", ntohs(rts->rts_tag));
+ if (rts->rts_de_ag != 0) {
+ for (i = 1; (u_int)(1 << i) <= rts->rts_de_ag; i++)
+ continue;
+ (void)fprintf(ftrace, "de_ag=%d ", i);
+ }
+
}
void
-trace_if(char *act,
- struct interface *ifp)
+trace_if(const char *act,
+ struct interface *ifp)
{
if (!TRACEACTIONS || ftrace == 0)
return;
@@ -640,85 +655,82 @@ trace_if(char *act,
void
trace_upslot(struct rt_entry *rt,
struct rt_spare *rts,
- naddr gate,
- naddr router,
- struct interface *ifp,
- int metric,
- u_short tag,
- time_t new_time)
+ struct rt_spare *new)
{
- struct rt_spare new;
-
if (!TRACEACTIONS || ftrace == 0)
return;
- if (rts->rts_gate == gate
- && rts->rts_router == router
- && rts->rts_metric == metric
- && rts->rts_tag == tag)
+ if (rts->rts_gate == new->rts_gate
+ && rts->rts_router == new->rts_router
+ && rts->rts_metric == new->rts_metric
+ && rts->rts_tag == new->rts_tag
+ && rts->rts_de_ag == new->rts_de_ag)
return;
- new.rts_ifp = ifp;
- new.rts_gate = gate;
- new.rts_router = router;
- new.rts_metric = metric;
- new.rts_time = new_time;
- new.rts_tag = tag;
lastlog();
- if (rts->rts_gate != RIP_DEFAULT) {
+ if (new->rts_gate == 0) {
+ (void)fprintf(ftrace, "Del #%d %-35s ",
+ (int)(rts - rt->rt_spares),
+ rtname(rt->rt_dst, rt->rt_mask, rts->rts_gate));
+ print_rts(rts, 0,0,0,0,
+ (rts != rt->rt_spares
+ || AGE_RT(rt->rt_state,new->rts_ifp)));
+
+ } else if (rts->rts_gate != RIP_DEFAULT) {
(void)fprintf(ftrace, "Chg #%d %-35s ",
- rts - rt->rt_spares,
- trace_pair(rt->rt_dst, rt->rt_mask,
- naddr_ntoa(rts->rts_gate)));
+ (int)(rts - rt->rt_spares),
+ rtname(rt->rt_dst, rt->rt_mask, rts->rts_gate));
print_rts(rts, 0,0,
- rts->rts_gate != gate,
- rts->rts_tag != tag,
+ rts->rts_gate != new->rts_gate,
+ rts->rts_tag != new->rts_tag,
rts != rt->rt_spares || AGE_RT(rt->rt_state,
rt->rt_ifp));
(void)fprintf(ftrace, "\n %19s%-16s ", "",
- gate != rts->rts_gate ? naddr_ntoa(gate) : "");
- print_rts(&new,
- -(metric == rts->rts_metric),
- -(ifp == rts->rts_ifp),
+ (new->rts_gate != rts->rts_gate
+ ? naddr_ntoa(new->rts_gate) : ""));
+ print_rts(new,
+ -(new->rts_metric == rts->rts_metric),
+ -(new->rts_ifp == rts->rts_ifp),
0,
- rts->rts_tag != tag,
- new_time != rts->rts_time && (rts != rt->rt_spares
- || AGE_RT(rt->rt_state,
- ifp)));
+ rts->rts_tag != new->rts_tag,
+ (new->rts_time != rts->rts_time
+ && (rts != rt->rt_spares
+ || AGE_RT(rt->rt_state, new->rts_ifp))));
} else {
(void)fprintf(ftrace, "Add #%d %-35s ",
- rts - rt->rt_spares,
- trace_pair(rt->rt_dst, rt->rt_mask,
- naddr_ntoa(gate)));
- print_rts(&new, 0,0,0,0,
- rts != rt->rt_spares || AGE_RT(rt->rt_state,ifp));
+ (int)(rts - rt->rt_spares),
+ rtname(rt->rt_dst, rt->rt_mask, new->rts_gate));
+ print_rts(new, 0,0,0,0,
+ (rts != rt->rt_spares
+ || AGE_RT(rt->rt_state,new->rts_ifp)));
}
(void)fputc('\n',ftrace);
}
-/* talk about a change made to the kernel table
+/* miscellaneous message checked by the caller
*/
void
-trace_kernel(char *p, ...)
+trace_misc(const char *p, ...)
{
va_list args;
- if (!TRACEKERNEL || ftrace == 0)
+ if (ftrace == 0)
return;
lastlog();
va_start(args, p);
vfprintf(ftrace, p, args);
+ (void)fputc('\n',ftrace);
}
/* display a message if tracing actions
*/
void
-trace_act(char *p, ...)
+trace_act(const char *p, ...)
{
va_list args;
@@ -735,7 +747,7 @@ trace_act(char *p, ...)
/* display a message if tracing packets
*/
void
-trace_pkt(char *p, ...)
+trace_pkt(const char *p, ...)
{
va_list args;
@@ -752,50 +764,39 @@ trace_pkt(char *p, ...)
void
trace_change(struct rt_entry *rt,
u_int state,
- naddr gate, /* forward packets here */
- naddr router, /* on the authority of this router */
- int metric,
- u_short tag,
- struct interface *ifp,
- time_t new_time,
- char *label)
+ struct rt_spare *new,
+ const char *label)
{
- struct rt_spare new;
-
if (ftrace == 0)
return;
- if (rt->rt_metric == metric
- && rt->rt_gate == gate
- && rt->rt_router == router
+ if (rt->rt_metric == new->rts_metric
+ && rt->rt_gate == new->rts_gate
+ && rt->rt_router == new->rts_router
&& rt->rt_state == state
- && rt->rt_tag == tag)
+ && rt->rt_tag == new->rts_tag
+ && rt->rt_de_ag == new->rts_de_ag)
return;
- new.rts_ifp = ifp;
- new.rts_gate = gate;
- new.rts_router = router;
- new.rts_metric = metric;
- new.rts_time = new_time;
- new.rts_tag = tag;
lastlog();
(void)fprintf(ftrace, "%s %-35s ",
label,
- trace_pair(rt->rt_dst, rt->rt_mask,
- naddr_ntoa(rt->rt_gate)));
+ rtname(rt->rt_dst, rt->rt_mask, rt->rt_gate));
print_rts(rt->rt_spares,
0,0,0,0, AGE_RT(rt->rt_state, rt->rt_ifp));
trace_bits(rs_bits, rt->rt_state, rt->rt_state != state);
(void)fprintf(ftrace, "\n%*s %19s%-16s ",
- strlen(label), "", "",
- rt->rt_gate != gate ? naddr_ntoa(gate) : "");
- print_rts(&new,
- -(metric == rt->rt_metric),
- -(ifp == rt->rt_ifp),
+ (int)strlen(label), "", "",
+ (rt->rt_gate != new->rts_gate
+ ? naddr_ntoa(new->rts_gate) : ""));
+ print_rts(new,
+ -(new->rts_metric == rt->rt_metric),
+ -(new->rts_ifp == rt->rt_ifp),
0,
- rt->rt_tag != tag,
- rt->rt_time != new_time && AGE_RT(rt->rt_state,ifp));
+ rt->rt_tag != new->rts_tag,
+ (rt->rt_time != new->rts_time
+ && AGE_RT(rt->rt_state,new->rts_ifp)));
if (rt->rt_state != state)
trace_bits(rs_bits, state, 1);
(void)fputc('\n',ftrace);
@@ -803,7 +804,7 @@ trace_change(struct rt_entry *rt,
void
-trace_add_del(char * action, struct rt_entry *rt)
+trace_add_del(const char * action, struct rt_entry *rt)
{
if (ftrace == 0)
return;
@@ -811,8 +812,7 @@ trace_add_del(char * action, struct rt_entry *rt)
lastlog();
(void)fprintf(ftrace, "%s %-35s ",
action,
- trace_pair(rt->rt_dst, rt->rt_mask,
- naddr_ntoa(rt->rt_gate)));
+ rtname(rt->rt_dst, rt->rt_mask, rt->rt_gate));
print_rts(rt->rt_spares, 0,0,0,0,AGE_RT(rt->rt_state,rt->rt_ifp));
trace_bits(rs_bits, rt->rt_state, 0);
(void)fputc('\n',ftrace);
@@ -822,21 +822,20 @@ trace_add_del(char * action, struct rt_entry *rt)
/* ARGSUSED */
static int
walk_trace(struct radix_node *rn,
- struct walkarg *w)
+ struct walkarg *w UNUSED)
{
#define RT ((struct rt_entry *)rn)
struct rt_spare *rts;
- int i, age = AGE_RT(RT->rt_state, RT->rt_ifp);
+ int i;
- (void)fprintf(ftrace, " %-35s ", trace_pair(RT->rt_dst, RT->rt_mask,
- naddr_ntoa(RT->rt_gate)));
- print_rts(&RT->rt_spares[0], 0,0,0,0,age);
+ (void)fprintf(ftrace, " %-35s ",
+ rtname(RT->rt_dst, RT->rt_mask, RT->rt_gate));
+ print_rts(&RT->rt_spares[0], 0,0,0,0, AGE_RT(RT->rt_state, RT->rt_ifp));
trace_bits(rs_bits, RT->rt_state, 0);
if (RT->rt_poison_time >= now_garbage
&& RT->rt_poison_metric < RT->rt_metric)
(void)fprintf(ftrace, "pm=%d@%s",
- RT->rt_poison_metric,
- ts(RT->rt_poison_time));
+ RT->rt_poison_metric, ts(RT->rt_poison_time));
rts = &RT->rt_spares[1];
for (i = 1; i < NUM_SPARES; i++, rts++) {
@@ -869,14 +868,14 @@ trace_dump(void)
void
-trace_rip(char *dir1, char *dir2,
+trace_rip(const char *dir1, const char *dir2,
struct sockaddr_in *who,
struct interface *ifp,
struct rip *msg,
int size) /* total size of message */
{
struct netinfo *n, *lim;
-# define NA (msg->rip_auths)
+# define NA ((struct netauth*)n)
int i, seen_route;
if (!TRACEPACKETS || ftrace == 0)
@@ -946,23 +945,24 @@ trace_rip(char *dir1, char *dir2,
if (NA->a_type == RIP_AUTH_MD5
&& n == msg->rip_nets) {
(void)fprintf(ftrace,
- "\tMD5 Authentication"
- " len=%d KeyID=%u"
- " seqno=%u"
+ "\tMD5 Auth"
+ " pkt_len=%d KeyID=%u"
+ " auth_len=%d"
+ " seqno=%#x"
" rsvd=%#x,%#x\n",
- NA->au.a_md5.md5_pkt_len,
- NA->au.a_md5.md5_keyid,
- NA->au.a_md5.md5_seqno,
- NA->au.a_md5.rsvd[0],
- NA->au.a_md5.rsvd[1]);
+ ntohs(NA->au.a_md5.md5_pkt_len),
+ NA->au.a_md5.md5_keyid,
+ NA->au.a_md5.md5_auth_len,
+ (int)ntohl(NA->au.a_md5.md5_seqno),
+ (int)ntohs(NA->au.a_md5.rsvd[0]),
+ (int)ntohs(NA->au.a_md5.rsvd[1]));
continue;
}
(void)fprintf(ftrace,
- "\tAuthentication"
- " type %d: ",
+ "\tAuthentication type %d: ",
ntohs(NA->a_type));
for (i = 0;
- i < sizeof(NA->au.au_pw);
+ i < (int)sizeof(NA->au.au_pw);
i++)
(void)fprintf(ftrace, "%02x ",
NA->au.au_pw[i]);
OpenPOWER on IntegriCloud