|
|
1.1 ! root 1: /* dgwrite.c - dgwrite */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <network.h> ! 6: ! 7: /*------------------------------------------------------------------------ ! 8: * dgwrite - write one datagram to a datagram protocol pseudo-device ! 9: *------------------------------------------------------------------------ ! 10: */ ! 11: dgwrite(devptr, buff, len) ! 12: struct devsw *devptr; ! 13: struct xgram *buff; ! 14: int len; ! 15: { ! 16: struct epacket *packet; ! 17: struct ip *ipptr; ! 18: struct udp *udpptr; ! 19: struct dgblk *dgptr; ! 20: int dstport; ! 21: char *dstIP; ! 22: ! 23: if (len < 0 || len > UMAXLEN) ! 24: return(SYSERR); ! 25: dgptr = (struct dgblk *) devptr->dvioblk; ! 26: packet = (struct epacket *) getbuf(Net.netpool); ! 27: ipptr = (struct ip *) packet->ep_data; ! 28: udpptr = (struct udp *) ipptr->i_data; ! 29: dstport = dgptr->dg_fport; ! 30: dstIP = (char *) dgptr->dg_faddr; ! 31: if ( (dgptr->dg_mode & DG_NMODE) != 0) { ! 32: if (dstport == 0) { ! 33: dstport = buff->xg_fport; ! 34: dstIP = (char *) buff->xg_faddr; ! 35: } ! 36: blkcopy(udpptr->u_data, buff->xg_data, len); ! 37: } else { ! 38: if ( dstport == 0) { ! 39: freebuf(packet); ! 40: return(SYSERR); ! 41: } ! 42: blkcopy(udpptr->u_data, buff, len); ! 43: } ! 44: return( udpsend(dstIP, dstport, dgptr->dg_lport, packet, len) ); ! 45: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.