moptrace.c revision 1.5 1 /* $NetBSD: moptrace.c,v 1.5 1997/10/16 23:25:28 lukem Exp $ */
2
3 /*
4 * Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. All advertising materials mentioning features or use of this software
15 * must display the following acknowledgement:
16 * This product includes software developed by Mats O Jansson.
17 * 4. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #include <sys/cdefs.h>
33 #ifndef lint
34 __RCSID("$NetBSD: moptrace.c,v 1.5 1997/10/16 23:25:28 lukem Exp $");
35 #endif
36
37 /*
38 * moptrace - MOP Trace Utility
39 *
40 * Usage: moptrace -a [ -d ] [ -3 | -4 ]
41 * moptrace [ -d ] [ -3 | -4 ] interface
42 */
43
44 #include "os.h"
45 #include "common.h"
46 #include "device.h"
47 #include "dl.h"
48 #include "get.h"
49 #include "mopdef.h"
50 #include "pf.h"
51 #include "print.h"
52 #include "rc.h"
53
54 /*
55 * The list of all interfaces that are being listened to.
56 * "selects" on the descriptors in this list.
57 */
58 struct if_info *iflist;
59
60 void Usage __P((void));
61 int main __P((int, char **));
62 void mopProcess __P((struct if_info *, u_char *));
63
64 int AllFlag = 0; /* listen on "all" interfaces */
65 int DebugFlag = 0; /* print debugging messages */
66 int Not3Flag = 0; /* Ignore MOP V3 messages */
67 int Not4Flag = 0; /* Ignore MOP V4 messages */
68 int promisc = 1; /* Need promisc mode */
69
70 extern char *__progname; /* from crt0.o */
71
72 int
73 main(argc, argv)
74 int argc;
75 char **argv;
76 {
77 int op;
78 char *interface;
79
80 /* All error reporting is done through syslogs. */
81 openlog(__progname, LOG_PID | LOG_CONS, LOG_DAEMON);
82
83 opterr = 0;
84 while ((op = getopt(argc, argv, "34ad")) != -1) {
85 switch (op) {
86 case '3':
87 Not3Flag++;
88 break;
89 case '4':
90 Not4Flag++;
91 break;
92 case 'a':
93 AllFlag++;
94 break;
95 case 'd':
96 DebugFlag++;
97 break;
98 default:
99 Usage();
100 /* NOTREACHED */
101 }
102 }
103
104 interface = argv[optind++];
105
106 if ((AllFlag && interface) ||
107 (!AllFlag && interface == 0) ||
108 (Not3Flag && Not4Flag))
109 Usage();
110
111 if (AllFlag)
112 deviceInitAll();
113 else
114 deviceInitOne(interface);
115
116 Loop();
117 /* NOTREACHED */
118 return (0);
119 }
120
121 void
122 Usage()
123 {
124 (void) fprintf(stderr, "usage: %s -a [ -d ] [ -3 | -4 ]\n", __progname);
125 (void) fprintf(stderr, " %s [ -d ] [ -3 | -4 ] interface\n",
126 __progname);
127 exit(1);
128 }
129
130 /*
131 * Process incoming packages.
132 */
133 void
134 mopProcess(ii, pkt)
135 struct if_info *ii;
136 u_char *pkt;
137 {
138 int trans;
139
140 /* We don't known which transport, Guess! */
141
142 trans = mopGetTrans(pkt, 0);
143
144 /* Ok, return if we don't want this message */
145
146 if ((trans == TRANS_ETHER) && Not3Flag) return;
147 if ((trans == TRANS_8023) && Not4Flag) return;
148
149 mopPrintHeader(stdout, pkt, trans);
150 mopPrintMopHeader(stdout, pkt, trans);
151
152 mopDumpDL(stdout, pkt, trans);
153 mopDumpRC(stdout, pkt, trans);
154
155 fprintf(stdout, "\n");
156 fflush(stdout);
157 }
158