#!/usr/bin/perl
#
# $Copyright$
# $TINY: acceptTooBigMesgOnlink.seq,v 1.5 2002/03/05 02:59:11 masaxmasa Exp $
#
########################################################################
BEGIN { $V6evalTool::TestVersion = '$Name: $ '; }
use V6evalTool;
use PMTU;
$IF=Link0;
$WAIT_TO_FIN_DAD=5;
$WAIT_TO_SET_PMTU=1;
$WAIT_TO_SET_NA=1;
%pktdesc = (
ns_A => 'TN(A) <----Neighbor Solicitation ------------- NUT',
ns_B => 'TN(B) <----Neighbor Solicitation ------------- NUT',
ns_A_solnode => 'TN(Asol) <-Neighbor Solicitation ------------- NUT',
ns_B_solnode => 'TN(Bsol) <-Neighbor Solicitation ------------- NUT',
ns_srcGlobal_A => 'TN(A) <----Neighbor Solicitation Global src--- NUT',
ns_srcGlobal_B => 'TN(B) <----Neighbor Solicitation Global src--- NUT',
ns_srcGlobal_A_solnode => 'TN(Asol) <-Neighbor Solicitation Global src--- NUT',
ns_srcGlobal_B_solnode => 'TN(Bsol) <-Neighbor Solicitation Global src--- NUT',
na_A_C => 'TN(C) -----Neighbor Advertisement -----------> NUT',
na_dstGlobal_A_C => 'TN(C) -----Neighbor Solicitation Global src--> NUT',
na_B => 'TN(B) -----Neighbor Advertisement -----------> NUT',
na_dstGlobal_B => 'TN(B) -----Neighbor Solicitation Global src--> NUT',
frag_echo_request_1500_1st_mtu1400_A_LLA => 'TN(A-C) ---ICMP Echo Request (1st MTU 1400)--> NUT',
frag_echo_request_1500_2nd_mtu1400_A_LLA => 'TN(A-C) ---ICMP Echo Request (2nd MTU 1400)--> NUT',
frag_echo_request_1400_1st_mtu1304_A_LLA => 'TN(A-C) ---ICMP Echo Request (1st MTU 1304)--> NUT',
frag_echo_request_1400_2nd_mtu1304_A_LLA => 'TN(A-C) ---ICMP Echo Request (2nd MTU 1304)--> NUT',
echo_reply_1500_to_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1500)----------- NUT',
echo_request_1400_from_A_LLA => 'TN(A-C) ---ICMP Echo Request (1400)----------> NUT',
echo_reply_1400_to_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1400)----------- NUT',
icmp6_TooBigMesg_1400_for_1500_A_LLA_C => 'TN(C) -----ICMP PktTooBig(1400)--------------> NUT',
icmp6_TooBigMesg_1304_for_1400_A_LLA_C => 'TN(C) -----ICMP PktTooBig(1304)--------------> NUT',
echo_request_1500_from_B_LLA => 'TN(B) -----ICMP Echo Request (1500)----------> NUT',
echo_reply_1500_to_B_LLA => 'TN(B) <----ICMP Echo Reply (1500)----------- NUT',
frag_echo_reply_1500_1st_mtu1400_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1st MTU 1400)----- NUT',
frag_echo_reply_1500_2nd_mtu1400_A_LLA => 'TN(A-C) <--ICMP Echo Reply (2nd MTU 1400)----- NUT',
frag_echo_reply_1500_1st_mtu1280_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1st MTU 1280)----- NUT',
frag_echo_reply_1500_2nd_mtu1280_A_LLA => 'TN(A-C) <--ICMP Echo Reply (2nd MTU 1280)----- NUT',
frag_echo_reply_1500_1st_mtu1400_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1st MTU 1400)----- NUT',
frag_echo_reply_1500_2nd_mtu1400_A_LLA => 'TN(A-C) <--ICMP Echo Reply (2nd MTU 1400)----- NUT',
frag_echo_reply_1400_1st_mtu1304_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1st MTU 1304)----- NUT',
frag_echo_reply_1400_2nd_mtu1304_A_LLA => 'TN(A-C) <--ICMP Echo Reply (2nd MTU 1304)----- NUT',
frag_echo_reply_1400_1st_mtu1280_A_LLA => 'TN(A-C) <--ICMP Echo Reply (1st MTU 1280)----- NUT',
frag_echo_reply_1400_2nd_mtu1280_A_LLA => 'TN(A-C) <--ICMP Echo Reply (2nd MTU 1280)----- NUT',
frag_echo_reply_1500_1st_mtu1400_B_LLA => 'TN(B) <----ICMP Echo Reply (1st MTU 1400)----- NUT',
frag_echo_reply_1500_2nd_mtu1400_B_LLA => 'TN(B) <----ICMP Echo Reply (2nd MTU 1400)----- NUT',
frag_echo_reply_1500_1st_mtu1280_B_LLA => 'TN(B) <----ICMP Echo Reply (1st MTU 1280)----- NUT',
frag_echo_reply_1500_2nd_mtu1280_B_LLA => 'TN(B) <----ICMP Echo Reply (2nd MTU 1280)----- NUT'
);
vLogHTML("Packet Too Big acception test @ ONLINK");
rebootNUT();
vCapture($IF);
vClear($IF);
#######################################################
# first ping with B_LLA to confirm MTU
#######################################################
vSend($IF, echo_request_1500_from_B_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_B_LLA,
frag_echo_reply_1500_1st_mtu1280_B_LLA,
frag_echo_reply_1500_2nd_mtu1280_B_LLA,
ns_srcGlobal_B_solnode,
ns_srcGlobal_B,
ns_B_solnode,
ns_B,
);
if( $ret{status} !=0) {
vLogHTML("TN COULD NOT receive Echo Reply nor ns from NUT
");
vLogHTML(vErrmsg(%ret));
vLogHTML('NG');
exit $V6evalTool::exitFail;
}
if($ret{recvFrame} eq 'ns_B' || $ret{recvFrame} eq 'ns_srcGlobal_B') {
vLogHTML("TN received Unicast NS from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitWarn;
}elsif($ret{recvFrame} eq 'ns_B_solnode' || $ret{recvFrame} eq 'ns_srcGlobal_B_solnode') {
if( $ret{recvFrame} eq 'ns_B_solnode') {
vSend($IF, na_B);
}elsif( $ret{recvFrame} eq 'ns_srcGlobal_B_solnode') {
vSend($IF, na_dstGlobal_B);
}
vSleep($WAIT_TO_SET_NA);
vClear($IF);
vSend($IF, echo_request_1500_from_B_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_B_LLA,
frag_echo_reply_1500_1st_mtu1280_B_LLA,
frag_echo_reply_1500_2nd_mtu1280_B_LLA,
);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_B_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_B_LLA') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1500) from NUT
");
vLogHTML('OK');
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_B_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_B') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1500) from NUT
");
vLogHTML('OK');
}
#
# Test for Packet Too Big size=1400
#
# Send Triger Packet
vClear($IF);
vSend($IF, frag_echo_request_1500_1st_mtu1400_A_LLA);
vSend($IF, frag_echo_request_1500_2nd_mtu1400_A_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_A_LLA,
frag_echo_reply_1500_1st_mtu1280_A_LLA,
frag_echo_reply_1500_2nd_mtu1280_A_LLA,
frag_echo_reply_1500_1st_mtu1400_A_LLA,
frag_echo_reply_1500_2nd_mtu1400_A_LLA,
ns_srcGlobal_A_solnode,
ns_srcGlobal_A,
ns_A_solnode,
ns_A);
if( $ret{status} !=0) {
vLogHTML("TN COULD NOT receive Echo Reply nor ns from NUT
");
vLogHTML(vErrmsg(%ret));
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
if($ret{recvFrame} eq 'ns_A' || $ret{recvFrame} eq 'ns_srcGlobal_A') {
vLogHTML("TN received Unicast NS
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}elsif($ret{recvFrame} eq 'ns_A_solnode' || $ret{recvFrame} eq 'ns_srcGlobal_A_solnode') {
if( $ret{recvFrame} eq 'ns_srcGlobal_A_solnode') {
vSend($IF, na_dstGlobal_A_C);
}elsif( $ret{recvFrame} eq 'ns_A_solnode') {
vSend($IF, na_A_C);
}
vSleep($WAIT_TO_SET_NA);
vClear($IF);
vSend($IF, frag_echo_request_1500_1st_mtu1400_A_LLA);
vSend($IF, frag_echo_request_1500_2nd_mtu1400_A_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_A_LLA,
frag_echo_reply_1500_1st_mtu1280_A_LLA,
frag_echo_reply_1500_2nd_mtu1280_A_LLA,
frag_echo_reply_1500_1st_mtu1400_A_LLA,
frag_echo_reply_1500_2nd_mtu1400_A_LLA,
);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1400_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1400) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1400) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1400) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_A_LLA') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1500) from NUT
");
vLogHTML('OK');
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_A') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1500) from NUT
");
vLogHTML('OK');
}
#
# Send Packet Too Big Message MTU=1400
#
vSend($IF,icmp6_TooBigMesg_1400_for_1500_A_LLA_C);
vSleep($WAIT_TO_SET_PMTU);
vClear($IF);
vSend($IF, frag_echo_request_1500_1st_mtu1400_A_LLA);
vSend($IF, frag_echo_request_1500_2nd_mtu1400_A_LLA);
vLogHTML("TN send ICMP echo Request again");
#-------------
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_A_LLA,
frag_echo_reply_1500_1st_mtu1400_A_LLA,
frag_echo_reply_1500_2nd_mtu1400_A_LLA,
frag_echo_reply_1500_1st_mtu1280_A_LLA,
frag_echo_reply_1500_2nd_mtu1280_A_LLA
);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive Echo Reply from NUT");
vClear($IF);
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_A_LLA') {
vLogHTML("TN received Echo Reply from NUT fragmented in 1280");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive another Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else {
vLogHTML("TN received Echo Reply from NUT Fragmented in 1280
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1400_A_LLA') {
vLogHTML("TN received Echo Reply from NUT fragmented in 1400");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive another Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else {
# Correct Case
vLogHTML("TN received Echo Reply from NUT Fragmented in 1400
");
vLogHTML('OK');
vClear($IF);
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_A_LLA') {
vLogHTML("TN received Echo Reply from NUT which is not fragmented
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
#######################################################
# B to confirm not to be registerd to DCE
#######################################################
vLogHTML("Confirm other DCE is not changed");
vClear($IF);
vSend($IF, echo_request_1500_from_B_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_B_LLA,
frag_echo_reply_1500_1st_mtu1280_B_LLA,
frag_echo_reply_1500_2nd_mtu1280_B_LLA,
frag_echo_reply_1500_1st_mtu1400_B_LLA,
frag_echo_reply_1500_2nd_mtu1400_B_LLA,
ns_srcGlobal_B_solnode,
ns_srcGlobal_B,
ns_B_solnode,
ns_B);
if( $ret{status} !=0) {
vLogHTML("TN COULD NOT receive Echo Reply nor ns from NUT
");
vLogHTML(vErrmsg(%ret));
vLogHTML('NG');
exit $V6evalTool::exitFail;
}
if($ret{recvFrame} eq 'ns_B' || $ret{recvFrame} eq 'ns_srcGlobal_B') {
vLogHTML("TN received Unicast NS
");
vLogHTML('NG');
exit $V6evalTool::exitFail;
}elsif($ret{recvFrame} eq 'ns_B_solnode' || $ret{recvFrame} eq 'ns_srcGlobal_B_solnode') {
if( $ret{recvFrame} eq 'ns_B_solnode') {
vSend($IF, na_B);
}elsif( $ret{recvFrame} eq 'ns_srcGlobal_B_solnode') {
vSend($IF, na_dstGlobal_B);
}
vSleep($WAIT_TO_SET_NA);
vClear($IF);
vSend($IF, echo_request_1500_from_B_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1500_to_B_LLA,
frag_echo_reply_1500_1st_mtu1280_B_LLA,
frag_echo_reply_1500_2nd_mtu1280_B_LLA,
);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_B_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1400_B_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1400) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_B_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1400) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1400) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_B_LLA') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1500) from NUT
");
vLogHTML('OK');
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_B_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1400_B_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1400) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_B_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1400) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1400) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1500_to_B') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1500) from NUT
");
vLogHTML('OK');
}
######################################################
# Re-Change the Link-Local MTU to A
# Send Triger Packet
vLogHTML("Reduce the MTU for A again");
vClear($IF);
vSend($IF, frag_echo_request_1400_1st_mtu1304_A_LLA);
vSend($IF, frag_echo_request_1400_2nd_mtu1304_A_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1400_to_A_LLA,
frag_echo_reply_1400_1st_mtu1304_A_LLA,
frag_echo_reply_1400_2nd_mtu1304_A_LLA,
frag_echo_reply_1400_1st_mtu1280_A_LLA,
frag_echo_reply_1400_2nd_mtu1280_A_LLA,
ns_srcGlobal_A_solnode,
ns_srcGlobal_A,
ns_A_solnode,
ns_A);
if( $ret{status} !=0) {
vLogHTML("TN COULD NOT receive Echo Reply nor ns from NUT
");
vLogHTML(vErrmsg(%ret));
vLogHTML('NG');
exit $V6evalTool::exitFail;
}
if($ret{recvFrame} eq 'ns_A' || $ret{recvFrame} eq 'ns_srcGlobal_A' ||$ret{recvFrame} eq 'ns_A_solnode' || $ret{recvFrame} eq 'ns_srcGlobal_A_solnode') {
if( $ret{recvFrame} eq 'ns_A' || $ret{recvFrame} eq 'ns_A_solnode') {
vSend($IF, na_A_C);
}elsif( $ret{recvFrame} eq 'ns_srcGlobal_A' || $ret{recvFrame} eq 'ns_srcGlobal_A_solnode') {
vSend($IF, na_dstGlobal_A_C);
}
vSleep($WAIT_TO_SET_NA);
vClear($IF);
vSend($IF, frag_echo_request_1400_1st_mtu1304_A_LLA);
vSend($IF, frag_echo_request_1400_2nd_mtu1304_A_LLA);
%ret=vRecv($IF, 5,0,0,
echo_reply_1400_to_A_LLA,
frag_echo_reply_1400_1st_mtu1304_A_LLA,
frag_echo_reply_1400_2nd_mtu1304_A_LLA,
frag_echo_reply_1400_1st_mtu1280_A_LLA,
frag_echo_reply_1400_2nd_mtu1280_A_LLA
);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1280_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1304_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1304) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1304_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1304) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1304) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1400_to_A_LLA') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1400) from NUT
");
vLogHTML('OK');
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1304_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1304) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1304_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1304) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1304) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1280_A_LLA') {
vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULDN'T receive Fragmented Echo Reply (2/2 MTU1280) from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else{
vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT");
vClear($IF);
exit $V6evalTool::exitWarn;
}
}elsif( $ret{recvFrame} eq 'echo_reply_1400_to_A') {
# Correct Case
vLogHTML("TN received Echo Reply (Size=1400) from NUT
");
vLogHTML('OK');
}
#
# Send Packet Too Big Message MTU=1304
#
vSend($IF,icmp6_TooBigMesg_1304_for_1400_A_LLA_C);
vSleep($WAIT_TO_SET_PMTU);
vClear($IF);
vSend($IF, frag_echo_request_1400_1st_mtu1304_A_LLA);
vSend($IF, frag_echo_request_1400_2nd_mtu1304_A_LLA);
vLogHTML("TN send ICMP echo Request again");
#-------------
%ret=vRecv($IF, 5,0,0,
echo_reply_1400_to_A_LLA,
frag_echo_reply_1400_1st_mtu1304_A_LLA,
frag_echo_reply_1400_2nd_mtu1304_A_LLA,
frag_echo_reply_1400_1st_mtu1280_A_LLA,
frag_echo_reply_1400_2nd_mtu1280_A_LLA
);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive Echo Reply from NUT");
vClear($IF);
exit $V6evalTool::exitFail;
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1280_A_LLA') {
vLogHTML("TN received Echo Reply from NUT fragmented in 1280");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive another Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else {
vLogHTML("TN received Echo Reply from NUT Fragmented in 1280
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
}elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1304_A_LLA') {
vLogHTML("TN received Echo Reply from NUT fragmented in 1400");
%ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1304_A_LLA);
if( $ret{status} != 0) {
vLogHTML("TN COULD NOT receive another Echo Reply from NUT
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}else {
# Correct Case
vLogHTML("TN received Echo Reply from NUT Fragmented in 1304
");
vLogHTML('OK');
vClear($IF);
}
}elsif( $ret{recvFrame} eq 'echo_reply_1400_to_A_LLA') {
vLogHTML("TN received Echo Reply from NUT which is not fragmented
");
vLogHTML('NG');
vClear($IF);
exit $V6evalTool::exitFail;
}
vLogHTML("OK");
exit $V6evalTool::exitPass;
########################################################################
__END__
=head1 NAME
acceptTooBigMesgOnlink - Verify changing Path MTU w/ received Too Big Message on a link
=head1 TARGET
Host
=head1 SYNOPSIS
acceptTooBigMesgOnlink.seq [-tooloption ...] -p acceptTooBigMesgOnlink.def
=head1 NETWORK CONFIGURATION
This test evaluate the behavior of NUT when it receive the ICMP
Packet Too Big Message.
In this test, NUT is a host and TN plays a Roll of Router and
other host.
Phisical Network configuration
--------+---------------+----------
| |
NUT TN
Logical Network Configuration
HOST-B NUT
| |
-------+--------+-------+--------
|
Proxy-C
|
--------+-------+----------------
|
HOST-A
In this test, NUT receives variable Packet Too Big Message.
- Decrease PMTU for A from 1500 to 1400
- Re-decrease PMTU for A from 1400 to 1304
=head1 INITIALIZATION
The TN send a RA to assign global address prefix.
TN NUT
| |
---+------------+------
===multicast RA===>
src=TN's link-local
dst=LinkLocal-all-node
M=0, O=0,
Lifetime=3600, ReachableTime=60000, RetransTimer=1005
Prefix:
L=1, A=1,
ValidLifetime=3600005, PreferredLifetime=3600005
Prefix=3ffe:501:ffff:100::, PrefixLength=64
Wait (5 sec.)
Ignoring DAD packets for global address.
=head1 TEST PROCEDURE
"acceptTooBigMesgOnlink" verify NUT's behavior when it receives
ICMP Packet Too Big Mesg even though the destination address
is Link-Local Address.
TN NUT
| |
---+------------+------
1. Confirm MTU (MTU=1500) ------------------------------
1.1
TN send Echo Request.
TN(B) === echo request(1500) ===========> NUT
1.2
NUT send Echo Reply.
<< JUDGMENT 1 >>
TN(B) <=== echo reply(1500) ============= NUT
2. PKT TOO BIG (MTU=1400) ------------------------------
2.1
TN send Echo Request.
TN(A) === echo request(1/2 MTU=1400) ===> NUT
TN(A) === echo request(2/2 MTU= 156) ===> NUT
2.2
NUT send Echo Reply.
TN(A) <=== echo reply(1500) ============= NUT
2.3
TN send ICMPv6 Too Big Mesg include MTU (1400).
TN(C) == ICMPv6 Too Big Mesg(MTU=1400) => NUT
2.4
TN send Echo Request.
TN(A) === echo request(1/2 MTU=1400) ===> NUT
TN(A) === echo request(2/2 MTU= 156) ===> NUT
2.5
NUT send Echo Reply
<< JUDGMENT 2 >>
TN(B) <=== echo reply(1400 1/2) ========= NUT
TN(B) <=== echo reply( 156 2/2) ========= NUT
3. Confirm MTU for B(MTU=1500) ------------------------------
3.1
TN send Echo Request.
TN(B) ==== echo request(1500) ==========> NUT
3.2
NUT send Echo Reply.
<< JUDGMENT 3 >>
TN(B) <==== echo reply(1500) ============ NUT
4. PKT TOO BIG (MTU=1304) ------------------------------
4.1
TN send Echo Request.
TN(A) === echo request(1304 1/2) =======> NUT
TN(A) === echo request( 154 2/2) =======> NUT
4.2
NUT send Echo Reply.
TN(A) <=== echo reply(1400) ============= NUT
4.3
TN send ICMPv6 Too Big Mesg include MTU (1304).
TN(C) = ICMPv6 Too Big Mesg(MTU=1304) ==> NUT
4.4
TN send Echo Request.
TN(A) === echo request(1304 1/2) =======> NUT
TN(A) === echo request( 154 2/2) =======> NUT
4.5
NUT send Echo Reply
<< JUDGMENT 4 >>
TN(A) <=== echo reply(1304 1/2) ========= NUT
TN(A) <=== echo reply( 154 2/2) ========= NUT
=head1 JUDGMENT
<< JUDGMENT 1 -PASS- >>
NUT send Echo Reply
"PASS" means that NUT recognizes Link MTU is greater equal than 1500.
And replied packet was correct.
<< JUDGMENT 2 -PASS- >>
NUT send Echo Reply
"PASS" means that NUT set valid MTU in received Packet Too Big message.
And fragmented packets are correct.
<< JUDGMENT 3 -PASS- >>
NUT send Echo Reply
"PASS" means that NUT treats the MTU in Packet Too Big Message independently.
And fragmented packets are correct.
<< JUDGMENT 4 -PASS- >>
NUT send Echo Reply
"PASS" means that NUT re-set valid MTU in received Packet Too Big message .
And fragmented packets are correct.
=head1 SEE ALSO
perldoc V6evalTool
perldoc V6evalRemote
=cut