#!/usr/bin/perl # # $Copyright$ # $TINY: acceptTooBigMesg.seq,v 1.10 2002/03/05 02:59:10 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 => 'TN <--Neighbor Solicitation --------- NUT', ns_srcGlobal => 'TN <--Neighbor Solicitation Global--- NUT', echo_request_1500_from_A => 'TN(A) ---ICMP Echo Request (1500)------> NUT', echo_reply_1500_to_A => 'TN(A) <--ICMP Echo Reply (1500)------- NUT', echo_request_1400_from_A => 'TN(A) ---ICMP Echo Request (1400)------> NUT', echo_reply_1400_to_A => 'TN(A) <--ICMP Echo Reply (1400)------- NUT', echo_request_1400_from_B => 'TN(B) ---ICMP Echo Request (1400)------> NUT', echo_reply_1400_to_B => 'TN(B) <--ICMP Echo Reply (1400)------- NUT', echo_request_1500_from_B => 'TN(B) ---ICMP Echo Request (1500)------> NUT', echo_reply_1500_to_B => 'TN(B) <--ICMP Echo Reply (1500)------- NUT', echo_request_1280_from_B => 'TN(B) ---ICMP Echo Request (1280)------> NUT', echo_reply_1280_to_B => 'TN(B) <--ICMP Echo Reply (1280)------- NUT', echo_request_1500_from_C => 'TN(C) ---ICMP Echo Request (1500)------> NUT', echo_reply_1500_to_C => 'TN(C) <--ICMP Echo Reply (1500)------- NUT', echo_request_1492_from_C => 'TN(C) ---ICMP Echo Request (1492)------> NUT', echo_reply_1492_to_C => 'TN(C) <--ICMP Echo Reply (1492)------- NUT', echo_request_1000_from_C => 'TN(C) ---ICMP Echo Request (1000)------> NUT', echo_reply_1000_to_C => 'TN(C) <--ICMP Echo Reply (1000)------- NUT', frag_echo_reply_1400_1st_mtu1304_A => 'TN(A) <--ICMP Echo Reply (1st MTU 1304)- NUT', frag_echo_reply_1400_2nd_mtu1304_A => 'TN(A) <--ICMP Echo Reply (2nd MTU 1304)- NUT', frag_echo_reply_1500_1st_mtu1400_A => 'TN(A) <--ICMP Echo Reply (1st MTU 1400)- NUT', frag_echo_reply_1500_2nd_mtu1400_A => 'TN(A) <--ICMP Echo Reply (2nd MTU 1400)- NUT', frag_echo_reply_1500_1st_mtu1280_B => 'TN(B) <--ICMP Echo Reply (1st MTU 1280)- NUT', frag_echo_reply_1500_2nd_mtu1280_B => 'TN(B) <--ICMP Echo Reply (2nd MTU 1280)- NUT', frag_echo_reply_1400_1st_mtu1280_B => 'TN(B) <--ICMP Echo Reply (1st MTU 1280)- NUT', frag_echo_reply_1400_2nd_mtu1280_B => 'TN(B) <--ICMP Echo Reply (2nd MTU 1280)- NUT', frag_echo_reply_1500_1st_mtu1280_C => 'TN(C) <--ICMP Echo Reply (1st MTU 1280)- NUT', frag_echo_reply_1500_2nd_mtu1280_C => 'TN(C) <--ICMP Echo Reply (2nd MTU 1280)- NUT', frag_echo_reply_1492_1st_mtu1280_C => 'TN(C) <--ICMP Echo Reply (1st MTU 1280)- NUT', frag_echo_reply_1492_2nd_mtu1280_C => 'TN(C) <--ICMP Echo Reply (2nd MTU 1280)- NUT', frag_echo_reply_1492_1st_mtu1272_C => 'TN(C) <--ICMP Echo Reply (1st MTU 1272)- NUT', frag_echo_reply_1492_2nd_mtu1272_C => 'TN(C) <--ICMP Echo Reply (2nd MTU 1272)- NUT', frag_echo_reply_1492_1st_mtu1500_C => 'TN(C) <--ICMP Echo Reply (1st MTU 1500)- NUT', frag_echo_reply_1000_1st_mtu1280_C => 'TN(C) <--ICMP Echo Reply (1st MTU 1280)- NUT', icmp6_TooBigMesg_1400_for_1500_A => 'TN(A) ---ICMP PktTooBig(1400)----------> NUT', icmp6_TooBigMesg_1304_for_1400_A => 'TN(A) ---ICMP PktTooBig(1304)----------> NUT', icmp6_TooBigMesg_1280_for_1500_B => 'TN(B) ---ICMP PktTooBig(1280)----------> NUT', icmp6_TooBigMesg_1272_for_1500_C => 'TN(C) ---ICMP PktTooBig(1272)----------> NUT', icmp6_TooBigMesg_1400_for_1280_B => 'TN(B) ---ICMP PktTooBig(1400 Increase)-> NUT' ); vLogHTML("Packet Too Big acception test"); # Initialize rebootNUT(); vSend($IF,ra); vSleep($WAIT_TO_FIN_DAD); vSend($IF,na); vLogHTML("Ignoring DAD packets"); # Test start vCapture($IF); vClear($IF); # # Test for Packet Too Big size=1400 # # Send Triger Packet vSend($IF, echo_request_1500_from_A); %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_A, frag_echo_reply_1500_1st_mtu1280_A, frag_echo_reply_1500_2nd_mtu1280_A, ns_srcGlobal, ns); 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' || $ret{recvFrame} eq 'ns_srcGlobal') { if( $ret{recvFrame} eq 'ns') { PMTU::sendNA(); }elsif( $ret{recvFrame} eq 'ns_srcGlobal') { PMTU::sendNA_srcGlobal(); } vSleep($WAIT_TO_SET_NA); vClear($IF); vSend($IF, echo_request_1500_from_A); %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_A, frag_echo_reply_1500_1st_mtu1280_A, frag_echo_reply_1500_2nd_mtu1280_A, ); 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') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_A); 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'); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_A') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_A); 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); vSleep($WAIT_TO_SET_PMTU); vLogHTML("TN send ICMP echo Request again"); vClear($IF); vSend($IF, echo_request_1500_from_A); #------------- %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_A, frag_echo_reply_1500_1st_mtu1400_A, frag_echo_reply_1500_2nd_mtu1400_A, frag_echo_reply_1500_1st_mtu1280_A, frag_echo_reply_1500_2nd_mtu1280_A ); 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') { vLogHTML("TN received Echo Reply from NUT fragmented in 1280"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_A); 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 1280
"); vLogHTML('OK'); vClear($IF); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1400_A') { vLogHTML("TN received Echo Reply from NUT fragmented in 1400"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_A); 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') { vLogHTML("TN received Echo Reply from NUT which is not fragmented
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } #------------------------------------------------------------------------- # # Test for MTU1280 # # Send Triger Packet vClear($IF); vSend($IF, echo_request_1500_from_B); %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_B, frag_echo_reply_1500_1st_mtu1280_B, frag_echo_reply_1500_2nd_mtu1280_B, frag_echo_reply_1500_1st_mtu1400_B, frag_echo_reply_1500_2nd_mtu1400_B, ns_srcGlobal, ns); 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' || $ret{recvFrame} eq 'ns_srcGlobal') { if( $ret{recvFrame} eq 'ns') { PMTU::sendNA(); }elsif( $ret{recvFrame} eq 'ns_srcGlobal') { PMTU::sendNA_srcGlobal(); } vSleep($WAIT_TO_SET_NA); vClear($IF); vSend($IF, echo_request_1500_from_B); %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_B, frag_echo_reply_1500_1st_mtu1280_B, frag_echo_reply_1500_2nd_mtu1280_B, frag_echo_reply_1500_1st_mtu1400_B, frag_echo_reply_1500_2nd_mtu1400_B ); 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') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B); 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'); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_B') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B); 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"); exit $V6evalTool::exitWarn; } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1400_B') { vLogHTML("TN received Echo Reply from NUT fragmented in 1400"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_B); if( $ret{status} != 0) { vLogHTML("TN COULD NOT receive another Echo Reply from NUT
"); vLogHTML('NG'); exit $V6evalTool::exitFail; }else { vLogHTML("TN received Echo Reply from NUT Fragmented in 1400"); 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'); } # # Send Packet Too Big Message MTU=1280 # vSend($IF,icmp6_TooBigMesg_1280_for_1500_B); vSleep($WAIT_TO_SET_PMTU); vLogHTML("TN send ICMP echo Request again"); vClear($IF); vSend($IF, echo_request_1500_from_B); #------------- %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_B, frag_echo_reply_1500_1st_mtu1280_B, frag_echo_reply_1500_2nd_mtu1280_B ); 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') { vLogHTML("TN received Echo Reply from NUT fragmented in 1280"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_B); if( $ret{status} != 0) { vLogHTML("TN COULD NOT receive another Echo Reply from NUT
"); vLogHTML('NG'); exit $V6evalTool::exitFail; }else { # Correct Case vLogHTML("TN received Echo Reply from NUT Fragmented in 1280
"); vLogHTML('OK'); } }elsif( $ret{recvFrame} eq 'echo_reply_1500_to_B') { vLogHTML("TN received Echo Reply from NUT which is not fragmented
"); vLogHTML('NG'); exit $V6evalTool::exitFail; } #------------------------------------------------------------------------- # # Test for Re-changing the MTU size 1400 -> 1304 # # Send Triger Packet vClear($IF); vSend($IF, echo_request_1400_from_A); %ret=vRecv($IF, 5,0,0, echo_reply_1400_to_A, frag_echo_reply_1400_1st_mtu1280_A, frag_echo_reply_1400_2nd_mtu1280_A, ns_srcGlobal, ns); 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' || $ret{recvFrame} eq 'ns_srcGlobal') { if( $ret{recvFrame} eq 'ns') { PMTU::sendNA(); }elsif( $ret{recvFrame} eq 'ns_srcGlobal') { PMTU::sendNA_srcGlobal(); } vSleep($WAIT_TO_SET_NA); vClear($IF); vSend($IF, echo_request_1400_from_A); %ret=vRecv($IF, 5,0,0, echo_reply_1400_to_A, frag_echo_reply_1400_1st_mtu1280_A, frag_echo_reply_1400_2nd_mtu1280_A, ); 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') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_A); 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('Warn'); vLogHTML("TN received Fragmented Echo Reply (2/2 MTU1280) from NUT"); vLogHTML("So I COULD NOT continue this kind of test"); 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'); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1280_A') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_A); 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
"); vLogHTML("So I COULD NOT continue this kind of test
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } }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); vSleep($WAIT_TO_SET_PMTU); vLogHTML("TN send ICMP echo Request again"); vClear($IF); vSend($IF, echo_request_1400_from_A); #------------- %ret=vRecv($IF, 5,0,0, echo_reply_1400_to_A, frag_echo_reply_1400_1st_mtu1304_A, frag_echo_reply_1400_2nd_mtu1304_A, frag_echo_reply_1400_1st_mtu1280_A, frag_echo_reply_1400_2nd_mtu1280_A ); 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') { vLogHTML("TN received Echo Reply from NUT fragmented in 1280"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_A); 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 1280
"); vLogHTML('OK'); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1400_1st_mtu1304_A') { vLogHTML("TN received Echo Reply from NUT fragmented in 1304"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1304_A); 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'); } }elsif( $ret{recvFrame} eq 'echo_reply_1400_A') { vLogHTML("TN received Echo Reply from NUT which is not fragmented
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } #------------------------------------------------------------------------- # # Test for Re-changing the MTU size 1280 -> 1400 # # Send Triger Packet vClear($IF); vSend($IF, echo_request_1280_from_B); %ret=vRecv($IF, 5,0,0, echo_reply_1280_to_B, ns_srcGlobal, ns); 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' || $ret{recvFrame} eq 'ns_srcGlobal') { if( $ret{recvFrame} eq 'ns') { PMTU::sendNA(); }elsif( $ret{recvFrame} eq 'ns_srcGlobal') { PMTU::sendNA_srcGlobal(); } vSleep($WAIT_TO_SET_NA); vClear($IF); vSend($IF, echo_request_1280_from_B); %ret=vRecv($IF, 5,0,0, echo_reply_1280_to_B ); if( $ret{status} != 0) { vLogHTML("TN COULD NOT receive Echo Reply from NUT
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; }elsif( $ret{recvFrame} eq 'echo_reply_1280_to_B') { # Correct Case vLogHTML("TN received Echo Reply (Size=1280) from NUT
"); vLogHTML('OK'); } }elsif( $ret{recvFrame} eq 'echo_reply_1280_to_B') { # Correct Case vLogHTML("TN received Echo Reply (Size=1280) from NUT
"); vLogHTML('OK'); } # # Send Packet Too Big Message MTU=1400 # vSend($IF,icmp6_TooBigMesg_1400_for_1280_B); vSleep($WAIT_TO_SET_PMTU); vLogHTML("TN send ICMP echo Request again"); vClear($IF); vSend($IF, echo_request_1400_from_B); #------------- %ret=vRecv($IF, 5,0,0, echo_reply_1400_to_B, frag_echo_reply_1400_1st_mtu1280_B, frag_echo_reply_1400_2nd_mtu1280_B ); 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_B') { vLogHTML("TN received Echo Reply from NUT fragmented in 1280"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1400_2nd_mtu1280_B); 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 1280"); } }elsif( $ret{recvFrame} eq 'echo_reply_1400_to_B') { vLogHTML("TN received Echo Reply from NUT which is not fragmented
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } #------------------------------------------------------------------------- # # Test for MTU1272 # # Send Triger Packet vClear($IF); vSend($IF, echo_request_1500_from_C); %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_C, frag_echo_reply_1500_1st_mtu1280_C, frag_echo_reply_1500_2nd_mtu1280_C, frag_echo_reply_1500_1st_mtu1400_C, frag_echo_reply_1500_2nd_mtu1400_C, ns_srcGlobal, ns); 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' || $ret{recvFrame} eq 'ns_srcGlobal') { if( $ret{recvFrame} eq 'ns') { PMTU::sendNA(); }elsif( $ret{recvFrame} eq 'ns_srcGlobal') { PMTU::sendNA_srcGlobal(); } vSleep($WAIT_TO_SET_NA); vClear($IF); vSend($IF, echo_request_1500_from_C); %ret=vRecv($IF, 5,0,0, echo_reply_1500_to_C, frag_echo_reply_1500_1st_mtu1280_C, frag_echo_reply_1500_2nd_mtu1280_C, frag_echo_reply_1500_1st_mtu1400_C, frag_echo_reply_1500_2nd_mtu1400_C ); 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_C') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_C); 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_C') { vLogHTML("TN received Echo Reply from NUT fragmented in 1400"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_C); if( $ret{status} != 0) { vLogHTML("TN COULD NOT receive another Echo Reply from NUT
"); vLogHTML('NG'); }else { vLogHTML("TN received Echo Reply from NUT Fragmented in 1400
"); vLogHTML('NG'); } vClear($IF); exit $V6evalTool::exitFail; }elsif( $ret{recvFrame} eq 'echo_reply_1500_to_C') { # Correct Case vLogHTML("TN received Echo Reply (Size=1500) from NUT"); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1500_1st_mtu1280_C') { vLogHTML("TN received Fragmented Echo Reply (1/2 MTU1280) from NUT"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1280_C); 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_C') { vLogHTML("TN received Echo Reply from NUT fragmented in 1400"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1500_2nd_mtu1400_C); if( $ret{status} != 0) { vLogHTML("TN COULD NOT receive another Echo Reply from NUT
"); vLogHTML('NG'); }else { vLogHTML("TN received Echo Reply from NUT Fragmented in 1400
"); vLogHTML('NG'); } vClear($IF); exit $V6evalTool::exitFail; }elsif( $ret{recvFrame} eq 'echo_reply_1500_to_C') { # Correct Case vLogHTML("TN received Echo Reply (Size=1500) from NUT"); } # # Send Packet Too Big Message MTU=1272 # vSend($IF,icmp6_TooBigMesg_1272_for_1500_C); vSleep($WAIT_TO_SET_PMTU); vLogHTML("TN send ICMP echo Request again"); vClear($IF); vSend($IF, echo_request_1492_from_C); #------------- %ret=vRecv($IF, 5,0,0, echo_reply_1492_to_C, frag_echo_reply_1492_1st_mtu1280_C, frag_echo_reply_1492_2nd_mtu1280_C, frag_echo_reply_1492_1st_mtu1272_C, frag_echo_reply_1492_2nd_mtu1272_C, frag_echo_reply_1492_1st_mtu1500_C ); if( $ret{status} != 0) { vLogHTML("TN COULD NOT receive Echo Reply from NUT"); vClear($IF); }elsif( $ret{recvFrame} eq 'frag_echo_reply_1492_1st_mtu1280_C') { vLogHTML("TN received Echo Reply from NUT fragmented in 1280"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1492_2nd_mtu1280_C); 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 1280
"); vLogHTML("OK"); } }elsif( $ret{recvFrame} eq 'frag_echo_reply_1492_1st_mtu1272_C') { vLogHTML("TN received Echo Reply from NUT fragmented in 1272"); %ret=vRecv($IF, 5,0,0,frag_echo_reply_1492_2nd_mtu1272_C); 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 1272
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } }elsif( $ret{recvFrame} eq 'echo_reply_1492_to_C') { vLogHTML("TN received Echo Reply from NUT without fragmented
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; }elsif( $ret{recvFrame} eq 'frag_echo_reply_1492_1st_mtu1500_C') { vLogHTML("TN received Echo Reply from NUT with fragment header
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } #------------- vClear($IF); vSend($IF, echo_request_1000_from_C); vLogHTML("TN send ICMP echo Request again"); #------------- %ret=vRecv($IF, 5,0,0, echo_reply_1000_to_C, frag_echo_reply_1000_1st_mtu1280_C ); 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_1000_1st_mtu1280_C') { # Correct Case vLogHTML("TN received Echo Reply from NUT with fragment header
"); vLogHTML("OK"); vClear($IF); }elsif( $ret{recvFrame} eq 'echo_reply_1000_to_C') { vLogHTML("TN received Echo Reply from NUT without fragment header
"); vLogHTML('NG'); vClear($IF); exit $V6evalTool::exitFail; } exit $V6evalTool::exitPass; ######################################################################## __END__ =head1 NAME acceptTooBigMesg - Verify changing Path MTU w/ received Too Big Message =head1 TARGET Host =head1 SYNOPSIS acceptTooBigMesg.seq [-tooloption ...] -p acceptTooBigMesg.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 NUT | ----------------+-------+-------- | Router-A | --------+-------+-------+-------- | | Router-B HOST-A | --------+-------+-------+-------- | | Router-C HOST-B | ----------------+-------+-------- | HOST-C In this test, NUT receives variable Packet Too Big Message. - Decrease PMTU for A from 1500 to 1400 - Decrease PMTU for B from 1500 to 1280 - Re-decrease PMTU for A from 1400 to 1304 - Increase PMTU for B from 1280 to 1400 - Incorrect PMTU value for B 1272 =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 "acceptTooBigMesg" verify NUT's behavior when it receives ICMP Packet Too Big Mesg. TN NUT | | ---+------------+------ 1. PKT TOO BIG (MTU=1400) ------------------------------ 1.1 TN send Echo Request. TN(A) === echo request(1500) ===> NUT 1.2 NUT send Echo Reply. TN(A) <=== echo reply(1500) === NUT 1.3 TN send ICMPv6 Too Big Mesg include MTU (1400). TN(A) === ICMPv6 Too Big Mesg(MTU=1400) ===> NUT 1.4 TN send Echo Request. TN(A) === echo request(1500) ===> NUT 1.5 NUT send Echo Reply << JUDGMENT 1 >> TN(A) <=== echo reply(1400 1/2) === NUT TN(A) <=== echo reply( 156 2/2) === NUT 2. PKT TOO BIG (MTU=1280) ------------------------------ 2.1 TN send Echo Request. TN(B) === echo request(1500) ===> NUT 2.2 NUT send Echo Reply. TN(B) <=== echo reply(1500) === NUT 2.3 TN send ICMPv6 Too Big Mesg include MTU (1280). TN(B) === ICMPv6 Too Big Mesg(MTU=1280) ===> NUT 2.4 TN send Echo Request. TN(B) === echo request(1500) ===> NUT 2.5 NUT send Echo Reply << JUDGMENT 2 >> TN(B) <=== echo reply(1280 1/2) === NUT TN(B) <=== echo reply( 276 2/2) === NUT 3. PKT TOO BIG (MTU=1304) ------------------------------ 3.1 TN send Echo Request. TN(A) === echo request(1400) ===> NUT 3.2 NUT send Echo Reply. TN(A) <=== echo reply(1400) === NUT 3.3 TN send ICMPv6 Too Big Mesg include MTU (1304). TN(A) === ICMPv6 Too Big Mesg(MTU=1304) ===> NUT 3.4 TN send Echo Request. TN(A) === echo request(1400) ===> NUT 3.5 NUT send Echo Reply << JUDGMENT 3 >> TN(A) <=== echo reply(1304 1/2) === NUT TN(A) <=== echo reply( 152 2/2) === NUT 4. PKT TOO BIG (MTU=1400 INCREASE) ------------------------------ 4.1 TN send Echo Request. TN(B) === echo request(1280) ===> NUT 4.2 NUT send Echo Reply. TN(B) <=== echo reply(1280) === NUT 4.3 TN send ICMPv6 Too Big Mesg include MTU (1400). TN(B) === ICMPv6 Too Big Mesg(MTU=1400) ===> NUT 4.4 TN send Echo Request. TN(B) === echo request(1400) ===> NUT 4.5 NUT send Echo Reply << JUDGMENT 4 >> TN(B) <=== echo reply(1280 1/2) === NUT TN(B) <=== echo reply( 176 2/2) === NUT 5. PKT TOO BIG (MTU=1272) ------------------------------ 5.1 TN send Echo Request. TN(C) === echo request(1500) ===> NUT 5.2 NUT send Echo Reply. TN(C) <=== echo reply(1500) === NUT 5.3 TN send ICMPv6 Too Big Mesg include MTU (1272). TN(C) === ICMPv6 Too Big Mesg(MTU=1272) ===> NUT 5.4 TN send Echo Request. TN(C) === echo request(1492) ===> NUT 5.5 NUT send Echo Reply << JUDGMENT 5 >> TN(C) <=== echo reply(1280 1/2) === NUT TN(C) <=== echo reply( 268 2/2) === NUT 5.6 TN send Echo Request. TN(C) === echo request(1000) ===> NUT 5.7 NUT send Echo Reply TN(C) <=== echo reply(1008 w/ FH) === NUT =head1 JUDGMENT << JUDGMENT 1 -PASS- >> NUT send Echo Reply "PASS" means that NUT set valid MTU in received Packet Too Big message. And fragmented packets are 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 set decreased size of valid MTU in received Packet Too Big message. And fragmented packets are correct. << JUDGMENT 4 -PASS- >> NUT send Echo Reply "PASS" means that NUT doesn't set increased size of valid MTU in received Packet Too Big message. And fragmented packets are correct. << JUDGMENT 5 -PASS- >> NUT send Echo Reply "PASS" means that NUT set Minimum MTU, rather than MTU in received Packet Too Big Message, that is smaller than Minimum MTU. And NUT add Fragment header even though the packet is smaller than Minimu MTU. =head1 SEE ALSO perldoc V6evalTool perldoc V6evalRemote =cut