|
|
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.