Annotation of xinu/sys/dgwrite.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.