DLPI Programmer's Guide

Appendix A 169
Sample Programs
Raw Mode
printf(” dl_errno = 0x%02x\n”, err_ack->dl_errno);
printf(” dl_unix_errno = %d\n”, err_ack->dl_unix_errno);
exit(1);
} else {
printf(”%s,check_ctrl: expected primitive 0x%02x”, tag, prim);
printf(”, got primitive 0x%02x\n”, err_ack->dl_primitive);
exit(1);
}
}
}
/*-=-* put a control message on a stream *-=-*/
void
put_ctrl(fd, len, pri)
int fd, len, pri;
{
ctl.len = len;
if(putmsg(fd, &ctl, 0, pri) < 0) {
printf(”%s,put_ctrl: putmsg failed, errno = %d\n”, tag, errno);
exit(1);
}
}
/*-=-* put a control + data message on a stream *-=-*/
void
put_both(fd, clen, dlen, pri)
int fd, clen, dlen, pri;
{
ctl.len = clen;
dat.len = dlen;
if(putmsg(fd, &ctl, &dat, pri) < 0) {
printf(”%s,put_both: putmsg failed, errno = %d\n”, tag, errno);
exit(1);
}
}
/*-=-* open file descriptor and attach *-=-*/
int
dl_open(ppa)
int ppa;
{
int fd;
dl_attach_req_t *attach_req = (dl_attach_req_t *)ctl_area;
if((fd = open(”/dev/dlpi”, O_RDWR)) == -1) {
printf(”%s,dl_open: open failed, errno = %d\n”,tag, errno);
exit(1);
}
attach_req->dl_primitive = DL_ATTACH_REQ;
attach_req->dl_ppa = ppa;
put_ctrl(fd, sizeof(dl_attach_req_t), 0);
get_msg(fd);
check_ctrl(DL_OK_ACK);