#!/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