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