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