Annotation of xinu/sys/dgmopen.c, revision 1.1

1.1     ! root        1: /* dgmopen.c - dgmopen */
        !             2: 
        !             3: #include <conf.h>
        !             4: #include <kernel.h>
        !             5: #include <network.h>
        !             6: 
        !             7: /*------------------------------------------------------------------------
        !             8:  *  dgmopen  -  open a fresh datagram pseudo device and return descriptor
        !             9:  *------------------------------------------------------------------------
        !            10:  */
        !            11: dgmopen(devptr, forport, locport)
        !            12: struct devsw   *devptr;
        !            13: char   *forport;
        !            14: int    locport;
        !            15: {
        !            16:        struct  dgblk   *dgptr;
        !            17:        struct  netq    *nqptr;
        !            18:        int     slot;
        !            19:        int     nq;
        !            20:        int     i;
        !            21:        PStype  ps;
        !            22: 
        !            23:        disable(ps);
        !            24:        if ( (slot=dgalloc()) == SYSERR) {
        !            25:                restore(ps);
        !            26:                return(SYSERR);
        !            27:        }
        !            28:        dgptr = &dgtab[slot];
        !            29:        if (locport == ANYLPORT)
        !            30:                locport = udpnxtp();
        !            31:        else {
        !            32:                for (i=0 ; i<NETQS ; i++)
        !            33:                        if (Net.netqs[i].valid && 
        !            34:                                Net.netqs[i].uport == locport) {
        !            35:                                dgptr->dg_state = DG_FREE;
        !            36:                                restore(ps);
        !            37:                                return(SYSERR);
        !            38:                        }
        !            39:        }
        !            40:        if (dgparse(dgptr,forport)==SYSERR || (nq=nqalloc())==SYSERR ) {
        !            41:                dgptr->dg_state = DG_FREE;
        !            42:                restore(ps);
        !            43:                return(SYSERR);
        !            44:        }
        !            45:        nqptr = &Net.netqs[nq];
        !            46:        nqptr->uport = dgptr->dg_lport = locport;
        !            47:        dgptr->dg_xport = nqptr->xport;
        !            48:        dgptr->dg_netq = nq;
        !            49:        dgptr->dg_mode = DG_NMODE;
        !            50:        restore(ps);
        !            51:        return(dgptr->dg_dnum);
        !            52: }

unix.superglobalmegacorp.com

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