home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / netns / spp_var.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-08  |  8.8 KB  |  216 lines

  1. /*
  2.  * Copyright (c) 1984, 1985, 1986, 1987 Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)spp_var.h    7.7 (Berkeley) 6/28/90
  34.  */
  35.  
  36. /*
  37.  * Sp control block, one per connection
  38.  */
  39. struct sppcb {
  40.     struct    spidp_q    s_q;        /* queue for out-of-order receipt */
  41.     struct    nspcb    *s_nspcb;    /* backpointer to internet pcb */
  42.     u_char    s_state;
  43.     u_char    s_flags;
  44. #define    SF_ACKNOW    0x01        /* Ack peer immediately */
  45. #define    SF_DELACK    0x02        /* Ack, but try to delay it */
  46. #define    SF_HI    0x04            /* Show headers on input */
  47. #define    SF_HO    0x08            /* Show headers on output */
  48. #define    SF_PI    0x10            /* Packet (datagram) interface */
  49. #define SF_WIN    0x20            /* Window info changed */
  50. #define SF_RXT    0x40            /* Rxt info changed */
  51. #define SF_RVD    0x80            /* Calling from read usrreq routine */
  52.     u_short s_mtu;            /* Max packet size for this stream */
  53. /* use sequence fields in headers to store sequence numbers for this
  54.    connection */
  55.     struct    idp    *s_idp;
  56.     struct    sphdr    s_shdr;        /* prototype header to transmit */
  57. #define s_cc s_shdr.sp_cc        /* connection control (for EM bit) */
  58. #define s_dt s_shdr.sp_dt        /* datastream type */
  59. #define s_sid s_shdr.sp_sid        /* source connection identifier */
  60. #define s_did s_shdr.sp_did        /* destination connection identifier */
  61. #define s_seq s_shdr.sp_seq        /* sequence number */
  62. #define s_ack s_shdr.sp_ack        /* acknowledge number */
  63. #define s_alo s_shdr.sp_alo        /* allocation number */
  64. #define s_dport s_idp->idp_dna.x_port    /* where we are sending */
  65.     struct sphdr s_rhdr;        /* last received header (in effect!)*/
  66.     u_short s_rack;            /* their acknowledge number */
  67.     u_short s_ralo;            /* their allocation number */
  68.     u_short s_smax;            /* highest packet # we have sent */
  69.     u_short    s_snxt;            /* which packet to send next */
  70.  
  71. /* congestion control */
  72. #define    CUNIT    1024            /* scaling for ... */
  73.     int    s_cwnd;            /* Congestion-controlled window */
  74.                     /* in packets * CUNIT */
  75.     short    s_swnd;            /* == tcp snd_wnd, in packets */
  76.     short    s_smxw;            /* == tcp max_sndwnd */
  77.                     /* difference of two spp_seq's can be
  78.                        no bigger than a short */
  79.     u_short    s_swl1;            /* == tcp snd_wl1 */
  80.     u_short    s_swl2;            /* == tcp snd_wl2 */
  81.     int    s_cwmx;            /* max allowable cwnd */
  82.     int    s_ssthresh;        /* s_cwnd size threshhold for
  83.                      * slow start exponential-to-
  84.                      * linear switch */
  85. /* transmit timing stuff
  86.  * srtt and rttvar are stored as fixed point, for convenience in smoothing.
  87.  * srtt has 3 bits to the right of the binary point, rttvar has 2.
  88.  */
  89.     short    s_idle;            /* time idle */
  90.     short    s_timer[SPPT_NTIMERS];    /* timers */
  91.     short    s_rxtshift;        /* log(2) of rexmt exp. backoff */
  92.     short    s_rxtcur;        /* current retransmit value */
  93.     u_short    s_rtseq;        /* packet being timed */
  94.     short    s_rtt;            /* timer for round trips */
  95.     short    s_srtt;            /* averaged timer */
  96.     short    s_rttvar;        /* variance in round trip time */
  97.     char    s_force;        /* which timer expired */
  98.     char    s_dupacks;        /* counter to intuit xmt loss */
  99.  
  100. /* out of band data */
  101.     char    s_oobflags;
  102. #define SF_SOOB    0x08            /* sending out of band data */
  103. #define SF_IOOB 0x10            /* receiving out of band data */
  104.     char    s_iobc;            /* input characters */
  105. /* debug stuff */
  106.     u_short    s_want;            /* Last candidate for sending */
  107.     char    s_outx;            /* exit taken from spp_output */
  108.     char    s_inx;            /* exit taken from spp_input */
  109.     u_short    s_flags2;        /* more flags for testing */
  110. #define SF_NEWCALL    0x100        /* for new_recvmsg */
  111. #define SO_NEWCALL    10        /* for new_recvmsg */
  112. };
  113.  
  114. #define    nstosppcb(np)    ((struct sppcb *)(np)->nsp_pcb)
  115. #define    sotosppcb(so)    (nstosppcb(sotonspcb(so)))
  116.  
  117. struct    sppstat {
  118.     long    spps_connattempt;    /* connections initiated */
  119.     long    spps_accepts;        /* connections accepted */
  120.     long    spps_connects;        /* connections established */
  121.     long    spps_drops;        /* connections dropped */
  122.     long    spps_conndrops;        /* embryonic connections dropped */
  123.     long    spps_closed;        /* conn. closed (includes drops) */
  124.     long    spps_segstimed;        /* segs where we tried to get rtt */
  125.     long    spps_rttupdated;    /* times we succeeded */
  126.     long    spps_delack;        /* delayed acks sent */
  127.     long    spps_timeoutdrop;    /* conn. dropped in rxmt timeout */
  128.     long    spps_rexmttimeo;    /* retransmit timeouts */
  129.     long    spps_persisttimeo;    /* persist timeouts */
  130.     long    spps_keeptimeo;        /* keepalive timeouts */
  131.     long    spps_keepprobe;        /* keepalive probes sent */
  132.     long    spps_keepdrops;        /* connections dropped in keepalive */
  133.  
  134.     long    spps_sndtotal;        /* total packets sent */
  135.     long    spps_sndpack;        /* data packets sent */
  136.     long    spps_sndbyte;        /* data bytes sent */
  137.     long    spps_sndrexmitpack;    /* data packets retransmitted */
  138.     long    spps_sndrexmitbyte;    /* data bytes retransmitted */
  139.     long    spps_sndacks;        /* ack-only packets sent */
  140.     long    spps_sndprobe;        /* window probes sent */
  141.     long    spps_sndurg;        /* packets sent with URG only */
  142.     long    spps_sndwinup;        /* window update-only packets sent */
  143.     long    spps_sndctrl;        /* control (SYN|FIN|RST) packets sent */
  144.     long    spps_sndvoid;        /* couldn't find requested packet*/
  145.  
  146.     long    spps_rcvtotal;        /* total packets received */
  147.     long    spps_rcvpack;        /* packets received in sequence */
  148.     long    spps_rcvbyte;        /* bytes received in sequence */
  149.     long    spps_rcvbadsum;        /* packets received with ccksum errs */
  150.     long    spps_rcvbadoff;        /* packets received with bad offset */
  151.     long    spps_rcvshort;        /* packets received too short */
  152.     long    spps_rcvduppack;    /* duplicate-only packets received */
  153.     long    spps_rcvdupbyte;    /* duplicate-only bytes received */
  154.     long    spps_rcvpartduppack;    /* packets with some duplicate data */
  155.     long    spps_rcvpartdupbyte;    /* dup. bytes in part-dup. packets */
  156.     long    spps_rcvoopack;        /* out-of-order packets received */
  157.     long    spps_rcvoobyte;        /* out-of-order bytes received */
  158.     long    spps_rcvpackafterwin;    /* packets with data after window */
  159.     long    spps_rcvbyteafterwin;    /* bytes rcvd after window */
  160.     long    spps_rcvafterclose;    /* packets rcvd after "close" */
  161.     long    spps_rcvwinprobe;    /* rcvd window probe packets */
  162.     long    spps_rcvdupack;        /* rcvd duplicate acks */
  163.     long    spps_rcvacktoomuch;    /* rcvd acks for unsent data */
  164.     long    spps_rcvackpack;    /* rcvd ack packets */
  165.     long    spps_rcvackbyte;    /* bytes acked by rcvd acks */
  166.     long    spps_rcvwinupd;        /* rcvd window update packets */
  167. };
  168. struct    spp_istat {
  169.     short    hdrops;
  170.     short    badsum;
  171.     short    badlen;
  172.     short    slotim;
  173.     short    fastim;
  174.     short    nonucn;
  175.     short    noconn;
  176.     short    notme;
  177.     short    wrncon;
  178.     short    bdreas;
  179.     short    gonawy;
  180.     short    notyet;
  181.     short    lstdup;
  182.     struct sppstat newstats;
  183. };
  184.  
  185. #ifdef KERNEL
  186. struct spp_istat spp_istat;
  187.  
  188. /* Following was struct sppstat sppstat; */
  189. #ifndef sppstat
  190. #define sppstat spp_istat.newstats
  191. #endif
  192.  
  193. u_short spp_iss;
  194. extern struct sppcb *spp_close(), *spp_disconnect(),
  195.     *spp_usrclosed(), *spp_timers(), *spp_drop();
  196. #endif
  197.  
  198. #define    SPP_ISSINCR    128
  199. /*
  200.  * SPP sequence numbers are 16 bit integers operated
  201.  * on with modular arithmetic.  These macros can be
  202.  * used to compare such integers.
  203.  */
  204. #ifdef sun
  205. short xnsCbug;
  206. #define    SSEQ_LT(a,b)    ((xnsCbug = (short)((a)-(b))) < 0)
  207. #define    SSEQ_LEQ(a,b)    ((xnsCbug = (short)((a)-(b))) <= 0)
  208. #define    SSEQ_GT(a,b)    ((xnsCbug = (short)((a)-(b))) > 0)
  209. #define    SSEQ_GEQ(a,b)    ((xnsCbug = (short)((a)-(b))) >= 0)
  210. #else
  211. #define    SSEQ_LT(a,b)    (((short)((a)-(b))) < 0)
  212. #define    SSEQ_LEQ(a,b)    (((short)((a)-(b))) <= 0)
  213. #define    SSEQ_GT(a,b)    (((short)((a)-(b))) > 0)
  214. #define    SSEQ_GEQ(a,b)    (((short)((a)-(b))) >= 0)
  215. #endif
  216.