#!/usr/bin/perl # # $Copyright$ # # $TAHI: ct/mip6/CN_HBitIsSet.seq,v 1.7.4.4 2002/01/07 08:19:02 akisada Exp $ # BEGIN { $V6evalTool::TestVersion = '$Name: $'; } use V6evalTool; $IF0 = Link0; %pktdesc = ( echorequest => ' Send Echo Request from MN to NUT (no Home Address Option)', echoreply => ' Recv Echo Reply from NUT to MN (no Routing Header)', ra_r1 => ' Send RA from R1', ns_r1_global => ' Recv NS from NUT to R1', na_r1_global => ' Send NA from R1 to NUT', na_r1_linklocal => ' Send NA from R1 to NUT', bindingupdate => ' Send Binding Update', bindingacknowledgement => ' Recv Binding Acknowledgement', param_problem => ' Recv Parameter Problem', ); vLogHTML("#### ping test ###############################################
"); vCapture($IF0); if($V6evalTool::NutDef{Type} eq 'host') { %ret = vSend($IF0, ra_r1); vSleep(3); } %ret = vSend($IF0, echorequest); if($V6evalTool::NutDef{Type} eq 'host') { vLogHTML("Wait Echo Reply
"); %ret = vRecv($IF0, 5, 0, 0, echoreply); if($ret{status} != 0) { vLogHTML('No response from NUT
'); vLogHTML('NG
'); exit $V6evalTool::exitFail; } } else { vLogHTML("Wait Neighbor Solicitation or Echo Reply
"); %ret = vRecv($IF0, 5, 0, 0, ns_r1_global, echoreply); if($ret{status} != 0) { vLogHTML('No response from NUT
'); vLogHTML('NG
'); exit $V6evalTool::exitFail; } if($ret{recvFrame} eq 'ns_r1_global') { %ret = vSend($IF0, na_r1_global); vLogHTML("Wait Echo Reply
"); %ret = vRecv($IF0, 5, 0, 0, echoreply); if($ret{status} != 0) { vLogHTML('No response from NUT
'); vLogHTML('NG
'); exit $V6evalTool::exitFail; } } } if($ret{recvFrame} ne 'echoreply') { vLogHTML('Can not receive Echo Reply
'); vLogHTML('NG
'); exit $V6evalTool::exitFail; } vLogHTML("#### Binding Update test #####################################
"); if($V6evalTool::NutDef{Type} eq 'host') { %ret = vSend($IF0, na_r1_linklocal); } else { %ret = vSend($IF0, na_r1_global); } vSleep(3); vClear($IF0); %ret = vSend($IF0, bindingupdate); vLogHTML("Wait Binding Acknowledgement
"); %ret = vRecv($IF0, 5, 0, 0, param_problem, bindingacknowledgement); if($ret{status} != 0) { vLogHTML('No response from NUT
'); vLogHTML('NG
'); exit $V6evalTool::exitFail; } if($ret{recvFrame} eq 'param_problem') { vLogHTML('NUT does not support this function.
'); exit $V6evalTool::exitNS; } if($ret{recvFrame} ne 'bindingacknowledgement') { vLogHTML('Can not receive Binding Acknowledgement
'); vLogHTML('NG
'); exit $V6evalTool::exitFail; } vLogHTML(OK); exit $V6evalTool::exitPass; ################################################################ __END__ =head1 NAME CN_HBitIsSet - Home registration not supported =head1 TARGET =begin html
Host and Router
=end html =head1 SYNOPSIS =begin html
CN_HBitIsSet.seq [-tooloption ...] -pkt CN_HBitIsSet.def
-tooloption: v6eval tool option
=end html =head1 TOPOLOGY =begin html
                                                      MN'
                                                      |
                                      --------+-------+------- LinkY
                                              |
                                              R2      MN
                                              |       |
Link1 --------+-------        --------+-------+-------+------- LinkX
              |                       |
             NUT                      R1
              |                       |
