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