Loading ttcn/AtsCommon/AtsCommon_TypesAndValues.ttcn +27 −27 Original line number Diff line number Diff line Loading @@ -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 Loading ttcn/AtsNAT64/AtsNat64_Pixits.ttcn3 +64 −53 Original line number Diff line number Diff line Loading @@ -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 ttcn/AtsNAT64/AtsNat64_TestCases.ttcn3 +137 −34 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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 ) ), Loading @@ -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 }); Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 */ Loading @@ -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 ) ), Loading @@ -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 }); Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading Loading
ttcn/AtsCommon/AtsCommon_TypesAndValues.ttcn +27 −27 Original line number Diff line number Diff line Loading @@ -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 Loading
ttcn/AtsNAT64/AtsNat64_Pixits.ttcn3 +64 −53 Original line number Diff line number Diff line Loading @@ -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
ttcn/AtsNAT64/AtsNat64_TestCases.ttcn3 +137 −34 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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 ) ), Loading @@ -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 }); Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 */ Loading @@ -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 ) ), Loading @@ -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 }); Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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 Loading