Commit | Line | Data |
---|---|---|
a37bfda7 | 1 | /* tp_usrreq.c 1.3 82/10/09 */ |
a98f6f8a SL |
2 | |
3 | #include "../h/param.h" | |
4 | #include "../h/systm.h" | |
5 | #include "../h/mbuf.h" | |
6 | #include "../h/socket.h" | |
7 | #include "../h/socketvar.h" | |
8 | #include "../h/protosw.h" | |
a37bfda7 BJ |
9 | #include "../netdecnet/dn_systm.h" |
10 | #include "../netdecnet/tp.h" | |
11 | #include "../netdecnet/tp_var.h" | |
a98f6f8a SL |
12 | |
13 | /* | |
14 | * Transport protocol interface to socket abstraction. | |
15 | * Used ONLY to initialize the Transport layer. May be | |
16 | * used for routing control in the future. | |
17 | */ | |
18 | ||
19 | /* | |
20 | * Process a Transport user request. Only allowed | |
21 | * operation is PRU_ATTACH to initialize the Transport | |
22 | * layer. | |
23 | */ | |
24 | tp_usrreq(so, req, m, addr) | |
25 | struct socket *so; | |
26 | int req; | |
27 | struct mbuf *m; | |
28 | caddr_t addr; | |
29 | { | |
30 | int s = splimp(); | |
31 | int error = 0; | |
32 | ||
33 | /* | |
34 | */ | |
35 | if (so->so_pcb != 0 || req != PRU_ATTACH) { | |
36 | splx(s); | |
37 | return (EINVAL); /* XXX */ | |
38 | } | |
39 | if (tpstate != TPS_HALT) { | |
40 | splx(s); | |
41 | return (0); | |
42 | } | |
43 | if (tp_linit() == 0) { | |
44 | splx(s); | |
45 | return (EIO); | |
46 | } | |
47 | sleep((caddr_t)&tpstate, PZERO+1); | |
48 | splx(s); | |
49 | return (0); | |
50 | } | |
51 | ||
52 | /* | |
53 | * Perform transport initialization for a line | |
54 | */ | |
55 | tp_linit() | |
56 | { | |
57 | register struct mbuf *m; | |
58 | register struct tpin *t; | |
59 | register int n; | |
60 | ||
61 | m = m_get(0); | |
62 | if (m == 0) | |
63 | return (0); | |
64 | m->m_off = MMINOFF; | |
65 | m->m_len = sizeof (struct tpin); | |
66 | t = mtod(m, struct tpin *); | |
67 | t->tpin_ctlflg = TP_INIT; | |
68 | AD_SHORT(t->tpin_srcnode, tp_host); | |
69 | t->tpin_tiinfo = TPINNT_NRT; | |
70 | AD_SHORT(t->tpin_blksize, 1024); | |
71 | t->tpin_ver[0] = 1; | |
72 | t->tpin_ver[1] = 3; | |
73 | t->tpin_ver[2] = 0; | |
74 | t->tpin_res = 0; | |
75 | n = (*tpifp->if_output)(tpifp, m, PF_DECNET); | |
76 | tpstate = TPS_TIS; | |
77 | m_freem(m); | |
78 | return (n); | |
79 | } |