Annotation of xinu/sys/dgwrite.c, revision 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.