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