//
// $Copyright$
//
// $Name:  $
//
// $Id: HTR_A_Fragment.def,v 1.1.1.1 2000/09/28 00:14:46 sekiya Exp $
//

#define AALGO_FROM_HOST1	aalgo_hmacmd5_012
#define AALGO_TO_HOST1		aalgo_hmacmd5_012

#include "./HTR_A_common.def"


Hdr_AH ah_from_host_big {
	SPI = 0x1000;
	SequenceNumber = 2;
	algorithm = AALGO_FROM_HOST1;
}

Hdr_AH ah_to_host_big {
	SPI = 0x1000;
	SequenceNumber = 2;
	algorithm = AALGO_TO_HOST1;
}

//======================================================================
//
// Echo Request from Host1 IPsec AH (before fragment)
//


FEM_icmp6_echo_request_exth(
	echo_request_from_host1_big_ah,
	hether_router2nut,
	{
		_SRC(v6(IPSEC_HOST1_NET5_ADDR));
		_DST(v6(IPSEC_NUT_NET3_ADDR));
	},
	{
		header = _HDR_IPV6_NAME(echo_request_from_host1_big_ah);
		exthdr = ah_from_host_big;
		upper = _ICMPV6_NAME(echo_request_from_host1_big_ah);
	},
	{
		payload = echo_data_big;
	}
)

//
// Echo Request from Host1 IPsec AH (fragment 1st)
//

FEM_hdr_ipv6_exth(
	echo_request_from_host1_1st_ah,
	hether_router2nut,
	{
		_SRC(v6(IPSEC_HOST1_NET5_ADDR));
		_DST(v6(IPSEC_NUT_NET3_ADDR));
	},
	{
		header = _HDR_IPV6_NAME(echo_request_from_host1_1st_ah);
		exthdr = frag_req_1st_ah;
		upper = payload_req_1st_ah;
	}
)

//
// Echo Request from Host1 IPsec AH (fragment 2nd)
//

FEM_hdr_ipv6_exth(
	echo_request_from_host1_2nd_ah,
	hether_router2nut,
	{
		_SRC(v6(IPSEC_HOST1_NET5_ADDR));
		_DST(v6(IPSEC_NUT_NET3_ADDR));
	},
	{
		header = _HDR_IPV6_NAME(echo_request_from_host1_2nd_ah);
		exthdr = frag_req_2nd_ah;
		upper = payload_req_2nd_ah;
	}
)

Hdr_Fragment frag_req_1st_ah {
	NextHeader = 51;	// AH
	FragmentOffset = 0;
	MFlag = 1;
	Identification = 0x0002;
}

Hdr_Fragment frag_req_2nd_ah {
	NextHeader = 51;	// AH
	FragmentOffset = 181;
	MFlag = 0;
	Identification = 0x0002;
}

Payload payload_req_1st_ah {
	data = substr(_PACKET_IPV6_NAME(echo_request_from_host1_big_ah), 40, 1448);
}

Payload payload_req_2nd_ah {
	data = right(_PACKET_IPV6_NAME(echo_request_from_host1_big_ah), 1488);
}

//======================================================================
//
// Echo Reply to Host1 IPsec AH (before fragment)
//

FEM_icmp6_echo_reply_exth(
	echo_reply_to_host1_big_ah,
	hether_nut2router,
	{
		_SRC(v6(IPSEC_NUT_NET3_ADDR));
		_DST(v6(IPSEC_HOST1_NET5_ADDR));
	},
	{
		header = _HDR_IPV6_NAME(echo_reply_to_host1_big_ah);
		exthdr = ah_to_host_big;
		upper = _ICMPV6_NAME(echo_reply_to_host1_big_ah);
	},
	{
		payload = echo_data_big;
	}
)

//
// Echo Reply to Host1 IPsec AH (fragment 1st)
//

FEM_hdr_ipv6_exth(
	echo_reply_to_host1_1st_ah,
	hether_nut2router,
	{
		_SRC(v6(IPSEC_NUT_NET3_ADDR));
		_DST(v6(IPSEC_HOST1_NET5_ADDR));
	},
	{
		header = _HDR_IPV6_NAME(echo_reply_to_host1_1st_ah);
		exthdr = frag_rep_1st_ah;
		upper = payload_rep_1st_ah;
	}
)

//
// Echo Reply to Host1 IPsec AH (fragment 2nd)
//

FEM_hdr_ipv6_exth(
	echo_reply_to_host1_2nd_ah,
	hether_nut2router,
	{
		_SRC(v6(IPSEC_NUT_NET3_ADDR));
		_DST(v6(IPSEC_HOST1_NET5_ADDR));
	},
	{
		header = _HDR_IPV6_NAME(echo_reply_to_host1_2nd_ah);
		exthdr = frag_rep_2nd_ah;
		upper = payload_rep_2nd_ah;
	}
)

Hdr_Fragment frag_rep_1st_ah {
	NextHeader = 51;	// AH
	FragmentOffset = 0;
	MFlag = 1;
	Identification = any;
}

Hdr_Fragment frag_rep_2nd_ah {
	NextHeader = 51;	// AH
	FragmentOffset = 181;
	MFlag = 0;
	Identification = any;
}

Payload payload_rep_1st_ah {
	data = substr(_PACKET_IPV6_NAME(echo_reply_to_host1_big_ah), 40, 1448);
}

Payload payload_rep_2nd_ah {
	data = right(_PACKET_IPV6_NAME(echo_reply_to_host1_big_ah), 1488);
}

