#!/usr/bin/perl # # Copyright (C) 2003, 2004, 2005 Yokogawa Electric Corporation, # INTAP(Interoperability Technology Association # for Information Processing, Japan). All rights reserved. # # Redistribution and use of this software in source and binary forms, with # or without modification, are permitted provided that the following # conditions and disclaimer are agreed and accepted by the user: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the names of the copyrighters, the name of the project which # is related to this software (hereinafter referred to as "project") nor # the names of the contributors may be used to endorse or promote products # derived from this software without specific prior written permission. # # 4. No merchantable use may be permitted without prior written # notification to the copyrighters. However, using this software for the # purpose of testing or evaluating any products including merchantable # products may be permitted without any notification to the copyrighters. # # # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING # BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE # COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF # THE POSSIBILITY OF SUCH DAMAGE. # # $TAHI: ct/default-addr-select/SrcSelectExample1.seq,v 1.8 2003/04/22 03:57:46 akisada Exp $ # ###################################################################### BEGIN { $V6evalTool::TestVersion = '$Name: REL_2_1_2 $'; } use V6evalTool; use ADDR_SELECT; $TRUE = $ADDR_SELECT::TRUE; $FALSE = $ADDR_SELECT::FALSE; $IF = $ADDR_SELECT::IF; $NUT_LLA = nutLLA($IF); $TEST_STRING = "Test for Default Source Address Selection Example 1 - 4 (Prefer appropriate scope)"; $C_BLUE = $ADDR_SELECT::C_BLUE; @RESULT; $RESULT_TABLE = ""; $RESULT_TEST = $TRUE; #====== Test #====== vLogHTML("#### $TEST_STRING ####
"); vLogHTML("#### Jump to Test Result ####
"); $RESULT[@RESULT] = check_NoOpt(1,$FALSE,"2001::1","3ffe::1","","3ffe::3",""); $RESULT[@RESULT] = check_NoOpt(3,$FALSE,"2001::1","fec0::1","","fec0::3",""); $RESULT[@RESULT] = check_NoOpt(3,$FALSE,"fec0::1","2001::1","","2001::3",""); $RESULT[@RESULT] = check_NoOpt(4,$TRUE,"ff05::1","fec0::1","2001::1","fec0::3","2001::3"); #====== Test Result #====== vLogHTML("
#### Test ($TEST_STRING) Result ####
"); $RESULT_TABLE .= "

