rc.c revision 1.1
1/*
2 * Copyright (c) 1993-95 Mats O Jansson.  All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 * 3. All advertising materials mentioning features or use of this software
13 *    must display the following acknowledgement:
14 *	This product includes software developed by Mats O Jansson.
15 * 4. The name of the author may not be used to endorse or promote products
16 *    derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef LINT
31static char rcsid[] = "$Id: rc.c,v 1.1 1997/03/16 22:23:37 cjs Exp $";
32#endif
33
34#include "os.h"
35#include "common/get.h"
36#include "common/print.h"
37#include "common/mopdef.h"
38
39void
40mopDumpRC(fd, pkt, trans)
41	FILE	*fd;
42	u_char 	*pkt;
43	int	 trans;
44{
45	int	i,index = 0;
46	long	tmpl;
47	u_char	tmpc,code,control;
48	u_short	len,tmps,moplen;
49
50	len = mopGetLength(pkt, trans);
51
52	switch (trans) {
53	case TRANS_8023:
54		index = 22;
55		moplen = len - 8;
56		break;
57	default:
58		index = 16;
59		moplen = len;
60	}
61	code = mopGetChar(pkt,&index);
62
63	switch (code) {
64	case MOP_K_CODE_RID:
65
66		tmpc = mopGetChar(pkt,&index);
67		(void)fprintf(fd,"Reserved     :   %02x\n",tmpc);
68
69		tmps = mopGetShort(pkt,&index);
70		(void)fprintf(fd,"Receipt Nbr  : %04x\n",tmps);
71
72		break;
73	case MOP_K_CODE_BOT:
74
75		if ((moplen == 5)) {
76			tmps = mopGetShort(pkt,&index);
77			(void)fprintf(fd,"Verification : %04x\n",tmps);
78		} else {
79
80			tmpl = mopGetLong(pkt,&index);
81			(void)fprintf(fd,"Verification : %08x\n",tmpl);
82
83			tmpc = mopGetChar(pkt,&index);	/* Processor */
84			(void)fprintf(fd,"Processor    :   %02x ",tmpc);
85			mopPrintBPTY(fd, tmpc);  (void)fprintf(fd, "\n");
86
87			control = mopGetChar(pkt,&index);	/* Control */
88			(void)fprintf(fd,"Control    :   %02x ",control);
89			if ((control & (1>>MOP_K_BOT_CNTL_SERVER))) {
90				(void)fprintf(fd,
91					      "Bootserver Requesting system ");
92			} else {
93				(void)fprintf(fd,
94					      "Bootserver System default ");
95			}
96			if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
97				(void)fprintf(fd,
98					      "Bootdevice Specified device");
99			} else {
100				(void)fprintf(fd,
101					      "Bootdevice System default");
102			}
103			(void)fprintf(fd,"\n");
104
105			if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
106				tmpc = mopGetChar(pkt,&index);/* Device ID */
107				(void)fprintf(fd,
108					      "Device ID    :   %02x '",tmpc);
109				for (i = 0; i < ((int) tmpc); i++) {
110				  (void)fprintf(fd,"%c",
111						mopGetChar(pkt,&index));
112				}
113				(void)fprintf(fd,"'\n");
114			}
115
116			tmpc = mopGetChar(pkt,&index);      /* Software ID */
117			(void)fprintf(fd,"Software ID  :   %02x ",tmpc);
118			if ((tmpc == 0)) {
119				(void)fprintf(fd,"No software id");
120			}
121			if ((tmpc == 254)) {
122				(void)fprintf(fd,"Maintenance system");
123				tmpc = 0;
124			}
125			if ((tmpc == 255)) {
126				(void)fprintf(fd,"Standard operating system");
127				tmpc = 0;
128			}
129			if ((tmpc > 0)) {
130				(void)fprintf(fd,"'");
131				for (i = 0; i < ((int) tmpc); i++) {
132					(void)fprintf(fd,"%c",
133						     mopGetChar(pkt,&index));
134				}
135				(void)fprintf(fd,"'");
136			}
137			(void)fprintf(fd,"'\n");
138
139		}
140		break;
141	case MOP_K_CODE_SID:
142
143		tmpc = mopGetChar(pkt,&index);		/* Reserved */
144		(void)fprintf(fd, "Reserved     :   %02x\n",tmpc);
145
146		tmps = mopGetShort(pkt,&index);		/* Receipt # */
147		(void)fprintf(fd, "Receipt Nbr  : %04x\n",tmpc);
148
149		mopPrintInfo(fd, pkt, &index, moplen, code, trans);
150
151		break;
152	case MOP_K_CODE_RQC:
153
154		tmps = mopGetShort(pkt,&index);
155		(void)fprintf(fd,"Receipt Nbr  : %04x\n",tmps);
156
157		break;
158	case MOP_K_CODE_CNT:
159
160		tmps = mopGetShort(pkt,&index);
161		(void)fprintf(fd,"Receipt Nbr  : %04x %d\n",tmps,tmps);
162
163		tmps = mopGetShort(pkt,&index);
164		(void)fprintf(fd,"Last Zeroed  : %04x %d\n",tmps,tmps);
165
166		tmpl = mopGetLong(pkt,&index);
167		(void)fprintf(fd,"Bytes rec    : %08x %d\n",tmpl,tmpl);
168
169		tmpl = mopGetLong(pkt,&index);
170		(void)fprintf(fd,"Bytes snd    : %08x %d\n",tmpl,tmpl);
171
172		tmpl = mopGetLong(pkt,&index);
173		(void)fprintf(fd,"Frames rec   : %08x %d\n",tmpl,tmpl);
174
175		tmpl = mopGetLong(pkt,&index);
176		(void)fprintf(fd,"Frames snd   : %08x %d\n",tmpl,tmpl);
177
178		tmpl = mopGetLong(pkt,&index);
179		(void)fprintf(fd,"Mcst Bytes re: %08x %d\n",tmpl,tmpl);
180
181		tmpl = mopGetLong(pkt,&index);
182		(void)fprintf(fd,"Mcst Frame re: %08x %d\n",tmpl,tmpl);
183
184		tmpl = mopGetLong(pkt,&index);
185		(void)fprintf(fd,"Frame snd,def: %08x %d\n",tmpl,tmpl);
186
187		tmpl = mopGetLong(pkt,&index);
188		(void)fprintf(fd,"Frame snd,col: %08x %d\n",tmpl,tmpl);
189
190		tmpl = mopGetLong(pkt,&index);
191		(void)fprintf(fd,"Frame snd,mcl: %08x %d\n",tmpl,tmpl);
192
193		tmps = mopGetShort(pkt,&index);
194		(void)fprintf(fd,"Snd failure  : %04x %d\n",tmps,tmps);
195
196		tmps = mopGetShort(pkt,&index);
197		(void)fprintf(fd,"Snd fail reas: %04x ",tmps);
198		if ((tmps &  1)) (void)fprintf(fd,"Excess col  ");
199		if ((tmps &  2)) (void)fprintf(fd,"Carrier chk fail  ");
200		if ((tmps &  4)) (void)fprintf(fd,"Short circ  ");
201		if ((tmps &  8)) (void)fprintf(fd,"Open circ  ");
202		if ((tmps & 16)) (void)fprintf(fd,"Frm to long  ");
203		if ((tmps & 32)) (void)fprintf(fd,"Rem fail to defer  ");
204		(void)fprintf(fd,"\n");
205
206		tmps = mopGetShort(pkt,&index);
207		(void)fprintf(fd,"Rec failure  : %04x %d\n",tmps,tmps);
208
209		tmps = mopGetShort(pkt,&index);
210		(void)fprintf(fd,"Rec fail reas: %04x ",tmps);
211		if ((tmps &  1)) (void)fprintf(fd,"Block chk err  ");
212		if ((tmps &  2)) (void)fprintf(fd,"Framing err  ");
213		if ((tmps &  4)) (void)fprintf(fd,"Frm to long  ");
214		(void)fprintf(fd,"\n");
215
216		tmps = mopGetShort(pkt,&index);
217		(void)fprintf(fd,"Unrec frm dst: %04x %d\n",tmps,tmps);
218
219		tmps = mopGetShort(pkt,&index);
220		(void)fprintf(fd,"Data overrun : %04x %d\n",tmps,tmps);
221
222		tmps = mopGetShort(pkt,&index);
223		(void)fprintf(fd,"Sys Buf Unava: %04x %d\n",tmps,tmps);
224
225		tmps = mopGetShort(pkt,&index);
226		(void)fprintf(fd,"Usr Buf Unava: %04x %d\n",tmps,tmps);
227
228		break;
229	case MOP_K_CODE_RVC:
230
231		tmpl = mopGetLong(pkt,&index);
232		(void)fprintf(fd,"Verification : %08x\n",tmpl);
233
234		break;
235	case MOP_K_CODE_RLC:
236
237		/* Empty message */
238
239		break;
240	case MOP_K_CODE_CCP:
241
242		tmpc = mopGetChar(pkt,&index);
243		(void)fprintf(fd,
244			      "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
245		if ((tmpc & 2))
246			(void)fprintf(fd,"Break");
247		(void)fprintf(fd,"\n");
248
249		if (moplen > 2) {
250#ifndef SHORT_PRINT
251			for (i = 0; i < (moplen - 2); i++) {
252		  		if ((i % 16) == 0) {
253					if ((i / 16) == 0) {
254						(void)fprintf(fd,
255							"Image Data   : %04x ",
256							      moplen-2);
257					} else {
258						(void)fprintf(fd,
259						       "                    ");
260				        }
261				}
262				(void)fprintf(fd,"%02x ",
263					      mopGetChar(pkt,&index));
264				if ((i % 16) == 15)
265					(void)fprintf(fd,"\n");
266			}
267			if ((i % 16) != 15)
268				(void)fprintf(fd,"\n");
269#else
270			index = index + moplen - 2;
271#endif
272		}
273
274		break;
275	case MOP_K_CODE_CRA:
276
277		tmpc = mopGetChar(pkt,&index);
278		(void)fprintf(fd,
279			      "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
280		if ((tmpc & 2))
281			(void)fprintf(fd,"Cmd Data Lost ");
282		if ((tmpc & 4))
283			(void)fprintf(fd,"Resp Data Lost ");
284		(void)fprintf(fd,"\n");
285
286		if (moplen > 2) {
287#ifndef SHORT_PRINT
288			for (i = 0; i < (moplen - 2); i++) {
289				if ((i % 16) == 0) {
290					if ((i / 16) == 0) {
291						(void)fprintf(fd,
292							"Image Data   : %04x ",
293							      moplen-2);
294					} else {
295						(void)fprintf(fd,
296						       "                    ");
297					}
298				}
299				(void)fprintf(fd,"%02x ",
300					      mopGetChar(pkt,&index));
301				if ((i % 16) == 15)
302					(void)fprintf(fd,"\n");
303			}
304			if ((i % 16) != 15)
305				(void)fprintf(fd,"\n");
306#else
307			index = index + moplen - 2;
308#endif
309		}
310
311		break;
312	default:
313		break;
314	}
315}
316
317