HP (Hewlett-Packard) B2355-90138 Network Card User Manual


 
Chapter 2 25
LLA and DLPI Example Programs
DLPI Example Program
int
attach() {
int fd; /* file descriptor */
int ppa; /* PPA to attach to */
dl_hp_ppa_req_t *ppa_req = (dl_attach_req_t *)ctrl_area;
dl_hp_ppa_ack_t *ppa_ack = (dl_hp_ppa_ack_t *)ctrl_area;
dl_hp_ppa_info_t *ppa_info;
dl_attach_req_t *attach_req = (dl_attach_req_t *)ctrl_area;
char *mac_name;
/* open the device file */
if((fd = open(”/dev/dlpi”, O_RDWR)) == -1) {
printf(”error: open failed, errno = %d\n”, errno);
exit(1);
}
/*
find a PPA to attach to; we assume that the first PPA on the
remote is on the same media as the first local PPA
*/
/* send a PPA_REQ and wait for the PPA_ACK */
ppa_req->dl_primitive = DL_HP_PPA_REQ;
put_ctrl(fd, sizeof(dl_hp_ppa_req_t), 0);
get_msg(fd);
check_ctrl(DL_HP_PPA_ACK);
/* make sure we found at least one PPA */
if(ppa_ack->dl_length == 0) {
printf(”error: no PPAs available\n”);
exit(1);
}
/* examine the first PPA */
ppa_info = (dl_hp_ppa_info_t *)((u_char *)ctrl_area +
ppa_ack->dl_offset);
ppa = ppa_info->dl_ppa;
switch(ppa_info->dl_mac_type) {
case DL_CSMACD:
case DL_ETHER:
mac_name = ”Ethernet”;
break;
case DL_TPR:
mac_name = ”Token Ring”;
break;
case DL_FDDI:
mac_name = ”FDDI”;
break;
default:
printf(”error: unknown MAC type in ppa_info\n”);
exit(1);
}
printf(”attaching to %s media on PPA %d\n”, mac_name, ppa);
/*
fill in ATTACH_REQ with the PPA we found, send the ATTACH_REQ,
and wait for the OK_ACK
*/
attach_req->dl_primitive = DL_ATTACH_REQ;