Commit 21ccb708 authored by tepelmann's avatar tepelmann
Browse files

Adapted 1:1 and 1:n mapping test cases.

parent cdf4c0f2
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -51,6 +51,25 @@ module AtsCommon_Templates {
            
        } // End of group ipv4DummySendTemplates
        
        group ipv4DummyReceiveTemplates {
            
            template (present) Ipv4Packet mw_ipv4Packet_dummy(
                                                           in template (present) Ipv4Address p_src,
                                                           in template (present) Ipv4Address p_dst,
                                                           in template (present) octetstring p_rawPayload := ?
            ) := {
                ipv4Hdr := mw_ipv4Hdr_protocol_srcDst(
                    c_protocol_tcp, 
                    p_src, 
                    p_dst
                ),
                ipv4Payload := {
                    rawPacket := p_rawPayload
                }
            } // End of template m_ipv4Packet_dummy
            
        } // End of group ipv4DummySendTemplates
        
        template (value) Ipv4Packet m_ipv4Packet_df(
                                                    in template (value) UInt1 p_doNotFragFlag,
                                                    in template (value) Ipv4Address p_src,
+14 −6
Original line number Diff line number Diff line
@@ -29,18 +29,20 @@
    
    group natMappings {
        
        type record of record {
            Ipv6Address ip6Address,
        type record NatMappingTable_1_to_1 {
            UInt16      srcPort,
            record of record {
                Ipv6Address ip6Address,
                Ipv4Address ip4Address
        } NatMappingTable_1_to_1;
            } mapInfos
        };
        
        type record NatMappingTable_1_to_n {
            Ipv4Address ip4Address,
            UInt16      dstPort,
            record of record {
                Ipv6Address ip6Address,
                UInt16      srcPort,
                UInt16      dstPort
                UInt16      srcPort
            } portInfos
        };
        
@@ -86,4 +88,10 @@
        
    } // End of group ipv4Hosts
    
    group auxiliary {
        
        type set of integer IntList;
        
    } // End of group auxiliary
    
} // end AtsCommon_TypesAndValues
+28 −1
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@
 */
module AtsNat64_Functions {
    
    // AtsCommon
    import from AtsCommon_Tcp_Rfc793_TypesAndValues all;
    import from AtsCommon_Interfaces all;

    // LibCommon
@@ -14,7 +16,7 @@ module AtsNat64_Functions {
        altstep a_shutdown;
        const c_prDone, c_tbDone, c_poDone;
    }
    import from LibCommon_VerdictControl {type FncRetCode;}
    import from LibCommon_VerdictControl all;
    import from LibIpv6_CommonRfcs_TypesAndValues all;
    
    // Nat64
@@ -142,4 +144,29 @@ module AtsNat64_Functions {
        
    } // End of group globalSteps
    
    group auxiliary {
        
        function f_decTcpPacket(in octetstring p_raw, out TcpPacket p_tcpPacket) return FncRetCode {
            var FncRetCode v_result;
            var integer v_decRes;
            
            v_decRes := decvalue(oct2bit(p_raw), p_tcpPacket);
            select (v_decRes) {
                case (0) {
                    v_result := e_success;
                }
                case (1) {
                    log("*** Decoding failure ***");
                    v_result := e_error;
                }
                case (2) {
                    log("*** Decoding failure. Not enough bits. ***");
                    v_result := e_error;
                }
            }
            
            return v_result;
        }
    } // End of group auxiliary
    
} // End of module AtsNat64_Functions
 No newline at end of file
