#!/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 #--------------------------------------------------------------# vLogHTML('==== Initialization ====
'); init_mn(); # Assuming MN is at Link0 vSend($IF0, ra_ha0_to_multi); vSend($IF0, na_ha0lla_to_nut0); # Clear Packets vLogHTML("Clear packet buffer."); vRecv($IF0, 3, 0, 0, ); #--------------------------------------------------------------# # 11.2.1.2. Sending Packets at foreign link #--------------------------------------------------------------# vLogHTML('==== Sending Packets at foreign link ====
'); # 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 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; } # wait for Binding Update from TN $ret = wait_bu_from_cn_at_linkx($IF0, $kcn, $home_nonce_index, $careof_nonce_index, $hot_cookie, $cot_cookie); if (0 != $ret) { vLogHTML('TN cannot get Binding Update.'); exit $V6evalTool::exitFail; } vSend($IF0, ra_r1_to_multi); vSend($IF0, na_r1lla_to_nut1); vSend($IF0, echorequest_rh_tn_to_nut1); %ret = vRecv($IF0, 5, 0, 0, echoreply_opt_home_nut1_to_tn); if(0 == $ret{status}) { exit $V6evalTool::exitPass; } vLogHTML('TN cannot get Echo Reply.'); exit $V6evalTool::exitFail; ################################################################ __END__ =head1 NAME SendingPacketAtForeignLink1 - Sending Packets at foreign link (1) =head1 TARGET =begin html
Host
=end html =head1 SYNOPSIS =begin html
SendingPacketAtForeignLink1.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
11.2.1.2. Sending Packets at foreign link

        HA0    NUT1     R1      TN
        |       |       |       |
        |       | <---- |       | RA
        |       | <---- |       | NA
        |       |       |       |
        | <---- |       |       | Binding Update (*1)
        | ----> |       |       | Binding Acknowledgement
        |       |       |       |
        |       | <------------ | Echo Request (out: HA0->NUT1, in: TN->NUT0)
        |       | ------------> | Echo Reply (Home Address Option) (*2)
        |       | ----> | ----> | Home Test Init(HoTI)
        |       | ------------> | Care-of Test (CoTI)
        |       | <---- | <---- | Home Test (HoT)
        |       | <------------ | Care-of Test (CoTI)
        |       | ------------> | Binding Update(*3)
        |       |       |       |
        |       | <------------ | Echo Request (RH: Home Address)
        |       | ------------> | Echo Reply (Home Address Option) (*4)
        |       |       |       |

=end html =head1 JUDGEMENT =begin html

(*1) PASS: HA0 receives Binding Update
(*2) PASS: TN receives Echo Reply
(*3) PASS: TN receives Binding Update
(*4) PASS: TN receives Echo Reply(w/ HAO)
=end html =head1 REFERENCE =begin html
draft-ietf-mobileip-ipv6-20.txt
11.3 Packet Processing
11.3.1 Sending Packets While Away from Home
   Direct Delivery
      This manner of delivering packets does not require going through
      the home network, and typically will enable faster and more
      reliable transmission.  A mobile node SHOULD arrange to supply the
      home address in a Home Address option, and allowing the IPv6
      header's Source Address field to be set to one of the mobile
      node's care-of addresses; the correspondent node will then use the
      address supplied in the Home Address option to serve the function
      traditionally done by the Source IP address in the IPv6 header.
      The mobile node's home address is then supplied to higher protocol
      layers and applications.
      Specifically:
      *  Construct the packet using the mobile node's home address as
         the packet's Source Address, in the same way as if the mobile
         node were at home.  This includes the calculation of upper
         layer checksums using the home address as the value of the
         source.
      *  Insert a Home Address option into the packet, with the Home
         Address field copied from the original value of the Source
         Address field in the packet.
      *  Change the Source Address field in the packet's IPv6 header to
         one of the mobile node's care-of addresses.  This will
         typically be the mobile node's current primary care-of address,
         but MUST be an address assigned to the interface on the link
         being used.
      By using the care-of address as the Source Address in the IPv6
      header, with the mobile node's home address instead in the Home
      Address option, the packet will be able to safely pass through any
      router implementing ingress filtering [27].
=end html