Commit 23f87121 authored by tepelmann's avatar tepelmann
Browse files

Refactored Nat64 parametrization.

Added first version of TC_NAT64_LSN_NP_BV_001.
parent ef76ed8e
Loading
Loading
Loading
Loading
+27 −27
Original line number Diff line number Diff line
@@ -27,40 +27,40 @@
        
    } // end componentConstants
    
    group ipv4Hosts {
    group natMappings {
        
        /**
         * @desc Description of an IPv6 host service
         * @member srcAddress 
         * @member dstAddress
         */
        type record HostV6Description {
            Ipv6Address hostAddress
        } // End of type HostV4Description
        type record of record {
            Ipv6Address ip6Address,
            UInt16      srcPort,
            Ipv4Address ip4Address
        } NatMappingTable_1_to_1;
        
        /**
         * @desc Defines a list of IPv6 host services
         */
        type set of HostV6Description HostV6Descriptions;
        type record NatMappingTable_1_to_n {
            Ipv4Address ip4Address,
            record of record {
                Ipv6Address ip6Address,
                UInt16      srcPort,
                UInt16      dstPort
            } portInfos
        };
        
        type record of record {
            record of record {
                Ipv6Address ip6Address,
                UInt16      srcPort
            } clientInfos,
            record of Ipv4Address ip4Addresses
        } NatMappingTable_Pool;
        
    } // End of group ipv6Hosts
    
    group ipv4Hosts {
        
        /**
         * @desc Description of an IPv4 host service for 1:n NAT mapping
         * @member srcAddress 
         * @member destInfo
         */
        type record HostV4Description_1toN {
            Ipv4Address srcAddress, 
            record of record {
                UInt16      srcPort,
        type record Ipv4DestInfo {
            Ipv4Address dstAddress,
            UInt16      dstPort,
            TcpPayload  payload
            } destInfo
        } // End of type HostV4Description
        }
        
        /**
         * @desc Description of an IPv4 host service
+64 −53
Original line number Diff line number Diff line
@@ -15,65 +15,76 @@ module AtsNat64_Pixits {
     */
    modulepar Oct12 PX_NAT64_PREFIX := '0064FF9B0000000000000000'O;
    
    /**
     * @desc Defines a list of IPv4 host services for NAT64 tests.
     */
    modulepar HostV6Descriptions PX_HOST_V6_LIST_LSN := {
        {
            hostAddress  := '20010db8000000000000000000000001'O // Containing source address indicating a client IPv6 address
        }, // Host #0
        {
            hostAddress  := '20010db8000000000000000000000002'O // Containing source address indicating a client IPv6 address
        } // Host #1
    } // End of modulepar PX_HOST_V6_LIST_LSN
    
    /**
     * @desc Defines a list of IPv4 host services for 1:1 NAT mapping tests.
     */
    modulepar HostV4Descriptions PX_HOST_V4_LIST_1_TO_1_NAT := {
        {
            srcAddress  := '91fea0ed'O, // Containing source address indicating a private IPv4 address
            srcPort     := 3372,
            dstAddress  := '41d0e4df'O, // Containing destination address indicating a public IPv4 address from multiple hosts
    modulepar Ipv4DestInfo PX_IPV4_DESTINATION_INFORMATION := {
        dstAddress := '41d0e4df'O,
        dstPort    := 80,
        payload    := {
            rawPayload := 'CAFEDECA'O // TODO To be enhanced
        }
        }, // Host #0
    }
    
    modulepar NatMappingTable_1_to_1 PX_NAT64_MAPPING_TABLE_1_TO_1 := {
        {
            srcAddress  := '91fea0ee'O,  // Containing source address indicating a private IPv4 address
            srcPort     := 3372,
            dstAddress  := '41d0e4e0'O, // Containing destination address indicating a public IPv4 address from multiple hosts
            dstPort     := 80,
            payload     := {
                rawPayload := 'CAFEDECA'O // TODO To be enhanced
            ip6Address := '20010db8000000000000000000000001'O,
            srcPort    := 6001,
            ip4Address := '91fea0ed'O
        },
        {
            ip6Address := '20010db8000000000000000000000002'O,
            srcPort    := 6002,
            ip4Address := '91fea0ee'O
        }
    }
        } // Host #1
    } // End of modulepar PX_HOST_V4_LIST_LSN
    
    /**
     * @desc Defines a list of IPv4 host services for 1:n NAT mapping tests.
     */
    modulepar HostV4Description_1toN PX_HOST_V4_LIST_1_TO_N_NAT := {
        srcAddress  := '91fea0ed'O, // Containing source address indicating a private IPv4 address
        destInfo := {
    modulepar NatMappingTable_1_to_n PX_NAT64_MAPPING_TABLE_1_TO_N := {
        ip4Address := '91fea0ed'O,
        portInfos := {
            {
                srcPort     := 3372,
                dstAddress  := '41d0e4df'O, // Containing destination address indicating a public IPv4 address from multiple hosts
                dstPort     := 80,
                payload     := {
                    rawPayload := 'CAFEDECA'O // TODO To be enhanced
                ip6Address := '20010db8000000000000000000000001'O,
                srcPort    := 6001,
                dstPort    := 80
            },
            {
                ip6Address := '20010db8000000000000000000000002'O,
                srcPort    := 6002,
                dstPort    := 81
            }
        }
    }
            }, // Host #0
    
    modulepar NatMappingTable_Pool PX_NAT64_MAPPING_TABLE_POOL := {
        {
                srcPort     := 3372,
                dstAddress  := '41d0e4e0'O, // Containing destination address indicating a public IPv4 address from multiple hosts
                dstPort     := 80,
                payload     := {
                    rawPayload := 'CAFEDECA'O // TODO To be enhanced
            clientInfos := {
                {
                    ip6Address := '20010db8000000000000000000000001'O,
                    srcPort    := 6001
                },
                {
                    ip6Address := '20010db8000000000000000000000002'O,
                    srcPort    := 6002
                }
            },
            ip4Addresses := {
                '91fea0ed'O,
                '91fea0ee'O
            }
        },
        {
            clientInfos := {
                {
                    ip6Address := '20010db8000000000000000000000003'O,
                    srcPort    := 6003
                },
                {
                    ip6Address := '20010db8000000000000000000000004'O,
                    srcPort    := 6004
                }
            },
            ip4Addresses := {
                '91fea0ef'O,
                '91fea0f0'O
            }
        }
            } // Host #1
    }
    } // End of modulepar PX_HOST_V4_LIST_1_TO_N_NAT
    
} // End of module AtsNat64_Pixits
 No newline at end of file
+137 −34
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ module AtsNat64_TestCases {
                testcase TC_NAT64_LSN_BF_BV_001() runs on Nat64Component system TestAdapter {
                    
                    // Local variables
                    var integer v_hostNum := lengthof(PX_HOST_V4_LIST_1_TO_1_NAT);     /** Expected number of IPv6 packets to be forwarded */
                    var integer v_hostNum := lengthof(PX_NAT64_MAPPING_TABLE_1_TO_1);     /** 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,12 +99,12 @@ module AtsNat64_TestCases {
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                        f_finalyzeIpv4Packet(
                            m_ipv4Packet_dummy(
                                PX_HOST_V4_LIST_1_TO_1_NAT[v_host].srcAddress,
                                PX_HOST_V4_LIST_1_TO_1_NAT[v_host].dstAddress,
                                PX_NAT64_MAPPING_TABLE_1_TO_1[v_host].ip4Address,
                                PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                                m_tcp_packet(
                                    PX_HOST_V4_LIST_1_TO_1_NAT[v_host].srcPort,
                                    PX_HOST_V4_LIST_1_TO_1_NAT[v_host].dstPort,
                                    PX_HOST_V4_LIST_1_TO_1_NAT[v_host].payload,
                                    PX_NAT64_MAPPING_TABLE_1_TO_1[v_host].srcPort,
                                    PX_IPV4_DESTINATION_INFORMATION.dstPort,
                                    PX_IPV4_DESTINATION_INFORMATION.payload,
                                    m_tcp_flags_syn
                                )
                            ),
@@ -112,14 +112,14 @@ module AtsNat64_TestCases {
                        );
                        v_ipv6Packet := m_generalIpv6_extHdr_data(
                          c_tcpHdr,
                          PX_HOST_V6_LIST_LSN[v_host].hostAddress,
                          PX_NAT64_PREFIX & PX_HOST_V4_LIST_1_TO_1_NAT[v_host].dstAddress,
                          PX_NAT64_MAPPING_TABLE_1_TO_1[v_host].ip6Address,
                          PX_NAT64_PREFIX & PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                          omit,
                          v_ipv4Packet.ipv4Payload.rawPacket
                        );
                        
                        vc_lsnComponents[v_host].start(f_TC_NAT64_LSN_NP_BV_001_lsn(v_ipv4Packet));
                        vc_hostComponents[v_host].start(f_TC_NAT64_LSN_NP_BV_001_host(v_ipv6Packet));
                        vc_lsnComponents[v_host].start(f_TC_NAT64_LSN_BF_BV_001_lsn(v_ipv4Packet));
                        vc_hostComponents[v_host].start(f_TC_NAT64_LSN_BF_BV_001_host(v_ipv6Packet));
                    } // End of 'for' statement 
                    
                    f_serverSyncNClientsAndStop(v_hostNum, { c_prDone, c_tbDone, c_poDone });
@@ -135,7 +135,7 @@ module AtsNat64_TestCases {
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_NP_BV_001_lsn(Ipv4Packet v_ipv4Packet) runs on LSNComponent {
                    function f_TC_NAT64_LSN_BF_BV_001_lsn(Ipv4Packet v_ipv4Packet) runs on LSNComponent {
                        
                        // Local variables
                         
@@ -166,13 +166,13 @@ module AtsNat64_TestCases {
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_NAT64_LSN_NP_BV_001_lsn
                    } // End of function f_TC_NAT64_LSN_BF_BV_001_lsn
                    
                    /**
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_NP_BV_001_host(Ipv6Packet p_ipv6Packet) runs on HostComponent {
                    function f_TC_NAT64_LSN_BF_BV_001_host(Ipv6Packet p_ipv6Packet) runs on HostComponent {
                        
                        // Local variables
                         
@@ -196,7 +196,7 @@ module AtsNat64_TestCases {
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_NAT64_LSN_NP_BV_001_host
                    } // End of function f_TC_NAT64_LSN_BF_BV_001_host
                    
                } // End of group f_TC_NAT64_LSN_BF_BV_001 
                
@@ -236,7 +236,7 @@ module AtsNat64_TestCases {
                testcase TC_NAT64_LSN_BF_BV_002() runs on Nat64Component system TestAdapter {
                    
                    // Local variables
                    var integer v_hostNum := lengthof(PX_HOST_V4_LIST_1_TO_1_NAT);     /** Expected number of IPv6 packets to be forwarded */
                    var integer 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 */
@@ -257,12 +257,12 @@ module AtsNat64_TestCases {
                    for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                        f_finalyzeIpv4Packet(
                            m_ipv4Packet_dummy(
                                PX_HOST_V4_LIST_1_TO_N_NAT.srcAddress,
                                PX_HOST_V4_LIST_1_TO_N_NAT.destInfo[v_host].dstAddress,
                                PX_NAT64_MAPPING_TABLE_1_TO_N.ip4Address,
                                PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                                m_tcp_packet(
                                    PX_HOST_V4_LIST_1_TO_N_NAT.destInfo[v_host].srcPort,
                                    PX_HOST_V4_LIST_1_TO_N_NAT.destInfo[v_host].dstPort,
                                    PX_HOST_V4_LIST_1_TO_N_NAT.destInfo[v_host].payload,
                                    PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos[v_host].srcPort,
                                    PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos[v_host].dstPort,
                                    PX_IPV4_DESTINATION_INFORMATION.payload,
                                    m_tcp_flags_syn
                                )
                            ),
@@ -270,14 +270,14 @@ module AtsNat64_TestCases {
                        );
                        v_ipv6Packet := m_generalIpv6_extHdr_data(
                          c_tcpHdr,
                          PX_HOST_V6_LIST_LSN[v_host].hostAddress,
                          PX_NAT64_PREFIX & PX_HOST_V4_LIST_1_TO_N_NAT.destInfo[v_host].dstAddress,
                          PX_NAT64_MAPPING_TABLE_1_TO_N.portInfos[v_host].ip6Address,
                          PX_NAT64_PREFIX & PX_NAT64_MAPPING_TABLE_1_TO_N.ip4Address,
                          omit,
                          v_ipv4Packet.ipv4Payload.rawPacket
                        );
                        
                        vc_lsnComponents[v_host].start(f_TC_NAT64_LSN_NP_BV_002_lsn(v_ipv4Packet));
                        vc_hostComponents[v_host].start(f_TC_NAT64_LSN_NP_BV_002_host(v_ipv6Packet));
                        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 
                    
                    f_serverSyncNClientsAndStop(v_hostNum, { c_prDone, c_tbDone, c_poDone });
@@ -293,7 +293,7 @@ module AtsNat64_TestCases {
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_NP_BV_002_lsn(Ipv4Packet v_ipv4Packet) runs on LSNComponent {
                    function f_TC_NAT64_LSN_BF_BV_002_lsn(Ipv4Packet v_ipv4Packet) runs on LSNComponent {
                        
                        // Local variables
                         
@@ -324,13 +324,13 @@ module AtsNat64_TestCases {
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_NAT64_LSN_NP_BV_002_lsn
                    } // End of function f_TC_NAT64_LSN_BF_BV_002_lsn
                    
                    /**
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_NP_BV_002_host(Ipv6Packet p_ipv6Packet) runs on HostComponent {
                    function f_TC_NAT64_LSN_BF_BV_002_host(Ipv6Packet p_ipv6Packet) runs on HostComponent {
                        
                        // Local variables
                         
@@ -353,7 +353,7 @@ module AtsNat64_TestCases {
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_NAT64_LSN_NP_BV_001_host
                    } // End of function f_TC_NAT64_LSN_BF_BV_001_host
                    
                } // End of group f_TC_NAT64_LSN_BF_BV_002 
                
@@ -403,33 +403,136 @@ module AtsNat64_TestCases {
                 * </pre>
                 * 
                 * @version 0.0.1
                 * @reference ETSI TS 101 569-1 Clause 6.4.6.10 Feature: NAT Grouping resource Sharing
                 * @reference ETSI TS 101 569-1 Clause 6.4.6.10 Feature: NAT Grouping resource Sharing, 6.4.4.4 Feature: Shared/Split Resources
                 * @see     ETSI TS xxx xxx-x V0.0.1.5a-draft (2013-07) TP/NAT64/LSN/NP/BV/01
                 */
                testcase TC_NAT64_LSN_NP_BV_001() runs on Nat64Component system TestAdapter {
                    
                    // Local variables
                    var integer v_groupNum := lengthof(PX_NAT64_MAPPING_TABLE_POOL);
                    var integer v_hostNum;
                    var Ipv4Packet v_ipv4Packet;                                /** IPv4 packets */
                    var Ipv6Packet v_ipv6Packet;                                /** IPv6 packets address to IPv4 */
                    var integer v_group;                                        /** 'for' statement counter */
                    var integer v_host;                                         /** 'for' statement counter */
                    
                    // Test control
                    
                    // Test component configuration
                    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();
                    
                    // Test adapter configuration
                    
                    // Test Body
                    // Start all components
                    for (v_group := 0; v_group < v_groupNum; v_group := v_group + 1) {
                        v_hostNum := lengthof(PX_NAT64_MAPPING_TABLE_POOL[v_group].ip4Addresses);
                        for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) {
                            f_finalyzeIpv4Packet(
                                m_ipv4Packet_dummy(
                                    PX_NAT64_MAPPING_TABLE_POOL[v_group].ip4Addresses[v_host],
                                    PX_IPV4_DESTINATION_INFORMATION.dstAddress,
                                    m_tcp_packet(
                                        PX_NAT64_MAPPING_TABLE_POOL[v_group].clientInfos[v_host].srcPort,
                                        PX_IPV4_DESTINATION_INFORMATION.dstPort,
                                        PX_IPV4_DESTINATION_INFORMATION.payload,
                                        m_tcp_flags_syn
                                    )
                                ),
                                v_ipv4Packet
                            );
                            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],
                              omit,
                              v_ipv4Packet.ipv4Payload.rawPacket
                            );
                            
                    // Test Body
                    // Clause 'when': 
                    action("the IUT goes online");
                            vc_lsnComponents[v_host].start(f_TC_NAT64_LSN_NP_BV_001_lsn(v_ipv4Packet));
                            vc_hostComponents[v_host].start(f_TC_NAT64_LSN_NP_BV_001_host(v_ipv6Packet));
                        } // End of 'for' statement 
                    } // End of 'for' statement 
                    
                    // Clause 'then': Nothing to do, refer to a_default
                    f_serverSyncNClientsAndStop(v_hostNum, { c_prDone, c_tbDone, c_poDone });
                    
                    // Postamble
                    f_down();
                    
                } // End of testcase TC_NAT64_LSN_NP_BV_001
                
                group f_TC_NAT64_LSN_NP_BV_001 {
                    
                    /**
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_NP_BV_001_lsn(Ipv4Packet v_ipv4Packet) runs on LSNComponent {
                        
                        // Local variables
                         
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_lsn();
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        // Clause 'when': the IUT does a 1:1 NAT mapping for each public IPv6 client addresses sourced and,
                        //                the IUT forwards packets to the destination with different IPv4 public addresses
                        tc_ac.start;
                        alt {
                            [] ipv4Port.receive(v_ipv4Packet) { 
                                tc_ac.stop;
                                log("*** " & __SCOPE__ & ": PASS: IPv4 packet was forwarded. ***");
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                            }
                            [] tc_ac.timeout {
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                                log("*** " & __SCOPE__ & ": INCONC: Message was not received in time. ***");
                            }
                        } // End of 'altstep' statement
                        
                        // Postamble
                        f_postamble_lsn();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_NAT64_LSN_NP_BV_001_lsn
                    
                    /**
                     * @desc Implement LSN protocol
                     * @verdict 'pass' on success, 'inconc' on 'timeout', fail otherwise
                     */
                    function f_TC_NAT64_LSN_NP_BV_001_host(Ipv6Packet p_ipv6Packet) runs on HostComponent {
                        
                        // Local variables
                         
                        // Preamble
                        // Clause 'Initial conditions'
                        f_preamble_host();
                        f_selfOrClientSyncAndVerdict(c_prDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Preamble done. ***");
                        
                        // Test Body
                        //TODO needs to be called as it sets length and checksum fields
//                        if(f_setExtensionHeaders(v_ipv6Packet) != e_success) {
//                            log(" **** " & __SCOPE__ & ": Error when calculating length of extension headers ****");
//                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
//                        }
                        ipv6Port.send(p_ipv6Packet);
                        
                        // Postamble
                        f_postamble_host();
                        f_selfOrClientSyncAndVerdict(c_poDone, e_success);
                        log("*** " & __SCOPE__ & ": INFO: Postamble done. ***");
                        
                    } // End of function f_TC_NAT64_LSN_NP_BV_001_host
                    
                } // End of group f_TC_NAT64_LSN_NP_BV_001 
                
            } // End of group validBehaviour