|
|
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.