Link0 --------+-----------------------+-----------------------
Link0 3ffe:501:ffff:100::/64  
Link1 3ffe:501:ffff:101::/64  
LinkX 3ffe:501:ffff:102::/64 home link
LinkY 3ffe:501:ffff:103::/64 foreign link
R1(Link0) 3ffe:501:ffff:100:200:ff:fe00:a0a0  
MN 3ffe:501:ffff:102:200:ff:fe00:0003 home address
MN' 3ffe:501:ffff:103:200:ff:fe00:0003 care-of address
=end html =head1 TEST PROCEDURE =begin html
       NUT      R1      MN      MN'
        |       |       |       |
        | <---- |       |       | RA
        |       |       |       |
        | <-------------------- | Echo Request
        | ----> |       |       | NS
        | <---- |       |       | NA
        | --------------------> | Echo Reply (*1)
        |       |       |       |
        | <---- |       |       | NA
        |       |       |       |
        | <-------------------- | Binding Update (H bit is set)
        | --------------------> | Binding Acknowledgement (*2)
        |       |       |       |

1. check routing table - LinkY
	1.1. Host
		1.1.1. R1 sends RA
		1.1.2. MN' sends Echo Request
		1.2.3. Wait Echo Reply
		1.1.4. Receive Echo Reply
	1.2. Router
		1.2.1. MN' sends Echo Request
		1.2.2. Wait Echo Reply or NS
		1.2.3. If NS received then send NA, and wait Echo Reply again
		1.2.4. Receive Echo Reply
2. overwrite NCE on NUT
	2.1. R1 sends NA
3. check Binding Update operation
	3.1. MN' sends incorrect Binding Update
	3.2. Wait Binding Acknowledgement
	3.3. Receive Binding Acknowledgement
=end html =head1 JUDGEMENT =begin html
(*1) PASS: MN' receives Echo Reply
(*2) PASS: MN' receives Binding Acknowledgement
=end html =head1 REFERENCE =begin html
<draft-ietf-mobileip-ipv6-15.txt>
5.2. Binding Acknowledgement Option
   If the node returning the Binding Acknowledgement instead
   rejected the Binding Update (the value of the Status field in the
   Acknowledgement is greater than or equal to 128), this node MUST
   similarly use a Routing header in sending the packet containing the
   Binding Acknowledgement, as described in Section 8.9, but MUST NOT
   use its Binding Cache in forming the IP header or Routing header
   in this packet.  Rather, the care-of address used by this node in
   sending the packet containing the Binding Acknowledgement MUST be
   copied from the care-of address received in the rejected Binding
   Update; this node MUST NOT modify its Binding Cache in response
   to receiving this rejected Binding Update and MUST ignore its
   Binding Cache in sending the packet in which it returns this Binding
   Acknowledgement.  The packet is sent using a Routing header, routing
   the packet to the home address of the rejected Binding Update by
   way of the care-of address indicated in the packet containing the
   Binding Update.  When sending a Binding Acknowledgement to reject a
   Binding Update, the Binding Acknowledgement MUST be sent in an IPv6
   packet containing no payload (with the Next Header field in the last
   extension header in the packet set to indicate "No Next Header" [6]).
8.2. Receiving Binding Updates
   If the Binding Update is valid according to the tests above, then the
   Binding Update is processed further as follows:
    -  If the Lifetime specified in the Binding Update is nonzero and
       the specified Care-of Address is not equal to the home address
       for the binding, then this is a request to cache a binding for
       the mobile node.  If the Home Registration (H) bit is set in the
       Binding Update, the Binding Update is processed according to the
       procedure specified in Section 9.1; otherwise, it is processed
       according to the procedure specified in Section 8.3.
9.1. Primary Care-of Address Registration
   To begin processing the Binding Update, the home agent MUST perform
   the following sequence of tests:
    -  If the node is not a router that implements home agent
       functionality, then the node MUST reject the Binding Update and
       SHOULD return a Binding Acknowledgement to the mobile node, in
       which the Status field is set to 132 (home registration not
       supported).
=end html =head1 SEE ALSO =begin html
CN_Common.def
=end html =cut