#!/usr/bin/perl # # $Copyright$ # # $TAHI: ct-dhcpv6/dhcpv6.tahi/S_RFC3315_18.2.2_ReceiptConfirmMsgIgnore.seq,v 1.34 2006/11/06 05:54:52 hide Exp $ ######################################################################## BEGIN { $V6evalTool::TestVersion = '$Name: $'; } use strict; use V6evalTool; use DHCPv6_common; use Server_pktdesc; #--------------------------------------------------------------# # Initialization #--------------------------------------------------------------# vLogHTML('==== NUT Initialization ====
'); my $IF0 = "Link0"; #initial NUT config parameters, my %NUT_Server_Config = ( 'if_nut0'=> "$V6evalTool::NutDef{Link0_device}", 'init_opcode' => "vRemote(\"dhcp6s.rmt\", \"start\",\"link0=$V6evalTool::NutDef{Link0_device}\",\"startaddr=3ffe:501:ffff:100::10\",\"endaddr=3ffe:501:ffff:100::11\")" ); dhcpSvrInit(\%NUT_Server_Config); #--------------------------------------------------------------# # Main Procedure #--------------------------------------------------------------# vLogHTML('==== Confirm Reply Message Exchange ====
'); # 1.send DHCPv6 Solicit Message $CID_OPTION = "opt_CID_LLT_client1"; $IA_NA_OPTION = "opt_IA_NA"; send_solicit($IF0, "solicit_client1_to_alldhcp", ""); # wait for DHCPv6 Advertise Message my ($ret1, %adv1) = wait_for_advertise($IF0, 5); if (0 != $ret1) { dhcpExitFail(); } # . send DHCPv6 Request Message $SID_OPTION = "opt_SID_ANY"; $IA_NA_OPTION = "opt_IA_NA"; send_request($IF0, "request_client1_to_alldhcp", \%adv1, ""); # 1.wait for DHCPv6 Reply Message my ($ret1, %rep1) = wait_for_reply($IF0, 5); if (0 != $ret1) { dhcpExitFail(); } # Get the Base value; my $bas_T1 = GetFieldValueInMsg(\%rep1,"Opt_DHCPv6_IA_NA.Time1"); my $bas_T2 = GetFieldValueInMsg(\%rep1,"Opt_DHCPv6_IA_NA.Time2"); my $bas_PrefTime = GetFieldValueInMsg(\%rep1,"Opt_DHCPv6_IA_NA.Opt_DHCPv6_IA_Address.PreferredLifetime"); my $bas_ValidTIme = GetFieldValueInMsg(\%rep1,"Opt_DHCPv6_IA_NA.Opt_DHCPv6_IA_Address.ValidLifetime"); if(!($bas_T1||$bas_T2||$bas_PrefTime||$bas_ValidTIme)) { dhcpExitError("The Reply message does not include T1&T2&Lifetimes completely."); } # 2. send DHCPv6 Confirm Message $IA_NA_OPTION = "opt_IA_NA_Addr_1_Ignore"; $SID_OPTION = undef; my ($ret2, %confirm2) = send_confirm($IF0, "confirm_client1_to_alldhcp", \%rep1, ""); # 3. wait for DHCPv6 Reply Message my ($ret3, %rep3) = wait_for_reply($IF0, 5); if (0 != $ret3) { dhcpExitFail(); } # Check the Options if (0 != options_exist(\%rep3, $CMP_SID)){ dhcpExitError("Can not found the SID option!"); }; if (0 != options_exist(\%rep3, $CMP_CID)){ dhcpExitError("Can not found the CID option!"); }; check_valueofAnyFieldInOption(\%rep3,$CMP_IA_NA,"Time1",$bas_T1); check_valueofAnyFieldInOption(\%rep3,$CMP_IA_NA,"Time2",$bas_T2); check_valueofAnyFieldInOption(\%rep3,$CMP_IA_ADD,"PreferredLifetime",$bas_PrefTime); check_valueofAnyFieldInOption(\%rep3,$CMP_IA_ADD,"ValidLifetime",$bas_ValidTIme); # after 10 seconds vSleep(10); vLogHTML("Waitting 10s ...
"); # 4. re-send the confirm message $IA_NA_OPTION = "opt_IA_NA_Addr_2_Ignore"; $SID_OPTION = undef; my ($ret4, %confirm4) = send_confirm($IF0, "confirm_client1_to_alldhcp", \%rep3, undef); # 5. wait for DHCPv6 Reply Message my ($ret5, %rep5) = wait_for_reply($IF0, 5); if (0 != $ret5) { dhcpExitFail(); } # Check the Options if (0 != options_exist(\%rep5, $CMP_SID)){ dhcpExitError("Can not found the SID option!"); }; if (0 != options_exist(\%rep5, $CMP_CID)){ dhcpExitError("Can not found the CID option!"); }; # compare the relay messages check_valueofAnyFieldInOption(\%rep5,$CMP_IA_NA,"Time1",$bas_T1); check_valueofAnyFieldInOption(\%rep5,$CMP_IA_NA,"Time2",$bas_T2); check_valueofAnyFieldInOption(\%rep5,$CMP_IA_ADD,"PreferredLifetime",$bas_PrefTime); check_valueofAnyFieldInOption(\%rep5,$CMP_IA_ADD,"ValidLifetime",$bas_ValidTIme); #------------------------------------------------------------------- vLogHTML("The Message exchange is correct
"); #------------------------------------------------------------------- dhcpExitPass(); #NOTREACHED ######################################################################## __END__ =head1 NAME S_RFC3315_18.2.2_ReceiptConfirmMsgIgnore.seq - Server ignore T1&T2, and preferred lifetime & valid-lifetime in IA option in the Client message. (Only when the Reply message includes IA option & IA_Address option) =head1 TARGET Server =head1 SYNOPSIS =begin html
 S_RFC3315_18.2.2_ReceiptConfirmMsgIgnore.seq [-tooloption ...]
 -pkt S_RFC3315_18.2.2_ReceiptConfirmMsgIgnore.def 
 -tooloption: v6eval tool option
See Also  DHCPv6.def 
 
=head1 INITIALIZATION =begin html
          TN(Client1)  
             |
Link0 -------+-----------+--------------- 3ffe:501:ffff:100::/64
                         |
                       NUT(Server1)
  
=end html =head1 TEST PROCEDURE =begin html
       NUT     TN
        |       | 
        |       | initialize NUT (as a DHCPv6 Server)
        |       | 
        | <---- | Solicit
        | ----> | Advertise
        | <---- | Request
        | ----> | Reply	(*1)
        |       | 
        |       | 
        |       | 
        | <---- | Confirm  (w/ IA_NA)   T1=0 T2=0,preferred lifetime= 0,valid lifetime= 0.
        | ----> | Reply    (w/ IA_NA)(*2)
        |       |
        |       | after 10s
        |       |
        | <---- | Confirm   (w/ IA_NA)    T1=90s T2=90s,preferred lifetime= 90s,valid lifetime= 110s.
        | ----> | Reply     (w/ IA_NA)(*3)
        |       |
=end html =head1 JUDGEMENT
PASS:  The T1,T2,preferered lifetime and valid lifetime in IA_NA option of the Reply message has same value in Reply messages 
       (*1)(*2)(*3)
=head1 TERMINATION N/A =head1 REFERENCE =begin html
   see also RFC3315
   18 DHCP Client-Initiated Configuration Exchange
   18.2.2. Receipt of Confirm Messages
=end html =head1 SEE ALSO perldoc V6evalTool =cut