|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.