Annotation of embedaddon/iftop/dlcommon.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Common (shared) DLPI test routines.
! 3: * Mostly pretty boring boilerplate sorta stuff.
! 4: * These can be split into individual library routines later
! 5: * but it's just convenient to keep them in a single file
! 6: * while they're being developed.
! 7: *
! 8: * Not supported:
! 9: * Connection Oriented stuff
! 10: * QOS stuff
! 11: */
! 12:
! 13: #include "config.h"
! 14:
! 15: #ifdef HAVE_DLPI
! 16:
! 17: /*
! 18: typedef unsigned long ulong;
! 19: */
! 20:
! 21:
! 22: #include <sys/types.h>
! 23: #include <sys/stream.h>
! 24: #include <sys/stropts.h>
! 25: #include <sys/dlpi.h>
! 26: #include <sys/signal.h>
! 27: #include <stdio.h>
! 28: #include <string.h>
! 29: #include "dlcommon.h"
! 30:
! 31: #define CASERET(s) case s: return ("s")
! 32:
! 33: char *dlprim();
! 34: char *dlstate();
! 35: char *dlerrno();
! 36: char *dlpromisclevel();
! 37: char *dlservicemode();
! 38: char *dlstyle();
! 39: char *dlmactype();
! 40:
! 41:
! 42: dlinforeq(fd)
! 43: int fd;
! 44: {
! 45: dl_info_req_t info_req;
! 46: struct strbuf ctl;
! 47: int flags;
! 48:
! 49: info_req.dl_primitive = DL_INFO_REQ;
! 50:
! 51: ctl.maxlen = 0;
! 52: ctl.len = sizeof (info_req);
! 53: ctl.buf = (char *) &info_req;
! 54:
! 55: flags = RS_HIPRI;
! 56:
! 57: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 58: syserr("dlinforeq: putmsg");
! 59: }
! 60:
! 61: dlinfoack(fd, bufp)
! 62: int fd;
! 63: char *bufp;
! 64: {
! 65: union DL_primitives *dlp;
! 66: struct strbuf ctl;
! 67: int flags;
! 68:
! 69: ctl.maxlen = MAXDLBUF;
! 70: ctl.len = 0;
! 71: ctl.buf = bufp;
! 72:
! 73: strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlinfoack");
! 74:
! 75: dlp = (union DL_primitives *) ctl.buf;
! 76:
! 77: expecting(DL_INFO_ACK, dlp);
! 78:
! 79: if (ctl.len < sizeof (dl_info_ack_t))
! 80: err("dlinfoack: response ctl.len too short: %d", ctl.len);
! 81:
! 82: if (flags != RS_HIPRI)
! 83: err("dlinfoack: DL_INFO_ACK was not M_PCPROTO");
! 84:
! 85: if (ctl.len < sizeof (dl_info_ack_t))
! 86: err("dlinfoack: short response ctl.len: %d", ctl.len);
! 87: }
! 88:
! 89: dlattachreq(fd, ppa)
! 90: int fd;
! 91: u_long ppa;
! 92: {
! 93: dl_attach_req_t attach_req;
! 94: struct strbuf ctl;
! 95: int flags;
! 96:
! 97: attach_req.dl_primitive = DL_ATTACH_REQ;
! 98: attach_req.dl_ppa = ppa;
! 99:
! 100: ctl.maxlen = 0;
! 101: ctl.len = sizeof (attach_req);
! 102: ctl.buf = (char *) &attach_req;
! 103:
! 104: flags = 0;
! 105:
! 106: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 107: syserr("dlattachreq: putmsg");
! 108: }
! 109:
! 110: dlenabmultireq(fd, addr, length)
! 111: int fd;
! 112: char *addr;
! 113: int length;
! 114: {
! 115: long buf[MAXDLBUF];
! 116: union DL_primitives *dlp;
! 117: struct strbuf ctl;
! 118: int flags;
! 119:
! 120: dlp = (union DL_primitives*) buf;
! 121:
! 122: dlp->enabmulti_req.dl_primitive = DL_ENABMULTI_REQ;
! 123: dlp->enabmulti_req.dl_addr_length = length;
! 124: dlp->enabmulti_req.dl_addr_offset = sizeof (dl_enabmulti_req_t);
! 125:
! 126: (void) memcpy((char*)OFFADDR(buf, sizeof (dl_enabmulti_req_t)), addr, length);
! 127:
! 128: ctl.maxlen = 0;
! 129: ctl.len = sizeof (dl_enabmulti_req_t) + length;
! 130: ctl.buf = (char*) buf;
! 131:
! 132: flags = 0;
! 133:
! 134: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 135: syserr("dlenabmultireq: putmsg");
! 136: }
! 137:
! 138: dldisabmultireq(fd, addr, length)
! 139: int fd;
! 140: char *addr;
! 141: int length;
! 142: {
! 143: long buf[MAXDLBUF];
! 144: union DL_primitives *dlp;
! 145: struct strbuf ctl;
! 146: int flags;
! 147:
! 148: dlp = (union DL_primitives*) buf;
! 149:
! 150: dlp->disabmulti_req.dl_primitive = DL_ENABMULTI_REQ;
! 151: dlp->disabmulti_req.dl_addr_length = length;
! 152: dlp->disabmulti_req.dl_addr_offset = sizeof (dl_disabmulti_req_t);
! 153:
! 154: (void) memcpy((char*)OFFADDR(buf, sizeof (dl_disabmulti_req_t)), addr, length);
! 155:
! 156: ctl.maxlen = 0;
! 157: ctl.len = sizeof (dl_disabmulti_req_t) + length;
! 158: ctl.buf = (char*) buf;
! 159:
! 160: flags = 0;
! 161:
! 162: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 163: syserr("dldisabmultireq: putmsg");
! 164: }
! 165:
! 166: dlpromisconreq(fd, level)
! 167: int fd;
! 168: u_long level;
! 169: {
! 170: dl_promiscon_req_t promiscon_req;
! 171: struct strbuf ctl;
! 172: int flags;
! 173:
! 174: promiscon_req.dl_primitive = DL_PROMISCON_REQ;
! 175: promiscon_req.dl_level = level;
! 176:
! 177: ctl.maxlen = 0;
! 178: ctl.len = sizeof (promiscon_req);
! 179: ctl.buf = (char *) &promiscon_req;
! 180:
! 181: flags = 0;
! 182:
! 183: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 184: syserr("dlpromiscon: putmsg");
! 185:
! 186: }
! 187:
! 188: dlpromiscoff(fd, level)
! 189: int fd;
! 190: u_long level;
! 191: {
! 192: dl_promiscoff_req_t promiscoff_req;
! 193: struct strbuf ctl;
! 194: int flags;
! 195:
! 196: promiscoff_req.dl_primitive = DL_PROMISCOFF_REQ;
! 197: promiscoff_req.dl_level = level;
! 198:
! 199: ctl.maxlen = 0;
! 200: ctl.len = sizeof (promiscoff_req);
! 201: ctl.buf = (char *) &promiscoff_req;
! 202:
! 203: flags = 0;
! 204:
! 205: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 206: syserr("dlpromiscoff: putmsg");
! 207: }
! 208:
! 209: dlphysaddrreq(fd, addrtype)
! 210: int fd;
! 211: u_long addrtype;
! 212: {
! 213: dl_phys_addr_req_t phys_addr_req;
! 214: struct strbuf ctl;
! 215: int flags;
! 216:
! 217: phys_addr_req.dl_primitive = DL_PHYS_ADDR_REQ;
! 218: phys_addr_req.dl_addr_type = addrtype;
! 219:
! 220: ctl.maxlen = 0;
! 221: ctl.len = sizeof (phys_addr_req);
! 222: ctl.buf = (char *) &phys_addr_req;
! 223:
! 224: flags = 0;
! 225:
! 226: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 227: syserr("dlphysaddrreq: putmsg");
! 228: }
! 229:
! 230: dlsetphysaddrreq(fd, addr, length)
! 231: int fd;
! 232: char *addr;
! 233: int length;
! 234: {
! 235: long buf[MAXDLBUF];
! 236: union DL_primitives *dlp;
! 237: struct strbuf ctl;
! 238: int flags;
! 239:
! 240: dlp = (union DL_primitives*) buf;
! 241:
! 242: dlp->set_physaddr_req.dl_primitive = DL_ENABMULTI_REQ;
! 243: dlp->set_physaddr_req.dl_addr_length = length;
! 244: dlp->set_physaddr_req.dl_addr_offset = sizeof (dl_set_phys_addr_req_t);
! 245:
! 246: (void) memcpy((char*)OFFADDR(buf, sizeof (dl_set_phys_addr_req_t)), addr, length);
! 247:
! 248: ctl.maxlen = 0;
! 249: ctl.len = sizeof (dl_set_phys_addr_req_t) + length;
! 250: ctl.buf = (char*) buf;
! 251:
! 252: flags = 0;
! 253:
! 254: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 255: syserr("dlsetphysaddrreq: putmsg");
! 256: }
! 257:
! 258: dldetachreq(fd)
! 259: int fd;
! 260: {
! 261: dl_detach_req_t detach_req;
! 262: struct strbuf ctl;
! 263: int flags;
! 264:
! 265: detach_req.dl_primitive = DL_DETACH_REQ;
! 266:
! 267: ctl.maxlen = 0;
! 268: ctl.len = sizeof (detach_req);
! 269: ctl.buf = (char *) &detach_req;
! 270:
! 271: flags = 0;
! 272:
! 273: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 274: syserr("dldetachreq: putmsg");
! 275: }
! 276:
! 277: dlbindreq(fd, sap, max_conind, service_mode, conn_mgmt, xidtest)
! 278: int fd;
! 279: u_long sap;
! 280: u_long max_conind;
! 281: u_long service_mode;
! 282: u_long conn_mgmt;
! 283: u_long xidtest;
! 284: {
! 285: dl_bind_req_t bind_req;
! 286: struct strbuf ctl;
! 287: int flags;
! 288:
! 289: bind_req.dl_primitive = DL_BIND_REQ;
! 290: bind_req.dl_sap = sap;
! 291: bind_req.dl_max_conind = max_conind;
! 292: bind_req.dl_service_mode = service_mode;
! 293: bind_req.dl_conn_mgmt = conn_mgmt;
! 294: bind_req.dl_xidtest_flg = xidtest;
! 295:
! 296: ctl.maxlen = 0;
! 297: ctl.len = sizeof (bind_req);
! 298: ctl.buf = (char *) &bind_req;
! 299:
! 300: flags = 0;
! 301:
! 302: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 303: syserr("dlbindreq: putmsg");
! 304: }
! 305:
! 306: dlunitdatareq(fd, addrp, addrlen, minpri, maxpri, datap, datalen)
! 307: int fd;
! 308: u_char *addrp;
! 309: int addrlen;
! 310: u_long minpri, maxpri;
! 311: u_char *datap;
! 312: int datalen;
! 313: {
! 314: long buf[MAXDLBUF];
! 315: union DL_primitives *dlp;
! 316: struct strbuf data, ctl;
! 317:
! 318: dlp = (union DL_primitives*) buf;
! 319:
! 320: dlp->unitdata_req.dl_primitive = DL_UNITDATA_REQ;
! 321: dlp->unitdata_req.dl_dest_addr_length = addrlen;
! 322: dlp->unitdata_req.dl_dest_addr_offset = sizeof (dl_unitdata_req_t);
! 323: dlp->unitdata_req.dl_priority.dl_min = minpri;
! 324: dlp->unitdata_req.dl_priority.dl_max = maxpri;
! 325:
! 326: (void) memcpy(OFFADDR(dlp, sizeof (dl_unitdata_req_t)), addrp, addrlen);
! 327:
! 328: ctl.maxlen = 0;
! 329: ctl.len = sizeof (dl_unitdata_req_t) + addrlen;
! 330: ctl.buf = (char *) buf;
! 331:
! 332: data.maxlen = 0;
! 333: data.len = datalen;
! 334: data.buf = (char *) datap;
! 335:
! 336: if (putmsg(fd, &ctl, &data, 0) < 0)
! 337: syserr("dlunitdatareq: putmsg");
! 338: }
! 339:
! 340: dlunbindreq(fd)
! 341: int fd;
! 342: {
! 343: dl_unbind_req_t unbind_req;
! 344: struct strbuf ctl;
! 345: int flags;
! 346:
! 347: unbind_req.dl_primitive = DL_UNBIND_REQ;
! 348:
! 349: ctl.maxlen = 0;
! 350: ctl.len = sizeof (unbind_req);
! 351: ctl.buf = (char *) &unbind_req;
! 352:
! 353: flags = 0;
! 354:
! 355: if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
! 356: syserr("dlunbindreq: putmsg");
! 357: }
! 358:
! 359: dlokack(fd, bufp)
! 360: int fd;
! 361: char *bufp;
! 362: {
! 363: union DL_primitives *dlp;
! 364: struct strbuf ctl;
! 365: int flags;
! 366:
! 367: ctl.maxlen = MAXDLBUF;
! 368: ctl.len = 0;
! 369: ctl.buf = bufp;
! 370:
! 371: strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlokack");
! 372:
! 373: dlp = (union DL_primitives *) ctl.buf;
! 374:
! 375: expecting(DL_OK_ACK, dlp);
! 376:
! 377: if (ctl.len < sizeof (dl_ok_ack_t))
! 378: err("dlokack: response ctl.len too short: %d", ctl.len);
! 379:
! 380: if (flags != RS_HIPRI)
! 381: err("dlokack: DL_OK_ACK was not M_PCPROTO");
! 382:
! 383: if (ctl.len < sizeof (dl_ok_ack_t))
! 384: err("dlokack: short response ctl.len: %d", ctl.len);
! 385: }
! 386:
! 387: dlerrorack(fd, bufp)
! 388: int fd;
! 389: char *bufp;
! 390: {
! 391: union DL_primitives *dlp;
! 392: struct strbuf ctl;
! 393: int flags;
! 394:
! 395: ctl.maxlen = MAXDLBUF;
! 396: ctl.len = 0;
! 397: ctl.buf = bufp;
! 398:
! 399: strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlerrorack");
! 400:
! 401: dlp = (union DL_primitives *) ctl.buf;
! 402:
! 403: expecting(DL_ERROR_ACK, dlp);
! 404:
! 405: if (ctl.len < sizeof (dl_error_ack_t))
! 406: err("dlerrorack: response ctl.len too short: %d", ctl.len);
! 407:
! 408: if (flags != RS_HIPRI)
! 409: err("dlerrorack: DL_OK_ACK was not M_PCPROTO");
! 410:
! 411: if (ctl.len < sizeof (dl_error_ack_t))
! 412: err("dlerrorack: short response ctl.len: %d", ctl.len);
! 413: }
! 414:
! 415: dlbindack(fd, bufp)
! 416: int fd;
! 417: char *bufp;
! 418: {
! 419: union DL_primitives *dlp;
! 420: struct strbuf ctl;
! 421: int flags;
! 422:
! 423: ctl.maxlen = MAXDLBUF;
! 424: ctl.len = 0;
! 425: ctl.buf = bufp;
! 426:
! 427: strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlbindack");
! 428:
! 429: dlp = (union DL_primitives *) ctl.buf;
! 430:
! 431: expecting(DL_BIND_ACK, dlp);
! 432:
! 433: if (flags != RS_HIPRI)
! 434: err("dlbindack: DL_OK_ACK was not M_PCPROTO");
! 435:
! 436: if (ctl.len < sizeof (dl_bind_ack_t))
! 437: err("dlbindack: short response ctl.len: %d", ctl.len);
! 438: }
! 439:
! 440: dlphysaddrack(fd, bufp)
! 441: int fd;
! 442: char *bufp;
! 443: {
! 444: union DL_primitives *dlp;
! 445: struct strbuf ctl;
! 446: int flags;
! 447:
! 448: ctl.maxlen = MAXDLBUF;
! 449: ctl.len = 0;
! 450: ctl.buf = bufp;
! 451:
! 452: strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlphysaddrack");
! 453:
! 454: dlp = (union DL_primitives *) ctl.buf;
! 455:
! 456: expecting(DL_PHYS_ADDR_ACK, dlp);
! 457:
! 458: if (flags != RS_HIPRI)
! 459: err("dlbindack: DL_OK_ACK was not M_PCPROTO");
! 460:
! 461: if (ctl.len < sizeof (dl_phys_addr_ack_t))
! 462: err("dlphysaddrack: short response ctl.len: %d", ctl.len);
! 463: }
! 464:
! 465: static void
! 466: sigalrm()
! 467: {
! 468: (void) err("sigalrm: TIMEOUT");
! 469: }
! 470:
! 471: strgetmsg(fd, ctlp, datap, flagsp, caller)
! 472: int fd;
! 473: struct strbuf *ctlp, *datap;
! 474: int *flagsp;
! 475: char *caller;
! 476: {
! 477: int rc;
! 478: static char errmsg[80];
! 479:
! 480: /*
! 481: * Start timer.
! 482: */
! 483: (void) signal(SIGALRM, sigalrm);
! 484: if (alarm(MAXWAIT) < 0) {
! 485: (void) sprintf(errmsg, "%s: alarm", caller);
! 486: syserr(errmsg);
! 487: }
! 488:
! 489: /*
! 490: * Set flags argument and issue getmsg().
! 491: */
! 492: *flagsp = 0;
! 493: if ((rc = getmsg(fd, ctlp, datap, flagsp)) < 0) {
! 494: (void) sprintf(errmsg, "%s: getmsg", caller);
! 495: syserr(errmsg);
! 496: }
! 497:
! 498: /*
! 499: * Stop timer.
! 500: */
! 501: if (alarm(0) < 0) {
! 502: (void) sprintf(errmsg, "%s: alarm", caller);
! 503: syserr(errmsg);
! 504: }
! 505:
! 506: /*
! 507: * Check for MOREDATA and/or MORECTL.
! 508: */
! 509: if ((rc & (MORECTL | MOREDATA)) == (MORECTL | MOREDATA))
! 510: err("%s: MORECTL|MOREDATA", caller);
! 511: if (rc & MORECTL)
! 512: err("%s: MORECTL", caller);
! 513: if (rc & MOREDATA)
! 514: err("%s: MOREDATA", caller);
! 515:
! 516: /*
! 517: * Check for at least sizeof (long) control data portion.
! 518: */
! 519: if (ctlp->len < sizeof (long))
! 520: err("getmsg: control portion length < sizeof (long): %d", ctlp->len);
! 521: }
! 522:
! 523: expecting(prim, dlp)
! 524: int prim;
! 525: union DL_primitives *dlp;
! 526: {
! 527: if (dlp->dl_primitive != (u_long)prim) {
! 528: printdlprim(dlp);
! 529: err("expected %s got %s", dlprim(prim),
! 530: dlprim(dlp->dl_primitive));
! 531: exit(1);
! 532: }
! 533: }
! 534:
! 535: /*
! 536: * Print any DLPI msg in human readable format.
! 537: */
! 538: printdlprim(dlp)
! 539: union DL_primitives *dlp;
! 540: {
! 541: switch (dlp->dl_primitive) {
! 542: case DL_INFO_REQ:
! 543: printdlinforeq(dlp);
! 544: break;
! 545:
! 546: case DL_INFO_ACK:
! 547: printdlinfoack(dlp);
! 548: break;
! 549:
! 550: case DL_ATTACH_REQ:
! 551: printdlattachreq(dlp);
! 552: break;
! 553:
! 554: case DL_OK_ACK:
! 555: printdlokack(dlp);
! 556: break;
! 557:
! 558: case DL_ERROR_ACK:
! 559: printdlerrorack(dlp);
! 560: break;
! 561:
! 562: case DL_DETACH_REQ:
! 563: printdldetachreq(dlp);
! 564: break;
! 565:
! 566: case DL_BIND_REQ:
! 567: printdlbindreq(dlp);
! 568: break;
! 569:
! 570: case DL_BIND_ACK:
! 571: printdlbindack(dlp);
! 572: break;
! 573:
! 574: case DL_UNBIND_REQ:
! 575: printdlunbindreq(dlp);
! 576: break;
! 577:
! 578: case DL_SUBS_BIND_REQ:
! 579: printdlsubsbindreq(dlp);
! 580: break;
! 581:
! 582: case DL_SUBS_BIND_ACK:
! 583: printdlsubsbindack(dlp);
! 584: break;
! 585:
! 586: case DL_SUBS_UNBIND_REQ:
! 587: printdlsubsunbindreq(dlp);
! 588: break;
! 589:
! 590: case DL_ENABMULTI_REQ:
! 591: printdlenabmultireq(dlp);
! 592: break;
! 593:
! 594: case DL_DISABMULTI_REQ:
! 595: printdldisabmultireq(dlp);
! 596: break;
! 597:
! 598: case DL_PROMISCON_REQ:
! 599: printdlpromisconreq(dlp);
! 600: break;
! 601:
! 602: case DL_PROMISCOFF_REQ:
! 603: printdlpromiscoffreq(dlp);
! 604: break;
! 605:
! 606: case DL_UNITDATA_REQ:
! 607: printdlunitdatareq(dlp);
! 608: break;
! 609:
! 610: case DL_UNITDATA_IND:
! 611: printdlunitdataind(dlp);
! 612: break;
! 613:
! 614: case DL_UDERROR_IND:
! 615: printdluderrorind(dlp);
! 616: break;
! 617:
! 618: case DL_UDQOS_REQ:
! 619: printdludqosreq(dlp);
! 620: break;
! 621:
! 622: case DL_PHYS_ADDR_REQ:
! 623: printdlphysaddrreq(dlp);
! 624: break;
! 625:
! 626: case DL_PHYS_ADDR_ACK:
! 627: printdlphysaddrack(dlp);
! 628: break;
! 629:
! 630: case DL_SET_PHYS_ADDR_REQ:
! 631: printdlsetphysaddrreq(dlp);
! 632: break;
! 633:
! 634: default:
! 635: err("printdlprim: unknown primitive type 0x%x",
! 636: dlp->dl_primitive);
! 637: break;
! 638: }
! 639: }
! 640:
! 641: /* ARGSUSED */
! 642: printdlinforeq(dlp)
! 643: union DL_primitives *dlp;
! 644: {
! 645: (void) printf("DL_INFO_REQ\n");
! 646: }
! 647:
! 648: printdlinfoack(dlp)
! 649: union DL_primitives *dlp;
! 650: {
! 651: u_char addr[MAXDLADDR];
! 652: u_char brdcst[MAXDLADDR];
! 653:
! 654: addrtostring(OFFADDR(dlp, dlp->info_ack.dl_addr_offset),
! 655: dlp->info_ack.dl_addr_length, addr);
! 656: addrtostring(OFFADDR(dlp, dlp->info_ack.dl_brdcst_addr_offset),
! 657: dlp->info_ack.dl_brdcst_addr_length, brdcst);
! 658:
! 659: (void) printf("DL_INFO_ACK: max_sdu %d min_sdu %d\n",
! 660: dlp->info_ack.dl_max_sdu,
! 661: dlp->info_ack.dl_min_sdu);
! 662: (void) printf("addr_length %d mac_type %s current_state %s\n",
! 663: dlp->info_ack.dl_addr_length,
! 664: dlmactype(dlp->info_ack.dl_mac_type),
! 665: dlstate(dlp->info_ack.dl_current_state));
! 666: (void) printf("sap_length %d service_mode %s qos_length %d\n",
! 667: dlp->info_ack.dl_sap_length,
! 668: dlservicemode(dlp->info_ack.dl_service_mode),
! 669: dlp->info_ack.dl_qos_length);
! 670: (void) printf("qos_offset %d qos_range_length %d qos_range_offset %d\n",
! 671: dlp->info_ack.dl_qos_offset,
! 672: dlp->info_ack.dl_qos_range_length,
! 673: dlp->info_ack.dl_qos_range_offset);
! 674: (void) printf("provider_style %s addr_offset %d version %d\n",
! 675: dlstyle(dlp->info_ack.dl_provider_style),
! 676: dlp->info_ack.dl_addr_offset,
! 677: dlp->info_ack.dl_version);
! 678: (void) printf("brdcst_addr_length %d brdcst_addr_offset %d\n",
! 679: dlp->info_ack.dl_brdcst_addr_length,
! 680: dlp->info_ack.dl_brdcst_addr_offset);
! 681: (void) printf("addr %s\n", addr);
! 682: (void) printf("brdcst_addr %s\n", brdcst);
! 683: }
! 684:
! 685: printdlattachreq(dlp)
! 686: union DL_primitives *dlp;
! 687: {
! 688: (void) printf("DL_ATTACH_REQ: ppa %d\n",
! 689: dlp->attach_req.dl_ppa);
! 690: }
! 691:
! 692: printdlokack(dlp)
! 693: union DL_primitives *dlp;
! 694: {
! 695: (void) printf("DL_OK_ACK: correct_primitive %s\n",
! 696: dlprim(dlp->ok_ack.dl_correct_primitive));
! 697: }
! 698:
! 699: printdlerrorack(dlp)
! 700: union DL_primitives *dlp;
! 701: {
! 702: (void) printf("DL_ERROR_ACK: error_primitive %s errno %s unix_errno %d\n",
! 703: dlprim(dlp->error_ack.dl_error_primitive),
! 704: dlerrno(dlp->error_ack.dl_errno),
! 705: dlp->error_ack.dl_unix_errno);
! 706: }
! 707:
! 708: printdlenabmultireq(dlp)
! 709: union DL_primitives *dlp;
! 710: {
! 711: u_char addr[MAXDLADDR];
! 712:
! 713: addrtostring(OFFADDR(dlp, dlp->enabmulti_req.dl_addr_offset),
! 714: dlp->enabmulti_req.dl_addr_length, addr);
! 715:
! 716: (void) printf("DL_ENABMULTI_REQ: addr_length %d addr_offset %d\n",
! 717: dlp->enabmulti_req.dl_addr_length,
! 718: dlp->enabmulti_req.dl_addr_offset);
! 719: (void) printf("addr %s\n", addr);
! 720: }
! 721:
! 722: printdldisabmultireq(dlp)
! 723: union DL_primitives *dlp;
! 724: {
! 725: u_char addr[MAXDLADDR];
! 726:
! 727: addrtostring(OFFADDR(dlp, dlp->disabmulti_req.dl_addr_offset),
! 728: dlp->disabmulti_req.dl_addr_length, addr);
! 729:
! 730: (void) printf("DL_DISABMULTI_REQ: addr_length %d addr_offset %d\n",
! 731: dlp->disabmulti_req.dl_addr_length,
! 732: dlp->disabmulti_req.dl_addr_offset);
! 733: (void) printf("addr %s\n", addr);
! 734: }
! 735:
! 736: printdlpromisconreq(dlp)
! 737: union DL_primitives *dlp;
! 738: {
! 739: (void) printf("DL_PROMISCON_REQ: level %s\n",
! 740: dlpromisclevel(dlp->promiscon_req.dl_level));
! 741: }
! 742:
! 743: printdlpromiscoffreq(dlp)
! 744: union DL_primitives *dlp;
! 745: {
! 746: (void) printf("DL_PROMISCOFF_REQ: level %s\n",
! 747: dlpromisclevel(dlp->promiscoff_req.dl_level));
! 748: }
! 749:
! 750: printdlphysaddrreq(dlp)
! 751: union DL_primitives *dlp;
! 752: {
! 753: (void) printf("DL_PHYS_ADDR_REQ: addr_type 0x%x\n",
! 754: dlp->physaddr_req.dl_addr_type);
! 755: }
! 756:
! 757: printdlphysaddrack(dlp)
! 758: union DL_primitives *dlp;
! 759: {
! 760: u_char addr[MAXDLADDR];
! 761:
! 762: addrtostring(OFFADDR(dlp, dlp->physaddr_ack.dl_addr_offset),
! 763: dlp->physaddr_ack.dl_addr_length, addr);
! 764:
! 765: (void) printf("DL_PHYS_ADDR_ACK: addr_length %d addr_offset %d\n",
! 766: dlp->physaddr_ack.dl_addr_length,
! 767: dlp->physaddr_ack.dl_addr_offset);
! 768: (void) printf("addr %s\n", addr);
! 769: }
! 770:
! 771: printdlsetphysaddrreq(dlp)
! 772: union DL_primitives *dlp;
! 773: {
! 774: u_char addr[MAXDLADDR];
! 775:
! 776: addrtostring(OFFADDR(dlp, dlp->set_physaddr_req.dl_addr_offset),
! 777: dlp->set_physaddr_req.dl_addr_length, addr);
! 778:
! 779: (void) printf("DL_SET_PHYS_ADDR_REQ: addr_length %d addr_offset %d\n",
! 780: dlp->set_physaddr_req.dl_addr_length,
! 781: dlp->set_physaddr_req.dl_addr_offset);
! 782: (void) printf("addr %s\n", addr);
! 783: }
! 784:
! 785: /* ARGSUSED */
! 786: printdldetachreq(dlp)
! 787: union DL_primitives *dlp;
! 788: {
! 789: (void) printf("DL_DETACH_REQ\n");
! 790: }
! 791:
! 792: printdlbindreq(dlp)
! 793: union DL_primitives *dlp;
! 794: {
! 795: (void) printf("DL_BIND_REQ: sap %d max_conind %d\n",
! 796: dlp->bind_req.dl_sap,
! 797: dlp->bind_req.dl_max_conind);
! 798: (void) printf("service_mode %s conn_mgmt %d xidtest_flg 0x%x\n",
! 799: dlservicemode(dlp->bind_req.dl_service_mode),
! 800: dlp->bind_req.dl_conn_mgmt,
! 801: dlp->bind_req.dl_xidtest_flg);
! 802: }
! 803:
! 804: printdlbindack(dlp)
! 805: union DL_primitives *dlp;
! 806: {
! 807: u_char addr[MAXDLADDR];
! 808:
! 809: addrtostring(OFFADDR(dlp, dlp->bind_ack.dl_addr_offset),
! 810: dlp->bind_ack.dl_addr_length, addr);
! 811:
! 812: (void) printf("DL_BIND_ACK: sap %d addr_length %d addr_offset %d\n",
! 813: dlp->bind_ack.dl_sap,
! 814: dlp->bind_ack.dl_addr_length,
! 815: dlp->bind_ack.dl_addr_offset);
! 816: (void) printf("max_conind %d xidtest_flg 0x%x\n",
! 817: dlp->bind_ack.dl_max_conind,
! 818: dlp->bind_ack.dl_xidtest_flg);
! 819: (void) printf("addr %s\n", addr);
! 820: }
! 821:
! 822: /* ARGSUSED */
! 823: printdlunbindreq(dlp)
! 824: union DL_primitives *dlp;
! 825: {
! 826: (void) printf("DL_UNBIND_REQ\n");
! 827: }
! 828:
! 829: printdlsubsbindreq(dlp)
! 830: union DL_primitives *dlp;
! 831: {
! 832: u_char sap[MAXDLADDR];
! 833:
! 834: addrtostring(OFFADDR(dlp, dlp->subs_bind_req.dl_subs_sap_offset),
! 835: dlp->subs_bind_req.dl_subs_sap_length, sap);
! 836:
! 837: (void) printf("DL_SUBS_BIND_REQ: subs_sap_offset %d sub_sap_len %d\n",
! 838: dlp->subs_bind_req.dl_subs_sap_offset,
! 839: dlp->subs_bind_req.dl_subs_sap_length);
! 840: (void) printf("sap %s\n", sap);
! 841: }
! 842:
! 843: printdlsubsbindack(dlp)
! 844: union DL_primitives *dlp;
! 845: {
! 846: u_char sap[MAXDLADDR];
! 847:
! 848: addrtostring(OFFADDR(dlp, dlp->subs_bind_ack.dl_subs_sap_offset),
! 849: dlp->subs_bind_ack.dl_subs_sap_length, sap);
! 850:
! 851: (void) printf("DL_SUBS_BIND_ACK: subs_sap_offset %d sub_sap_length %d\n",
! 852: dlp->subs_bind_ack.dl_subs_sap_offset,
! 853: dlp->subs_bind_ack.dl_subs_sap_length);
! 854: (void) printf("sap %s\n", sap);
! 855: }
! 856:
! 857: printdlsubsunbindreq(dlp)
! 858: union DL_primitives *dlp;
! 859: {
! 860: u_char sap[MAXDLADDR];
! 861:
! 862: addrtostring(OFFADDR(dlp, dlp->subs_unbind_req.dl_subs_sap_offset),
! 863: dlp->subs_unbind_req.dl_subs_sap_length, sap);
! 864:
! 865: (void) printf("DL_SUBS_UNBIND_REQ: subs_sap_offset %d sub_sap_length %d\n",
! 866: dlp->subs_unbind_req.dl_subs_sap_offset,
! 867: dlp->subs_unbind_req.dl_subs_sap_length);
! 868: (void) printf("sap %s\n", sap);
! 869: }
! 870:
! 871: printdlunitdatareq(dlp)
! 872: union DL_primitives *dlp;
! 873: {
! 874: u_char addr[MAXDLADDR];
! 875:
! 876: addrtostring(OFFADDR(dlp, dlp->unitdata_req.dl_dest_addr_offset),
! 877: dlp->unitdata_req.dl_dest_addr_length, addr);
! 878:
! 879: (void) printf("DL_UNITDATA_REQ: dest_addr_length %d dest_addr_offset %d\n",
! 880: dlp->unitdata_req.dl_dest_addr_length,
! 881: dlp->unitdata_req.dl_dest_addr_offset);
! 882: (void) printf("dl_priority.min %d dl_priority.max %d\n",
! 883: dlp->unitdata_req.dl_priority.dl_min,
! 884: dlp->unitdata_req.dl_priority.dl_max);
! 885: (void) printf("addr %s\n", addr);
! 886: }
! 887:
! 888: printdlunitdataind(dlp)
! 889: union DL_primitives *dlp;
! 890: {
! 891: u_char dest[MAXDLADDR];
! 892: u_char src[MAXDLADDR];
! 893:
! 894: addrtostring(OFFADDR(dlp, dlp->unitdata_ind.dl_dest_addr_offset),
! 895: dlp->unitdata_ind.dl_dest_addr_length, dest);
! 896: addrtostring(OFFADDR(dlp, dlp->unitdata_ind.dl_src_addr_offset),
! 897: dlp->unitdata_ind.dl_src_addr_length, src);
! 898:
! 899: (void) printf("DL_UNITDATA_IND: dest_addr_length %d dest_addr_offset %d\n",
! 900: dlp->unitdata_ind.dl_dest_addr_length,
! 901: dlp->unitdata_ind.dl_dest_addr_offset);
! 902: (void) printf("src_addr_length %d src_addr_offset %d\n",
! 903: dlp->unitdata_ind.dl_src_addr_length,
! 904: dlp->unitdata_ind.dl_src_addr_offset);
! 905: (void) printf("group_address 0x%x\n",
! 906: dlp->unitdata_ind.dl_group_address);
! 907: (void) printf("dest %s\n", dest);
! 908: (void) printf("src %s\n", src);
! 909: }
! 910:
! 911: printdluderrorind(dlp)
! 912: union DL_primitives *dlp;
! 913: {
! 914: u_char addr[MAXDLADDR];
! 915:
! 916: addrtostring(OFFADDR(dlp, dlp->uderror_ind.dl_dest_addr_offset),
! 917: dlp->uderror_ind.dl_dest_addr_length, addr);
! 918:
! 919: (void) printf("DL_UDERROR_IND: dest_addr_length %d dest_addr_offset %d\n",
! 920: dlp->uderror_ind.dl_dest_addr_length,
! 921: dlp->uderror_ind.dl_dest_addr_offset);
! 922: (void) printf("unix_errno %d errno %s\n",
! 923: dlp->uderror_ind.dl_unix_errno,
! 924: dlerrno(dlp->uderror_ind.dl_errno));
! 925: (void) printf("addr %s\n", addr);
! 926: }
! 927:
! 928: printdltestreq(dlp)
! 929: union DL_primitives *dlp;
! 930: {
! 931: u_char addr[MAXDLADDR];
! 932:
! 933: addrtostring(OFFADDR(dlp, dlp->test_req.dl_dest_addr_offset),
! 934: dlp->test_req.dl_dest_addr_length, addr);
! 935:
! 936: (void) printf("DL_TEST_REQ: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 937: dlp->test_req.dl_flag,
! 938: dlp->test_req.dl_dest_addr_length,
! 939: dlp->test_req.dl_dest_addr_offset);
! 940: (void) printf("dest_addr %s\n", addr);
! 941: }
! 942:
! 943: printdltestind(dlp)
! 944: union DL_primitives *dlp;
! 945: {
! 946: u_char dest[MAXDLADDR];
! 947: u_char src[MAXDLADDR];
! 948:
! 949: addrtostring(OFFADDR(dlp, dlp->test_ind.dl_dest_addr_offset),
! 950: dlp->test_ind.dl_dest_addr_length, dest);
! 951: addrtostring(OFFADDR(dlp, dlp->test_ind.dl_src_addr_offset),
! 952: dlp->test_ind.dl_src_addr_length, src);
! 953:
! 954: (void) printf("DL_TEST_IND: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 955: dlp->test_ind.dl_flag,
! 956: dlp->test_ind.dl_dest_addr_length,
! 957: dlp->test_ind.dl_dest_addr_offset);
! 958: (void) printf("src_addr_length %d src_addr_offset %d\n",
! 959: dlp->test_ind.dl_src_addr_length,
! 960: dlp->test_ind.dl_src_addr_offset);
! 961: (void) printf("dest_addr %s\n", dest);
! 962: (void) printf("src_addr %s\n", src);
! 963: }
! 964:
! 965: printdltestres(dlp)
! 966: union DL_primitives *dlp;
! 967: {
! 968: u_char dest[MAXDLADDR];
! 969:
! 970: addrtostring(OFFADDR(dlp, dlp->test_res.dl_dest_addr_offset),
! 971: dlp->test_res.dl_dest_addr_length, dest);
! 972:
! 973: (void) printf("DL_TEST_RES: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 974: dlp->test_res.dl_flag,
! 975: dlp->test_res.dl_dest_addr_length,
! 976: dlp->test_res.dl_dest_addr_offset);
! 977: (void) printf("dest_addr %s\n", dest);
! 978: }
! 979:
! 980: printdltestcon(dlp)
! 981: union DL_primitives *dlp;
! 982: {
! 983: u_char dest[MAXDLADDR];
! 984: u_char src[MAXDLADDR];
! 985:
! 986: addrtostring(OFFADDR(dlp, dlp->test_con.dl_dest_addr_offset),
! 987: dlp->test_con.dl_dest_addr_length, dest);
! 988: addrtostring(OFFADDR(dlp, dlp->test_con.dl_src_addr_offset),
! 989: dlp->test_con.dl_src_addr_length, src);
! 990:
! 991: (void) printf("DL_TEST_CON: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 992: dlp->test_con.dl_flag,
! 993: dlp->test_con.dl_dest_addr_length,
! 994: dlp->test_con.dl_dest_addr_offset);
! 995: (void) printf("src_addr_length %d src_addr_offset %d\n",
! 996: dlp->test_con.dl_src_addr_length,
! 997: dlp->test_con.dl_src_addr_offset);
! 998: (void) printf("dest_addr %s\n", dest);
! 999: (void) printf("src_addr %s\n", src);
! 1000: }
! 1001:
! 1002: printdlxidreq(dlp)
! 1003: union DL_primitives *dlp;
! 1004: {
! 1005: u_char dest[MAXDLADDR];
! 1006:
! 1007: addrtostring(OFFADDR(dlp, dlp->xid_req.dl_dest_addr_offset),
! 1008: dlp->xid_req.dl_dest_addr_length, dest);
! 1009:
! 1010: (void) printf("DL_XID_REQ: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 1011: dlp->xid_req.dl_flag,
! 1012: dlp->xid_req.dl_dest_addr_length,
! 1013: dlp->xid_req.dl_dest_addr_offset);
! 1014: (void) printf("dest_addr %s\n", dest);
! 1015: }
! 1016:
! 1017: printdlxidind(dlp)
! 1018: union DL_primitives *dlp;
! 1019: {
! 1020: u_char dest[MAXDLADDR];
! 1021: u_char src[MAXDLADDR];
! 1022:
! 1023: addrtostring(OFFADDR(dlp, dlp->xid_ind.dl_dest_addr_offset),
! 1024: dlp->xid_ind.dl_dest_addr_length, dest);
! 1025: addrtostring(OFFADDR(dlp, dlp->xid_ind.dl_src_addr_offset),
! 1026: dlp->xid_ind.dl_src_addr_length, src);
! 1027:
! 1028: (void) printf("DL_XID_IND: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 1029: dlp->xid_ind.dl_flag,
! 1030: dlp->xid_ind.dl_dest_addr_length,
! 1031: dlp->xid_ind.dl_dest_addr_offset);
! 1032: (void) printf("src_addr_length %d src_addr_offset %d\n",
! 1033: dlp->xid_ind.dl_src_addr_length,
! 1034: dlp->xid_ind.dl_src_addr_offset);
! 1035: (void) printf("dest_addr %s\n", dest);
! 1036: (void) printf("src_addr %s\n", src);
! 1037: }
! 1038:
! 1039: printdlxidres(dlp)
! 1040: union DL_primitives *dlp;
! 1041: {
! 1042: u_char dest[MAXDLADDR];
! 1043:
! 1044: addrtostring(OFFADDR(dlp, dlp->xid_res.dl_dest_addr_offset),
! 1045: dlp->xid_res.dl_dest_addr_length, dest);
! 1046:
! 1047: (void) printf("DL_XID_RES: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 1048: dlp->xid_res.dl_flag,
! 1049: dlp->xid_res.dl_dest_addr_length,
! 1050: dlp->xid_res.dl_dest_addr_offset);
! 1051: (void) printf("dest_addr %s\n", dest);
! 1052: }
! 1053:
! 1054: printdlxidcon(dlp)
! 1055: union DL_primitives *dlp;
! 1056: {
! 1057: u_char dest[MAXDLADDR];
! 1058: u_char src[MAXDLADDR];
! 1059:
! 1060: addrtostring(OFFADDR(dlp, dlp->xid_con.dl_dest_addr_offset),
! 1061: dlp->xid_con.dl_dest_addr_length, dest);
! 1062: addrtostring(OFFADDR(dlp, dlp->xid_con.dl_src_addr_offset),
! 1063: dlp->xid_con.dl_src_addr_length, src);
! 1064:
! 1065: (void) printf("DL_XID_CON: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
! 1066: dlp->xid_con.dl_flag,
! 1067: dlp->xid_con.dl_dest_addr_length,
! 1068: dlp->xid_con.dl_dest_addr_offset);
! 1069: (void) printf("src_addr_length %d src_addr_offset %d\n",
! 1070: dlp->xid_con.dl_src_addr_length,
! 1071: dlp->xid_con.dl_src_addr_offset);
! 1072: (void) printf("dest_addr %s\n", dest);
! 1073: (void) printf("src_addr %s\n", src);
! 1074: }
! 1075:
! 1076: printdludqosreq(dlp)
! 1077: union DL_primitives *dlp;
! 1078: {
! 1079: (void) printf("DL_UDQOS_REQ: qos_length %d qos_offset %d\n",
! 1080: dlp->udqos_req.dl_qos_length,
! 1081: dlp->udqos_req.dl_qos_offset);
! 1082: }
! 1083:
! 1084: /*
! 1085: * Return string.
! 1086: */
! 1087: addrtostring(addr, length, s)
! 1088: u_char *addr;
! 1089: u_long length;
! 1090: u_char *s;
! 1091: {
! 1092: int i;
! 1093:
! 1094: for (i = 0; i < length; i++) {
! 1095: (void) sprintf((char*) s, "%x:", addr[i] & 0xff);
! 1096: s = s + strlen((char*)s);
! 1097: }
! 1098: if (length)
! 1099: *(--s) = '\0';
! 1100: }
! 1101:
! 1102: /*
! 1103: * Return length
! 1104: */
! 1105: stringtoaddr(sp, addr)
! 1106: char *sp;
! 1107: char *addr;
! 1108: {
! 1109: int n = 0;
! 1110: char *p;
! 1111: int val;
! 1112:
! 1113: p = sp;
! 1114: while (p = strtok(p, ":")) {
! 1115: if (sscanf(p, "%x", &val) != 1)
! 1116: err("stringtoaddr: invalid input string: %s", sp);
! 1117: if (val > 0xff)
! 1118: err("stringtoaddr: invalid input string: %s", sp);
! 1119: *addr++ = val;
! 1120: n++;
! 1121: p = NULL;
! 1122: }
! 1123:
! 1124: return (n);
! 1125: }
! 1126:
! 1127:
! 1128: static char
! 1129: hexnibble(c)
! 1130: char c;
! 1131: {
! 1132: static char hextab[] = {
! 1133: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
! 1134: 'a', 'b', 'c', 'd', 'e', 'f'
! 1135: };
! 1136:
! 1137: return (hextab[c & 0x0f]);
! 1138: }
! 1139:
! 1140: char*
! 1141: dlprim(prim)
! 1142: u_long prim;
! 1143: {
! 1144: static char primbuf[80];
! 1145:
! 1146: switch ((int)prim) {
! 1147: CASERET(DL_INFO_REQ);
! 1148: CASERET(DL_INFO_ACK);
! 1149: CASERET(DL_ATTACH_REQ);
! 1150: CASERET(DL_DETACH_REQ);
! 1151: CASERET(DL_BIND_REQ);
! 1152: CASERET(DL_BIND_ACK);
! 1153: CASERET(DL_UNBIND_REQ);
! 1154: CASERET(DL_OK_ACK);
! 1155: CASERET(DL_ERROR_ACK);
! 1156: CASERET(DL_SUBS_BIND_REQ);
! 1157: CASERET(DL_SUBS_BIND_ACK);
! 1158: CASERET(DL_UNITDATA_REQ);
! 1159: CASERET(DL_UNITDATA_IND);
! 1160: CASERET(DL_UDERROR_IND);
! 1161: CASERET(DL_UDQOS_REQ);
! 1162: CASERET(DL_CONNECT_REQ);
! 1163: CASERET(DL_CONNECT_IND);
! 1164: CASERET(DL_CONNECT_RES);
! 1165: CASERET(DL_CONNECT_CON);
! 1166: CASERET(DL_TOKEN_REQ);
! 1167: CASERET(DL_TOKEN_ACK);
! 1168: CASERET(DL_DISCONNECT_REQ);
! 1169: CASERET(DL_DISCONNECT_IND);
! 1170: CASERET(DL_RESET_REQ);
! 1171: CASERET(DL_RESET_IND);
! 1172: CASERET(DL_RESET_RES);
! 1173: CASERET(DL_RESET_CON);
! 1174: default:
! 1175: (void) sprintf(primbuf, "unknown primitive 0x%x", prim);
! 1176: return (primbuf);
! 1177: }
! 1178: }
! 1179:
! 1180:
! 1181: char*
! 1182: dlstate(state)
! 1183: u_long state;
! 1184: {
! 1185: static char statebuf[80];
! 1186:
! 1187: switch (state) {
! 1188: CASERET(DL_UNATTACHED);
! 1189: CASERET(DL_ATTACH_PENDING);
! 1190: CASERET(DL_DETACH_PENDING);
! 1191: CASERET(DL_UNBOUND);
! 1192: CASERET(DL_BIND_PENDING);
! 1193: CASERET(DL_UNBIND_PENDING);
! 1194: CASERET(DL_IDLE);
! 1195: CASERET(DL_UDQOS_PENDING);
! 1196: CASERET(DL_OUTCON_PENDING);
! 1197: CASERET(DL_INCON_PENDING);
! 1198: CASERET(DL_CONN_RES_PENDING);
! 1199: CASERET(DL_DATAXFER);
! 1200: CASERET(DL_USER_RESET_PENDING);
! 1201: CASERET(DL_PROV_RESET_PENDING);
! 1202: CASERET(DL_RESET_RES_PENDING);
! 1203: CASERET(DL_DISCON8_PENDING);
! 1204: CASERET(DL_DISCON9_PENDING);
! 1205: CASERET(DL_DISCON11_PENDING);
! 1206: CASERET(DL_DISCON12_PENDING);
! 1207: CASERET(DL_DISCON13_PENDING);
! 1208: CASERET(DL_SUBS_BIND_PND);
! 1209: default:
! 1210: (void) sprintf(statebuf, "unknown state 0x%x", state);
! 1211: return (statebuf);
! 1212: }
! 1213: }
! 1214:
! 1215: char*
! 1216: dlerrno(errno)
! 1217: u_long errno;
! 1218: {
! 1219: static char errnobuf[80];
! 1220:
! 1221: switch (errno) {
! 1222: CASERET(DL_ACCESS);
! 1223: CASERET(DL_BADADDR);
! 1224: CASERET(DL_BADCORR);
! 1225: CASERET(DL_BADDATA);
! 1226: CASERET(DL_BADPPA);
! 1227: CASERET(DL_BADPRIM);
! 1228: CASERET(DL_BADQOSPARAM);
! 1229: CASERET(DL_BADQOSTYPE);
! 1230: CASERET(DL_BADSAP);
! 1231: CASERET(DL_BADTOKEN);
! 1232: CASERET(DL_BOUND);
! 1233: CASERET(DL_INITFAILED);
! 1234: CASERET(DL_NOADDR);
! 1235: CASERET(DL_NOTINIT);
! 1236: CASERET(DL_OUTSTATE);
! 1237: CASERET(DL_SYSERR);
! 1238: CASERET(DL_UNSUPPORTED);
! 1239: CASERET(DL_UNDELIVERABLE);
! 1240: CASERET(DL_NOTSUPPORTED);
! 1241: CASERET(DL_TOOMANY);
! 1242: CASERET(DL_NOTENAB);
! 1243: CASERET(DL_BUSY);
! 1244: CASERET(DL_NOAUTO);
! 1245: CASERET(DL_NOXIDAUTO);
! 1246: CASERET(DL_NOTESTAUTO);
! 1247: CASERET(DL_XIDAUTO);
! 1248: CASERET(DL_TESTAUTO);
! 1249: CASERET(DL_PENDING);
! 1250:
! 1251: default:
! 1252: (void) sprintf(errnobuf, "unknown dlpi errno 0x%x", errno);
! 1253: return (errnobuf);
! 1254: }
! 1255: }
! 1256:
! 1257: char*
! 1258: dlpromisclevel(level)
! 1259: u_long level;
! 1260: {
! 1261: static char levelbuf[80];
! 1262:
! 1263: switch (level) {
! 1264: CASERET(DL_PROMISC_PHYS);
! 1265: CASERET(DL_PROMISC_SAP);
! 1266: CASERET(DL_PROMISC_MULTI);
! 1267: default:
! 1268: (void) sprintf(levelbuf, "unknown promisc level 0x%x", level);
! 1269: return (levelbuf);
! 1270: }
! 1271: }
! 1272:
! 1273: char*
! 1274: dlservicemode(servicemode)
! 1275: u_long servicemode;
! 1276: {
! 1277: static char servicemodebuf[80];
! 1278:
! 1279: switch (servicemode) {
! 1280: CASERET(DL_CODLS);
! 1281: CASERET(DL_CLDLS);
! 1282: CASERET(DL_CODLS|DL_CLDLS);
! 1283: default:
! 1284: (void) sprintf(servicemodebuf,
! 1285: "unknown provider service mode 0x%x", servicemode);
! 1286: return (servicemodebuf);
! 1287: }
! 1288: }
! 1289:
! 1290: char*
! 1291: dlstyle(style)
! 1292: long style;
! 1293: {
! 1294: static char stylebuf[80];
! 1295:
! 1296: switch (style) {
! 1297: CASERET(DL_STYLE1);
! 1298: CASERET(DL_STYLE2);
! 1299: default:
! 1300: (void) sprintf(stylebuf, "unknown provider style 0x%x", style);
! 1301: return (stylebuf);
! 1302: }
! 1303: }
! 1304:
! 1305: char*
! 1306: dlmactype(media)
! 1307: u_long media;
! 1308: {
! 1309: static char mediabuf[80];
! 1310:
! 1311: switch (media) {
! 1312: CASERET(DL_CSMACD);
! 1313: CASERET(DL_TPB);
! 1314: CASERET(DL_TPR);
! 1315: CASERET(DL_METRO);
! 1316: CASERET(DL_ETHER);
! 1317: CASERET(DL_HDLC);
! 1318: CASERET(DL_CHAR);
! 1319: CASERET(DL_CTCA);
! 1320: default:
! 1321: (void) sprintf(mediabuf, "unknown media type 0x%x", media);
! 1322: return (mediabuf);
! 1323: }
! 1324: }
! 1325:
! 1326: /*VARARGS1*/
! 1327: err(fmt, a1, a2, a3, a4)
! 1328: char *fmt;
! 1329: char *a1, *a2, *a3, *a4;
! 1330: {
! 1331: (void) fprintf(stderr, fmt, a1, a2, a3, a4);
! 1332: (void) fprintf(stderr, "\n");
! 1333: (void) exit(1);
! 1334: }
! 1335:
! 1336: syserr(s)
! 1337: char *s;
! 1338: {
! 1339: (void) perror(s);
! 1340: exit(1);
! 1341: }
! 1342:
! 1343: strioctl(fd, cmd, timout, len, dp)
! 1344: int fd;
! 1345: int cmd;
! 1346: int timout;
! 1347: int len;
! 1348: char *dp;
! 1349: {
! 1350: struct strioctl sioc;
! 1351: int rc;
! 1352:
! 1353: sioc.ic_cmd = cmd;
! 1354: sioc.ic_timout = timout;
! 1355: sioc.ic_len = len;
! 1356: sioc.ic_dp = dp;
! 1357: rc = ioctl(fd, I_STR, &sioc);
! 1358:
! 1359: if (rc < 0)
! 1360: return (rc);
! 1361: else
! 1362: return (sioc.ic_len);
! 1363: }
! 1364:
! 1365: #endif /* HAVE_DLPI */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>