+14 −14
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ module AtsNat64_Pixits {
    /**
     * @desc Defines the NAT64 prefix.
     */
    modulepar Oct12 PX_NAT64_PREFIX := '0064FF9B0000000000000000'O;
    modulepar Oct8 PX_NAT64_PREFIX := '0064FF9B00000000'O;
    
    modulepar Ipv4DestInfo PX_IPV4_DESTINATION_INFORMATION := {
        dstAddress := '41d0e4df'O,
@@ -24,30 +24,30 @@ module AtsNat64_Pixits {
    }
    
    modulepar NatMappingTable_1_to_1 PX_NAT64_MAPPING_TABLE_1_TO_1 := {
        srcPort    := 6001,
        mapInfos := { 
            {
                ip6Address := '20010db8000000000000000000000001'O,
            srcPort    := 6001,
                ip4Address := '91fea0ed'O
            },
            {
                ip6Address := '20010db8000000000000000000000002'O,
            srcPort    := 6002,
                ip4Address := '91fea0ee'O
            }
        }
    }
    
    modulepar NatMappingTable_1_to_n PX_NAT64_MAPPING_TABLE_1_TO_N := {
        ip4Address := '91fea0ed'O,
        dstPort    := 80,
        portInfos := {
            {
                ip6Address := '20010db8000000000000000000000001'O,
                srcPort    := 6001,
                dstPort    := 80
                srcPort    := 6000
            },
            {
                ip6Address := '20010db8000000000000000000000002'O,
                srcPort    := 6002,
                dstPort    := 81
                srcPort    := 6001
            }
        }
    }
+66 −32
Original line number Diff line number Diff line
@@ -5,19 +5,24 @@
 */
module AtsNat64_TestCases {
    
    import from AtsCommon_Tcp_Rfc793_TypesAndValues all;

    import from LibCommon_DataStrings all;

    import from Ats6RD_Pixits all;

    // LibCommon
    import from LibCommon_VerdictControl all;
    import from LibCommon_Sync all;
    import from LibCommon_BasicTypesAndValues all;
    
    // AtsNat64
    import from AtsNat64_Functions all;
    import from AtsNat64_Templates all;
    import from AtsNat64_Interfaces all;
    import from AtsNat64_Pixits all;
    import from AtsNat64_TypesAndValues all;
    
    // AtsCommon
    // AtsCommon
    import from AtsCommon_TypesAndValues all;
    import from AtsCommon_Interfaces all;
@@ -28,6 +33,8 @@ module AtsNat64_TestCases {
    import from LibIpv6_Interface_TypesAndValues all;
    import from LibIpv6_Rfc0768Udp_TypesAndValues all;
    import from LibIpv6_Interface_Templates all;
    import from LibIpv6_CommonRfcs_TypesAndValues all;
    
    /**
     * @desc LSN role
     * @reference ETSI TS xxx xxx-x V0.0.1 (2013-07) Clause 5.1
@@ -78,7 +85,7 @@ module AtsNat64_TestCases {
                testcase TC_NAT64_LSN_BF_BV_001() runs on Nat64Component system TestAdapter {
                    
                    // Local variables
                    var integer v_hostNum := lengthof(PX_NAT64_MAPPING_TABLE_1_TO_1);     /** Expected number of IPv6 packets to be forwarded */
                    var integer v_hostNum := lengthof(PX_NAT64_MAPPING_TABLE_1_TO_1.mapInfos);     /** Expected number of IPv6 packets to be forwarded */
                    var Ipv4Packet v_ipv4Packet;                                /** IPv4 packets */
                    var Ipv6Packet v_ipv6Packet;                                /** IPv6 packets address to IPv4 */
                    var integer v_host;                                         /** 'for' statement counter */
@@ -99,10 +106,10 @@ module AtsNat64_TestCases {
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                        f_finalyzeIpv4Packet(
                            m_ipv4Packet_dummy(
                                PX_NAT64_MAPPING_TABLE_1_TO_1[v_host].ip4Address,
                                PX_NAT64_MAPPING_TABLE_1_TO_1.mapInfos[v_host].ip4Address,
                                PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                                m_tcp_packet(
                                    PX_NAT64_MAPPING_TABLE_1_TO_1[v_host].srcPort,
                                    PX_NAT64_MAPPING_TABLE_1_TO_1.srcPort,
                                    PX_IPV4_DESTINATION_INFORMATION.dstPort,
                                    PX_IPV4_DESTINATION_INFORMATION.payload,
                                    m_tcp_flags_syn
@@ -112,8 +119,8 @@ module AtsNat64_TestCases {
                        );
                        v_ipv6Packet := m_generalIpv6_extHdr_data(
                          c_tcpHdr,
                          PX_NAT64_MAPPING_TABLE_1_TO_1[v_host].ip6Address,
                          PX_NAT64_PREFIX & PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                          PX_NAT64_MAPPING_TABLE_1_TO_1.mapInfos[v_host].ip6Address,
                          PX_NAT64_PREFIX & c_4ZeroBytes & PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                          omit,
                          v_ipv4Packet.ipv4Payload.rawPacket
                        );
@@ -230,13 +237,13 @@ module AtsNat64_TestCases {
                 * </pre>
                 * 
                 * @version 0.0.1
                 * @reference ETSI TS 101 569-1 Clause 6.4.4.4  1:1 Shared/Split Resources 
                 * @reference ETSI TS 101 569-1 Clause 6.4.4.4 Shared/Split Resources 
                 * @see     ETSI TS xxx xxx-x V0.0.1.5a-draft (2013-07) TP/NAT64/LSN/BF/VB/02
                 */
                testcase TC_NAT64_LSN_BF_BV_002() runs on Nat64Component system TestAdapter {
                    
                    // Local variables
                    var integer v_hostNum := lengthof(PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos);     /** Expected number of IPv6 packets to be forwarded */
                    var UInt v_hostNum := lengthof(PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos);     /** Expected number of IPv6 packets to be forwarded */
                    var Ipv4Packet v_ipv4Packet;                                /** IPv4 packets */
                    var Ipv6Packet v_ipv6Packet;                                /** IPv6 packets address to IPv4 */
                    var integer v_host;                                         /** 'for' statement counter */
@@ -244,8 +251,8 @@ module AtsNat64_TestCases {
                    // Test control
                    
                    // Test component configuration
                    vc_lsnComponents[0] := LSNComponent.create(c_COMP_LSN);
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                        vc_lsnComponents[v_host] := LSNComponent.create(c_COMP_LSN & int2str(v_host));
                        vc_hostComponents[v_host] := HostComponent.create(c_COMP_HOST & int2str(v_host));
                    } // End of 'for' statement 
                    f_cf01Up();
@@ -254,29 +261,27 @@ module AtsNat64_TestCases {
                    
                    // Test Body
                    // Start all components
                    
                    vc_lsnComponents[v_host].start(f_TC_NAT64_LSN_BF_BV_002_lsn(v_hostNum));
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                        f_finalyzeIpv4Packet(
                            m_ipv4Packet_dummy(
                      v_ipv4Packet := m_ipv4Packet_dummy(
                                    PX_NAT64_MAPPING_TABLE_1_TO_N.ip4Address,
                                    PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                                    m_tcp_packet(
                                        PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos[v_host].srcPort,
                                    PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos[v_host].dstPort,
                                        PX_NAT64_MAPPING_TABLE_1_TO_N.dstPort,
                                        PX_IPV4_DESTINATION_INFORMATION.payload,
                                        m_tcp_flags_syn
                                    )
                            ),
                            v_ipv4Packet
                                );
                        v_ipv6Packet := m_generalIpv6_extHdr_data(
                          c_tcpHdr,
                          PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos[v_host].ip6Address,
                          PX_NAT64_PREFIX & PX_NAT64_MAPPING_TABLE_1_TO_N.ip4Address,
                          PX_NAT64_PREFIX & c_4ZeroBytes & PX_NAT64_MAPPING_TABLE_1_TO_N.ip4Address,
                          omit,
                          v_ipv4Packet.ipv4Payload.rawPacket
                        );
                        
                        vc_lsnComponents[v_host].start(f_TC_NAT64_LSN_BF_BV_002_lsn(v_ipv4Packet));
                        vc_hostComponents[v_host].start(f_TC_NAT64_LSN_BF_BV_002_host(v_ipv6Packet));
                    } // End of 'for' statement 
                    
@@ -293,13 +298,19 @@ module AtsNat64_TestCases {
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_BF_BV_002_lsn(Ipv4Packet p_ipv4Packet) runs on LSNComponent {
                    function f_TC_NAT64_LSN_BF_BV_002_lsn(integer p_hostNum) runs on LSNComponent {
                        
                        // Local variables
                        var Ipv4Address v_localAddress := PX_IPV4_DESTINATION_INFORMATION.dstAddress;
                        var Ipv4Packet v_ipv4Packet;
                        var TcpPacket v_tcpPacket;
                        var integer v_receivedNo := 0;
                        var FncRetCode v_result := e_success;
                        var IntList v_portList;
                        
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_lsn(p_ipv4Packet.ipv4Hdr.destinationAddress);
                        f_preamble_lsn(v_localAddress);
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
@@ -308,17 +319,40 @@ module AtsNat64_TestCases {
                        //                the IUT forwards packets to the destination with same public IPv4 source address
                        tc_ac.start;
                        alt {
                            [] ipv4Port.receive(p_ipv4Packet) { 
                            [] ipv4Port.receive(
                              mw_ipv4Packet_dummy(
                                  PX_NAT64_MAPPING_TABLE_1_TO_N.ip4Address,
                                  v_localAddress,
                                  ?
                              )
                            ) -> value v_ipv4Packet {
                                if (e_success == f_decTcpPacket(v_ipv4Packet.ipv4Payload.rawPacket, v_tcpPacket)) {
                                    if (match(v_portList, superset(v_tcpPacket.srcPort))) {
                                        log("*** " & __SCOPE__ & ": FAIL: IPv4 packet was forwarded with already used source port. ***");
                                    }
                                    else {
                                        v_portList[lengthof(v_portList)] := v_tcpPacket.srcPort;
                                        v_receivedNo := v_receivedNo + 1;
                                        if (v_receivedNo == p_hostNum) {
                                          tc_ac.start;
                                          repeat;
                                        }
                                    }
                                }
                                else {
                                    v_result := e_error;
                                }
                                tc_ac.stop;
                                log("*** " & __SCOPE__ & ": PASS: IPv4 packet was forwarded. ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                                log("*** " & __SCOPE__ & ": PASS: IPv4 packets were correctly forwarded. ***");
                            }
                            [] tc_ac.timeout {
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                                v_result := e_timeout;
                                log("*** " & __SCOPE__ & ": INCONC: Message was not received in time. ***");
                            }
                        } // End of 'altstep' statement
                        
                        f_selfOrClientSyncAndVerdict(c_tbDone, v_result);
                        
                        // Postamble
                        f_postamble_lsn();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
@@ -452,7 +486,7 @@ module AtsNat64_TestCases {
                            v_ipv6Packet := m_generalIpv6_extHdr_data(
                              c_tcpHdr,
                              PX_NAT64_MAPPING_TABLE_POOL[v_group].clientInfos[v_host].ip6Address,
                              PX_NAT64_PREFIX & PX_NAT64_MAPPING_TABLE_POOL[v_group].ip4Addresses[v_host],
                              PX_NAT64_PREFIX & c_4ZeroBytes & PX_NAT64_MAPPING_TABLE_POOL[v_group].ip4Addresses[v_host],
                              omit,
                              v_ipv4Packet.ipv4Payload.rawPacket
                            );