home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / netns / spp_var.h < prev   
Encoding:
C/C++ Source or Header  |  2001-09-30  |  9.7 KB  |  237 lines

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