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