141edb306SCy Schubert
241edb306SCy Schubert /*
341edb306SCy Schubert * Common (shared) DLPI test routines.
441edb306SCy Schubert * Mostly pretty boring boilerplate sorta stuff.
541edb306SCy Schubert * These can be split into individual library routines later
641edb306SCy Schubert * but it's just convenient to keep them in a single file
741edb306SCy Schubert * while they're being developed.
841edb306SCy Schubert *
941edb306SCy Schubert * Not supported:
1041edb306SCy Schubert * Connection Oriented stuff
1141edb306SCy Schubert * QOS stuff
1241edb306SCy Schubert */
1341edb306SCy Schubert
1441edb306SCy Schubert /*
1541edb306SCy Schubert typedef unsigned long ulong;
1641edb306SCy Schubert */
1741edb306SCy Schubert
1841edb306SCy Schubert
1941edb306SCy Schubert #include <sys/types.h>
2041edb306SCy Schubert #include <sys/stream.h>
2141edb306SCy Schubert #include <sys/stropts.h>
2241edb306SCy Schubert # include <sys/dlpi.h>
2341edb306SCy Schubert #include <sys/signal.h>
2441edb306SCy Schubert #include <stdio.h>
2541edb306SCy Schubert #include <string.h>
2641edb306SCy Schubert #include "dltest.h"
2741edb306SCy Schubert
2841edb306SCy Schubert #define CASERET(s) case s: return ("s")
2941edb306SCy Schubert
3041edb306SCy Schubert char *dlprim();
3141edb306SCy Schubert char *dlstate();
3241edb306SCy Schubert char *dlerrno();
3341edb306SCy Schubert char *dlpromisclevel();
3441edb306SCy Schubert char *dlservicemode();
3541edb306SCy Schubert char *dlstyle();
3641edb306SCy Schubert char *dlmactype();
3741edb306SCy Schubert
3841edb306SCy Schubert
3941edb306SCy Schubert void
dlinforeq(int fd)40*efeb8bffSCy Schubert dlinforeq(int fd)
4141edb306SCy Schubert {
4241edb306SCy Schubert dl_info_req_t info_req;
4341edb306SCy Schubert struct strbuf ctl;
4441edb306SCy Schubert int flags;
4541edb306SCy Schubert
4641edb306SCy Schubert info_req.dl_primitive = DL_INFO_REQ;
4741edb306SCy Schubert
4841edb306SCy Schubert ctl.maxlen = 0;
4941edb306SCy Schubert ctl.len = sizeof (info_req);
5041edb306SCy Schubert ctl.buf = (char *) &info_req;
5141edb306SCy Schubert
5241edb306SCy Schubert flags = RS_HIPRI;
5341edb306SCy Schubert
5441edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
5541edb306SCy Schubert syserr("dlinforeq: putmsg");
5641edb306SCy Schubert }
5741edb306SCy Schubert
5841edb306SCy Schubert void
dlinfoack(int fd,char * bufp)59*efeb8bffSCy Schubert dlinfoack(int fd, char *bufp)
6041edb306SCy Schubert {
6141edb306SCy Schubert union DL_primitives *dlp;
6241edb306SCy Schubert struct strbuf ctl;
6341edb306SCy Schubert int flags;
6441edb306SCy Schubert
6541edb306SCy Schubert ctl.maxlen = MAXDLBUF;
6641edb306SCy Schubert ctl.len = 0;
6741edb306SCy Schubert ctl.buf = bufp;
6841edb306SCy Schubert
6941edb306SCy Schubert strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlinfoack");
7041edb306SCy Schubert
7141edb306SCy Schubert dlp = (union DL_primitives *) ctl.buf;
7241edb306SCy Schubert
7341edb306SCy Schubert expecting(DL_INFO_ACK, dlp);
7441edb306SCy Schubert
7541edb306SCy Schubert if (ctl.len < sizeof (dl_info_ack_t))
7641edb306SCy Schubert err("dlinfoack: response ctl.len too short: %d", ctl.len);
7741edb306SCy Schubert
7841edb306SCy Schubert if (flags != RS_HIPRI)
7941edb306SCy Schubert err("dlinfoack: DL_INFO_ACK was not M_PCPROTO");
8041edb306SCy Schubert
8141edb306SCy Schubert if (ctl.len < sizeof (dl_info_ack_t))
8241edb306SCy Schubert err("dlinfoack: short response ctl.len: %d", ctl.len);
8341edb306SCy Schubert }
8441edb306SCy Schubert
8541edb306SCy Schubert void
dlattachreq(int fd,u_long ppa)86*efeb8bffSCy Schubert dlattachreq(int fd, u_long ppa)
8741edb306SCy Schubert {
8841edb306SCy Schubert dl_attach_req_t attach_req;
8941edb306SCy Schubert struct strbuf ctl;
9041edb306SCy Schubert int flags;
9141edb306SCy Schubert
9241edb306SCy Schubert attach_req.dl_primitive = DL_ATTACH_REQ;
9341edb306SCy Schubert attach_req.dl_ppa = ppa;
9441edb306SCy Schubert
9541edb306SCy Schubert ctl.maxlen = 0;
9641edb306SCy Schubert ctl.len = sizeof (attach_req);
9741edb306SCy Schubert ctl.buf = (char *) &attach_req;
9841edb306SCy Schubert
9941edb306SCy Schubert flags = 0;
10041edb306SCy Schubert
10141edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
10241edb306SCy Schubert syserr("dlattachreq: putmsg");
10341edb306SCy Schubert }
10441edb306SCy Schubert
10541edb306SCy Schubert void
dlenabmultireq(int fd,char * addr,int length)106*efeb8bffSCy Schubert dlenabmultireq(int fd, char *addr, int length)
10741edb306SCy Schubert {
10841edb306SCy Schubert long buf[MAXDLBUF];
10941edb306SCy Schubert union DL_primitives *dlp;
11041edb306SCy Schubert struct strbuf ctl;
11141edb306SCy Schubert int flags;
11241edb306SCy Schubert
11341edb306SCy Schubert dlp = (union DL_primitives*) buf;
11441edb306SCy Schubert
11541edb306SCy Schubert dlp->enabmulti_req.dl_primitive = DL_ENABMULTI_REQ;
11641edb306SCy Schubert dlp->enabmulti_req.dl_addr_length = length;
11741edb306SCy Schubert dlp->enabmulti_req.dl_addr_offset = sizeof (dl_enabmulti_req_t);
11841edb306SCy Schubert
11941edb306SCy Schubert (void) memcpy((char*)OFFADDR(buf, sizeof (dl_enabmulti_req_t)), addr, length);
12041edb306SCy Schubert
12141edb306SCy Schubert ctl.maxlen = 0;
12241edb306SCy Schubert ctl.len = sizeof (dl_enabmulti_req_t) + length;
12341edb306SCy Schubert ctl.buf = (char*) buf;
12441edb306SCy Schubert
12541edb306SCy Schubert flags = 0;
12641edb306SCy Schubert
12741edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
12841edb306SCy Schubert syserr("dlenabmultireq: putmsg");
12941edb306SCy Schubert }
13041edb306SCy Schubert
13141edb306SCy Schubert void
dldisabmultireq(int fd,char * addr,int length)132*efeb8bffSCy Schubert dldisabmultireq(int fd, char *addr, int length)
13341edb306SCy Schubert {
13441edb306SCy Schubert long buf[MAXDLBUF];
13541edb306SCy Schubert union DL_primitives *dlp;
13641edb306SCy Schubert struct strbuf ctl;
13741edb306SCy Schubert int flags;
13841edb306SCy Schubert
13941edb306SCy Schubert dlp = (union DL_primitives*) buf;
14041edb306SCy Schubert
14141edb306SCy Schubert dlp->disabmulti_req.dl_primitive = DL_ENABMULTI_REQ;
14241edb306SCy Schubert dlp->disabmulti_req.dl_addr_length = length;
14341edb306SCy Schubert dlp->disabmulti_req.dl_addr_offset = sizeof (dl_disabmulti_req_t);
14441edb306SCy Schubert
14541edb306SCy Schubert (void) memcpy((char*)OFFADDR(buf, sizeof (dl_disabmulti_req_t)), addr, length);
14641edb306SCy Schubert
14741edb306SCy Schubert ctl.maxlen = 0;
14841edb306SCy Schubert ctl.len = sizeof (dl_disabmulti_req_t) + length;
14941edb306SCy Schubert ctl.buf = (char*) buf;
15041edb306SCy Schubert
15141edb306SCy Schubert flags = 0;
15241edb306SCy Schubert
15341edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
15441edb306SCy Schubert syserr("dldisabmultireq: putmsg");
15541edb306SCy Schubert }
15641edb306SCy Schubert
15741edb306SCy Schubert void
dlpromisconreq(int fd,u_long level)158*efeb8bffSCy Schubert dlpromisconreq(int fd, u_long level)
15941edb306SCy Schubert {
16041edb306SCy Schubert dl_promiscon_req_t promiscon_req;
16141edb306SCy Schubert struct strbuf ctl;
16241edb306SCy Schubert int flags;
16341edb306SCy Schubert
16441edb306SCy Schubert promiscon_req.dl_primitive = DL_PROMISCON_REQ;
16541edb306SCy Schubert promiscon_req.dl_level = level;
16641edb306SCy Schubert
16741edb306SCy Schubert ctl.maxlen = 0;
16841edb306SCy Schubert ctl.len = sizeof (promiscon_req);
16941edb306SCy Schubert ctl.buf = (char *) &promiscon_req;
17041edb306SCy Schubert
17141edb306SCy Schubert flags = 0;
17241edb306SCy Schubert
17341edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
17441edb306SCy Schubert syserr("dlpromiscon: putmsg");
17541edb306SCy Schubert
17641edb306SCy Schubert }
17741edb306SCy Schubert
17841edb306SCy Schubert void
dlpromiscoff(int fd,u_long level)179*efeb8bffSCy Schubert dlpromiscoff(int fd, u_long level)
18041edb306SCy Schubert {
18141edb306SCy Schubert dl_promiscoff_req_t promiscoff_req;
18241edb306SCy Schubert struct strbuf ctl;
18341edb306SCy Schubert int flags;
18441edb306SCy Schubert
18541edb306SCy Schubert promiscoff_req.dl_primitive = DL_PROMISCOFF_REQ;
18641edb306SCy Schubert promiscoff_req.dl_level = level;
18741edb306SCy Schubert
18841edb306SCy Schubert ctl.maxlen = 0;
18941edb306SCy Schubert ctl.len = sizeof (promiscoff_req);
19041edb306SCy Schubert ctl.buf = (char *) &promiscoff_req;
19141edb306SCy Schubert
19241edb306SCy Schubert flags = 0;
19341edb306SCy Schubert
19441edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
19541edb306SCy Schubert syserr("dlpromiscoff: putmsg");
19641edb306SCy Schubert }
19741edb306SCy Schubert
19841edb306SCy Schubert void
dlphysaddrreq(int fd,u_long addrtype)199*efeb8bffSCy Schubert dlphysaddrreq(int fd, u_long addrtype)
20041edb306SCy Schubert {
20141edb306SCy Schubert dl_phys_addr_req_t phys_addr_req;
20241edb306SCy Schubert struct strbuf ctl;
20341edb306SCy Schubert int flags;
20441edb306SCy Schubert
20541edb306SCy Schubert phys_addr_req.dl_primitive = DL_PHYS_ADDR_REQ;
20641edb306SCy Schubert phys_addr_req.dl_addr_type = addrtype;
20741edb306SCy Schubert
20841edb306SCy Schubert ctl.maxlen = 0;
20941edb306SCy Schubert ctl.len = sizeof (phys_addr_req);
21041edb306SCy Schubert ctl.buf = (char *) &phys_addr_req;
21141edb306SCy Schubert
21241edb306SCy Schubert flags = 0;
21341edb306SCy Schubert
21441edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
21541edb306SCy Schubert syserr("dlphysaddrreq: putmsg");
21641edb306SCy Schubert }
21741edb306SCy Schubert
21841edb306SCy Schubert void
dlsetphysaddrreq(int fd,char * addr,int length)219*efeb8bffSCy Schubert dlsetphysaddrreq(int fd, char *addr, int length)
22041edb306SCy Schubert {
22141edb306SCy Schubert long buf[MAXDLBUF];
22241edb306SCy Schubert union DL_primitives *dlp;
22341edb306SCy Schubert struct strbuf ctl;
22441edb306SCy Schubert int flags;
22541edb306SCy Schubert
22641edb306SCy Schubert dlp = (union DL_primitives*) buf;
22741edb306SCy Schubert
22841edb306SCy Schubert dlp->set_physaddr_req.dl_primitive = DL_ENABMULTI_REQ;
22941edb306SCy Schubert dlp->set_physaddr_req.dl_addr_length = length;
23041edb306SCy Schubert dlp->set_physaddr_req.dl_addr_offset = sizeof (dl_set_phys_addr_req_t);
23141edb306SCy Schubert
23241edb306SCy Schubert (void) memcpy((char*)OFFADDR(buf, sizeof (dl_set_phys_addr_req_t)), addr, length);
23341edb306SCy Schubert
23441edb306SCy Schubert ctl.maxlen = 0;
23541edb306SCy Schubert ctl.len = sizeof (dl_set_phys_addr_req_t) + length;
23641edb306SCy Schubert ctl.buf = (char*) buf;
23741edb306SCy Schubert
23841edb306SCy Schubert flags = 0;
23941edb306SCy Schubert
24041edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
24141edb306SCy Schubert syserr("dlsetphysaddrreq: putmsg");
24241edb306SCy Schubert }
24341edb306SCy Schubert
24441edb306SCy Schubert void
dldetachreq(int fd)245*efeb8bffSCy Schubert dldetachreq(int fd)
24641edb306SCy Schubert {
24741edb306SCy Schubert dl_detach_req_t detach_req;
24841edb306SCy Schubert struct strbuf ctl;
24941edb306SCy Schubert int flags;
25041edb306SCy Schubert
25141edb306SCy Schubert detach_req.dl_primitive = DL_DETACH_REQ;
25241edb306SCy Schubert
25341edb306SCy Schubert ctl.maxlen = 0;
25441edb306SCy Schubert ctl.len = sizeof (detach_req);
25541edb306SCy Schubert ctl.buf = (char *) &detach_req;
25641edb306SCy Schubert
25741edb306SCy Schubert flags = 0;
25841edb306SCy Schubert
25941edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
26041edb306SCy Schubert syserr("dldetachreq: putmsg");
26141edb306SCy Schubert }
26241edb306SCy Schubert
26341edb306SCy Schubert void
dlbindreq(int fd,u_long sap,u_long max_conind,u_long service_mode,u_long conn_mgmt,u_long xidtest)264*efeb8bffSCy Schubert dlbindreq(int fd, u_long sap, u_long max_conind, u_long service_mode,
265*efeb8bffSCy Schubert u_long conn_mgmt, u_long xidtest)
26641edb306SCy Schubert {
26741edb306SCy Schubert dl_bind_req_t bind_req;
26841edb306SCy Schubert struct strbuf ctl;
26941edb306SCy Schubert int flags;
27041edb306SCy Schubert
27141edb306SCy Schubert bind_req.dl_primitive = DL_BIND_REQ;
27241edb306SCy Schubert bind_req.dl_sap = sap;
27341edb306SCy Schubert bind_req.dl_max_conind = max_conind;
27441edb306SCy Schubert bind_req.dl_service_mode = service_mode;
27541edb306SCy Schubert bind_req.dl_conn_mgmt = conn_mgmt;
27641edb306SCy Schubert bind_req.dl_xidtest_flg = xidtest;
27741edb306SCy Schubert
27841edb306SCy Schubert ctl.maxlen = 0;
27941edb306SCy Schubert ctl.len = sizeof (bind_req);
28041edb306SCy Schubert ctl.buf = (char *) &bind_req;
28141edb306SCy Schubert
28241edb306SCy Schubert flags = 0;
28341edb306SCy Schubert
28441edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
28541edb306SCy Schubert syserr("dlbindreq: putmsg");
28641edb306SCy Schubert }
28741edb306SCy Schubert
28841edb306SCy Schubert void
dlunitdatareq(int fd,u_char * addrp,int addrlen,u_long minpri,u_long maxpri,u_char * datap,int datalen)289*efeb8bffSCy Schubert dlunitdatareq(int fd, u_char *addrp, int addrlen, u_long minpri,
290*efeb8bffSCy Schubert u_long maxpri, u_char *datap, int datalen)
29141edb306SCy Schubert {
29241edb306SCy Schubert long buf[MAXDLBUF];
29341edb306SCy Schubert union DL_primitives *dlp;
29441edb306SCy Schubert struct strbuf data, ctl;
29541edb306SCy Schubert
29641edb306SCy Schubert dlp = (union DL_primitives*) buf;
29741edb306SCy Schubert
29841edb306SCy Schubert dlp->unitdata_req.dl_primitive = DL_UNITDATA_REQ;
29941edb306SCy Schubert dlp->unitdata_req.dl_dest_addr_length = addrlen;
30041edb306SCy Schubert dlp->unitdata_req.dl_dest_addr_offset = sizeof (dl_unitdata_req_t);
30141edb306SCy Schubert dlp->unitdata_req.dl_priority.dl_min = minpri;
30241edb306SCy Schubert dlp->unitdata_req.dl_priority.dl_max = maxpri;
30341edb306SCy Schubert
30441edb306SCy Schubert (void) memcpy(OFFADDR(dlp, sizeof (dl_unitdata_req_t)), addrp, addrlen);
30541edb306SCy Schubert
30641edb306SCy Schubert ctl.maxlen = 0;
30741edb306SCy Schubert ctl.len = sizeof (dl_unitdata_req_t) + addrlen;
30841edb306SCy Schubert ctl.buf = (char *) buf;
30941edb306SCy Schubert
31041edb306SCy Schubert data.maxlen = 0;
31141edb306SCy Schubert data.len = datalen;
31241edb306SCy Schubert data.buf = (char *) datap;
31341edb306SCy Schubert
31441edb306SCy Schubert if (putmsg(fd, &ctl, &data, 0) < 0)
31541edb306SCy Schubert syserr("dlunitdatareq: putmsg");
31641edb306SCy Schubert }
31741edb306SCy Schubert
31841edb306SCy Schubert void
dlunbindreq(int fd)319*efeb8bffSCy Schubert dlunbindreq(int fd)
32041edb306SCy Schubert {
32141edb306SCy Schubert dl_unbind_req_t unbind_req;
32241edb306SCy Schubert struct strbuf ctl;
32341edb306SCy Schubert int flags;
32441edb306SCy Schubert
32541edb306SCy Schubert unbind_req.dl_primitive = DL_UNBIND_REQ;
32641edb306SCy Schubert
32741edb306SCy Schubert ctl.maxlen = 0;
32841edb306SCy Schubert ctl.len = sizeof (unbind_req);
32941edb306SCy Schubert ctl.buf = (char *) &unbind_req;
33041edb306SCy Schubert
33141edb306SCy Schubert flags = 0;
33241edb306SCy Schubert
33341edb306SCy Schubert if (putmsg(fd, &ctl, (struct strbuf*) NULL, flags) < 0)
33441edb306SCy Schubert syserr("dlunbindreq: putmsg");
33541edb306SCy Schubert }
33641edb306SCy Schubert
33741edb306SCy Schubert void
dlokack(int fd,char * bufp)338*efeb8bffSCy Schubert dlokack(int fd, char *bufp)
33941edb306SCy Schubert {
34041edb306SCy Schubert union DL_primitives *dlp;
34141edb306SCy Schubert struct strbuf ctl;
34241edb306SCy Schubert int flags;
34341edb306SCy Schubert
34441edb306SCy Schubert ctl.maxlen = MAXDLBUF;
34541edb306SCy Schubert ctl.len = 0;
34641edb306SCy Schubert ctl.buf = bufp;
34741edb306SCy Schubert
34841edb306SCy Schubert strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlokack");
34941edb306SCy Schubert
35041edb306SCy Schubert dlp = (union DL_primitives *) ctl.buf;
35141edb306SCy Schubert
35241edb306SCy Schubert expecting(DL_OK_ACK, dlp);
35341edb306SCy Schubert
35441edb306SCy Schubert if (ctl.len < sizeof (dl_ok_ack_t))
35541edb306SCy Schubert err("dlokack: response ctl.len too short: %d", ctl.len);
35641edb306SCy Schubert
35741edb306SCy Schubert if (flags != RS_HIPRI)
35841edb306SCy Schubert err("dlokack: DL_OK_ACK was not M_PCPROTO");
35941edb306SCy Schubert
36041edb306SCy Schubert if (ctl.len < sizeof (dl_ok_ack_t))
36141edb306SCy Schubert err("dlokack: short response ctl.len: %d", ctl.len);
36241edb306SCy Schubert }
36341edb306SCy Schubert
36441edb306SCy Schubert void
dlerrorack(int fd,char * bufp)365*efeb8bffSCy Schubert dlerrorack(int fd, char *bufp)
36641edb306SCy Schubert {
36741edb306SCy Schubert union DL_primitives *dlp;
36841edb306SCy Schubert struct strbuf ctl;
36941edb306SCy Schubert int flags;
37041edb306SCy Schubert
37141edb306SCy Schubert ctl.maxlen = MAXDLBUF;
37241edb306SCy Schubert ctl.len = 0;
37341edb306SCy Schubert ctl.buf = bufp;
37441edb306SCy Schubert
37541edb306SCy Schubert strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlerrorack");
37641edb306SCy Schubert
37741edb306SCy Schubert dlp = (union DL_primitives *) ctl.buf;
37841edb306SCy Schubert
37941edb306SCy Schubert expecting(DL_ERROR_ACK, dlp);
38041edb306SCy Schubert
38141edb306SCy Schubert if (ctl.len < sizeof (dl_error_ack_t))
38241edb306SCy Schubert err("dlerrorack: response ctl.len too short: %d", ctl.len);
38341edb306SCy Schubert
38441edb306SCy Schubert if (flags != RS_HIPRI)
38541edb306SCy Schubert err("dlerrorack: DL_OK_ACK was not M_PCPROTO");
38641edb306SCy Schubert
38741edb306SCy Schubert if (ctl.len < sizeof (dl_error_ack_t))
38841edb306SCy Schubert err("dlerrorack: short response ctl.len: %d", ctl.len);
38941edb306SCy Schubert }
39041edb306SCy Schubert
39141edb306SCy Schubert void
dlbindack(int fd,char * bufp)392*efeb8bffSCy Schubert dlbindack(int fd, char *bufp)
39341edb306SCy Schubert {
39441edb306SCy Schubert union DL_primitives *dlp;
39541edb306SCy Schubert struct strbuf ctl;
39641edb306SCy Schubert int flags;
39741edb306SCy Schubert
39841edb306SCy Schubert ctl.maxlen = MAXDLBUF;
39941edb306SCy Schubert ctl.len = 0;
40041edb306SCy Schubert ctl.buf = bufp;
40141edb306SCy Schubert
40241edb306SCy Schubert strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlbindack");
40341edb306SCy Schubert
40441edb306SCy Schubert dlp = (union DL_primitives *) ctl.buf;
40541edb306SCy Schubert
40641edb306SCy Schubert expecting(DL_BIND_ACK, dlp);
40741edb306SCy Schubert
40841edb306SCy Schubert if (flags != RS_HIPRI)
40941edb306SCy Schubert err("dlbindack: DL_OK_ACK was not M_PCPROTO");
41041edb306SCy Schubert
41141edb306SCy Schubert if (ctl.len < sizeof (dl_bind_ack_t))
41241edb306SCy Schubert err("dlbindack: short response ctl.len: %d", ctl.len);
41341edb306SCy Schubert }
41441edb306SCy Schubert
41541edb306SCy Schubert void
dlphysaddrack(int fd,char * bufp)416*efeb8bffSCy Schubert dlphysaddrack(int fd, char *bufp)
41741edb306SCy Schubert {
41841edb306SCy Schubert union DL_primitives *dlp;
41941edb306SCy Schubert struct strbuf ctl;
42041edb306SCy Schubert int flags;
42141edb306SCy Schubert
42241edb306SCy Schubert ctl.maxlen = MAXDLBUF;
42341edb306SCy Schubert ctl.len = 0;
42441edb306SCy Schubert ctl.buf = bufp;
42541edb306SCy Schubert
42641edb306SCy Schubert strgetmsg(fd, &ctl, (struct strbuf*)NULL, &flags, "dlphysaddrack");
42741edb306SCy Schubert
42841edb306SCy Schubert dlp = (union DL_primitives *) ctl.buf;
42941edb306SCy Schubert
43041edb306SCy Schubert expecting(DL_PHYS_ADDR_ACK, dlp);
43141edb306SCy Schubert
43241edb306SCy Schubert if (flags != RS_HIPRI)
43341edb306SCy Schubert err("dlbindack: DL_OK_ACK was not M_PCPROTO");
43441edb306SCy Schubert
43541edb306SCy Schubert if (ctl.len < sizeof (dl_phys_addr_ack_t))
43641edb306SCy Schubert err("dlphysaddrack: short response ctl.len: %d", ctl.len);
43741edb306SCy Schubert }
43841edb306SCy Schubert
43941edb306SCy Schubert void
sigalrm(void)440*efeb8bffSCy Schubert sigalrm(void)
44141edb306SCy Schubert {
44241edb306SCy Schubert (void) err("sigalrm: TIMEOUT");
44341edb306SCy Schubert }
44441edb306SCy Schubert
strgetmsg(int fd,struct strbuf * ctlp,struct strbuf * datap,int * flagsp,char * caller)445*efeb8bffSCy Schubert strgetmsg(int fd, struct strbuf *ctlp, struct strbuf *datap, int *flagsp,
446*efeb8bffSCy Schubert char *caller)
44741edb306SCy Schubert {
44841edb306SCy Schubert int rc;
44941edb306SCy Schubert static char errmsg[80];
45041edb306SCy Schubert
45141edb306SCy Schubert /*
45241edb306SCy Schubert * Start timer.
45341edb306SCy Schubert */
45441edb306SCy Schubert (void) signal(SIGALRM, sigalrm);
45541edb306SCy Schubert if (alarm(MAXWAIT) < 0) {
45641edb306SCy Schubert (void) snprintf(errmsg, sizeof(errmsg), "%s: alarm", caller);
45741edb306SCy Schubert syserr(errmsg);
45841edb306SCy Schubert }
45941edb306SCy Schubert
46041edb306SCy Schubert /*
46141edb306SCy Schubert * Set flags argument and issue getmsg().
46241edb306SCy Schubert */
46341edb306SCy Schubert *flagsp = 0;
46441edb306SCy Schubert if ((rc = getmsg(fd, ctlp, datap, flagsp)) < 0) {
46541edb306SCy Schubert (void) snprintf(errmsg, sizeof(errmsg), "%s: getmsg", caller);
46641edb306SCy Schubert syserr(errmsg);
46741edb306SCy Schubert }
46841edb306SCy Schubert
46941edb306SCy Schubert /*
47041edb306SCy Schubert * Stop timer.
47141edb306SCy Schubert */
47241edb306SCy Schubert if (alarm(0) < 0) {
47341edb306SCy Schubert (void) snprintf(errmsg, sizeof(errmsg), "%s: alarm", caller);
47441edb306SCy Schubert syserr(errmsg);
47541edb306SCy Schubert }
47641edb306SCy Schubert
47741edb306SCy Schubert /*
47841edb306SCy Schubert * Check for MOREDATA and/or MORECTL.
47941edb306SCy Schubert */
48041edb306SCy Schubert if ((rc & (MORECTL | MOREDATA)) == (MORECTL | MOREDATA))
48141edb306SCy Schubert err("%s: MORECTL|MOREDATA", caller);
48241edb306SCy Schubert if (rc & MORECTL)
48341edb306SCy Schubert err("%s: MORECTL", caller);
48441edb306SCy Schubert if (rc & MOREDATA)
48541edb306SCy Schubert err("%s: MOREDATA", caller);
48641edb306SCy Schubert
48741edb306SCy Schubert /*
48841edb306SCy Schubert * Check for at least sizeof (long) control data portion.
48941edb306SCy Schubert */
49041edb306SCy Schubert if (ctlp->len < sizeof (long))
49141edb306SCy Schubert err("getmsg: control portion length < sizeof (long): %d", ctlp->len);
49241edb306SCy Schubert }
49341edb306SCy Schubert
expecting(int prim,union DL_primitives * dlp)494*efeb8bffSCy Schubert expecting(int prim, union DL_primitives *dlp)
49541edb306SCy Schubert {
49641edb306SCy Schubert if (dlp->dl_primitive != (u_long)prim) {
49741edb306SCy Schubert printdlprim(dlp);
49841edb306SCy Schubert err("expected %s got %s", dlprim(prim),
49941edb306SCy Schubert dlprim(dlp->dl_primitive));
50041edb306SCy Schubert exit(1);
50141edb306SCy Schubert }
50241edb306SCy Schubert }
50341edb306SCy Schubert
50441edb306SCy Schubert /*
50541edb306SCy Schubert * Print any DLPI msg in human readable format.
50641edb306SCy Schubert */
printdlprim(union DL_primitives * dlp)507*efeb8bffSCy Schubert printdlprim(union DL_primitives *dlp)
50841edb306SCy Schubert {
50941edb306SCy Schubert switch (dlp->dl_primitive) {
51041edb306SCy Schubert case DL_INFO_REQ:
51141edb306SCy Schubert printdlinforeq(dlp);
51241edb306SCy Schubert break;
51341edb306SCy Schubert
51441edb306SCy Schubert case DL_INFO_ACK:
51541edb306SCy Schubert printdlinfoack(dlp);
51641edb306SCy Schubert break;
51741edb306SCy Schubert
51841edb306SCy Schubert case DL_ATTACH_REQ:
51941edb306SCy Schubert printdlattachreq(dlp);
52041edb306SCy Schubert break;
52141edb306SCy Schubert
52241edb306SCy Schubert case DL_OK_ACK:
52341edb306SCy Schubert printdlokack(dlp);
52441edb306SCy Schubert break;
52541edb306SCy Schubert
52641edb306SCy Schubert case DL_ERROR_ACK:
52741edb306SCy Schubert printdlerrorack(dlp);
52841edb306SCy Schubert break;
52941edb306SCy Schubert
53041edb306SCy Schubert case DL_DETACH_REQ:
53141edb306SCy Schubert printdldetachreq(dlp);
53241edb306SCy Schubert break;
53341edb306SCy Schubert
53441edb306SCy Schubert case DL_BIND_REQ:
53541edb306SCy Schubert printdlbindreq(dlp);
53641edb306SCy Schubert break;
53741edb306SCy Schubert
53841edb306SCy Schubert case DL_BIND_ACK:
53941edb306SCy Schubert printdlbindack(dlp);
54041edb306SCy Schubert break;
54141edb306SCy Schubert
54241edb306SCy Schubert case DL_UNBIND_REQ:
54341edb306SCy Schubert printdlunbindreq(dlp);
54441edb306SCy Schubert break;
54541edb306SCy Schubert
54641edb306SCy Schubert case DL_SUBS_BIND_REQ:
54741edb306SCy Schubert printdlsubsbindreq(dlp);
54841edb306SCy Schubert break;
54941edb306SCy Schubert
55041edb306SCy Schubert case DL_SUBS_BIND_ACK:
55141edb306SCy Schubert printdlsubsbindack(dlp);
55241edb306SCy Schubert break;
55341edb306SCy Schubert
55441edb306SCy Schubert case DL_SUBS_UNBIND_REQ:
55541edb306SCy Schubert printdlsubsunbindreq(dlp);
55641edb306SCy Schubert break;
55741edb306SCy Schubert
55841edb306SCy Schubert case DL_ENABMULTI_REQ:
55941edb306SCy Schubert printdlenabmultireq(dlp);
56041edb306SCy Schubert break;
56141edb306SCy Schubert
56241edb306SCy Schubert case DL_DISABMULTI_REQ:
56341edb306SCy Schubert printdldisabmultireq(dlp);
56441edb306SCy Schubert break;
56541edb306SCy Schubert
56641edb306SCy Schubert case DL_PROMISCON_REQ:
56741edb306SCy Schubert printdlpromisconreq(dlp);
56841edb306SCy Schubert break;
56941edb306SCy Schubert
57041edb306SCy Schubert case DL_PROMISCOFF_REQ:
57141edb306SCy Schubert printdlpromiscoffreq(dlp);
57241edb306SCy Schubert break;
57341edb306SCy Schubert
57441edb306SCy Schubert case DL_UNITDATA_REQ:
57541edb306SCy Schubert printdlunitdatareq(dlp);
57641edb306SCy Schubert break;
57741edb306SCy Schubert
57841edb306SCy Schubert case DL_UNITDATA_IND:
57941edb306SCy Schubert printdlunitdataind(dlp);
58041edb306SCy Schubert break;
58141edb306SCy Schubert
58241edb306SCy Schubert case DL_UDERROR_IND:
58341edb306SCy Schubert printdluderrorind(dlp);
58441edb306SCy Schubert break;
58541edb306SCy Schubert
58641edb306SCy Schubert case DL_UDQOS_REQ:
58741edb306SCy Schubert printdludqosreq(dlp);
58841edb306SCy Schubert break;
58941edb306SCy Schubert
59041edb306SCy Schubert case DL_PHYS_ADDR_REQ:
59141edb306SCy Schubert printdlphysaddrreq(dlp);
59241edb306SCy Schubert break;
59341edb306SCy Schubert
59441edb306SCy Schubert case DL_PHYS_ADDR_ACK:
59541edb306SCy Schubert printdlphysaddrack(dlp);
59641edb306SCy Schubert break;
59741edb306SCy Schubert
59841edb306SCy Schubert case DL_SET_PHYS_ADDR_REQ:
59941edb306SCy Schubert printdlsetphysaddrreq(dlp);
60041edb306SCy Schubert break;
60141edb306SCy Schubert
60241edb306SCy Schubert default:
60341edb306SCy Schubert err("printdlprim: unknown primitive type 0x%x",
60441edb306SCy Schubert dlp->dl_primitive);
60541edb306SCy Schubert break;
60641edb306SCy Schubert }
60741edb306SCy Schubert }
60841edb306SCy Schubert
60941edb306SCy Schubert /* ARGSUSED */
printdlinforeq(union DL_primitives * dlp)610*efeb8bffSCy Schubert printdlinforeq(union DL_primitives *dlp)
61141edb306SCy Schubert {
61241edb306SCy Schubert (void) printf("DL_INFO_REQ\n");
61341edb306SCy Schubert }
61441edb306SCy Schubert
printdlinfoack(union DL_primitives * dlp)615*efeb8bffSCy Schubert printdlinfoack(union DL_primitives *dlp)
61641edb306SCy Schubert {
61741edb306SCy Schubert u_char addr[MAXDLADDR];
61841edb306SCy Schubert u_char brdcst[MAXDLADDR];
61941edb306SCy Schubert
62041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->info_ack.dl_addr_offset),
62141edb306SCy Schubert dlp->info_ack.dl_addr_length, addr);
62241edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->info_ack.dl_brdcst_addr_offset),
62341edb306SCy Schubert dlp->info_ack.dl_brdcst_addr_length, brdcst);
62441edb306SCy Schubert
62541edb306SCy Schubert (void) printf("DL_INFO_ACK: max_sdu %d min_sdu %d\n",
62641edb306SCy Schubert dlp->info_ack.dl_max_sdu,
62741edb306SCy Schubert dlp->info_ack.dl_min_sdu);
62841edb306SCy Schubert (void) printf("addr_length %d mac_type %s current_state %s\n",
62941edb306SCy Schubert dlp->info_ack.dl_addr_length,
63041edb306SCy Schubert dlmactype(dlp->info_ack.dl_mac_type),
63141edb306SCy Schubert dlstate(dlp->info_ack.dl_current_state));
63241edb306SCy Schubert (void) printf("sap_length %d service_mode %s qos_length %d\n",
63341edb306SCy Schubert dlp->info_ack.dl_sap_length,
63441edb306SCy Schubert dlservicemode(dlp->info_ack.dl_service_mode),
63541edb306SCy Schubert dlp->info_ack.dl_qos_length);
63641edb306SCy Schubert (void) printf("qos_offset %d qos_range_length %d qos_range_offset %d\n",
63741edb306SCy Schubert dlp->info_ack.dl_qos_offset,
63841edb306SCy Schubert dlp->info_ack.dl_qos_range_length,
63941edb306SCy Schubert dlp->info_ack.dl_qos_range_offset);
64041edb306SCy Schubert (void) printf("provider_style %s addr_offset %d version %d\n",
64141edb306SCy Schubert dlstyle(dlp->info_ack.dl_provider_style),
64241edb306SCy Schubert dlp->info_ack.dl_addr_offset,
64341edb306SCy Schubert dlp->info_ack.dl_version);
64441edb306SCy Schubert (void) printf("brdcst_addr_length %d brdcst_addr_offset %d\n",
64541edb306SCy Schubert dlp->info_ack.dl_brdcst_addr_length,
64641edb306SCy Schubert dlp->info_ack.dl_brdcst_addr_offset);
64741edb306SCy Schubert (void) printf("addr %s\n", addr);
64841edb306SCy Schubert (void) printf("brdcst_addr %s\n", brdcst);
64941edb306SCy Schubert }
65041edb306SCy Schubert
printdlattachreq(union DL_primitives * dlp)651*efeb8bffSCy Schubert printdlattachreq(union DL_primitives *dlp)
65241edb306SCy Schubert {
65341edb306SCy Schubert (void) printf("DL_ATTACH_REQ: ppa %d\n",
65441edb306SCy Schubert dlp->attach_req.dl_ppa);
65541edb306SCy Schubert }
65641edb306SCy Schubert
657*efeb8bffSCy Schubert printdlokack(union DL_primitives* dlp)
65841edb306SCy Schubert union DL_primitives *dlp;
65941edb306SCy Schubert {
66041edb306SCy Schubert (void) printf("DL_OK_ACK: correct_primitive %s\n",
66141edb306SCy Schubert dlprim(dlp->ok_ack.dl_correct_primitive));
66241edb306SCy Schubert }
66341edb306SCy Schubert
printdlerrorack(union DL_primitives * dlp)664*efeb8bffSCy Schubert printdlerrorack(union DL_primitives *dlp)
66541edb306SCy Schubert {
66641edb306SCy Schubert (void) printf("DL_ERROR_ACK: error_primitive %s errno %s unix_errno %d: %s\n",
66741edb306SCy Schubert dlprim(dlp->error_ack.dl_error_primitive),
66841edb306SCy Schubert dlerrno(dlp->error_ack.dl_errno),
66941edb306SCy Schubert dlp->error_ack.dl_unix_errno,
67041edb306SCy Schubert strerror(dlp->error_ack.dl_unix_errno));
67141edb306SCy Schubert }
67241edb306SCy Schubert
printdlenabmultireq(union DL_primitives * dlp)673*efeb8bffSCy Schubert printdlenabmultireq(union DL_primitives *dlp)
67441edb306SCy Schubert {
67541edb306SCy Schubert u_char addr[MAXDLADDR];
67641edb306SCy Schubert
67741edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->enabmulti_req.dl_addr_offset),
67841edb306SCy Schubert dlp->enabmulti_req.dl_addr_length, addr);
67941edb306SCy Schubert
68041edb306SCy Schubert (void) printf("DL_ENABMULTI_REQ: addr_length %d addr_offset %d\n",
68141edb306SCy Schubert dlp->enabmulti_req.dl_addr_length,
68241edb306SCy Schubert dlp->enabmulti_req.dl_addr_offset);
68341edb306SCy Schubert (void) printf("addr %s\n", addr);
68441edb306SCy Schubert }
68541edb306SCy Schubert
printdldisabmultireq(union DL_primitives * dlp)686*efeb8bffSCy Schubert printdldisabmultireq(union DL_primitives *dlp)
68741edb306SCy Schubert {
68841edb306SCy Schubert u_char addr[MAXDLADDR];
68941edb306SCy Schubert
69041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->disabmulti_req.dl_addr_offset),
69141edb306SCy Schubert dlp->disabmulti_req.dl_addr_length, addr);
69241edb306SCy Schubert
69341edb306SCy Schubert (void) printf("DL_DISABMULTI_REQ: addr_length %d addr_offset %d\n",
69441edb306SCy Schubert dlp->disabmulti_req.dl_addr_length,
69541edb306SCy Schubert dlp->disabmulti_req.dl_addr_offset);
69641edb306SCy Schubert (void) printf("addr %s\n", addr);
69741edb306SCy Schubert }
69841edb306SCy Schubert
printdlpromisconreq(union DL_primitives * dlp)699*efeb8bffSCy Schubert printdlpromisconreq(union DL_primitives *dlp)
70041edb306SCy Schubert {
70141edb306SCy Schubert (void) printf("DL_PROMISCON_REQ: level %s\n",
70241edb306SCy Schubert dlpromisclevel(dlp->promiscon_req.dl_level));
70341edb306SCy Schubert }
70441edb306SCy Schubert
printdlpromiscoffreq(union DL_primitives * dlp)705*efeb8bffSCy Schubert printdlpromiscoffreq(union DL_primitives *dlp)
70641edb306SCy Schubert {
70741edb306SCy Schubert (void) printf("DL_PROMISCOFF_REQ: level %s\n",
70841edb306SCy Schubert dlpromisclevel(dlp->promiscoff_req.dl_level));
70941edb306SCy Schubert }
71041edb306SCy Schubert
printdlphysaddrreq(union DL_primitives * dlp)711*efeb8bffSCy Schubert printdlphysaddrreq(union DL_primitives *dlp)
71241edb306SCy Schubert {
71341edb306SCy Schubert (void) printf("DL_PHYS_ADDR_REQ: addr_type 0x%x\n",
71441edb306SCy Schubert dlp->physaddr_req.dl_addr_type);
71541edb306SCy Schubert }
71641edb306SCy Schubert
printdlphysaddrack(union DL_primitives * dlp)717*efeb8bffSCy Schubert printdlphysaddrack(union DL_primitives *dlp)
71841edb306SCy Schubert {
71941edb306SCy Schubert u_char addr[MAXDLADDR];
72041edb306SCy Schubert
72141edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->physaddr_ack.dl_addr_offset),
72241edb306SCy Schubert dlp->physaddr_ack.dl_addr_length, addr);
72341edb306SCy Schubert
72441edb306SCy Schubert (void) printf("DL_PHYS_ADDR_ACK: addr_length %d addr_offset %d\n",
72541edb306SCy Schubert dlp->physaddr_ack.dl_addr_length,
72641edb306SCy Schubert dlp->physaddr_ack.dl_addr_offset);
72741edb306SCy Schubert (void) printf("addr %s\n", addr);
72841edb306SCy Schubert }
72941edb306SCy Schubert
printdlsetphysaddrreq(union DL_primitives * dlp)730*efeb8bffSCy Schubert printdlsetphysaddrreq(union DL_primitives *dlp)
73141edb306SCy Schubert {
73241edb306SCy Schubert u_char addr[MAXDLADDR];
73341edb306SCy Schubert
73441edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->set_physaddr_req.dl_addr_offset),
73541edb306SCy Schubert dlp->set_physaddr_req.dl_addr_length, addr);
73641edb306SCy Schubert
73741edb306SCy Schubert (void) printf("DL_SET_PHYS_ADDR_REQ: addr_length %d addr_offset %d\n",
73841edb306SCy Schubert dlp->set_physaddr_req.dl_addr_length,
73941edb306SCy Schubert dlp->set_physaddr_req.dl_addr_offset);
74041edb306SCy Schubert (void) printf("addr %s\n", addr);
74141edb306SCy Schubert }
74241edb306SCy Schubert
74341edb306SCy Schubert /* ARGSUSED */
printdldetachreq(union DL_primitives * dlp)744*efeb8bffSCy Schubert printdldetachreq(union DL_primitives *dlp)
74541edb306SCy Schubert {
74641edb306SCy Schubert (void) printf("DL_DETACH_REQ\n");
74741edb306SCy Schubert }
74841edb306SCy Schubert
printdlbindreq(union DL_primitives * dlp)749*efeb8bffSCy Schubert printdlbindreq(union DL_primitives *dlp)
75041edb306SCy Schubert {
75141edb306SCy Schubert (void) printf("DL_BIND_REQ: sap %d max_conind %d\n",
75241edb306SCy Schubert dlp->bind_req.dl_sap,
75341edb306SCy Schubert dlp->bind_req.dl_max_conind);
75441edb306SCy Schubert (void) printf("service_mode %s conn_mgmt %d xidtest_flg 0x%x\n",
75541edb306SCy Schubert dlservicemode(dlp->bind_req.dl_service_mode),
75641edb306SCy Schubert dlp->bind_req.dl_conn_mgmt,
75741edb306SCy Schubert dlp->bind_req.dl_xidtest_flg);
75841edb306SCy Schubert }
75941edb306SCy Schubert
printdlbindack(union DL_primitives * dlp)760*efeb8bffSCy Schubert printdlbindack(union DL_primitives *dlp)
76141edb306SCy Schubert {
76241edb306SCy Schubert u_char addr[MAXDLADDR];
76341edb306SCy Schubert
76441edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->bind_ack.dl_addr_offset),
76541edb306SCy Schubert dlp->bind_ack.dl_addr_length, addr);
76641edb306SCy Schubert
76741edb306SCy Schubert (void) printf("DL_BIND_ACK: sap %d addr_length %d addr_offset %d\n",
76841edb306SCy Schubert dlp->bind_ack.dl_sap,
76941edb306SCy Schubert dlp->bind_ack.dl_addr_length,
77041edb306SCy Schubert dlp->bind_ack.dl_addr_offset);
77141edb306SCy Schubert (void) printf("max_conind %d xidtest_flg 0x%x\n",
77241edb306SCy Schubert dlp->bind_ack.dl_max_conind,
77341edb306SCy Schubert dlp->bind_ack.dl_xidtest_flg);
77441edb306SCy Schubert (void) printf("addr %s\n", addr);
77541edb306SCy Schubert }
77641edb306SCy Schubert
77741edb306SCy Schubert /* ARGSUSED */
printdlunbindreq(union DL_primitives * dlp)778*efeb8bffSCy Schubert printdlunbindreq(union DL_primitives *dlp)
77941edb306SCy Schubert {
78041edb306SCy Schubert (void) printf("DL_UNBIND_REQ\n");
78141edb306SCy Schubert }
78241edb306SCy Schubert
printdlsubsbindreq(union DL_primitives * dlp)783*efeb8bffSCy Schubert printdlsubsbindreq(union DL_primitives *dlp)
78441edb306SCy Schubert {
78541edb306SCy Schubert u_char sap[MAXDLADDR];
78641edb306SCy Schubert
78741edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->subs_bind_req.dl_subs_sap_offset),
78841edb306SCy Schubert dlp->subs_bind_req.dl_subs_sap_length, sap);
78941edb306SCy Schubert
79041edb306SCy Schubert (void) printf("DL_SUBS_BIND_REQ: subs_sap_offset %d sub_sap_len %d\n",
79141edb306SCy Schubert dlp->subs_bind_req.dl_subs_sap_offset,
79241edb306SCy Schubert dlp->subs_bind_req.dl_subs_sap_length);
79341edb306SCy Schubert (void) printf("sap %s\n", sap);
79441edb306SCy Schubert }
79541edb306SCy Schubert
printdlsubsbindack(union DL_primitives * dlp)796*efeb8bffSCy Schubert printdlsubsbindack(union DL_primitives *dlp)
79741edb306SCy Schubert {
79841edb306SCy Schubert u_char sap[MAXDLADDR];
79941edb306SCy Schubert
80041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->subs_bind_ack.dl_subs_sap_offset),
80141edb306SCy Schubert dlp->subs_bind_ack.dl_subs_sap_length, sap);
80241edb306SCy Schubert
80341edb306SCy Schubert (void) printf("DL_SUBS_BIND_ACK: subs_sap_offset %d sub_sap_length %d\n",
80441edb306SCy Schubert dlp->subs_bind_ack.dl_subs_sap_offset,
80541edb306SCy Schubert dlp->subs_bind_ack.dl_subs_sap_length);
80641edb306SCy Schubert (void) printf("sap %s\n", sap);
80741edb306SCy Schubert }
80841edb306SCy Schubert
printdlsubsunbindreq(union DL_primitives * dlp)809*efeb8bffSCy Schubert printdlsubsunbindreq(union DL_primitives *dlp)
81041edb306SCy Schubert {
81141edb306SCy Schubert u_char sap[MAXDLADDR];
81241edb306SCy Schubert
81341edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->subs_unbind_req.dl_subs_sap_offset),
81441edb306SCy Schubert dlp->subs_unbind_req.dl_subs_sap_length, sap);
81541edb306SCy Schubert
81641edb306SCy Schubert (void) printf("DL_SUBS_UNBIND_REQ: subs_sap_offset %d sub_sap_length %d\n",
81741edb306SCy Schubert dlp->subs_unbind_req.dl_subs_sap_offset,
81841edb306SCy Schubert dlp->subs_unbind_req.dl_subs_sap_length);
81941edb306SCy Schubert (void) printf("sap %s\n", sap);
82041edb306SCy Schubert }
82141edb306SCy Schubert
printdlunitdatareq(union DL_primitives * dlp)822*efeb8bffSCy Schubert printdlunitdatareq(union DL_primitives *dlp)
82341edb306SCy Schubert {
82441edb306SCy Schubert u_char addr[MAXDLADDR];
82541edb306SCy Schubert
82641edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->unitdata_req.dl_dest_addr_offset),
82741edb306SCy Schubert dlp->unitdata_req.dl_dest_addr_length, addr);
82841edb306SCy Schubert
82941edb306SCy Schubert (void) printf("DL_UNITDATA_REQ: dest_addr_length %d dest_addr_offset %d\n",
83041edb306SCy Schubert dlp->unitdata_req.dl_dest_addr_length,
83141edb306SCy Schubert dlp->unitdata_req.dl_dest_addr_offset);
83241edb306SCy Schubert (void) printf("dl_priority.min %d dl_priority.max %d\n",
83341edb306SCy Schubert dlp->unitdata_req.dl_priority.dl_min,
83441edb306SCy Schubert dlp->unitdata_req.dl_priority.dl_max);
83541edb306SCy Schubert (void) printf("addr %s\n", addr);
83641edb306SCy Schubert }
83741edb306SCy Schubert
printdlunitdataind(union DL_primitives * dlp)838*efeb8bffSCy Schubert printdlunitdataind(union DL_primitives *dlp)
83941edb306SCy Schubert {
84041edb306SCy Schubert u_char dest[MAXDLADDR];
84141edb306SCy Schubert u_char src[MAXDLADDR];
84241edb306SCy Schubert
84341edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->unitdata_ind.dl_dest_addr_offset),
84441edb306SCy Schubert dlp->unitdata_ind.dl_dest_addr_length, dest);
84541edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->unitdata_ind.dl_src_addr_offset),
84641edb306SCy Schubert dlp->unitdata_ind.dl_src_addr_length, src);
84741edb306SCy Schubert
84841edb306SCy Schubert (void) printf("DL_UNITDATA_IND: dest_addr_length %d dest_addr_offset %d\n",
84941edb306SCy Schubert dlp->unitdata_ind.dl_dest_addr_length,
85041edb306SCy Schubert dlp->unitdata_ind.dl_dest_addr_offset);
85141edb306SCy Schubert (void) printf("src_addr_length %d src_addr_offset %d\n",
85241edb306SCy Schubert dlp->unitdata_ind.dl_src_addr_length,
85341edb306SCy Schubert dlp->unitdata_ind.dl_src_addr_offset);
85441edb306SCy Schubert (void) printf("group_address 0x%x\n",
85541edb306SCy Schubert dlp->unitdata_ind.dl_group_address);
85641edb306SCy Schubert (void) printf("dest %s\n", dest);
85741edb306SCy Schubert (void) printf("src %s\n", src);
85841edb306SCy Schubert }
85941edb306SCy Schubert
printdluderrorind(union DL_primitives * dlp)860*efeb8bffSCy Schubert printdluderrorind(union DL_primitives *dlp)
86141edb306SCy Schubert {
86241edb306SCy Schubert u_char addr[MAXDLADDR];
86341edb306SCy Schubert
86441edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->uderror_ind.dl_dest_addr_offset),
86541edb306SCy Schubert dlp->uderror_ind.dl_dest_addr_length, addr);
86641edb306SCy Schubert
86741edb306SCy Schubert (void) printf("DL_UDERROR_IND: dest_addr_length %d dest_addr_offset %d\n",
86841edb306SCy Schubert dlp->uderror_ind.dl_dest_addr_length,
86941edb306SCy Schubert dlp->uderror_ind.dl_dest_addr_offset);
87041edb306SCy Schubert (void) printf("unix_errno %d errno %s\n",
87141edb306SCy Schubert dlp->uderror_ind.dl_unix_errno,
87241edb306SCy Schubert dlerrno(dlp->uderror_ind.dl_errno));
87341edb306SCy Schubert (void) printf("addr %s\n", addr);
87441edb306SCy Schubert }
87541edb306SCy Schubert
printdltestreq(union DL_primitives * dlp)876*efeb8bffSCy Schubert printdltestreq(union DL_primitives *dlp)
87741edb306SCy Schubert {
87841edb306SCy Schubert u_char addr[MAXDLADDR];
87941edb306SCy Schubert
88041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->test_req.dl_dest_addr_offset),
88141edb306SCy Schubert dlp->test_req.dl_dest_addr_length, addr);
88241edb306SCy Schubert
88341edb306SCy Schubert (void) printf("DL_TEST_REQ: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
88441edb306SCy Schubert dlp->test_req.dl_flag,
88541edb306SCy Schubert dlp->test_req.dl_dest_addr_length,
88641edb306SCy Schubert dlp->test_req.dl_dest_addr_offset);
88741edb306SCy Schubert (void) printf("dest_addr %s\n", addr);
88841edb306SCy Schubert }
88941edb306SCy Schubert
printdltestind(union DL_primitives * dlp)890*efeb8bffSCy Schubert printdltestind(union DL_primitives *dlp)
89141edb306SCy Schubert {
89241edb306SCy Schubert u_char dest[MAXDLADDR];
89341edb306SCy Schubert u_char src[MAXDLADDR];
89441edb306SCy Schubert
89541edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->test_ind.dl_dest_addr_offset),
89641edb306SCy Schubert dlp->test_ind.dl_dest_addr_length, dest);
89741edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->test_ind.dl_src_addr_offset),
89841edb306SCy Schubert dlp->test_ind.dl_src_addr_length, src);
89941edb306SCy Schubert
90041edb306SCy Schubert (void) printf("DL_TEST_IND: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
90141edb306SCy Schubert dlp->test_ind.dl_flag,
90241edb306SCy Schubert dlp->test_ind.dl_dest_addr_length,
90341edb306SCy Schubert dlp->test_ind.dl_dest_addr_offset);
90441edb306SCy Schubert (void) printf("src_addr_length %d src_addr_offset %d\n",
90541edb306SCy Schubert dlp->test_ind.dl_src_addr_length,
90641edb306SCy Schubert dlp->test_ind.dl_src_addr_offset);
90741edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
90841edb306SCy Schubert (void) printf("src_addr %s\n", src);
90941edb306SCy Schubert }
91041edb306SCy Schubert
printdltestres(union DL_primitives * dlp)911*efeb8bffSCy Schubert printdltestres(union DL_primitives *dlp)
91241edb306SCy Schubert {
91341edb306SCy Schubert u_char dest[MAXDLADDR];
91441edb306SCy Schubert
91541edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->test_res.dl_dest_addr_offset),
91641edb306SCy Schubert dlp->test_res.dl_dest_addr_length, dest);
91741edb306SCy Schubert
91841edb306SCy Schubert (void) printf("DL_TEST_RES: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
91941edb306SCy Schubert dlp->test_res.dl_flag,
92041edb306SCy Schubert dlp->test_res.dl_dest_addr_length,
92141edb306SCy Schubert dlp->test_res.dl_dest_addr_offset);
92241edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
92341edb306SCy Schubert }
92441edb306SCy Schubert
printdltestcon(union DL_primitives * dlp)925*efeb8bffSCy Schubert printdltestcon(union DL_primitives *dlp)
92641edb306SCy Schubert {
92741edb306SCy Schubert u_char dest[MAXDLADDR];
92841edb306SCy Schubert u_char src[MAXDLADDR];
92941edb306SCy Schubert
93041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->test_con.dl_dest_addr_offset),
93141edb306SCy Schubert dlp->test_con.dl_dest_addr_length, dest);
93241edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->test_con.dl_src_addr_offset),
93341edb306SCy Schubert dlp->test_con.dl_src_addr_length, src);
93441edb306SCy Schubert
93541edb306SCy Schubert (void) printf("DL_TEST_CON: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
93641edb306SCy Schubert dlp->test_con.dl_flag,
93741edb306SCy Schubert dlp->test_con.dl_dest_addr_length,
93841edb306SCy Schubert dlp->test_con.dl_dest_addr_offset);
93941edb306SCy Schubert (void) printf("src_addr_length %d src_addr_offset %d\n",
94041edb306SCy Schubert dlp->test_con.dl_src_addr_length,
94141edb306SCy Schubert dlp->test_con.dl_src_addr_offset);
94241edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
94341edb306SCy Schubert (void) printf("src_addr %s\n", src);
94441edb306SCy Schubert }
94541edb306SCy Schubert
printdlxidreq(union DL_primitives * dlp)946*efeb8bffSCy Schubert printdlxidreq(union DL_primitives *dlp)
94741edb306SCy Schubert {
94841edb306SCy Schubert u_char dest[MAXDLADDR];
94941edb306SCy Schubert
95041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->xid_req.dl_dest_addr_offset),
95141edb306SCy Schubert dlp->xid_req.dl_dest_addr_length, dest);
95241edb306SCy Schubert
95341edb306SCy Schubert (void) printf("DL_XID_REQ: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
95441edb306SCy Schubert dlp->xid_req.dl_flag,
95541edb306SCy Schubert dlp->xid_req.dl_dest_addr_length,
95641edb306SCy Schubert dlp->xid_req.dl_dest_addr_offset);
95741edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
95841edb306SCy Schubert }
95941edb306SCy Schubert
printdlxidind(dlpunion DL_primitives *)960*efeb8bffSCy Schubert printdlxidind(dlpunion DL_primitives *)
96141edb306SCy Schubert {
96241edb306SCy Schubert u_char dest[MAXDLADDR];
96341edb306SCy Schubert u_char src[MAXDLADDR];
96441edb306SCy Schubert
96541edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->xid_ind.dl_dest_addr_offset),
96641edb306SCy Schubert dlp->xid_ind.dl_dest_addr_length, dest);
96741edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->xid_ind.dl_src_addr_offset),
96841edb306SCy Schubert dlp->xid_ind.dl_src_addr_length, src);
96941edb306SCy Schubert
97041edb306SCy Schubert (void) printf("DL_XID_IND: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
97141edb306SCy Schubert dlp->xid_ind.dl_flag,
97241edb306SCy Schubert dlp->xid_ind.dl_dest_addr_length,
97341edb306SCy Schubert dlp->xid_ind.dl_dest_addr_offset);
97441edb306SCy Schubert (void) printf("src_addr_length %d src_addr_offset %d\n",
97541edb306SCy Schubert dlp->xid_ind.dl_src_addr_length,
97641edb306SCy Schubert dlp->xid_ind.dl_src_addr_offset);
97741edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
97841edb306SCy Schubert (void) printf("src_addr %s\n", src);
97941edb306SCy Schubert }
98041edb306SCy Schubert
printdlxidres(union DL_primitives * dlp)981*efeb8bffSCy Schubert printdlxidres(union DL_primitives *dlp)
98241edb306SCy Schubert {
98341edb306SCy Schubert u_char dest[MAXDLADDR];
98441edb306SCy Schubert
98541edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->xid_res.dl_dest_addr_offset),
98641edb306SCy Schubert dlp->xid_res.dl_dest_addr_length, dest);
98741edb306SCy Schubert
98841edb306SCy Schubert (void) printf("DL_XID_RES: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
98941edb306SCy Schubert dlp->xid_res.dl_flag,
99041edb306SCy Schubert dlp->xid_res.dl_dest_addr_length,
99141edb306SCy Schubert dlp->xid_res.dl_dest_addr_offset);
99241edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
99341edb306SCy Schubert }
99441edb306SCy Schubert
printdlxidcon(union DL_primitives * dlp)995*efeb8bffSCy Schubert printdlxidcon(union DL_primitives *dlp)
99641edb306SCy Schubert {
99741edb306SCy Schubert u_char dest[MAXDLADDR];
99841edb306SCy Schubert u_char src[MAXDLADDR];
99941edb306SCy Schubert
100041edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->xid_con.dl_dest_addr_offset),
100141edb306SCy Schubert dlp->xid_con.dl_dest_addr_length, dest);
100241edb306SCy Schubert addrtostring(OFFADDR(dlp, dlp->xid_con.dl_src_addr_offset),
100341edb306SCy Schubert dlp->xid_con.dl_src_addr_length, src);
100441edb306SCy Schubert
100541edb306SCy Schubert (void) printf("DL_XID_CON: flag 0x%x dest_addr_length %d dest_addr_offset %d\n",
100641edb306SCy Schubert dlp->xid_con.dl_flag,
100741edb306SCy Schubert dlp->xid_con.dl_dest_addr_length,
100841edb306SCy Schubert dlp->xid_con.dl_dest_addr_offset);
100941edb306SCy Schubert (void) printf("src_addr_length %d src_addr_offset %d\n",
101041edb306SCy Schubert dlp->xid_con.dl_src_addr_length,
101141edb306SCy Schubert dlp->xid_con.dl_src_addr_offset);
101241edb306SCy Schubert (void) printf("dest_addr %s\n", dest);
101341edb306SCy Schubert (void) printf("src_addr %s\n", src);
101441edb306SCy Schubert }
101541edb306SCy Schubert
printdludqosreq(union DL_primitives * dlp)1016*efeb8bffSCy Schubert printdludqosreq(union DL_primitives *dlp)
101741edb306SCy Schubert {
101841edb306SCy Schubert (void) printf("DL_UDQOS_REQ: qos_length %d qos_offset %d\n",
101941edb306SCy Schubert dlp->udqos_req.dl_qos_length,
102041edb306SCy Schubert dlp->udqos_req.dl_qos_offset);
102141edb306SCy Schubert }
102241edb306SCy Schubert
102341edb306SCy Schubert /*
102441edb306SCy Schubert * Return string.
102541edb306SCy Schubert */
addrtostring(u_char * addr,u_long length,u_char * s)1026*efeb8bffSCy Schubert addrtostring(u_char *addr, u_long length, u_char *s)
102741edb306SCy Schubert {
102841edb306SCy Schubert int i;
102941edb306SCy Schubert
103041edb306SCy Schubert for (i = 0; i < length; i++) {
103141edb306SCy Schubert (void) sprintf((char*) s, "%x:", addr[i] & 0xff);
103241edb306SCy Schubert s = s + strlen((char*)s);
103341edb306SCy Schubert }
103441edb306SCy Schubert if (length)
103541edb306SCy Schubert *(--s) = '\0';
103641edb306SCy Schubert }
103741edb306SCy Schubert
103841edb306SCy Schubert /*
103941edb306SCy Schubert * Return length
104041edb306SCy Schubert */
stringtoaddr(char * sp,char * addr)1041*efeb8bffSCy Schubert stringtoaddr(char *sp, char *addr)
104241edb306SCy Schubert {
104341edb306SCy Schubert int n = 0;
104441edb306SCy Schubert char *p;
104541edb306SCy Schubert int val;
104641edb306SCy Schubert
104741edb306SCy Schubert p = sp;
104841edb306SCy Schubert while (p = strtok(p, ":")) {
104941edb306SCy Schubert if (sscanf(p, "%x", &val) != 1)
105041edb306SCy Schubert err("stringtoaddr: invalid input string: %s", sp);
105141edb306SCy Schubert if (val > 0xff)
105241edb306SCy Schubert err("stringtoaddr: invalid input string: %s", sp);
105341edb306SCy Schubert *addr++ = val;
105441edb306SCy Schubert n++;
105541edb306SCy Schubert p = NULL;
105641edb306SCy Schubert }
105741edb306SCy Schubert
105841edb306SCy Schubert return (n);
105941edb306SCy Schubert }
106041edb306SCy Schubert
106141edb306SCy Schubert
106241edb306SCy Schubert static char
hexnibble(char c)1063*efeb8bffSCy Schubert hexnibble(char c)
106441edb306SCy Schubert {
106541edb306SCy Schubert static char hextab[] = {
106641edb306SCy Schubert '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
106741edb306SCy Schubert 'a', 'b', 'c', 'd', 'e', 'f'
106841edb306SCy Schubert };
106941edb306SCy Schubert
107041edb306SCy Schubert return (hextab[c & 0x0f]);
107141edb306SCy Schubert }
107241edb306SCy Schubert
107341edb306SCy Schubert char*
dlprim(u_long prim)1074*efeb8bffSCy Schubert dlprim(u_long prim)
107541edb306SCy Schubert {
107641edb306SCy Schubert static char primbuf[80];
107741edb306SCy Schubert
107841edb306SCy Schubert switch ((int)prim) {
107941edb306SCy Schubert CASERET(DL_INFO_REQ);
108041edb306SCy Schubert CASERET(DL_INFO_ACK);
108141edb306SCy Schubert CASERET(DL_ATTACH_REQ);
108241edb306SCy Schubert CASERET(DL_DETACH_REQ);
108341edb306SCy Schubert CASERET(DL_BIND_REQ);
108441edb306SCy Schubert CASERET(DL_BIND_ACK);
108541edb306SCy Schubert CASERET(DL_UNBIND_REQ);
108641edb306SCy Schubert CASERET(DL_OK_ACK);
108741edb306SCy Schubert CASERET(DL_ERROR_ACK);
108841edb306SCy Schubert CASERET(DL_SUBS_BIND_REQ);
108941edb306SCy Schubert CASERET(DL_SUBS_BIND_ACK);
109041edb306SCy Schubert CASERET(DL_UNITDATA_REQ);
109141edb306SCy Schubert CASERET(DL_UNITDATA_IND);
109241edb306SCy Schubert CASERET(DL_UDERROR_IND);
109341edb306SCy Schubert CASERET(DL_UDQOS_REQ);
109441edb306SCy Schubert CASERET(DL_CONNECT_REQ);
109541edb306SCy Schubert CASERET(DL_CONNECT_IND);
109641edb306SCy Schubert CASERET(DL_CONNECT_RES);
109741edb306SCy Schubert CASERET(DL_CONNECT_CON);
109841edb306SCy Schubert CASERET(DL_TOKEN_REQ);
109941edb306SCy Schubert CASERET(DL_TOKEN_ACK);
110041edb306SCy Schubert CASERET(DL_DISCONNECT_REQ);
110141edb306SCy Schubert CASERET(DL_DISCONNECT_IND);
110241edb306SCy Schubert CASERET(DL_RESET_REQ);
110341edb306SCy Schubert CASERET(DL_RESET_IND);
110441edb306SCy Schubert CASERET(DL_RESET_RES);
110541edb306SCy Schubert CASERET(DL_RESET_CON);
110641edb306SCy Schubert default:
110741edb306SCy Schubert (void) snprintf(primbuf, sizeof(primbuf), "unknown primitive 0x%x", prim);
110841edb306SCy Schubert return (primbuf);
110941edb306SCy Schubert }
111041edb306SCy Schubert }
111141edb306SCy Schubert
111241edb306SCy Schubert
111341edb306SCy Schubert char*
dlstate(u_long state)1114*efeb8bffSCy Schubert dlstate(u_long state)
111541edb306SCy Schubert {
111641edb306SCy Schubert static char statebuf[80];
111741edb306SCy Schubert
111841edb306SCy Schubert switch (state) {
111941edb306SCy Schubert CASERET(DL_UNATTACHED);
112041edb306SCy Schubert CASERET(DL_ATTACH_PENDING);
112141edb306SCy Schubert CASERET(DL_DETACH_PENDING);
112241edb306SCy Schubert CASERET(DL_UNBOUND);
112341edb306SCy Schubert CASERET(DL_BIND_PENDING);
112441edb306SCy Schubert CASERET(DL_UNBIND_PENDING);
112541edb306SCy Schubert CASERET(DL_IDLE);
112641edb306SCy Schubert CASERET(DL_UDQOS_PENDING);
112741edb306SCy Schubert CASERET(DL_OUTCON_PENDING);
112841edb306SCy Schubert CASERET(DL_INCON_PENDING);
112941edb306SCy Schubert CASERET(DL_CONN_RES_PENDING);
113041edb306SCy Schubert CASERET(DL_DATAXFER);
113141edb306SCy Schubert CASERET(DL_USER_RESET_PENDING);
113241edb306SCy Schubert CASERET(DL_PROV_RESET_PENDING);
113341edb306SCy Schubert CASERET(DL_RESET_RES_PENDING);
113441edb306SCy Schubert CASERET(DL_DISCON8_PENDING);
113541edb306SCy Schubert CASERET(DL_DISCON9_PENDING);
113641edb306SCy Schubert CASERET(DL_DISCON11_PENDING);
113741edb306SCy Schubert CASERET(DL_DISCON12_PENDING);
113841edb306SCy Schubert CASERET(DL_DISCON13_PENDING);
113941edb306SCy Schubert CASERET(DL_SUBS_BIND_PND);
114041edb306SCy Schubert default:
114141edb306SCy Schubert (void) snprintf(statebuf, sizeof(statebuf), "unknown state 0x%x", state);
114241edb306SCy Schubert return (statebuf);
114341edb306SCy Schubert }
114441edb306SCy Schubert }
114541edb306SCy Schubert
114641edb306SCy Schubert char*
dlerrno(u_long errno)1147*efeb8bffSCy Schubert dlerrno(u_long errno)
114841edb306SCy Schubert {
114941edb306SCy Schubert static char errnobuf[80];
115041edb306SCy Schubert
115141edb306SCy Schubert switch (errno) {
115241edb306SCy Schubert CASERET(DL_ACCESS);
115341edb306SCy Schubert CASERET(DL_BADADDR);
115441edb306SCy Schubert CASERET(DL_BADCORR);
115541edb306SCy Schubert CASERET(DL_BADDATA);
115641edb306SCy Schubert CASERET(DL_BADPPA);
115741edb306SCy Schubert CASERET(DL_BADPRIM);
115841edb306SCy Schubert CASERET(DL_BADQOSPARAM);
115941edb306SCy Schubert CASERET(DL_BADQOSTYPE);
116041edb306SCy Schubert CASERET(DL_BADSAP);
116141edb306SCy Schubert CASERET(DL_BADTOKEN);
116241edb306SCy Schubert CASERET(DL_BOUND);
116341edb306SCy Schubert CASERET(DL_INITFAILED);
116441edb306SCy Schubert CASERET(DL_NOADDR);
116541edb306SCy Schubert CASERET(DL_NOTINIT);
116641edb306SCy Schubert CASERET(DL_OUTSTATE);
116741edb306SCy Schubert CASERET(DL_SYSERR);
116841edb306SCy Schubert CASERET(DL_UNSUPPORTED);
116941edb306SCy Schubert CASERET(DL_UNDELIVERABLE);
117041edb306SCy Schubert CASERET(DL_NOTSUPPORTED);
117141edb306SCy Schubert CASERET(DL_TOOMANY);
117241edb306SCy Schubert CASERET(DL_NOTENAB);
117341edb306SCy Schubert CASERET(DL_BUSY);
117441edb306SCy Schubert CASERET(DL_NOAUTO);
117541edb306SCy Schubert CASERET(DL_NOXIDAUTO);
117641edb306SCy Schubert CASERET(DL_NOTESTAUTO);
117741edb306SCy Schubert CASERET(DL_XIDAUTO);
117841edb306SCy Schubert CASERET(DL_TESTAUTO);
117941edb306SCy Schubert CASERET(DL_PENDING);
118041edb306SCy Schubert
118141edb306SCy Schubert default:
118241edb306SCy Schubert (void) snprintf(errnobuf, sizeof(errnobuf), "unknown dlpi errno 0x%x", errno);
118341edb306SCy Schubert return (errnobuf);
118441edb306SCy Schubert }
118541edb306SCy Schubert }
118641edb306SCy Schubert
118741edb306SCy Schubert char*
dlpromisclevel(u_long level)1188*efeb8bffSCy Schubert dlpromisclevel(u_long level)
118941edb306SCy Schubert {
119041edb306SCy Schubert static char levelbuf[80];
119141edb306SCy Schubert
119241edb306SCy Schubert switch (level) {
119341edb306SCy Schubert CASERET(DL_PROMISC_PHYS);
119441edb306SCy Schubert CASERET(DL_PROMISC_SAP);
119541edb306SCy Schubert CASERET(DL_PROMISC_MULTI);
119641edb306SCy Schubert default:
119741edb306SCy Schubert (void) snprintf(levelbuf, sizeof(levelbuf), "unknown promisc level 0x%x", level);
119841edb306SCy Schubert return (levelbuf);
119941edb306SCy Schubert }
120041edb306SCy Schubert }
120141edb306SCy Schubert
120241edb306SCy Schubert char*
dlservicemode(u_long servicemode)1203*efeb8bffSCy Schubert dlservicemode(u_long servicemode)
120441edb306SCy Schubert {
120541edb306SCy Schubert static char servicemodebuf[80];
120641edb306SCy Schubert
120741edb306SCy Schubert switch (servicemode) {
120841edb306SCy Schubert CASERET(DL_CODLS);
120941edb306SCy Schubert CASERET(DL_CLDLS);
121041edb306SCy Schubert CASERET(DL_CODLS|DL_CLDLS);
121141edb306SCy Schubert default:
121241edb306SCy Schubert (void) snprintf(servicemodebuf, sizeof(servicemodebuf),
121341edb306SCy Schubert "unknown provider service mode 0x%x", servicemode);
121441edb306SCy Schubert return (servicemodebuf);
121541edb306SCy Schubert }
121641edb306SCy Schubert }
121741edb306SCy Schubert
121841edb306SCy Schubert char*
dlstyle(long style)1219*efeb8bffSCy Schubert dlstyle(long style)
122041edb306SCy Schubert {
122141edb306SCy Schubert static char stylebuf[80];
122241edb306SCy Schubert
122341edb306SCy Schubert switch (style) {
122441edb306SCy Schubert CASERET(DL_STYLE1);
122541edb306SCy Schubert CASERET(DL_STYLE2);
122641edb306SCy Schubert default:
122741edb306SCy Schubert (void) snprintf(stylebuf, sizeof(stylebuf), "unknown provider style 0x%x", style);
122841edb306SCy Schubert return (stylebuf);
122941edb306SCy Schubert }
123041edb306SCy Schubert }
123141edb306SCy Schubert
123241edb306SCy Schubert char*
dlmactype(u_long media)1233*efeb8bffSCy Schubert dlmactype(u_long media)
123441edb306SCy Schubert {
123541edb306SCy Schubert static char mediabuf[80];
123641edb306SCy Schubert
123741edb306SCy Schubert switch (media) {
123841edb306SCy Schubert CASERET(DL_CSMACD);
123941edb306SCy Schubert CASERET(DL_TPB);
124041edb306SCy Schubert CASERET(DL_TPR);
124141edb306SCy Schubert CASERET(DL_METRO);
124241edb306SCy Schubert CASERET(DL_ETHER);
124341edb306SCy Schubert CASERET(DL_HDLC);
124441edb306SCy Schubert CASERET(DL_CHAR);
124541edb306SCy Schubert CASERET(DL_CTCA);
124641edb306SCy Schubert default:
124741edb306SCy Schubert (void) snprintf(mediabuf, sizeof(mediabuf), "unknown media type 0x%x", media);
124841edb306SCy Schubert return (mediabuf);
124941edb306SCy Schubert }
125041edb306SCy Schubert }
125141edb306SCy Schubert
125241edb306SCy Schubert /*VARARGS1*/
err(char * fmt,char * a1,char * a2,char * a3,char * a4)1253*efeb8bffSCy Schubert err(char *fmt, char *a1, char *a2, char *a3, char *a4)
125441edb306SCy Schubert {
125541edb306SCy Schubert (void) fprintf(stderr, fmt, a1, a2, a3, a4);
125641edb306SCy Schubert (void) fprintf(stderr, "\n");
125741edb306SCy Schubert (void) exit(1);
125841edb306SCy Schubert }
125941edb306SCy Schubert
1260*efeb8bffSCy Schubert syserr(char *s)
126141edb306SCy Schubert char *s;
126241edb306SCy Schubert {
126341edb306SCy Schubert (void) perror(s);
126441edb306SCy Schubert exit(1);
126541edb306SCy Schubert }
126641edb306SCy Schubert
strioctl(int fd,int cmd,int timout,int len,char * dp)1267*efeb8bffSCy Schubert strioctl(int fd, int cmd, int timout, int len, char *dp)
126841edb306SCy Schubert {
126941edb306SCy Schubert struct strioctl sioc;
127041edb306SCy Schubert int rc;
127141edb306SCy Schubert
127241edb306SCy Schubert sioc.ic_cmd = cmd;
127341edb306SCy Schubert sioc.ic_timout = timout;
127441edb306SCy Schubert sioc.ic_len = len;
127541edb306SCy Schubert sioc.ic_dp = dp;
127641edb306SCy Schubert rc = ioctl(fd, I_STR, &sioc);
127741edb306SCy Schubert
127841edb306SCy Schubert if (rc < 0)
127941edb306SCy Schubert return (rc);
128041edb306SCy Schubert else
128141edb306SCy Schubert return (sioc.ic_len);
128241edb306SCy Schubert }
1283