Commit 695ee327 authored by tepelmann's avatar tepelmann
Browse files

Added initial version of TC_464XLAT_PLATLSN_LSN_RT_BV_001, TC_464XLAT_PLATLSN_LSN_RT_BV_002.

parent 49ffbe69
Loading
Loading
Loading
Loading
+310 −0
Original line number Diff line number Diff line
@@ -277,6 +277,316 @@ module Ats464XLat_TestCases {
            
            group validBehaviour {
                
                /**
                 * @desc Check that the IUT supports forwarding from GRT to VRF
                 * @verdict pass on success, inconc on timeout, fail otherwise
                 * <pre>        
                 * PICS Selection: none 
                 * Initial conditions:
                 *  with {
                 *      the IUT is properly provisioned
                 *      and the interfaces are connected & functional
                 *      and the routing tables are configured GRT upstream ingress & VRF upstream egress
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives multiple IPv6 packets 
                 *              containing IPv6 transport header
                 *                  containing source address
                 *                      indicating client IPv6 address
                 *                  containing destination address
                 *                      indicating IUT GW IPv6 prefix first 64 bits
                 *                      indicating IUT IPv4 embedded into the IPv6 address in last 32 bits 
                 *      }
                 *      then {
                 *          the IUT forwards the IPv4 packets once translated
                 *      }
                 *  }
                 * </pre>
                 * 
                 * @version 0.0.1
                 * @reference ETSI TS 101 569-1 Clause 6.6 464XLAT Technology Summary
                 * @see     ETSI TS xxx xxx-x V0.0.1.5a-draft (2013-07) TP/464XLAT/PLAT-LSN/LSN/RT/VB/01
                 */
                testcase TC_464XLAT_PLATLSN_LSN_RT_BV_001() runs on FourSixFourXLatComponent system TestAdapter {
                    
                    // Local variables
                    var UInt v_index := 0;
                    var Ipv4Packet v_ipv4Packet;                                /** IPv4 packets */
                    var Ipv6Packet v_ipv6Packet;                                /** IPv6 packets address to IPv4 */
                    var integer v_host;                                         /** 'for' statement counter */
                    var UInt v_noOfRequests := 3;
                    
                    // Test control
                    
                    // Test component configuration
                    vc_lsnComponents[v_index] := LSNComponent.create(c_COMP_LSN);
                    vc_hostComponents[v_index] := HostComponent.create(c_COMP_HOST);
                    f_cf01Up_PLAT();
                    
                    // Test adapter configuration
                    
                    // Test Body
                    // Start all components
                    
                    vc_lsnComponents[v_index].start(f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_lsn(v_noOfRequests));
                    v_ipv4Packet := m_ipv4Packet_dummy(
                                PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                                PX_IPV4_DESTINATION_INFORMATION.iutAddress,
                                m_tcp_packet(
                                    PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos[v_host].srcPort,
                                    PX_464XLAT_MAPPING_TABLE_1_TO_N.dstPort,
                                    PX_IPV4_DESTINATION_INFORMATION.payload,
                                    m_tcp_flags_syn
                                )
                            );
                    v_ipv6Packet := m_generalIpv6_ipv4Payload(
                      c_ipv4Hdr,
                      PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos[v_host].ip6Address,
                      PX_464XLAT_PREFIX & c_4ZeroBytes & PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                      v_ipv4Packet
                    );
                    vc_hostComponents[v_index].start(f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_host(v_ipv6Packet, v_noOfRequests));
                    
                    f_serverSyncNClientsAndStop(2, { c_prDone, c_tbDone, c_poDone });
                    
                    // Postamble
                    f_down();
                    
                } // End of testcase TC_464XLAT_PLATLSN_LSN_RT_BV_001
                
                group f_TC_464XLAT_PLATLSN_LSN_RT_BV_001 {
                    
                    /**
                     * @desc Simulates LSN side
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_lsn(UInt p_noOfRequests) runs on LSNComponent {
                        
                        // Local variables
                        var FncRetCode v_result := e_success;
                        var Ipv4Address v_localAddress := PX_IPV4_DESTINATION_INFORMATION.iutAddress;
                        var integer v_receivedNo := 0;
                        
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_lsn(v_localAddress);
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        tc_ac.start;
                        alt {
                            [] ipv4Port.receive(mw_ipv4EchoRequest(
                                PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                                v_localAddress,
                                c_1280ZeroBytes
                            )) {
                                tc_ac.stop;
                                v_result := e_success;
                                v_receivedNo := v_receivedNo + 1;
                                if (v_receivedNo == p_noOfRequests) {
                                  tc_ac.start;
                                  repeat;
                                }
                            }
                        }
                        f_selfOrClientSyncAndVerdict(c_tbDone, v_result);
                        
                        // Postamble
                        f_postamble_lsn();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_lsn
                    
                    /**
                     * @desc Simulates client side
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_host(Ipv6Packet p_ipv6Packet, UInt p_noOfRequests) runs on HostComponent {
                        
                        // Local variables
                        var FncRetCode v_result := e_success;
                        var integer i;
                         
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_host();
                        v_result := f_utSendCommand("Are routing tables configured GRT upstream ingress & VRF upstream egress?");
                        f_selfOrClientSyncAndVerdict(c_prDone, v_result);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        for (i:=0; i<p_noOfRequests; i:=i + 1) {
                            f_sendIpv6Packet(p_ipv6Packet);
                        }
                        
                        // Postamble
                        f_postamble_host();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_host
                    
                } // End of group f_TC_464XLAT_PLATLSN_LSN_RT_BV_001
                
                /**
                 * @desc Check that the IUT supports forwarding from VRF to GRT
                 * @verdict pass on success, inconc on timeout, fail otherwise
                 * <pre>        
                 * PICS Selection: none 
                 * Initial conditions:
                 *  with {
                 *      the IUT is properly provisioned
                 *      and the interfaces are connected & functional
                 *      and the routing tables are configured VFR upstream ingress & GRT upstream egress
                 *  }
                 * Expected behaviour:
                 *  ensure that {
                 *      when {
                 *          the IUT receives multiple IPv6 packets 
                 *              containing IPv6 transport header
                 *                  containing source address
                 *                      indicating client IPv6 address
                 *                  containing destination address
                 *                      indicating IUT GW IPv6 prefix first 64 bits
                 *                      indicating IUT IPv4 embedded into the IPv6 address in last 32 bits 
                 *      }
                 *      then {
                 *          the IUT forwards the IPv4 packets once translated
                 *      }
                 *  }
                 * </pre>
                 * 
                 * @version 0.0.1
                 * @reference ETSI TS 101 569-1 Clause 6.6 464XLAT Technology Summary
                 * @see     ETSI TS xxx xxx-x V0.0.1.5a-draft (2013-07) TP/464XLAT/PLAT-LSN/LSN/RT/VB/02
                 */
                testcase TC_464XLAT_PLATLSN_LSN_RT_BV_002() runs on FourSixFourXLatComponent system TestAdapter {
                    
                    // Local variables
                    var UInt v_index := 0;
                    var Ipv4Packet v_ipv4Packet;                                /** IPv4 packets */
                    var Ipv6Packet v_ipv6Packet;                                /** IPv6 packets address to IPv4 */
                    var integer v_host;                                         /** 'for' statement counter */
                    var UInt v_noOfRequests := 3;
                    
                    // Test control
                    
                    // Test component configuration
                    vc_lsnComponents[v_index] := LSNComponent.create(c_COMP_LSN);
                    vc_hostComponents[v_index] := HostComponent.create(c_COMP_HOST);
                    f_cf01Up_PLAT();
                    
                    // Test adapter configuration
                    
                    // Test Body
                    // Start all components
                    
                    vc_lsnComponents[v_index].start(f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_lsn(v_noOfRequests));
                    v_ipv4Packet := m_ipv4Packet_dummy(
                                PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                                PX_IPV4_DESTINATION_INFORMATION.iutAddress,
                                m_tcp_packet(
                                    PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos[v_host].srcPort,
                                    PX_464XLAT_MAPPING_TABLE_1_TO_N.dstPort,
                                    PX_IPV4_DESTINATION_INFORMATION.payload,
                                    m_tcp_flags_syn
                                )
                            );
                    v_ipv6Packet := m_generalIpv6_ipv4Payload(
                      c_ipv4Hdr,
                      PX_464XLAT_MAPPING_TABLE_1_TO_N.portInfos[v_host].ip6Address,
                      PX_464XLAT_PREFIX & c_4ZeroBytes & PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                      v_ipv4Packet
                    );
                    vc_hostComponents[v_index].start(f_TC_464XLAT_PLATLSN_LSN_RT_BV_001_host(v_ipv6Packet, v_noOfRequests));
                    
                    f_serverSyncNClientsAndStop(2, { c_prDone, c_tbDone, c_poDone });
                    
                    // Postamble
                    f_down();
                    
                } // End of testcase TC_464XLAT_PLATLSN_LSN_RT_BV_002
                
                group f_TC_464XLAT_PLATLSN_LSN_RT_BV_002 {
                    
                    /**
                     * @desc Simulates LSN side
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_464XLAT_PLATLSN_LSN_RT_BV_002_lsn(UInt p_noOfRequests) runs on LSNComponent {
                        
                        // Local variables
                        var FncRetCode v_result := e_success;
                        var Ipv4Address v_localAddress := PX_IPV4_DESTINATION_INFORMATION.iutAddress;
                        var integer v_receivedNo := 0;
                        
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_lsn(v_localAddress);
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        tc_ac.start;
                        alt {
                            [] ipv4Port.receive(mw_ipv4EchoRequest(
                                PX_464XLAT_MAPPING_TABLE_1_TO_N.ip4Address,
                                v_localAddress,
                                c_1280ZeroBytes
                            )) {
                                tc_ac.stop;
                                v_result := e_success;
                                v_receivedNo := v_receivedNo + 1;
                                if (v_receivedNo == p_noOfRequests) {
                                  tc_ac.start;
                                  repeat;
                                }
                            }
                        }
                        f_selfOrClientSyncAndVerdict(c_tbDone, v_result);
                        
                        // Postamble
                        f_postamble_lsn();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_464XLAT_PLATLSN_LSN_RT_BV_002_lsn
                    
                    /**
                     * @desc Simulates client side
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_464XLAT_PLATLSN_LSN_RT_BV_002_host(Ipv6Packet p_ipv6Packet, UInt p_noOfRequests) runs on HostComponent {
                        
                        // Local variables
                        var FncRetCode v_result := e_success;
                        var integer i;
                         
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_host();
                        v_result := f_utSendCommand("Are routing tables configured VFR upstream ingress & GRT upstream egress?");
                        f_selfOrClientSyncAndVerdict(c_prDone, v_result);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        for (i:=0; i<p_noOfRequests; i:=i + 1) {
                            f_sendIpv6Packet(p_ipv6Packet);
                        }
                        
                        // Postamble
                        f_postamble_host();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_464XLAT_PLATLSN_LSN_RT_BV_002_host
                    
                } // End of group f_TC_464XLAT_PLATLSN_LSN_RT_BV_002
                
            } // End of group validBehaviour
            
        } // End of group routingTables
+23 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ module AtsCommon_Templates {
    import from LibIpv6_Rfc3315Dhcp_TypesAndValues all;
    import from LibIpv6_Rfc3646Dhcp_TypesAndValues all;
    import from LibIpv6_Rfc6334Dhcp_TypesAndValues all;
    import from LibIpv6_Rfc792Icmpv4_TypesAndValues all;
    
    // AtsCommon
    import from AtsCommon_TypesAndValues all;
@@ -93,6 +94,28 @@ module AtsCommon_Templates {
            }
        }
        
        group icmp {
            
            template(present) Ipv4EchoRequest mw_ipv4EchoRequest(
                template(present) Ipv4Address p_src,
                template(present) Ipv4Address p_dst,
                template octetstring data
            ) := {
                ipv4Hdr := mw_ipv4Hdr_protocol_srcDst(c_protocol_icmp, p_src, p_dst),
                ipv4Payload := {
                    ipv4EchoRequestMsg := {
                        icmpType := c_icmpType_ipv4EReq,
                        icmpCode := c_ipv4IcmpCode0,
                        checksum := ?,
                        identifier := ?,
                        sequenceNumber := ?,
                        data := omit
                    }
                }
            }
        
        } // End of group icmp
        
    } // End of group ipv4MessageTemplates
    
    group ipv6MessageTemplates {
+0 −23
Original line number Diff line number Diff line
@@ -8,29 +8,6 @@ module AtsNat64_Templates {
    // LibIPv6
    import from LibIpv6_Interface_TypesAndValues all;
    import from LibIpv6_Interface_Templates all;
    import from LibIpv6_Rfc792Icmpv4_TypesAndValues all;
    import from LibIpv6_CommonRfcs_TypesAndValues all;
    
    group icmp {
        
        template(present) Ipv4EchoRequest mw_ipv4EchoRequest(
            template(present) Ipv4Address p_src,
            template(present) Ipv4Address p_dst,
            template octetstring data
        ) := {
            ipv4Hdr := mw_ipv4Hdr_protocol_srcDst(c_protocol_icmp, p_src, p_dst),
            ipv4Payload := {
                ipv4EchoRequestMsg := {
                    icmpType := c_icmpType_ipv4EReq,
                    icmpCode := c_ipv4IcmpCode0,
                    checksum := ?,
                    identifier := ?,
                    sequenceNumber := ?,
                    data := omit
                }
            }
        }
    
    } // End of group icmp
    
} // End of module AtsNat64_Templates
 No newline at end of file