1 /* $OpenBSD: rc.c,v 1.2 1996/09/21 19:12:06 maja 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 #ifndef LINT 33 static char rcsid[] = "$OpenBSD: rc.c,v 1.2 1996/09/21 19:12:06 maja Exp $"; 34 #endif 35 36 #include "os.h" 37 #include "common/get.h" 38 #include "common/print.h" 39 #include "common/mopdef.h" 40 41 void 42 mopDumpRC(fd, pkt, trans) 43 FILE *fd; 44 u_char *pkt; 45 int trans; 46 { 47 int i,index = 0; 48 long tmpl; 49 u_char tmpc,code,control; 50 u_short len,tmps,moplen; 51 52 len = mopGetLength(pkt, trans); 53 54 switch (trans) { 55 case TRANS_8023: 56 index = 22; 57 moplen = len - 8; 58 break; 59 default: 60 index = 16; 61 moplen = len; 62 } 63 code = mopGetChar(pkt,&index); 64 65 switch (code) { 66 case MOP_K_CODE_RID: 67 68 tmpc = mopGetChar(pkt,&index); 69 (void)fprintf(fd,"Reserved : %02x\n",tmpc); 70 71 tmps = mopGetShort(pkt,&index); 72 (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps); 73 74 break; 75 case MOP_K_CODE_BOT: 76 77 if ((moplen == 5)) { 78 tmps = mopGetShort(pkt,&index); 79 (void)fprintf(fd,"Verification : %04x\n",tmps); 80 } else { 81 82 tmpl = mopGetLong(pkt,&index); 83 (void)fprintf(fd,"Verification : %08x\n",tmpl); 84 85 tmpc = mopGetChar(pkt,&index); /* Processor */ 86 (void)fprintf(fd,"Processor : %02x ",tmpc); 87 mopPrintBPTY(fd, tmpc); (void)fprintf(fd, "\n"); 88 89 control = mopGetChar(pkt,&index); /* Control */ 90 (void)fprintf(fd,"Control : %02x ",control); 91 if ((control & (1>>MOP_K_BOT_CNTL_SERVER))) { 92 (void)fprintf(fd, 93 "Bootserver Requesting system "); 94 } else { 95 (void)fprintf(fd, 96 "Bootserver System default "); 97 } 98 if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) { 99 (void)fprintf(fd, 100 "Bootdevice Specified device"); 101 } else { 102 (void)fprintf(fd, 103 "Bootdevice System default"); 104 } 105 (void)fprintf(fd,"\n"); 106 107 if ((control & (1>>MOP_K_BOT_CNTL_DEVICE))) { 108 tmpc = mopGetChar(pkt,&index);/* Device ID */ 109 (void)fprintf(fd, 110 "Device ID : %02x '",tmpc); 111 for (i = 0; i < ((int) tmpc); i++) { 112 (void)fprintf(fd,"%c", 113 mopGetChar(pkt,&index)); 114 } 115 (void)fprintf(fd,"'\n"); 116 } 117 118 tmpc = mopGetChar(pkt,&index); /* Software ID */ 119 (void)fprintf(fd,"Software ID : %02x ",tmpc); 120 if ((tmpc == 0)) { 121 (void)fprintf(fd,"No software id"); 122 } 123 if ((tmpc == 254)) { 124 (void)fprintf(fd,"Maintenance system"); 125 tmpc = 0; 126 } 127 if ((tmpc == 255)) { 128 (void)fprintf(fd,"Standard operating system"); 129 tmpc = 0; 130 } 131 if ((tmpc > 0)) { 132 (void)fprintf(fd,"'"); 133 for (i = 0; i < ((int) tmpc); i++) { 134 (void)fprintf(fd,"%c", 135 mopGetChar(pkt,&index)); 136 } 137 (void)fprintf(fd,"'"); 138 } 139 (void)fprintf(fd,"'\n"); 140 141 } 142 break; 143 case MOP_K_CODE_SID: 144 145 tmpc = mopGetChar(pkt,&index); /* Reserved */ 146 (void)fprintf(fd, "Reserved : %02x\n",tmpc); 147 148 tmps = mopGetShort(pkt,&index); /* Receipt # */ 149 (void)fprintf(fd, "Receipt Nbr : %04x\n",tmpc); 150 151 mopPrintInfo(fd, pkt, &index, moplen, code, trans); 152 153 break; 154 case MOP_K_CODE_RQC: 155 156 tmps = mopGetShort(pkt,&index); 157 (void)fprintf(fd,"Receipt Nbr : %04x\n",tmps); 158 159 break; 160 case MOP_K_CODE_CNT: 161 162 tmps = mopGetShort(pkt,&index); 163 (void)fprintf(fd,"Receipt Nbr : %04x %d\n",tmps,tmps); 164 165 tmps = mopGetShort(pkt,&index); 166 (void)fprintf(fd,"Last Zeroed : %04x %d\n",tmps,tmps); 167 168 tmpl = mopGetLong(pkt,&index); 169 (void)fprintf(fd,"Bytes rec : %08x %d\n",tmpl,tmpl); 170 171 tmpl = mopGetLong(pkt,&index); 172 (void)fprintf(fd,"Bytes snd : %08x %d\n",tmpl,tmpl); 173 174 tmpl = mopGetLong(pkt,&index); 175 (void)fprintf(fd,"Frames rec : %08x %d\n",tmpl,tmpl); 176 177 tmpl = mopGetLong(pkt,&index); 178 (void)fprintf(fd,"Frames snd : %08x %d\n",tmpl,tmpl); 179 180 tmpl = mopGetLong(pkt,&index); 181 (void)fprintf(fd,"Mcst Bytes re: %08x %d\n",tmpl,tmpl); 182 183 tmpl = mopGetLong(pkt,&index); 184 (void)fprintf(fd,"Mcst Frame re: %08x %d\n",tmpl,tmpl); 185 186 tmpl = mopGetLong(pkt,&index); 187 (void)fprintf(fd,"Frame snd,def: %08x %d\n",tmpl,tmpl); 188 189 tmpl = mopGetLong(pkt,&index); 190 (void)fprintf(fd,"Frame snd,col: %08x %d\n",tmpl,tmpl); 191 192 tmpl = mopGetLong(pkt,&index); 193 (void)fprintf(fd,"Frame snd,mcl: %08x %d\n",tmpl,tmpl); 194 195 tmps = mopGetShort(pkt,&index); 196 (void)fprintf(fd,"Snd failure : %04x %d\n",tmps,tmps); 197 198 tmps = mopGetShort(pkt,&index); 199 (void)fprintf(fd,"Snd fail reas: %04x ",tmps); 200 if ((tmps & 1)) (void)fprintf(fd,"Excess col "); 201 if ((tmps & 2)) (void)fprintf(fd,"Carrier chk fail "); 202 if ((tmps & 4)) (void)fprintf(fd,"Short circ "); 203 if ((tmps & 8)) (void)fprintf(fd,"Open circ "); 204 if ((tmps & 16)) (void)fprintf(fd,"Frm to long "); 205 if ((tmps & 32)) (void)fprintf(fd,"Rem fail to defer "); 206 (void)fprintf(fd,"\n"); 207 208 tmps = mopGetShort(pkt,&index); 209 (void)fprintf(fd,"Rec failure : %04x %d\n",tmps,tmps); 210 211 tmps = mopGetShort(pkt,&index); 212 (void)fprintf(fd,"Rec fail reas: %04x ",tmps); 213 if ((tmps & 1)) (void)fprintf(fd,"Block chk err "); 214 if ((tmps & 2)) (void)fprintf(fd,"Framing err "); 215 if ((tmps & 4)) (void)fprintf(fd,"Frm to long "); 216 (void)fprintf(fd,"\n"); 217 218 tmps = mopGetShort(pkt,&index); 219 (void)fprintf(fd,"Unrec frm dst: %04x %d\n",tmps,tmps); 220 221 tmps = mopGetShort(pkt,&index); 222 (void)fprintf(fd,"Data overrun : %04x %d\n",tmps,tmps); 223 224 tmps = mopGetShort(pkt,&index); 225 (void)fprintf(fd,"Sys Buf Unava: %04x %d\n",tmps,tmps); 226 227 tmps = mopGetShort(pkt,&index); 228 (void)fprintf(fd,"Usr Buf Unava: %04x %d\n",tmps,tmps); 229 230 break; 231 case MOP_K_CODE_RVC: 232 233 tmpl = mopGetLong(pkt,&index); 234 (void)fprintf(fd,"Verification : %08x\n",tmpl); 235 236 break; 237 case MOP_K_CODE_RLC: 238 239 /* Empty message */ 240 241 break; 242 case MOP_K_CODE_CCP: 243 244 tmpc = mopGetChar(pkt,&index); 245 (void)fprintf(fd, 246 "Control Flags: %02x Message %d ",tmpc,tmpc & 1); 247 if ((tmpc & 2)) 248 (void)fprintf(fd,"Break"); 249 (void)fprintf(fd,"\n"); 250 251 if (moplen > 2) { 252 #ifndef SHORT_PRINT 253 for (i = 0; i < (moplen - 2); i++) { 254 if ((i % 16) == 0) { 255 if ((i / 16) == 0) { 256 (void)fprintf(fd, 257 "Image Data : %04x ", 258 moplen-2); 259 } else { 260 (void)fprintf(fd, 261 " "); 262 } 263 } 264 (void)fprintf(fd,"%02x ", 265 mopGetChar(pkt,&index)); 266 if ((i % 16) == 15) 267 (void)fprintf(fd,"\n"); 268 } 269 if ((i % 16) != 15) 270 (void)fprintf(fd,"\n"); 271 #else 272 index = index + moplen - 2; 273 #endif 274 } 275 276 break; 277 case MOP_K_CODE_CRA: 278 279 tmpc = mopGetChar(pkt,&index); 280 (void)fprintf(fd, 281 "Control Flags: %02x Message %d ",tmpc,tmpc & 1); 282 if ((tmpc & 2)) 283 (void)fprintf(fd,"Cmd Data Lost "); 284 if ((tmpc & 4)) 285 (void)fprintf(fd,"Resp Data Lost "); 286 (void)fprintf(fd,"\n"); 287 288 if (moplen > 2) { 289 #ifndef SHORT_PRINT 290 for (i = 0; i < (moplen - 2); i++) { 291 if ((i % 16) == 0) { 292 if ((i / 16) == 0) { 293 (void)fprintf(fd, 294 "Image Data : %04x ", 295 moplen-2); 296 } else { 297 (void)fprintf(fd, 298 " "); 299 } 300 } 301 (void)fprintf(fd,"%02x ", 302 mopGetChar(pkt,&index)); 303 if ((i % 16) == 15) 304 (void)fprintf(fd,"\n"); 305 } 306 if ((i % 16) != 15) 307 (void)fprintf(fd,"\n"); 308 #else 309 index = index + moplen - 2; 310 #endif 311 } 312 313 break; 314 default: 315 break; 316 } 317 } 318 319