Destination Address & Candidate Source AddressJudgment
"; vLogHTML("$RESULT_TABLE"); foreach $RESULT_CHECK (@RESULT){ if(!$RESULT_CHECK){ $RESULT_TEST = $FALSE; } } if($RESULT_TEST){ vLogHTML("#### All Check: PASS ####
"); exit $V6evalTool::exitPass; }else{ vLogHTML('#### One of Check is Fail: NG ####
'); exit $V6evalTool::exitFail; } #====================================================================== # check_NoOpt($CHECK_NUM,$ON_LINK,$DESTINATION,$SOURCE1,$TEST_DST1) # $CHECK_NUM : check number # $ON_LINK : destination is on link or not? # $DESTINATION # $SOURCE1 # $SOURCE2 # $TEST_DST1 : destination of SOURCE1 at checkNUT_SrcAddr # $TEST_DST2 : destination of SOURCE2 at checkNUT_SrcAddr #====================================================================== sub check_NoOpt($$$$$$$) { my ($CHECK_NUM,$ON_LINK,$DESTINATION,$SOURCE1,$SOURCE2,$TEST_DST1,$TEST_DST2) = @_; my $SOURCE3 = $NUT_LLA; my $CHECK_TXT = "Destination = $DESTINATION
Candidate Source = $SOURCE1, $SOURCE2, $SOURCE3
Expected Source = $SOURCE1"; my $RESULT_LINE = "
$CHECK_NUM$CHECK_TXT"; my $RESULT = $TRUE; #====== Check : Initialize Add source address & NCE in NUT #====== vLogHTML("
#### Check $CHECK_NUM: Start ($CHECK_TXT) ####
"); nutInitialize() || exit $V6evalTool::exitFatal; $CPP = "-DSOURCE1=\\\"$SOURCE1\\\" -DSOURCE3=\\\"$SOURCE3\\\" -DDESTINATION=\\\"$DESTINATION\\\""; if($SOURCE2 ne ''){ $CPP .= " -DSOURCE2=\\\"$SOURCE2\\\""; } vCPP($CPP); nutIPv6AddrAdd($SOURCE1,"64") || exit $V6evalTool::exitFatal; if($SOURCE2 ne ''){ nutIPv6AddrAdd($SOURCE2,"64") || exit $V6evalTool::exitFatal; } $ret = checkNUT_SrcAddr($CPP,$SOURCE1,$TEST_DST1,$SOURCE2,$TEST_DST2); if (!$ret) { vLogHTML("#### Check $CHECK_NUM: Fail ####
"); nutReboot() || exit $V6evalTool::exitFatal; $RESULT_LINE .= "Fail"; $RESULT_TABLE .= $RESULT_LINE; return $FALSE; } if($RESULT){ if(!nutPing62Dest($CPP,$DESTINATION,$ON_LINK)){ $RESULT = $FALSE; } } if($RESULT){ vLogHTML("#### Check $CHECK_NUM: PASS ####
"); $RESULT_LINE .= "PASS"; $RESULT_TABLE .= $RESULT_LINE; nutClear($SOURCE1,"64",$SOURCE2,"64") || exit $V6evalTool::exitFatal; return $TRUE; }else{ vLogHTML("#### Check $CHECK_NUM: Fail ####
"); $RESULT_LINE .= "Fail"; $RESULT_TABLE .= $RESULT_LINE; nutClear($SOURCE1,"64",$SOURCE1,"64") || exit $V6evalTool::exitFatal; return $FALSE; } } ###################################################################### __END__ =head1 NAME SrcSelectExample1.seq - Source Address Selection Examples in RFC Check #1 - 4(Prefer appropriate scope) Rule 2: Prefer appropriate scope. If Scope(SA) < Scope(SB): If Scope(SA) < Scope(D), then prefer SB and otherwise prefer SA. Source addresses used for this test are "preferred address". =head1 TARGET Host and Router =head1 SYNOPSIS =begin html
  SrcSelectExample1.seq [-tooloption ...] -pkt ADDR_SELECT.def
    -tooloption : v6eval tool option
=end html =head1 INITIALIZATION None =head1 TEST PROCEDURE This TEST performs the following Check procedures for every address group defined by Check 01 - *. *Check procedure 1. Initialize : 1.1. Set IPv6 Default Route in NUT (Default Router address = ) 1.2. Add Candidate Source Addresses in NUT 1.3. Check Candidate Source Addresses by Ping6 (TN->NUT) 2. Send Ping6 from NUT to Destination 2.1. NUT send ICMPv6 echo request (NUT->TN) 3. Judgment : if (recive packet's Destination & Source Addresses) = (expected Destination & Source Addresses), Check pass 4. Cleanup : 4.1. Delete Candidate Source Addresses in NUT 4.2. Clear prefix list & NCE & default router list in NUT NUT TN Default Router Destination | | | | ======(INITIALIZE)========= | | | | |<-<-<-+ | | Set IPv6 Default Route |<-<-<-+ | | Add Candidate Source Addresses | | | | |<------------+ | Echo Request to Candidate Source Addresses 1 +------------>| | Echo Reply | | | | |<------------+ | Echo Request to Candidate Source Addresses 2 +------------>| | Echo Reply | | | | ======(INITIALIZE)========= | | | | |<-<-<-+ | | Excute ping6 command | | | | +------------------------>| Echo Request | | | | LLA(Link Local Address) Check 01: Destination: 2001::1 Candidate Source Addresses: 3ffe::1 or LLA Result: 3ffe::1 Check 02: Destination: 2001::1 Candidate Source Addresses: LLA or fec0::1 Result: fec0::1 Check 03: Destination: fec0::1 Candidate Source Addresses: LLA or 2001::1 Result: 2001::1 Check 04: Destination: ff05::1 Candidate Source Addresses: LLA or fec0::1 or 2001::1 Result: fec0::1 * Use LLA instead of fe80::1 =head1 JUDGEMENT Check 01: PASS: Receive Echo Request & source address = 3ffe::1 Check 02: PASS: Receive Echo Request & source address = fec0::1 Check 03: PASS: Receive Echo Request & source address = 2001::1 Check 04: PASS: Receive Echo Request & source address = fec0::1 TEST PASS: Check 1 = PASS =head1 SEE ALSO perldoc V6evalTool =begin html
  ADDR_SELECT.html "Default Address Selection for IPv6" Test Common Utility
das_rules.html "Default Address Selection for IPv6" Rules
=end html =cut