#!/usr/bin/perl # # Copyright (C) 2003 Yokogawa Electric Corporation , # INTAP(Interoperability Technology Association for Information # Processing, Japan) , IPA (Information-technology Promotion Agency,Japan) # Copyright (C) IBM Corporation 2003. # 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. # # Author: Kazuo Hiekata # @title = (); %result = (); BEGIN { $V6evalTool::TestVersion = '$Name: REL_2_1_2 $'; } use V6evalTool; use mip6MN_common; #--------------------------------------------------------------# # check if NUT is host or router #--------------------------------------------------------------# if($V6evalTool::NutDef{Type} ne 'host') { vLogHTML("This test is for the host only"); exit $V6evalTool::exitHostOnly; } $IF0_NUT = $V6evalTool::NutDef{Link0_device}; $IF0 = Link0; vCapture($IF0); #--------------------------------------------------------------# # Initialization #--------------------------------------------------------------# init_mn(); # Assuming MN is at Link0 vSend($IF0, ra_ha0_to_multi); vSend($IF0, na_ha0lla_to_nut0); vSleep(3); my $hot_cookie; my $cot_cookie; my $kcn = "00112233445566778899aabbccddeeff00112233"; my $home_nonce_index = 10; my $careof_nonce_index = 20; my $errorcount = 0; # Clear Packets vClear($IF0); #--------------------------------------------------------------# # Test Procedure #--------------------------------------------------------------# vLogHTML('==== MN away from home can receive a packet(w/RH) from CN ===
'); # LinkX vLogHTML('MN moved to LinkX
'); vSend($IF0, ra_r1_to_multi); vSend($IF0, na_r1lla_to_nut1); # wait for Binding Update if (0 != wait_frame_at_linkx($IF0, bindingupdate_nut1_to_ha0)) { vLogHTML("HA0 cannot receive Binding Update."); exit $V6evalTool::exitFail; } #RR start --- my $kcn = "00112233445566778899aabbccddeeff00112233"; my $home_nonce_index = 10; my $careof_nonce_index = 20; vSend($IF0, ra_r1_to_multi); vSend($IF0, na_r1lla_to_nut1); vSend($IF0, echorequest_tunnel_tn_to_nut1); my ($ret, $hot_cookie, $cot_cookie) = return_routability_nut1_to_tn($IF0, $kcn, $home_nonce_index, $careof_nonce_index); if (0 != $ret) { vLogHTML('TN cannot complete Return Routability Procedure.'); exit $V6evalTool::exitFail; } #RR end --- # Clear Packets vLogHTML("Clear packet buffer."); vRecv($IF0, 3, 0, 0, ); # send Echo Request(w/RH) vSend($IF0, echorequest_rh_tn_to_nut1); if (0 != wait_frame_at_linkx($IF0, echoreply_opt_home_nut1_to_tn)) { vLogHTML('TN cannot get Echo Reply.
'); exit $V6evalTool::exitFail; } vLogHTML('OK
'); exit $V6evalTool::exitPass; ################################################################ __END__ =head1 NAME ReceivingPacketWRH - MN away from home can receive a packet(w/RH) from CN =head1 TARGET =begin html
Host
=end html =head1 SYNOPSIS =begin html
ReceivingPacketWRH.seq [-tooloption ...] -pkt MN_Common.def
-tooloption: v6eval tool option
=end html =head1 TOPOLOGY =begin html
                                      |
                                      R       TN
                                      |       |
                              --------+-------+--------------- LinkZ



                                      |
                                      R2             NUT2
                                      |               |
                              --------+---------------+------- LinkY



                                      |       |
                                      HA2     R1     NUT1
                                      |       |       |
                              --------+-------+-------+------- LinkX



                          |           |
             NUT0        HA1          HA0
              |           |           |
Link0 --------+-----------+-----------+-----------------------
Link0 3ffe:501:ffff:100::/64 home link
LinkX 3ffe:501:ffff:102::/64  
LinkY 3ffe:501:ffff:103::/64  
LinkZ 3ffe:501:ffff:104::/64  
HA0(Link0) 3ffe:501:ffff:100:200:ff:fe00:a1a1/64  
HA1(Link0) 3ffe:501:ffff:100:200:ff:fe00:a2a2/64  
HA2(LinkX) 3ffe:501:ffff:102:200:ff:fe00:a3a3  
R1(LinkX) 3ffe:501:ffff:102:200:ff:fe00:a4a4  
R2(LinkY) 3ffe:501:ffff:103:200:ff:fe00:a5a5  
TN(LinkZ) 3ffe:501:ffff:104:200:ff:fe00:a6a6  
=end html =head1 TEST PROCEDURE =begin html
MN away from home can receive a packet(w/RH) from CN

        HA0    NUT1     R1      TN
        |       |       |       |
        |       | <---- |       | RA
        |       |       |       |
        | <---- |       |       | Binding Update (*1)
        | ----> |       |       | Binding Acknowledgement
        |       |       |       |
        |       | <------------ | Echo Request (out: HA0->NUT1, in: TN->NUT0)
        | <==== |       | ----> | reversed tunneled Echo Reply (out:NUT1->HA0, in:NUT0->TN)
        | <==== |       | ----> | Home Test Init(HoTI)
        |       | ------------> | Care-of Test (CoTI)
        | ====> |       | <---- | Home Test (HoT)
        |       | <------------ | Care-of Test (CoTI)
        |       | ------------> | Binding Update
        |       |       |       |
        |       | <------------ | Echo Request (w/ RH Type 2)
        |       | ------------> | Echo Reply (w/ HAO)  (*2)
        |       |       |       |
=end html =head1 JUDGEMENT =begin html
(*1) PASS: HA0 receives Binding Update
(*2) PASS: TN receives Echo Reply (w/ Binding Update, Home Address Option)
=end html =head1 REFERENCE =begin html
draft-ietf-mobileip-ipv6-20.txt
11.3 Packet Processing
11.3.3 Receiving Packets While Away from Home
   While away from home, a mobile node will receive packets addressed to
   its home address, by one of three methods:
   o  Packets sent by a correspondent node that does not have a Binding
      Cache entry for the mobile node, will be tunneled to the mobile
      node via its home agent.
   o  Packets sent by a correspondent node that has a Binding Cache
      entry for the mobile node that contains the mobile node's current
      care-of address, will be sent by the correspondent node using a
      type 2 routing header.  The packet will be addressed to the mobile
      node's care-of address, with the final hop in the routing header
      directing the packet to the mobile node's home address; the
      processing of this last hop of the routing header is entirely
      internal to the mobile node, since the care-of address and home
      address are both addresses within the mobile node.
   For packets received by the first of these methods, the mobile node
   MUST check that the IPv6 source address of the tunneled packet is the
   IP address of its home agent.  In this method the mobile node SHOULD
   also send a Binding Update to the original sender of the packet, as
   described in Section 11.7.2, subject to the rate limiting defined in
   Section 11.8.  The mobile node MUST also process the received packet
   in the manner defined for IPv6 encapsulation [15], which will result
   in the encapsulated (inner) packet being processed normally by
   upper-layer protocols within the mobile node, as if it had been
   addressed (only) to the mobile node's home address.
=end html