#!/usr/bin/perl
#
#$Copyright$
#
#$Id: C_RFC3315_18_1_8_ReqReplyWStatusNotOnLink.seq,v 1.2 2007/02/07 05:07:39 hide Exp $
###############################################################################
BEGIN{
$V6evalTool::TestVersion = '$Name: $';
}
use strict;
use V6evalTool;
use lib '../.';
use DHCPv6_common;
use Client_pktdesc;
dhcpExitNS if(ChkFuncSupport('ADDRASSIGN') && ChkFuncSupport('DNS'));
#--------------------------------------------------------------#
# Initialization variables
#--------------------------------------------------------------#
my $IF0_NUT = $V6evalTool::NutDef{"Link0_device"};
my $IF0 = "Link0";
my $statuscode = 4;
vCapture($IF0);
#--------------------------------------------------------------#
# Initialize DHCPv6 Client
#--------------------------------------------------------------#
my $ret = initial_ra_w_ping($IF0,'ra_server2_to_all');
if($ret == 0){
vLogHTML('Global Address of NUT is assigned by RA!
');
dhcpExitFail;
}
$ret = vRemote("dhcp6c.rmt", "start", "iana", "iaid=111111", "link0=$IF0_NUT");
if($ret != 0) {
vLogHTML('Cannot Initialize DHCPv6 Client program.
');
dhcpExitFail;
};
#--------------------------------------------------------------#
#1. Wait until Solicit arrives
#--------------------------------------------------------------#
my ($retsol,%sol) = wait_for_solicit($IF0,30) ;
if($retsol != 0){
dhcpExitFail;
}
#vClear($IF0);
#--------------------------------------------------------------#
# 2. send Advertise message
#--------------------------------------------------------------#
$SID_OPTION = "opt_SID_LLT_server1";
$IA_NA_OPTION = "opt_IA_NA_Addr_woStatus";
my ($retadv, %adv) = send_advertise($IF0, "advertise_server1_to_nut", \%sol, "");
if($retadv != 0){
dhcpExitFail;
}
#--------------------------------------------------------------#
#3. Wait until Request arrives
#--------------------------------------------------------------#
my ($retreq,%req) = wait_for_request($IF0,30);
if($retreq != 0){
dhcpExitFail;
}
vClear($IF0);
#--------------------------------------------------------------#
#4. send Reply message
#--------------------------------------------------------------#
#$IA_NA_OPTION = "opt_IA_NA_Addr_wStatus";
$IA_NA_OPTION = "opt_IA_NA_StatusOnly";
#$StatusCode_OPTION = "opt_StatusCode";
my $cppstr = " -DIA_STATUSCODE=$statuscode ";
my ($retrep, %rep) = send_reply($IF0, "reply_server1_to_nut", \%req, $cppstr);
if($retrep !=0){
dhcpExitFail;
}
#--------------------------------------------------------------#
#5. wait for new solicitation
#--------------------------------------------------------------#
#my ($retsol,%sol) = wait_for_solicit($IF0,30) ;
#if($retsol != 0){
# ($retreq,%req) = wait_for_request($IF0,30);
# if($retreq != 0){
# dhcpExitFail;
# }
#}
my %retmsg = vRecv($IF0, 30, 0, 0, "dhcp6_solicit","dhcp6_request");
if($retmsg{status} != 0){
dhcpExitFail;
}
if($retmsg{"recvFrame"} eq "dhcp6_request"){
if (0 != CheckIfExistOP(\%retmsg,$CMP_IA_ADD)){
dhcpExitError("Include unexpected IA_Address option");
}
}
vClear($IF0);
vStop($IF0);
dhcpExitPass;
###############################################################################
__END__
=head1 NAME
C_RFC3315_18_1_8_ReqReplyWStatusNotOnLink.seq - Test Reply with status code of NotOnLink
=head1 TARGET
Client
=head1 SYNOPSIS
=begin html
C_RFC3315_18_1_8_ReqReplyWStatusNotOnLink.seq [-tooloption...]=end html =head1 INITIALIZATION =begin html
-pkt C_RFC3315_18_1_8_ReqReplyWStatusNotOnLink.def
-tooloption : v6eval tool option
See Also DHCPv6.def
NUT(Client)
|
|
Link0 --+--------+------------------------ 3ffe:501:ffff:100::/64
|
|
TN(Server)
When the client receives a NotOnLink status from the server in response to a Request, the client can either re-issue the Request without specifying any addresses or restart the DHCP server discovery process.
| Device Name | Device Type | Interface | Assigned Prefix | Link Local Addr | MAC Addr |
| Client | NUT | Link0 | 3ffe:501:ffff:100::/64 | NUT's Linklocal address | NUT's MAC address |
| Server | TN | Link0 | 3ffe:501:ffff:100::/64 | fe80::200:ff:fe00:a1a1 | 00:00:00:00:a1:a1 |
=end html =head1 JUDGEMENT =begin html
NUT TN | | | |Initialize NUT(as a DHCPv6 client) | | | ----> |Solicit | <---- |Advertise | ----> |Request | <---- |Reply w/Status code/NotOnLink | | | ----> |Solicit or Request (5*) | |
=end html =head1 TERMINATION =begin html
(5*)PASS: NUT transmits Solicit or Request message.
N/A=end html =head1 REFERENCE =begin html
Also see RFC3315=end html =head1 SEE ALSO =begin html
18.1.8. Receipt of Reply Messages
=end html
perldoc V6evalTool