fixes for range locking
[unix-history] / usr / src / sys / deprecated / netdecnet / tp_usrreq.c
CommitLineData
8f1672ba 1/* tp_usrreq.c 1.4 82/12/18 */
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 */
24tp_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 */
55tp_linit()
56{
57 register struct mbuf *m;
58 register struct tpin *t;
59 register int n;
60
8f1672ba 61 m = m_get(MT_CANTWAIT, MT_HEADER);
a98f6f8a
SL
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}