xref: /csrg-svn/sys/deprecated/bbnnet/net.h (revision 25202)
1*25202Skarels #define RCSNETHDR	"$Header: net.h,v 1.14 85/07/31 09:32:54 walsh Exp $"
2*25202Skarels 
3*25202Skarels /*
4*25202Skarels  * dummy protocol number(s) for raw input.  Not real like UDPROTO/TCPROTO/...
5*25202Skarels  */
6*25202Skarels #define NETLOG_PROTO	62
7*25202Skarels 
8*25202Skarels 
9*25202Skarels #define TRUE  1
10*25202Skarels #define FALSE 0
11*25202Skarels 
12*25202Skarels /*
13*25202Skarels  * Software interrupt version
14*25202Skarels  *
15*25202Skarels  * This version of the network code runs off software interrupts rather than
16*25202Skarels  * as a separate process.  The software interrupt level for the network is
17*25202Skarels  * higher than the software level for the clock (so you can enter the network
18*25202Skarels  * in routines called from timeouts).  User process routines switch into
19*25202Skarels  * network code by doing splnet().
20*25202Skarels  */
21*25202Skarels 
22*25202Skarels /* splnet is defined in ../sys/asm.sed */
23*25202Skarels #define setsoftnet()	mtpr(SIRR, 12)
24*25202Skarels 
25*25202Skarels #ifndef LOCORE
26*25202Skarels 
27*25202Skarels typedef unsigned short n_short; /* short as received from the net */
28*25202Skarels typedef u_long n_long;   	/* long as received from the net */
29*25202Skarels typedef u_long sequence; 	/* sequence numbers in tcp */
30*25202Skarels typedef	u_long net_t;		/* network number */
31*25202Skarels 
32*25202Skarels /*
33*25202Skarels  * This structure describes the work that the finite state machine
34*25202Skarels  * procedure is supposed to do.  At one time, these were chained
35*25202Skarels  * together and batch processing performed on them.  Code would need
36*25202Skarels  * reworking to go back to that method since work entry has pointer
37*25202Skarels  * to tcpcb, which may have been closed and freed.
38*25202Skarels  */
39*25202Skarels struct work {
40*25202Skarels 	short w_type;                   /* what to do with entry */
41*25202Skarels 	short w_stype;                  /* subtype for timer names */
42*25202Skarels 	struct tcpcb *w_tcb;            /* -> tcb for entry */
43*25202Skarels 	char *w_dat;                    /* -> work data chain */
44*25202Skarels };
45*25202Skarels 
46*25202Skarels /*
47*25202Skarels  * No need to spl when enter network via action, since network is only
48*25202Skarels  * accessed via softare interrupt [splnet], tcp_usrreq(), and tcp_timeo()
49*25202Skarels  * which splnet().
50*25202Skarels  */
51*25202Skarels #define w_alloc(type, stype, tp, m)					\
52*25202Skarels {									\
53*25202Skarels 	struct work w;							\
54*25202Skarels 									\
55*25202Skarels 	w.w_type = type; w.w_stype = stype; w.w_tcb = tp; 		\
56*25202Skarels 	w.w_dat = (char *)m;						\
57*25202Skarels 	(void) action(&w);						\
58*25202Skarels }
59*25202Skarels 
60*25202Skarels #define NETHASH(x)  ((u_long) iptonet(x))
61*25202Skarels #define HOSTHASH(x) ((u_long) htonl((u_long) (x)))
62*25202Skarels 
63*25202Skarels /* make an ip addr */
64*25202Skarels #define ipaddr(w,x,y,z) ((long)(((z)<<24)|((y)<<16)|((x)<<8)|(w)))
65*25202Skarels 
66*25202Skarels 
67*25202Skarels struct dfilter {
68*25202Skarels 	struct in_addr	foreign_host;
69*25202Skarels 	struct in_addr	local_host;
70*25202Skarels 	u_short		foreign_port;
71*25202Skarels 	u_short		local_port;
72*25202Skarels 	int		matches;
73*25202Skarels };
74*25202Skarels 
75*25202Skarels #ifdef KERNEL
76*25202Skarels u_long iptime();
77*25202Skarels 
78*25202Skarels extern struct dfilter tcp_dfilter;
79*25202Skarels 
80*25202Skarels extern struct in_addr icmp_addr();
81*25202Skarels extern struct in_addr redir_addr();
82*25202Skarels 
83*25202Skarels #endif KERNEL
84*25202Skarels 
85*25202Skarels /* replace with dynamic estimate of remote send buffering */
86*25202Skarels #define MINTCPBUF	256
87*25202Skarels #endif LOCORE
88