summaryrefslogtreecommitdiff
path: root/package/mopd/src/common/rc.c
diff options
context:
space:
mode:
Diffstat (limited to 'package/mopd/src/common/rc.c')
-rw-r--r--package/mopd/src/common/rc.c322
1 files changed, 322 insertions, 0 deletions
diff --git a/package/mopd/src/common/rc.c b/package/mopd/src/common/rc.c
new file mode 100644
index 000000000..2c19d1b89
--- /dev/null
+++ b/package/mopd/src/common/rc.c
@@ -0,0 +1,322 @@
+/* $NetBSD: rc.c,v 1.2 1997/03/25 03:07:35 thorpej Exp $ */
+
+/*
+ * Copyright (c) 1993-95 Mats O Jansson. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * 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:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 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.
+ */
+
+#include <sys/cdefs.h>
+#ifndef lint
+static char rcsid[]="$NetBSD: rc.c,v 1.2 1997/03/25 03:07:35 thorpej Exp $";
+#endif
+
+#include "os.h"
+#include "get.h"
+#include "mopdef.h"
+#include "print.h"
+#include "rc.h"
+
+void
+mopDumpRC(fd, pkt, trans)
+ FILE *fd;
+ u_char *pkt;
+ int trans;
+{
+ int i,index = 0;
+ int32_t tmpl;
+ u_char tmpc,code,control;
+ u_short len,tmps,moplen;
+
+ len = mopGetLength(pkt, trans);
+
+ switch (trans) {
+ case TRANS_8023:
+ index = 22;
+ moplen = len - 8;
+ break;
+ default:
+ index = 16;
+ moplen = len;
+ }
+ code = mopGetChar(pkt,&index);
+ /* see above, if (len < 8) then moplen ends up around 65535 */
+ if (moplen > len) moplen = len;
+
+ switch (code) {
+ case MOP_K_CODE_RID:
+
+ tmpc = mopGetChar(pkt,&index);
+ (void)fprintf(fd,"Reserved : %02x\n",tmpc);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
+
+ break;
+ case MOP_K_CODE_BOT:
+
+ if ((moplen == 5)) {
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Verification : %04x\n",tmps);
+ } else {
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Verification : %08x\n",tmpl);
+
+ tmpc = mopGetChar(pkt,&index); /* Processor */
+ (void)fprintf(fd,"Processor : %02x ",tmpc);
+ mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n");
+
+ control = mopGetChar(pkt,&index); /* Control */
+ (void)fprintf(fd,"Control : %02x ",control);
+ if ((control & (1>>MOP_K_BOT_CNTL_SERVER))) {
+ (void)fprintf(fd,
+ "Bootserver Requesting system ");
+ } else {
+ (void)fprintf(fd,
+ "Bootserver System default ");
+ }
+ if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
+ (void)fprintf(fd,
+ "Bootdevice Specified device");
+ } else {
+ (void)fprintf(fd,
+ "Bootdevice System default");
+ }
+ (void)fprintf(fd,"\n");
+
+ if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) {
+ tmpc = mopGetChar(pkt,&index);/* Device ID */
+ (void)fprintf(fd,
+ "Device ID : %02x '",tmpc);
+ for (i = 0; i < ((int) tmpc); i++) {
+ (void)fprintf(fd,"%c",
+ mopGetChar(pkt,&index));
+ }
+ (void)fprintf(fd,"'\n");
+ }
+
+ tmpc = mopGetChar(pkt,&index); /* Software ID */
+ (void)fprintf(fd,"Software ID : %02x ",tmpc);
+ if ((tmpc == 0)) {
+ (void)fprintf(fd,"No software id");
+ }
+ if ((tmpc == 254)) {
+ (void)fprintf(fd,"Maintenance system");
+ tmpc = 0;
+ }
+ if ((tmpc == 255)) {
+ (void)fprintf(fd,"Standard operating system");
+ tmpc = 0;
+ }
+ if ((tmpc > 0)) {
+ (void)fprintf(fd,"'");
+ for (i = 0; i < ((int) tmpc); i++) {
+ (void)fprintf(fd,"%c",
+ mopGetChar(pkt,&index));
+ }
+ (void)fprintf(fd,"'");
+ }
+ (void)fprintf(fd,"'\n");
+
+ }
+ break;
+ case MOP_K_CODE_SID:
+
+ tmpc = mopGetChar(pkt,&index); /* Reserved */
+ (void)fprintf(fd, "Reserved : %02x\n",tmpc);
+
+ tmps = mopGetShort(pkt,&index); /* Receipt # */
+ (void)fprintf(fd, "Receipt Nbr : %04x\n",tmpc);
+
+ mopPrintInfo(fd, pkt, &index, moplen, code, trans);
+
+ break;
+ case MOP_K_CODE_RQC:
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps);
+
+ break;
+ case MOP_K_CODE_CNT:
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Receipt Nbr : %04x %d\n",tmps,tmps);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Last Zeroed : %04x %d\n",tmps,tmps);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Bytes rec : %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Bytes snd : %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Frames rec : %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Frames snd : %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Mcst Bytes re: %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Mcst Frame re: %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Frame snd,def: %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Frame snd,col: %08x %d\n",tmpl,tmpl);
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Frame snd,mcl: %08x %d\n",tmpl,tmpl);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Snd failure : %04x %d\n",tmps,tmps);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Snd fail reas: %04x ",tmps);
+ if ((tmps & 1)) (void)fprintf(fd,"Excess col ");
+ if ((tmps & 2)) (void)fprintf(fd,"Carrier chk fail ");
+ if ((tmps & 4)) (void)fprintf(fd,"Short circ ");
+ if ((tmps & 8)) (void)fprintf(fd,"Open circ ");
+ if ((tmps & 16)) (void)fprintf(fd,"Frm to long ");
+ if ((tmps & 32)) (void)fprintf(fd,"Rem fail to defer ");
+ (void)fprintf(fd,"\n");
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Rec failure : %04x %d\n",tmps,tmps);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Rec fail reas: %04x ",tmps);
+ if ((tmps & 1)) (void)fprintf(fd,"Block chk err ");
+ if ((tmps & 2)) (void)fprintf(fd,"Framing err ");
+ if ((tmps & 4)) (void)fprintf(fd,"Frm to long ");
+ (void)fprintf(fd,"\n");
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Unrec frm dst: %04x %d\n",tmps,tmps);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Data overrun : %04x %d\n",tmps,tmps);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Sys Buf Unava: %04x %d\n",tmps,tmps);
+
+ tmps = mopGetShort(pkt,&index);
+ (void)fprintf(fd,"Usr Buf Unava: %04x %d\n",tmps,tmps);
+
+ break;
+ case MOP_K_CODE_RVC:
+
+ tmpl = mopGetLong(pkt,&index);
+ (void)fprintf(fd,"Verification : %08x\n",tmpl);
+
+ break;
+ case MOP_K_CODE_RLC:
+
+ /* Empty message */
+
+ break;
+ case MOP_K_CODE_CCP:
+
+ tmpc = mopGetChar(pkt,&index);
+ (void)fprintf(fd,
+ "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
+ if ((tmpc & 2))
+ (void)fprintf(fd,"Break");
+ (void)fprintf(fd,"\n");
+
+ if (moplen > 2) {
+#ifndef SHORT_PRINT
+ for (i = 0; i < (moplen - 2); i++) {
+ if ((i % 16) == 0) {
+ if ((i / 16) == 0) {
+ (void)fprintf(fd,
+ "Image Data : %04x ",
+ moplen-2);
+ } else {
+ (void)fprintf(fd,
+ " ");
+ }
+ }
+ (void)fprintf(fd,"%02x ",
+ mopGetChar(pkt,&index));
+ if ((i % 16) == 15)
+ (void)fprintf(fd,"\n");
+ }
+ if ((i % 16) != 15)
+ (void)fprintf(fd,"\n");
+#else
+ index = index + moplen - 2;
+#endif
+ }
+
+ break;
+ case MOP_K_CODE_CRA:
+
+ tmpc = mopGetChar(pkt,&index);
+ (void)fprintf(fd,
+ "Control Flags: %02x Message %d ",tmpc,tmpc & 1);
+ if ((tmpc & 2))
+ (void)fprintf(fd,"Cmd Data Lost ");
+ if ((tmpc & 4))
+ (void)fprintf(fd,"Resp Data Lost ");
+ (void)fprintf(fd,"\n");
+
+ if (moplen > 2) {
+#ifndef SHORT_PRINT
+ for (i = 0; i < (moplen - 2); i++) {
+ if ((i % 16) == 0) {
+ if ((i / 16) == 0) {
+ (void)fprintf(fd,
+ "Image Data : %04x ",
+ moplen-2);
+ } else {
+ (void)fprintf(fd,
+ " ");
+ }
+ }
+ (void)fprintf(fd,"%02x ",
+ mopGetChar(pkt,&index));
+ if ((i % 16) == 15)
+ (void)fprintf(fd,"\n");
+ }
+ if ((i % 16) != 15)
+ (void)fprintf(fd,"\n");
+#else
+ index = index + moplen - 2;
+#endif
+ }
+
+ break;
+ default:
+ break;
+ }
+}
+