DLPI Programmer's Guide
Appendix A 163
Sample Programs
Connectionless Mode
{
dl_unitdata_ind_t *data_ind = (dl_unitdata_ind_t *)ctrl_area;
char *rdlsap;
int msg_res;
msg_res = get_msg(fd);
check_ctrl(DL_UNITDATA_IND);
if(msg_res != GOT_BOTH) {
printf(”error: did not receive data part of message\n”);
exit(1);
}
return(data_buf.len);
}
/**************************************************************************
send a data packet; assumes data_area has already been filled in
**************************************************************************/
void
send_data(fd, rdlsap, rdlsap_len, len)
int fd; /* file descriptor */
u_char *rdlsap; /* remote dlsap */
int rdlsap_len; /* length of rdlsap */
int len; /* length of the packet to send */
{
dl_unitdata_req_t *data_req = (dl_unitdata_req_t *)ctrl_area;
u_char *out_dlsap;
/* fill in data_req */
data_req->dl_primitive = DL_UNITDATA_REQ;
data_req->dl_dest_addr_length = rdlsap_len;
data_req->dl_dest_addr_offset = sizeof(dl_unitdata_req_t);
/* copy dlsap */
data_req->dl_priority.dl_min = 0;
data_req->dl_priority.dl_max = 0;
out_dlsap = (u_char *)ctrl_area + sizeof(dl_unitdata_req_t);
memcpy(out_dlsap, rdlsap, rdlsap_len);
put_both(fd, sizeof(dl_unitdata_req_t) + rdlsap_len, len, 0);
}
/**************************************************************************
print a string followed by a DLSAP
**************************************************************************/
void
print_dlsap(string, dlsap, dlsap_len)
char *string; /* label */
u_char *dlsap; /* the DLSAP */
int dlsap_len; /* length of dlsap */
{
int i;
printf(”%s”, string);
for(i = 0; i < dlsap_len; i++) {
printf(”%02x”, dlsap[i]);
}
printf(”\n”);
}