1*37274f3cSDavid van Moolenbroek /* $NetBSD: tcp_seq.h,v 1.17 2014/07/25 17:53:59 ryo Exp $ */ 2*37274f3cSDavid van Moolenbroek 3*37274f3cSDavid van Moolenbroek /* 4*37274f3cSDavid van Moolenbroek * Copyright (c) 1982, 1986, 1993, 1995 5*37274f3cSDavid van Moolenbroek * The Regents of the University of California. All rights reserved. 6*37274f3cSDavid van Moolenbroek * 7*37274f3cSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 8*37274f3cSDavid van Moolenbroek * modification, are permitted provided that the following conditions 9*37274f3cSDavid van Moolenbroek * are met: 10*37274f3cSDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 11*37274f3cSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 12*37274f3cSDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 13*37274f3cSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 14*37274f3cSDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 15*37274f3cSDavid van Moolenbroek * 3. Neither the name of the University nor the names of its contributors 16*37274f3cSDavid van Moolenbroek * may be used to endorse or promote products derived from this software 17*37274f3cSDavid van Moolenbroek * without specific prior written permission. 18*37274f3cSDavid van Moolenbroek * 19*37274f3cSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20*37274f3cSDavid van Moolenbroek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*37274f3cSDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*37274f3cSDavid van Moolenbroek * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23*37274f3cSDavid van Moolenbroek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*37274f3cSDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25*37274f3cSDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*37274f3cSDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27*37274f3cSDavid van Moolenbroek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28*37274f3cSDavid van Moolenbroek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*37274f3cSDavid van Moolenbroek * SUCH DAMAGE. 30*37274f3cSDavid van Moolenbroek * 31*37274f3cSDavid van Moolenbroek * @(#)tcp_seq.h 8.3 (Berkeley) 6/21/95 32*37274f3cSDavid van Moolenbroek */ 33*37274f3cSDavid van Moolenbroek 34*37274f3cSDavid van Moolenbroek #ifndef _NETINET_TCP_SEQ_H_ 35*37274f3cSDavid van Moolenbroek #define _NETINET_TCP_SEQ_H_ 36*37274f3cSDavid van Moolenbroek 37*37274f3cSDavid van Moolenbroek /* 38*37274f3cSDavid van Moolenbroek * TCP sequence numbers are 32 bit integers operated 39*37274f3cSDavid van Moolenbroek * on with modular arithmetic. These macros can be 40*37274f3cSDavid van Moolenbroek * used to compare such integers. 41*37274f3cSDavid van Moolenbroek */ 42*37274f3cSDavid van Moolenbroek #define SEQ_LT(a,b) ((int)((a)-(b)) < 0) 43*37274f3cSDavid van Moolenbroek #define SEQ_LEQ(a,b) ((int)((a)-(b)) <= 0) 44*37274f3cSDavid van Moolenbroek #define SEQ_GT(a,b) ((int)((a)-(b)) > 0) 45*37274f3cSDavid van Moolenbroek #define SEQ_GEQ(a,b) ((int)((a)-(b)) >= 0) 46*37274f3cSDavid van Moolenbroek #define SEQ_MIN(a, b) ((SEQ_LT(a, b)) ? (a) : (b)) 47*37274f3cSDavid van Moolenbroek #define SEQ_MAX(a, b) ((SEQ_GT(a, b)) ? (a) : (b)) 48*37274f3cSDavid van Moolenbroek 49*37274f3cSDavid van Moolenbroek #define SEQ_SUB(a,b) ((long)((a)-(b))) 50*37274f3cSDavid van Moolenbroek 51*37274f3cSDavid van Moolenbroek /* 52*37274f3cSDavid van Moolenbroek * Macros to initialize tcp sequence numbers for 53*37274f3cSDavid van Moolenbroek * send and receive from initial send and receive 54*37274f3cSDavid van Moolenbroek * sequence numbers. 55*37274f3cSDavid van Moolenbroek */ 56*37274f3cSDavid van Moolenbroek #define tcp_rcvseqinit(tp) \ 57*37274f3cSDavid van Moolenbroek (tp)->rcv_adv = (tp)->rcv_nxt = (tp)->irs + 1 58*37274f3cSDavid van Moolenbroek 59*37274f3cSDavid van Moolenbroek #define tcp_sendseqinit(tp) \ 60*37274f3cSDavid van Moolenbroek (tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \ 61*37274f3cSDavid van Moolenbroek (tp)->snd_recover = (tp)->snd_high = (tp)->snd_fack = (tp)->iss 62*37274f3cSDavid van Moolenbroek 63*37274f3cSDavid van Moolenbroek #define TCP_ISS_RANDOM_MASK 0x00ffffff /* bits of randomness in a TCP ISS */ 64*37274f3cSDavid van Moolenbroek #define TCP_ISSINCR 0x01000000 /* increment per time and per conn */ 65*37274f3cSDavid van Moolenbroek 66*37274f3cSDavid van Moolenbroek #ifdef _KERNEL 67*37274f3cSDavid van Moolenbroek extern tcp_seq tcp_iss_seq; /* tcp initial seq # */ 68*37274f3cSDavid van Moolenbroek #endif 69*37274f3cSDavid van Moolenbroek 70*37274f3cSDavid van Moolenbroek #endif /* !_NETINET_TCP_SEQ_H_ */ 71