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.
9 * Connection Oriented stuff
14 typedef unsigned long ulong;
18 #include <sys/types.h>
19 #include <sys/stream.h>
20 #include <sys/stropts.h>
22 #include <sys/signal.h>
27 #define CASERET(s) case s: return ("s")
32 char *dlpromisclevel();
33 char *dlservicemode();
41 dl_info_req_t info_req
;
45 info_req
.dl_primitive
= DL_INFO_REQ
;
48 ctl
.len
= sizeof (info_req
);
49 ctl
.buf
= (char *) &info_req
;
53 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
54 syserr("dlinforeq: putmsg");
61 union DL_primitives
*dlp
;
65 ctl
.maxlen
= MAXDLBUF
;
69 strgetmsg(fd
, &ctl
, (struct strbuf
*)NULL
, &flags
, "dlinfoack");
71 dlp
= (union DL_primitives
*) ctl
.buf
;
73 expecting(DL_INFO_ACK
, dlp
);
75 if (ctl
.len
< sizeof (dl_info_ack_t
))
76 err("dlinfoack: response ctl.len too short: %d", ctl
.len
);
78 if (flags
!= RS_HIPRI
)
79 err("dlinfoack: DL_INFO_ACK was not M_PCPROTO");
81 if (ctl
.len
< sizeof (dl_info_ack_t
))
82 err("dlinfoack: short response ctl.len: %d", ctl
.len
);
89 dl_attach_req_t attach_req
;
93 attach_req
.dl_primitive
= DL_ATTACH_REQ
;
94 attach_req
.dl_ppa
= ppa
;
97 ctl
.len
= sizeof (attach_req
);
98 ctl
.buf
= (char *) &attach_req
;
102 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
103 syserr("dlattachreq: putmsg");
106 dlenabmultireq(fd
, addr
, length
)
112 union DL_primitives
*dlp
;
116 dlp
= (union DL_primitives
*) buf
;
118 dlp
->enabmulti_req
.dl_primitive
= DL_ENABMULTI_REQ
;
119 dlp
->enabmulti_req
.dl_addr_length
= length
;
120 dlp
->enabmulti_req
.dl_addr_offset
= sizeof (dl_enabmulti_req_t
);
122 (void) memcpy((char*)OFFADDR(buf
, sizeof (dl_enabmulti_req_t
)), addr
, length
);
125 ctl
.len
= sizeof (dl_enabmulti_req_t
) + length
;
126 ctl
.buf
= (char*) buf
;
130 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
131 syserr("dlenabmultireq: putmsg");
134 dldisabmultireq(fd
, addr
, length
)
140 union DL_primitives
*dlp
;
144 dlp
= (union DL_primitives
*) buf
;
146 dlp
->disabmulti_req
.dl_primitive
= DL_ENABMULTI_REQ
;
147 dlp
->disabmulti_req
.dl_addr_length
= length
;
148 dlp
->disabmulti_req
.dl_addr_offset
= sizeof (dl_disabmulti_req_t
);
150 (void) memcpy((char*)OFFADDR(buf
, sizeof (dl_disabmulti_req_t
)), addr
, length
);
153 ctl
.len
= sizeof (dl_disabmulti_req_t
) + length
;
154 ctl
.buf
= (char*) buf
;
158 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
159 syserr("dldisabmultireq: putmsg");
162 dlpromisconreq(fd
, level
)
166 dl_promiscon_req_t promiscon_req
;
170 promiscon_req
.dl_primitive
= DL_PROMISCON_REQ
;
171 promiscon_req
.dl_level
= level
;
174 ctl
.len
= sizeof (promiscon_req
);
175 ctl
.buf
= (char *) &promiscon_req
;
179 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
180 syserr("dlpromiscon: putmsg");
184 dlpromiscoff(fd
, level
)
188 dl_promiscoff_req_t promiscoff_req
;
192 promiscoff_req
.dl_primitive
= DL_PROMISCOFF_REQ
;
193 promiscoff_req
.dl_level
= level
;
196 ctl
.len
= sizeof (promiscoff_req
);
197 ctl
.buf
= (char *) &promiscoff_req
;
201 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
202 syserr("dlpromiscoff: putmsg");
205 dlphysaddrreq(fd
, addrtype
)
209 dl_phys_addr_req_t phys_addr_req
;
213 phys_addr_req
.dl_primitive
= DL_PHYS_ADDR_REQ
;
214 phys_addr_req
.dl_addr_type
= addrtype
;
217 ctl
.len
= sizeof (phys_addr_req
);
218 ctl
.buf
= (char *) &phys_addr_req
;
222 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
223 syserr("dlphysaddrreq: putmsg");
226 dlsetphysaddrreq(fd
, addr
, length
)
232 union DL_primitives
*dlp
;
236 dlp
= (union DL_primitives
*) buf
;
238 dlp
->set_physaddr_req
.dl_primitive
= DL_ENABMULTI_REQ
;
239 dlp
->set_physaddr_req
.dl_addr_length
= length
;
240 dlp
->set_physaddr_req
.dl_addr_offset
= sizeof (dl_set_phys_addr_req_t
);
242 (void) memcpy((char*)OFFADDR(buf
, sizeof (dl_set_phys_addr_req_t
)), addr
, length
);
245 ctl
.len
= sizeof (dl_set_phys_addr_req_t
) + length
;
246 ctl
.buf
= (char*) buf
;
250 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
251 syserr("dlsetphysaddrreq: putmsg");
257 dl_detach_req_t detach_req
;
261 detach_req
.dl_primitive
= DL_DETACH_REQ
;
264 ctl
.len
= sizeof (detach_req
);
265 ctl
.buf
= (char *) &detach_req
;
269 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
270 syserr("dldetachreq: putmsg");
273 dlbindreq(fd
, sap
, max_conind
, service_mode
, conn_mgmt
, xidtest
)
281 dl_bind_req_t bind_req
;
285 bind_req
.dl_primitive
= DL_BIND_REQ
;
286 bind_req
.dl_sap
= sap
;
287 bind_req
.dl_max_conind
= max_conind
;
288 bind_req
.dl_service_mode
= service_mode
;
289 bind_req
.dl_conn_mgmt
= conn_mgmt
;
290 bind_req
.dl_xidtest_flg
= xidtest
;
293 ctl
.len
= sizeof (bind_req
);
294 ctl
.buf
= (char *) &bind_req
;
298 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
299 syserr("dlbindreq: putmsg");
302 dlunitdatareq(fd
, addrp
, addrlen
, minpri
, maxpri
, datap
, datalen
)
306 u_long minpri
, maxpri
;
311 union DL_primitives
*dlp
;
312 struct strbuf data
, ctl
;
314 dlp
= (union DL_primitives
*) buf
;
316 dlp
->unitdata_req
.dl_primitive
= DL_UNITDATA_REQ
;
317 dlp
->unitdata_req
.dl_dest_addr_length
= addrlen
;
318 dlp
->unitdata_req
.dl_dest_addr_offset
= sizeof (dl_unitdata_req_t
);
319 dlp
->unitdata_req
.dl_priority
.dl_min
= minpri
;
320 dlp
->unitdata_req
.dl_priority
.dl_max
= maxpri
;
322 (void) memcpy(OFFADDR(dlp
, sizeof (dl_unitdata_req_t
)), addrp
, addrlen
);
325 ctl
.len
= sizeof (dl_unitdata_req_t
) + addrlen
;
326 ctl
.buf
= (char *) buf
;
330 data
.buf
= (char *) datap
;
332 if (putmsg(fd
, &ctl
, &data
, 0) < 0)
333 syserr("dlunitdatareq: putmsg");
339 dl_unbind_req_t unbind_req
;
343 unbind_req
.dl_primitive
= DL_UNBIND_REQ
;
346 ctl
.len
= sizeof (unbind_req
);
347 ctl
.buf
= (char *) &unbind_req
;
351 if (putmsg(fd
, &ctl
, (struct strbuf
*) NULL
, flags
) < 0)
352 syserr("dlunbindreq: putmsg");
359 union DL_primitives
*dlp
;
363 ctl
.maxlen
= MAXDLBUF
;
367 strgetmsg(fd
, &ctl
, (struct strbuf
*)NULL
, &flags
, "dlokack");
369 dlp
= (union DL_primitives
*) ctl
.buf
;
371 expecting(DL_OK_ACK
, dlp
);
373 if (ctl
.len
< sizeof (dl_ok_ack_t
))
374 err("dlokack: response ctl.len too short: %d", ctl
.len
);
376 if (flags
!= RS_HIPRI
)
377 err("dlokack: DL_OK_ACK was not M_PCPROTO");
379 if (ctl
.len
< sizeof (dl_ok_ack_t
))
380 err("dlokack: short response ctl.len: %d", ctl
.len
);
387 union DL_primitives
*dlp
;
391 ctl
.maxlen
= MAXDLBUF
;
395 strgetmsg(fd
, &ctl
, (struct strbuf
*)NULL
, &flags
, "dlerrorack");
397 dlp
= (union DL_primitives
*) ctl
.buf
;
399 expecting(DL_ERROR_ACK
, dlp
);
401 if (ctl
.len
< sizeof (dl_error_ack_t
))
402 err("dlerrorack: response ctl.len too short: %d", ctl
.len
);
404 if (flags
!= RS_HIPRI
)
405 err("dlerrorack: DL_OK_ACK was not M_PCPROTO");
407 if (ctl
.len
< sizeof (dl_error_ack_t
))
408 err("dlerrorack: short response ctl.len: %d", ctl
.len
);
415 union DL_primitives
*dlp
;
419 ctl
.maxlen
= MAXDLBUF
;
423 strgetmsg(fd
, &ctl
, (struct strbuf
*)NULL
, &flags
, "dlbindack");
425 dlp
= (union DL_primitives
*) ctl
.buf
;
427 expecting(DL_BIND_ACK
, dlp
);
429 if (flags
!= RS_HIPRI
)
430 err("dlbindack: DL_OK_ACK was not M_PCPROTO");
432 if (ctl
.len
< sizeof (dl_bind_ack_t
))
433 err("dlbindack: short response ctl.len: %d", ctl
.len
);
436 dlphysaddrack(fd
, bufp
)
440 union DL_primitives
*dlp
;
444 ctl
.maxlen
= MAXDLBUF
;
448 strgetmsg(fd
, &ctl
, (struct strbuf
*)NULL
, &flags
, "dlphysaddrack");
450 dlp
= (union DL_primitives
*) ctl
.buf
;
452 expecting(DL_PHYS_ADDR_ACK
, dlp
);
454 if (flags
!= RS_HIPRI
)
455 err("dlbindack: DL_OK_ACK was not M_PCPROTO");
457 if (ctl
.len
< sizeof (dl_phys_addr_ack_t
))
458 err("dlphysaddrack: short response ctl.len: %d", ctl
.len
);
464 (void) err("sigalrm: TIMEOUT");
467 strgetmsg(fd
, ctlp
, datap
, flagsp
, caller
)
469 struct strbuf
*ctlp
, *datap
;
474 static char errmsg
[80];
479 (void) signal(SIGALRM
, sigalrm
);
480 if (alarm(MAXWAIT
) < 0) {
481 (void) sprintf(errmsg
, "%s: alarm", caller
);
486 * Set flags argument and issue getmsg().
489 if ((rc
= getmsg(fd
, ctlp
, datap
, flagsp
)) < 0) {
490 (void) sprintf(errmsg
, "%s: getmsg", caller
);
498 (void) sprintf(errmsg
, "%s: alarm", caller
);
503 * Check for MOREDATA and/or MORECTL.
505 if ((rc
& (MORECTL
| MOREDATA
)) == (MORECTL
| MOREDATA
))
506 err("%s: MORECTL|MOREDATA", caller
);
508 err("%s: MORECTL", caller
);
510 err("%s: MOREDATA", caller
);
513 * Check for at least sizeof (long) control data portion.
515 if (ctlp
->len
< sizeof (long))
516 err("getmsg: control portion length < sizeof (long): %d", ctlp
->len
);
521 union DL_primitives
*dlp
;
523 if (dlp
->dl_primitive
!= (u_long
)prim
) {
525 err("expected %s got %s", dlprim(prim
),
526 dlprim(dlp
->dl_primitive
));
532 * Print any DLPI msg in human readable format.
535 union DL_primitives
*dlp
;
537 switch (dlp
->dl_primitive
) {
547 printdlattachreq(dlp
);
555 printdlerrorack(dlp
);
559 printdldetachreq(dlp
);
571 printdlunbindreq(dlp
);
574 case DL_SUBS_BIND_REQ
:
575 printdlsubsbindreq(dlp
);
578 case DL_SUBS_BIND_ACK
:
579 printdlsubsbindack(dlp
);
582 case DL_SUBS_UNBIND_REQ
:
583 printdlsubsunbindreq(dlp
);
586 case DL_ENABMULTI_REQ
:
587 printdlenabmultireq(dlp
);
590 case DL_DISABMULTI_REQ
:
591 printdldisabmultireq(dlp
);
594 case DL_PROMISCON_REQ
:
595 printdlpromisconreq(dlp
);
598 case DL_PROMISCOFF_REQ
:
599 printdlpromiscoffreq(dlp
);
602 case DL_UNITDATA_REQ
:
603 printdlunitdatareq(dlp
);
606 case DL_UNITDATA_IND
:
607 printdlunitdataind(dlp
);
611 printdluderrorind(dlp
);
615 printdludqosreq(dlp
);
618 case DL_PHYS_ADDR_REQ
:
619 printdlphysaddrreq(dlp
);
622 case DL_PHYS_ADDR_ACK
:
623 printdlphysaddrack(dlp
);
626 case DL_SET_PHYS_ADDR_REQ
:
627 printdlsetphysaddrreq(dlp
);
631 err("printdlprim: unknown primitive type 0x%x",
639 union DL_primitives
*dlp
;
641 (void) printf("DL_INFO_REQ\n");
645 union DL_primitives
*dlp
;
647 u_char addr
[MAXDLADDR
];
648 u_char brdcst
[MAXDLADDR
];
650 addrtostring(OFFADDR(dlp
, dlp
->info_ack
.dl_addr_offset
),
651 dlp
->info_ack
.dl_addr_length
, addr
);
652 addrtostring(OFFADDR(dlp
, dlp
->info_ack
.dl_brdcst_addr_offset
),
653 dlp
->info_ack
.dl_brdcst_addr_length
, brdcst
);
655 (void) printf("DL_INFO_ACK: max_sdu %d min_sdu %d\n",
656 dlp
->info_ack
.dl_max_sdu
,
657 dlp
->info_ack
.dl_min_sdu
);
658 (void) printf("addr_length %d mac_type %s current_state %s\n",
659 dlp
->info_ack
.dl_addr_length
,
660 dlmactype(dlp
->info_ack
.dl_mac_type
),
661 dlstate(dlp
->info_ack
.dl_current_state
));
662 (void) printf("sap_length %d service_mode %s qos_length %d\n",
663 dlp
->info_ack
.dl_sap_length
,
664 dlservicemode(dlp
->info_ack
.dl_service_mode
),
665 dlp
->info_ack
.dl_qos_length
);
666 (void) printf("qos_offset %d qos_range_length %d qos_range_offset %d\n",
667 dlp
->info_ack
.dl_qos_offset
,
668 dlp
->info_ack
.dl_qos_range_length
,
669 dlp
->info_ack
.dl_qos_range_offset
);
670 (void) printf("provider_style %s addr_offset %d version %d\n",
671 dlstyle(dlp
->info_ack
.dl_provider_style
),
672 dlp
->info_ack
.dl_addr_offset
,
673 dlp
->info_ack
.dl_version
);
674 (void) printf("brdcst_addr_length %d brdcst_addr_offset %d\n",
675 dlp
->info_ack
.dl_brdcst_addr_length
,
676 dlp
->info_ack
.dl_brdcst_addr_offset
);
677 (void) printf("addr %s\n", addr
);
678 (void) printf("brdcst_addr %s\n", brdcst
);
681 printdlattachreq(dlp
)
682 union DL_primitives
*dlp
;
684 (void) printf("DL_ATTACH_REQ: ppa %d\n",
685 dlp
->attach_req
.dl_ppa
);
689 union DL_primitives
*dlp
;
691 (void) printf("DL_OK_ACK: correct_primitive %s\n",
692 dlprim(dlp
->ok_ack
.dl_correct_primitive
));
696 union DL_primitives
*dlp
;
698 (void) printf("DL_ERROR_ACK: error_primitive %s errno %s unix_errno %d\n",
699 dlprim(dlp
->error_ack
.dl_error_primitive
),
700 dlerrno(dlp
->error_ack
.dl_errno
),
701 dlp
->error_ack
.dl_unix_errno
);
704 printdlenabmultireq(dlp
)
705 union DL_primitives
*dlp
;
707 u_char addr
[MAXDLADDR
];
709 addrtostring(OFFADDR(dlp
, dlp
->enabmulti_req
.dl_addr_offset
),
710 dlp
->enabmulti_req
.dl_addr_length
, addr
);
712 (void) printf("DL_ENABMULTI_REQ: addr_length %d addr_offset %d\n",
713 dlp
->enabmulti_req
.dl_addr_length
,
714 dlp
->enabmulti_req
.dl_addr_offset
);
715 (void) printf("addr %s\n", addr
);
718 printdldisabmultireq(dlp
)
719 union DL_primitives
*dlp
;
721 u_char addr
[MAXDLADDR
];
723 addrtostring(OFFADDR(dlp
, dlp
->disabmulti_req
.dl_addr_offset
),
724 dlp
->disabmulti_req
.dl_addr_length
, addr
);
726 (void) printf("DL_DISABMULTI_REQ: addr_length %d addr_offset %d\n",
727 dlp
->disabmulti_req
.dl_addr_length
,
728 dlp
->disabmulti_req
.dl_addr_offset
);
729 (void) printf("addr %s\n", addr
);
732 printdlpromisconreq(dlp
)
733 union DL_primitives
*dlp
;
735 (void) printf("DL_PROMISCON_REQ: level %s\n",
736 dlpromisclevel(dlp
->promiscon_req
.dl_level
));
739 printdlpromiscoffreq(dlp
)
740 union DL_primitives
*dlp
;
742 (void) printf("DL_PROMISCOFF_REQ: level %s\n",
743 dlpromisclevel(dlp
->promiscoff_req
.dl_level
));
746 printdlphysaddrreq(dlp
)
747 union DL_primitives
*dlp
;
749 (void) printf("DL_PHYS_ADDR_REQ: addr_type 0x%x\n",
750 dlp
->physaddr_req
.dl_addr_type
);
753 printdlphysaddrack(dlp
)
754 union DL_primitives
*dlp
;
756 u_char addr
[MAXDLADDR
];
758 addrtostring(OFFADDR(dlp
, dlp
->physaddr_ack
.dl_addr_offset
),
759 dlp
->physaddr_ack
.dl_addr_length
, addr
);
761 (void) printf("DL_PHYS_ADDR_ACK: addr_length %d addr_offset %d\n",
762 dlp
->physaddr_ack
.dl_addr_length
,
763 dlp
->physaddr_ack
.dl_addr_offset
);
764 (void) printf("addr %s\n", addr
);
767 printdlsetphysaddrreq(dlp
)
768 union DL_primitives
*dlp
;
770 u_char addr
[MAXDLADDR
];
772 addrtostring(OFFADDR(dlp
, dlp
->set_physaddr_req
.dl_addr_offset
),
773 dlp
->set_physaddr_req
.dl_addr_length
, addr
);
775 (void) printf("DL_SET_PHYS_ADDR_REQ: addr_length %d addr_offset %d\n",
776 dlp
->set_physaddr_req
.dl_addr_length
,
777 dlp
->set_physaddr_req
.dl_addr_offset
);
778 (void) printf("addr %s\n", addr
);
782 printdldetachreq(dlp
)
783 union DL_primitives
*dlp
;
785 (void) printf("DL_DETACH_REQ\n");
789 union DL_primitives
*dlp
;
791 (void) printf("DL_BIND_REQ: sap %d max_conind %d\n",
792 dlp
->bind_req
.dl_sap
,
793 dlp
->bind_req
.dl_max_conind
);
794 (void) printf("service_mode %s conn_mgmt %d xidtest_flg 0x%x\n",
795 dlservicemode(dlp
->bind_req
.dl_service_mode
),
796 dlp
->bind_req
.dl_conn_mgmt
,
797 dlp
->bind_req
.dl_xidtest_flg
);
801 union DL_primitives
*dlp
;
803 u_char addr
[MAXDLADDR
];
805 addrtostring(OFFADDR(dlp
, dlp
->bind_ack
.dl_addr_offset
),
806 dlp
->bind_ack
.dl_addr_length
, addr
);
808 (void) printf("DL_BIND_ACK: sap %d addr_length %d addr_offset %d\n",
809 dlp
->bind_ack
.dl_sap
,
810 dlp
->bind_ack
.dl_addr_length
,
811 dlp
->bind_ack
.dl_addr_offset
);
812 (void) printf("max_conind %d xidtest_flg 0x%x\n",
813 dlp
->bind_ack
.dl_max_conind
,
814 dlp
->bind_ack
.dl_xidtest_flg
);
815 (void) printf("addr %s\n", addr
);
819 printdlunbindreq(dlp
)
820 union DL_primitives
*dlp
;
822 (void) printf("DL_UNBIND_REQ\n");
825 printdlsubsbindreq(dlp
)
826 union DL_primitives
*dlp
;
828 u_char sap
[MAXDLADDR
];
830 addrtostring(OFFADDR(dlp
, dlp
->subs_bind_req
.dl_subs_sap_offset
),
831 dlp
->subs_bind_req
.dl_subs_sap_length
, sap
);
833 (void) printf("DL_SUBS_BIND_REQ: subs_sap_offset %d sub_sap_len %d\n",
834 dlp
->subs_bind_req
.dl_subs_sap_offset
,
835 dlp
->subs_bind_req
.dl_subs_sap_length
);
836 (void) printf("sap %s\n", sap
);
839 printdlsubsbindack(dlp
)
840 union DL_primitives
*dlp
;
842 u_char sap
[MAXDLADDR
];
844 addrtostring(OFFADDR(dlp
, dlp
->subs_bind_ack
.dl_subs_sap_offset
),
845 dlp
->subs_bind_ack
.dl_subs_sap_length
, sap
);
847 (void) printf("DL_SUBS_BIND_ACK: subs_sap_offset %d sub_sap_length %d\n",
848 dlp
->subs_bind_ack
.dl_subs_sap_offset
,
849 dlp
->subs_bind_ack
.dl_subs_sap_length
);
850 (void) printf("sap %s\n", sap
);
853 printdlsubsunbindreq(dlp
)
854 union DL_primitives
*dlp
;
856 u_char sap
[MAXDLADDR
];
858 addrtostring(OFFADDR(dlp
, dlp
->subs_unbind_req
.dl_subs_sap_offset
),
859 dlp
->subs_unbind_req
.dl_subs_sap_length
, sap
);
861 (void) printf("DL_SUBS_UNBIND_REQ: subs_sap_offset %d sub_sap_length %d\n",
862 dlp
->subs_unbind_req
.dl_subs_sap_offset
,
863 dlp
->subs_unbind_req
.dl_subs_sap_length
);
864 (void) printf("sap %s\n", sap
);
867 printdlunitdatareq(dlp
)
868 union DL_primitives
*dlp
;
870 u_char addr
[MAXDLADDR
];
872 addrtostring(OFFADDR(dlp
, dlp
->unitdata_req
.dl_dest_addr_offset
),
873 dlp
->unitdata_req
.dl_dest_addr_length
, addr
);
875 (void) printf("DL_UNITDATA_REQ: dest_addr_length %d dest_addr_offset %d\n",
876 dlp
->unitdata_req
.dl_dest_addr_length
,
877 dlp
->unitdata_req
.dl_dest_addr_offset
);
878 (void) printf("dl_priority.min %d dl_priority.max %d\n",
879 dlp
->unitdata_req
.dl_priority
.dl_min
,
880 dlp
->unitdata_req
.dl_priority
.dl_max
);
881 (void) printf("addr %s\n", addr
);
884 printdlunitdataind(dlp
)
885 union DL_primitives
*dlp
;
887 u_char dest
[MAXDLADDR
];
888 u_char src
[MAXDLADDR
];
890 addrtostring(OFFADDR(dlp
, dlp
->unitdata_ind
.dl_dest_addr_offset
),
891 dlp
->unitdata_ind
.dl_dest_addr_length
, dest
);
892 addrtostring(OFFADDR(dlp
, dlp
->unitdata_ind
.dl_src_addr_offset
),
893 dlp
->unitdata_ind
.dl_src_addr_length
, src
);
895 (void) printf("DL_UNITDATA_IND: dest_addr_length %d dest_addr_offset %d\n",
896 dlp
->unitdata_ind
.dl_dest_addr_length
,
897 dlp
->unitdata_ind
.dl_dest_addr_offset
);
898 (void) printf("src_addr_length %d src_addr_offset %d\n",
899 dlp
->unitdata_ind
.dl_src_addr_length
,
900 dlp
->unitdata_ind
.dl_src_addr_offset
);
901 (void) printf("group_address 0x%x\n",
902 dlp
->unitdata_ind
.dl_group_address
);
903 (void) printf("dest %s\n", dest
);
904 (void) printf("src %s\n", src
);
907 printdluderrorind(dlp
)
908 union DL_primitives
*dlp
;
910 u_char addr
[MAXDLADDR
];
912 addrtostring(OFFADDR(dlp
, dlp
->uderror_ind
.dl_dest_addr_offset
),
913 dlp
->uderror_ind
.dl_dest_addr_length
, addr
);
915 (void) printf("DL_UDERROR_IND: dest_addr_length %d dest_addr_offset %d\n",
916 dlp
->uderror_ind
.dl_dest_addr_length
,
917 dlp
->uderror_ind
.dl_dest_addr_offset
);
918 (void) printf("unix_errno %d errno %s\n",
919 dlp
->uderror_ind
.dl_unix_errno
,
920 dlerrno(dlp
->uderror_ind
.dl_errno
));
921 (void) printf("addr %s\n", addr
);
925 union DL_primitives
*dlp
;
927 u_char addr
[MAXDLADDR
];
929 addrtostring(OFFADDR(dlp
, dlp
->test_req
.dl_dest_addr_offset
),
930 dlp
->test_req
.dl_dest_addr_length
, addr
);
932 (void) printf("DL_TEST_REQ: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
933 dlp
->test_req
.dl_flag
,
934 dlp
->test_req
.dl_dest_addr_length
,
935 dlp
->test_req
.dl_dest_addr_offset
);
936 (void) printf("dest_addr %s\n", addr
);
940 union DL_primitives
*dlp
;
942 u_char dest
[MAXDLADDR
];
943 u_char src
[MAXDLADDR
];
945 addrtostring(OFFADDR(dlp
, dlp
->test_ind
.dl_dest_addr_offset
),
946 dlp
->test_ind
.dl_dest_addr_length
, dest
);
947 addrtostring(OFFADDR(dlp
, dlp
->test_ind
.dl_src_addr_offset
),
948 dlp
->test_ind
.dl_src_addr_length
, src
);
950 (void) printf("DL_TEST_IND: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
951 dlp
->test_ind
.dl_flag
,
952 dlp
->test_ind
.dl_dest_addr_length
,
953 dlp
->test_ind
.dl_dest_addr_offset
);
954 (void) printf("src_addr_length %d src_addr_offset %d\n",
955 dlp
->test_ind
.dl_src_addr_length
,
956 dlp
->test_ind
.dl_src_addr_offset
);
957 (void) printf("dest_addr %s\n", dest
);
958 (void) printf("src_addr %s\n", src
);
962 union DL_primitives
*dlp
;
964 u_char dest
[MAXDLADDR
];
966 addrtostring(OFFADDR(dlp
, dlp
->test_res
.dl_dest_addr_offset
),
967 dlp
->test_res
.dl_dest_addr_length
, dest
);
969 (void) printf("DL_TEST_RES: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
970 dlp
->test_res
.dl_flag
,
971 dlp
->test_res
.dl_dest_addr_length
,
972 dlp
->test_res
.dl_dest_addr_offset
);
973 (void) printf("dest_addr %s\n", dest
);
977 union DL_primitives
*dlp
;
979 u_char dest
[MAXDLADDR
];
980 u_char src
[MAXDLADDR
];
982 addrtostring(OFFADDR(dlp
, dlp
->test_con
.dl_dest_addr_offset
),
983 dlp
->test_con
.dl_dest_addr_length
, dest
);
984 addrtostring(OFFADDR(dlp
, dlp
->test_con
.dl_src_addr_offset
),
985 dlp
->test_con
.dl_src_addr_length
, src
);
987 (void) printf("DL_TEST_CON: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
988 dlp
->test_con
.dl_flag
,
989 dlp
->test_con
.dl_dest_addr_length
,
990 dlp
->test_con
.dl_dest_addr_offset
);
991 (void) printf("src_addr_length %d src_addr_offset %d\n",
992 dlp
->test_con
.dl_src_addr_length
,
993 dlp
->test_con
.dl_src_addr_offset
);
994 (void) printf("dest_addr %s\n", dest
);
995 (void) printf("src_addr %s\n", src
);
999 union DL_primitives
*dlp
;
1001 u_char dest
[MAXDLADDR
];
1003 addrtostring(OFFADDR(dlp
, dlp
->xid_req
.dl_dest_addr_offset
),
1004 dlp
->xid_req
.dl_dest_addr_length
, dest
);
1006 (void) printf("DL_XID_REQ: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
1007 dlp
->xid_req
.dl_flag
,
1008 dlp
->xid_req
.dl_dest_addr_length
,
1009 dlp
->xid_req
.dl_dest_addr_offset
);
1010 (void) printf("dest_addr %s\n", dest
);
1014 union DL_primitives
*dlp
;
1016 u_char dest
[MAXDLADDR
];
1017 u_char src
[MAXDLADDR
];
1019 addrtostring(OFFADDR(dlp
, dlp
->xid_ind
.dl_dest_addr_offset
),
1020 dlp
->xid_ind
.dl_dest_addr_length
, dest
);
1021 addrtostring(OFFADDR(dlp
, dlp
->xid_ind
.dl_src_addr_offset
),
1022 dlp
->xid_ind
.dl_src_addr_length
, src
);
1024 (void) printf("DL_XID_IND: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
1025 dlp
->xid_ind
.dl_flag
,
1026 dlp
->xid_ind
.dl_dest_addr_length
,
1027 dlp
->xid_ind
.dl_dest_addr_offset
);
1028 (void) printf("src_addr_length %d src_addr_offset %d\n",
1029 dlp
->xid_ind
.dl_src_addr_length
,
1030 dlp
->xid_ind
.dl_src_addr_offset
);
1031 (void) printf("dest_addr %s\n", dest
);
1032 (void) printf("src_addr %s\n", src
);
1036 union DL_primitives
*dlp
;
1038 u_char dest
[MAXDLADDR
];
1040 addrtostring(OFFADDR(dlp
, dlp
->xid_res
.dl_dest_addr_offset
),
1041 dlp
->xid_res
.dl_dest_addr_length
, dest
);
1043 (void) printf("DL_XID_RES: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
1044 dlp
->xid_res
.dl_flag
,
1045 dlp
->xid_res
.dl_dest_addr_length
,
1046 dlp
->xid_res
.dl_dest_addr_offset
);
1047 (void) printf("dest_addr %s\n", dest
);
1051 union DL_primitives
*dlp
;
1053 u_char dest
[MAXDLADDR
];
1054 u_char src
[MAXDLADDR
];
1056 addrtostring(OFFADDR(dlp
, dlp
->xid_con
.dl_dest_addr_offset
),
1057 dlp
->xid_con
.dl_dest_addr_length
, dest
);
1058 addrtostring(OFFADDR(dlp
, dlp
->xid_con
.dl_src_addr_offset
),
1059 dlp
->xid_con
.dl_src_addr_length
, src
);
1061 (void) printf("DL_XID_CON: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
1062 dlp
->xid_con
.dl_flag
,
1063 dlp
->xid_con
.dl_dest_addr_length
,
1064 dlp
->xid_con
.dl_dest_addr_offset
);
1065 (void) printf("src_addr_length %d src_addr_offset %d\n",
1066 dlp
->xid_con
.dl_src_addr_length
,
1067 dlp
->xid_con
.dl_src_addr_offset
);
1068 (void) printf("dest_addr %s\n", dest
);
1069 (void) printf("src_addr %s\n", src
);
1072 printdludqosreq(dlp
)
1073 union DL_primitives
*dlp
;
1075 (void) printf("DL_UDQOS_REQ: qos_length %d qos_offset %d\n",
1076 dlp
->udqos_req
.dl_qos_length
,
1077 dlp
->udqos_req
.dl_qos_offset
);
1083 addrtostring(addr
, length
, s
)
1090 for (i
= 0; i
< length
; i
++) {
1091 (void) sprintf((char*) s
, "%x:", addr
[i
] & 0xff);
1092 s
= s
+ strlen((char*)s
);
1101 stringtoaddr(sp
, addr
)
1110 while (p
= strtok(p
, ":")) {
1111 if (sscanf(p
, "%x", &val
) != 1)
1112 err("stringtoaddr: invalid input string: %s", sp
);
1114 err("stringtoaddr: invalid input string: %s", sp
);
1128 static char hextab
[] = {
1129 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
1130 'a', 'b', 'c', 'd', 'e', 'f'
1133 return (hextab
[c
& 0x0f]);
1140 static char primbuf
[80];
1142 switch ((int)prim
) {
1143 CASERET(DL_INFO_REQ
);
1144 CASERET(DL_INFO_ACK
);
1145 CASERET(DL_ATTACH_REQ
);
1146 CASERET(DL_DETACH_REQ
);
1147 CASERET(DL_BIND_REQ
);
1148 CASERET(DL_BIND_ACK
);
1149 CASERET(DL_UNBIND_REQ
);
1151 CASERET(DL_ERROR_ACK
);
1152 CASERET(DL_SUBS_BIND_REQ
);
1153 CASERET(DL_SUBS_BIND_ACK
);
1154 CASERET(DL_UNITDATA_REQ
);
1155 CASERET(DL_UNITDATA_IND
);
1156 CASERET(DL_UDERROR_IND
);
1157 CASERET(DL_UDQOS_REQ
);
1158 CASERET(DL_CONNECT_REQ
);
1159 CASERET(DL_CONNECT_IND
);
1160 CASERET(DL_CONNECT_RES
);
1161 CASERET(DL_CONNECT_CON
);
1162 CASERET(DL_TOKEN_REQ
);
1163 CASERET(DL_TOKEN_ACK
);
1164 CASERET(DL_DISCONNECT_REQ
);
1165 CASERET(DL_DISCONNECT_IND
);
1166 CASERET(DL_RESET_REQ
);
1167 CASERET(DL_RESET_IND
);
1168 CASERET(DL_RESET_RES
);
1169 CASERET(DL_RESET_CON
);
1171 (void) sprintf(primbuf
, "unknown primitive 0x%x", prim
);
1181 static char statebuf
[80];
1184 CASERET(DL_UNATTACHED
);
1185 CASERET(DL_ATTACH_PENDING
);
1186 CASERET(DL_DETACH_PENDING
);
1187 CASERET(DL_UNBOUND
);
1188 CASERET(DL_BIND_PENDING
);
1189 CASERET(DL_UNBIND_PENDING
);
1191 CASERET(DL_UDQOS_PENDING
);
1192 CASERET(DL_OUTCON_PENDING
);
1193 CASERET(DL_INCON_PENDING
);
1194 CASERET(DL_CONN_RES_PENDING
);
1195 CASERET(DL_DATAXFER
);
1196 CASERET(DL_USER_RESET_PENDING
);
1197 CASERET(DL_PROV_RESET_PENDING
);
1198 CASERET(DL_RESET_RES_PENDING
);
1199 CASERET(DL_DISCON8_PENDING
);
1200 CASERET(DL_DISCON9_PENDING
);
1201 CASERET(DL_DISCON11_PENDING
);
1202 CASERET(DL_DISCON12_PENDING
);
1203 CASERET(DL_DISCON13_PENDING
);
1204 CASERET(DL_SUBS_BIND_PND
);
1206 (void) sprintf(statebuf
, "unknown state 0x%x", state
);
1215 static char errnobuf
[80];
1219 CASERET(DL_BADADDR
);
1220 CASERET(DL_BADCORR
);
1221 CASERET(DL_BADDATA
);
1223 CASERET(DL_BADPRIM
);
1224 CASERET(DL_BADQOSPARAM
);
1225 CASERET(DL_BADQOSTYPE
);
1227 CASERET(DL_BADTOKEN
);
1229 CASERET(DL_INITFAILED
);
1231 CASERET(DL_NOTINIT
);
1232 CASERET(DL_OUTSTATE
);
1234 CASERET(DL_UNSUPPORTED
);
1235 CASERET(DL_UNDELIVERABLE
);
1236 CASERET(DL_NOTSUPPORTED
);
1237 CASERET(DL_TOOMANY
);
1238 CASERET(DL_NOTENAB
);
1241 CASERET(DL_NOXIDAUTO
);
1242 CASERET(DL_NOTESTAUTO
);
1243 CASERET(DL_XIDAUTO
);
1244 CASERET(DL_TESTAUTO
);
1245 CASERET(DL_PENDING
);
1248 (void) sprintf(errnobuf
, "unknown dlpi errno 0x%x", errno
);
1254 dlpromisclevel(level
)
1257 static char levelbuf
[80];
1260 CASERET(DL_PROMISC_PHYS
);
1261 CASERET(DL_PROMISC_SAP
);
1262 CASERET(DL_PROMISC_MULTI
);
1264 (void) sprintf(levelbuf
, "unknown promisc level 0x%x", level
);
1270 dlservicemode(servicemode
)
1273 static char servicemodebuf
[80];
1275 switch (servicemode
) {
1278 CASERET(DL_CODLS
|DL_CLDLS
);
1280 (void) sprintf(servicemodebuf
,
1281 "unknown provider service mode 0x%x", servicemode
);
1282 return (servicemodebuf
);
1290 static char stylebuf
[80];
1296 (void) sprintf(stylebuf
, "unknown provider style 0x%x", style
);
1305 static char mediabuf
[80];
1317 (void) sprintf(mediabuf
, "unknown media type 0x%x", media
);
1323 err(fmt
, a1
, a2
, a3
, a4
)
1325 char *a1
, *a2
, *a3
, *a4
;
1327 (void) fprintf(stderr
, fmt
, a1
, a2
, a3
, a4
);
1328 (void) fprintf(stderr
, "\n");
1339 strioctl(fd
, cmd
, timout
, len
, dp
)
1346 struct strioctl sioc
;
1350 sioc
.ic_timout
= timout
;
1353 rc
= ioctl(fd
, I_STR
, &sioc
);
1358 return (sioc
.ic_len
);