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