// SCTP Conformance Test Suite Implementation
// (C) Copyright Fujitsu Ltd. 2008, 2009
//
// This file is part of the SCTP Conformance Test Suite implementation.
//
// The SCTP Conformance Test Suite implementation is free software;
// you can redistribute it and/or modify it under the terms of
// the GNU General Public License version 2 as published by
// the Free Software Foundation.
//
// The SCTP Conformance Test Suite implementation is distributed in the
// hope that it will be useful, but WITHOUT ANY WARRANTY; without even
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE. See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with GNU CC; see the file COPYING.  If not, write to
// the Free Software Foundation, 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
//
// Please send any bug reports or fixes you make to the
// email address(es):
//    networktest sctp <networktest-sctp@lists.sourceforge.net>
//
// Or submit a bug report through the following website:
//    http://networktest.sourceforge.net/
//
// Written or modified by:
//    Hiroaki Kago <linuxsctp-kg@ml.css.fujitsu.com>
//    Wei Yongjun <yjwei@cn.fujitsu.com>
//
// Any bugs reported given to us we will try to fix... any fixes shared will
// be incorporated into the next SCTP release.
//

#define DEFAULT_DATA_LEN 1024
#include "../common/STD_PKT_COMMON.def"

#ifndef SACK
#define SACK	1
#endif

#define DEFINE_DATA(INDEX)	\
PKG_SCTP_SHORT_RECV(	\
	sctp_chunk_data_##INDEX, \
	{	\
		chunk = chunk_data_##INDEX; \
	} \
) \
 \
CHUNK_DATA chunk_data_##INDEX { \
	UFlag = any; \
	BFlag = 1; \
	EFlag = 1; \
	TSN = SACK + INDEX - 1; \
	Identifier = any; \
	SequenceNumber = any; \
	Protocol = any; \
	payload = any; \
}

#define DEFINE_SACK(INDEX, START, END)	\
PKG_SCTP_SHORT_SEND( \
	sctp_chunk_sack_##INDEX, \
	{ \
		chunk = chunk_sack_##INDEX; \
	} \
) \
\
CHUNK_SACK chunk_sack_##INDEX { \
	ACK = SACK - 1; \
	AdvRecvWindow = ARWND; \
	NumOfGapAck = 1; \
	NumOfDupTSN = 0; \
	GapAckBlockStart = START; \
	GapAckBlockEnd = END; \
}

#define DEFINE_SACK_S(INDEX)	\
PKG_SCTP_SHORT_SEND( \
	sctp_chunk_sack_##INDEX, \
	{ \
		chunk = chunk_sack_##INDEX; \
	} \
) \
\
CHUNK_SACK chunk_sack_##INDEX { \
	ACK = SACK + INDEX - 1; \
	AdvRecvWindow = ARWND; \
	NumOfGapAck = 0; \
	NumOfDupTSN = 0; \
}

DEFINE_DATA(1)
DEFINE_DATA(2)
DEFINE_DATA(3)
DEFINE_DATA(4)
DEFINE_DATA(5)

DEFINE_SACK(1, 2, 2)
DEFINE_SACK(2, 2, 3)
DEFINE_SACK(3, 2, 4)
DEFINE_SACK_S(4)
DEFINE_SACK_S(5)

