#!/usr/bin/perl # # $Copyright$ # # $TAHI: ct/mip6/CN_Bindingupdate.seq,v 1.6.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_Bindingupdate - Binding Update accepted =head1 TARGET =begin html
Host and Router
=end html =head1 SYNOPSIS =begin html
CN_Bindingupdate.seq [-tooloption ...] -pkt CN_Bindingupdate.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:0002 home address
MN' 3ffe:501:ffff:103:200:ff:fe00:0002 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
        | --------------------> | 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 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>
8.5. Sending Binding Acknowledgements
   When any node receives a packet containing a Binding Update option
   in which the Acknowledge (A) bit is set, it MUST return a Binding
   Acknowledgement option acknowledging receipt of the Binding Update.
   If the node accepts the Binding Update and creates or updates
   an entry in its Binding Cache for this binding, and the `A' bit
   was set in the Binding Update, the Status field in the Binding
   Acknowledgement MUST be set to a value less than 128; if, on the
   other hand the Binding Update is accepted and the `A' bit is not set,
   the node SHOULD NOT send a Binding Acknowledgement.  If the node
   rejects the Binding Update and does not create or update an entry for
   this binding, a Binding Acknowledgement MUST be sent even if the `A'
   bit was not sent, and the Status field in the Binding Acknowledgement
   MUST be set to a value greater than or equal to 128.  Specific values
   for the Status field are described in Section 5.2 and in the most
   recent "Assigned Numbers" [26].
=end html =head1 SEE ALSO =begin html
CN_Common.def
=end html =cut