diff options
Diffstat (limited to 'sys/netiso/tp_seq.h')
-rw-r--r-- | sys/netiso/tp_seq.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/sys/netiso/tp_seq.h b/sys/netiso/tp_seq.h new file mode 100644 index 0000000..f14e5ae --- /dev/null +++ b/sys/netiso/tp_seq.h @@ -0,0 +1,124 @@ +/*- + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)tp_seq.h 8.1 (Berkeley) 6/10/93 + */ + +/*********************************************************** + Copyright IBM Corporation 1987 + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of IBM not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +/* + * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison + */ +/* + * ARGO TP + * + * $Header: tp_seq.h,v 5.1 88/10/12 12:20:59 root Exp $ + * $Source: /usr/argo/sys/netiso/RCS/tp_seq.h,v $ + * + * These macros perform sequence number arithmetic modulo (2**7 or 2**31). + * The relevant fields in the tpcb are: + * tp_seqmask : the mask of bits that define the sequence space. + * tp_seqbit : 1 + tp_seqmask + * tp_seqhalf : tp_seqbit / 2 or half the sequence space (rounded up) + * Not exactly fast, but at least it's maintainable. + */ + +#ifndef __TP_SEQ__ +#define __TP_SEQ__ + +#define SEQ(tpcb,x) \ + ((x) & (tpcb)->tp_seqmask) + +#define SEQ_GT(tpcb, seq, operand ) \ +( ((int)((seq)-(operand)) > 0)\ +? ((int)((seq)-(operand)) < (int)(tpcb)->tp_seqhalf)\ +: !(-((int)(seq)-(operand)) < (int)(tpcb)->tp_seqhalf)) + +#define SEQ_GEQ(tpcb, seq, operand ) \ +( ((int)((seq)-(operand)) >= 0)\ +? ((int)((seq)-(operand)) < (int)(tpcb)->tp_seqhalf)\ +: !((-((int)(seq)-(operand))) < (int)(tpcb)->tp_seqhalf)) + +#define SEQ_LEQ(tpcb, seq, operand ) \ +( ((int)((seq)-(operand)) <= 0)\ +? ((-(int)((seq)-(operand))) < (int)(tpcb)->tp_seqhalf)\ +: !(((int)(seq)-(operand)) < (int)(tpcb)->tp_seqhalf)) + +#define SEQ_LT(tpcb, seq, operand ) \ +( ((int)((seq)-(operand)) < 0)\ +? ((-(int)((seq)-(operand))) < (int)(tpcb)->tp_seqhalf)\ +: !(((int)(seq)-(operand)) < (int)(tpcb)->tp_seqhalf)) + +#define SEQ_MIN(tpcb, a, b) ( SEQ_GT(tpcb, a, b) ? b : a) + +#define SEQ_MAX(tpcb, a, b) ( SEQ_GT(tpcb, a, b) ? a : b) + +#define SEQ_INC(tpcb, Seq) ((++Seq), ((Seq) &= (tpcb)->tp_seqmask)) + +#define SEQ_DEC(tpcb, Seq)\ + ((Seq) = (((Seq)+(unsigned)((int)(tpcb)->tp_seqbit - 1))&(tpcb)->tp_seqmask)) + +/* (amt) had better be less than the seq bit ! */ + +#define SEQ_SUB(tpcb, Seq, amt)\ + (((Seq) + (unsigned)((int)(tpcb)->tp_seqbit - amt)) & (tpcb)->tp_seqmask) +#define SEQ_ADD(tpcb, Seq, amt) (((Seq) + (unsigned)amt) & (tpcb)->tp_seqmask) + + +#define IN_RWINDOW(tpcb, seq, lwe, uwe)\ + ( SEQ_GEQ(tpcb, seq, lwe) && SEQ_LT(tpcb, seq, uwe) ) + +#define IN_SWINDOW(tpcb, seq, lwe, uwe)\ + ( SEQ_GT(tpcb, seq, lwe) && SEQ_LEQ(tpcb, seq, uwe) ) + +#endif /* __TP_SEQ__ */ |