Loading ttcn/AtsDSlite/AtsDSLite_Functions.ttcn3 +4 −8 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ module AtsDSLite_Functions { for (v_host:=0; v_host<v_hosts; v_host:=v_host + 1) { connect(vc_hostComponents[v_host]:ipv6Port, self:ipv6HostPort); connect(vc_hostComponents[v_host]:ipv4Port, self:ipv4HostPort); connect(vc_hostComponents[v_host]:dataPort, vc_aftrComponent:dataPort); } } if (vc_dhcpv6Component != null) { Loading Loading @@ -283,14 +282,13 @@ module AtsDSLite_Functions { } /** * @desc This sends an Tcp packet from an dual stack IPv4/IPv6 node to * @desc This finalyzes (checksum calculations...) an Tcp packet from an dual stack IPv4/IPv6 node to * any NUT. Prior it modifies * @remark The template passed in must NOT contain any matching expressions! * @param p_ipv4Packet Ipv4 packet value or template with echo request to be sent * @return execution status */ function f_sendIpv4Packet (in template Ipv4Packet p_ipv4Packet, out Ipv4Packet p_result) runs on HostComponent function f_finalyzeIpv4Packet (in template Ipv4Packet p_ipv4Packet, out Ipv4Packet p_result) return FncRetCode { var Ipv4Packet v_ipPkt := valueof(p_ipv4Packet); Loading @@ -304,12 +302,10 @@ module AtsDSLite_Functions { v_ipPkt.ipv4Hdr ); //send p_result := v_ipPkt; ipv4Port.send(v_ipPkt); return e_success; } // End of function f_sendIpv4Packet } // End of function f_finalyzeIpv4Packet } // End of group auxiliary Loading ttcn/AtsDSlite/AtsDSLite_Interfaces.ttcn3 +1 −24 Original line number Diff line number Diff line Loading @@ -23,8 +23,7 @@ module AtsDSLite_Interfaces { import from LibIpv6_Interface_TypesAndValues { type LibIpv6Node, Ipv4Port, Ipv6Port, Ipv4Packet Ipv4Port, Ipv6Port }; import from LibIpv6_CommonRfcsDhcp_TypesAndValues { type Loading Loading @@ -87,24 +86,6 @@ module AtsDSLite_Interfaces { group componentPorts { /** * @desc Port for inter-component data exchanges */ type port HostAftrDataPort message { inout HostAftrDataMsg } // End of port HostAftrDataPort /** * @desc Message description for inter-component data exchanges * @member vc_aftrIPv6Address The AFTR IPv6 address * @member vc_aftrNameOption The AFTR-name option * @member vc_dnsIPv6AddressThe DNS IPv6 address */ type record HostAftrDataMsg { integer hostId, Ipv4Packet ipv4Packet // TODO Use an union? } // End of type HostAftrDataMsg } // End of group componentPorts /** Loading @@ -120,8 +101,6 @@ module AtsDSLite_Interfaces { port Ipv6Port ipv6Port; /** IPv4 message port */ port Ipv4Port ipv4Port; /** Inter-component communication port */ port HostAftrDataPort dataPort; /** Timer used for expected received message */ timer tc_ac:= PX_TAC; /** Timer used for unexpected received message */ Loading @@ -140,8 +119,6 @@ module AtsDSLite_Interfaces { type component AFTRComponent extends SelfSyncComp { /** IPv6 message port */ port Ipv6Port aftrPort; /** Inter-component communication port */ port HostAftrDataPort dataPort; /** Timer used for expected received message */ timer tc_ac:= PX_TAC; /** Timer used for unexpected received message */ Loading ttcn/AtsDSlite/AtsDSLite_Pixits.ttcn3 +14 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,11 @@ module AtsDSLite_Pixits { // DSLite import from AtsDSLite_TypesAndValues all; /** * @desc Indicates the IPv6 address of the B4 equipment */ modulepar Ipv6Address PX_AFTR_B4_ADDRESS := c_16ZeroBytes; /** * @desc Indicates the IPv6 address of the AFTR equipment */ Loading @@ -30,10 +35,8 @@ module AtsDSLite_Pixits { modulepar HostV4Descriptions PX_HOST_V4_LIST := { { 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 dstPort := 80, payload := { rawPayload := 'CAFEDECA'O // TODO To be enhanced Loading @@ -49,7 +52,15 @@ module AtsDSLite_Pixits { } } // Host #1 // TODO Could be extended } } // End of modulepar PX_HOST_V4_LIST /** * @desc Defines a list of IPv4 host services * @see TC_DSLITE_B4_BF_BV_001 */ modulepar HostV6Descriptions PX_HOST_V6_LIST := { // TODO Could be extended } // End of modulepar PX_HOST_V6_LIST modulepar integer PX_DS_MTU := 1500; Loading ttcn/AtsDSlite/AtsDSLite_TestCases.ttcn3 +177 −52 Original line number Diff line number Diff line Loading @@ -12,6 +12,9 @@ module AtsDSLite_TestCases { // LibIPv6 import from LibIpv6_CommonRfcsDhcp_TypesAndValues all; import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Interface_Templates { template m_generalIpv6_extHdr_data }; // AtsCommon import from AtsCommon_TypesAndValues all; Loading Loading @@ -535,8 +538,9 @@ module AtsDSLite_TestCases { testcase TC_DSLITE_B4_BF_BV_001() runs on DSLiteComponent system TestAdapter { // Local variables var integer v_hostNum := lengthof(PX_HOST_V4_LIST); var integer v_host; var integer v_hostNum := lengthof(PX_HOST_V4_LIST); /** Expected number of IPv4 packets to be forwarded */ var HostAftrDataMsgs v_hostAftrDataMsgs; /** Expected of IPv4 packets to be forwarded */ var integer v_host; /** 'for' statement counter */ // Test control Loading @@ -549,13 +553,30 @@ module AtsDSLite_TestCases { // Test adapter configuration // Build the list of the IPv4packet to be sent for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { v_hostAftrDataMsgs[v_host].hostId := v_host; f_finalyzeIpv4Packet( m_ipv4Packet_dummy( PX_HOST_V4_LIST[v_host].srcAddress, // containing source address indicating a private IPv4 address PX_HOST_V4_LIST[v_host].dstAddress, // containing destination address indicating a public IPv4 address from multiple hosts m_tcp_packet( PX_HOST_V4_LIST[v_host].srcPort, PX_HOST_V4_LIST[v_host].dstPort, PX_HOST_V4_LIST[v_host].payload ) ), v_hostAftrDataMsgs[v_host].payload.ipv4Packet ); } // End of 'for' statement // Start all components vc_aftrComponent.start(f_TC_DSLITE_B4_BF_BV_001_aftr()); vc_aftrComponent.start(f_TC_DSLITE_B4_BF_BV_001_aftr(v_hostAftrDataMsgs)); for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { vc_hostComponents[v_host].start(f_TC_DSLITE_B4_BF_BV_001_host(v_host)); vc_hostComponents[v_host].start(f_TC_DSLITE_B4_BF_BV_001_host(v_hostAftrDataMsgs[v_host])); } // End of 'for' statement f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, c_initDone, c_tbDone, c_poDone }); f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, c_tbDone, c_poDone }); // Test Body // Clause 'when': Loading @@ -569,10 +590,14 @@ module AtsDSLite_TestCases { group f_TC_DSLITE_B4_BF_BV_001 { function f_TC_DSLITE_B4_BF_BV_001_host(in integer p_hostId) runs on HostComponent { /** * @desc Implements multiple host side behavior * @param p_host The host to simulate * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_B4_BF_BV_001_host(in HostAftrDataMsg p_host) runs on HostComponent { // Local variables var HostAftrDataMsg v_HostAftrDataMsg; // Preamble // Clause 'Initial conditions' Loading @@ -582,22 +607,7 @@ module AtsDSLite_TestCases { // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets f_sendIpv4Packet( m_ipv4Packet_dummy( PX_HOST_V4_LIST[p_hostId].srcAddress, PX_HOST_V4_LIST[p_hostId].dstAddress, m_tcp_packet( PX_HOST_V4_LIST[p_hostId].srcPort, PX_HOST_V4_LIST[p_hostId].dstPort, PX_HOST_V4_LIST[p_hostId].payload ) ), v_HostAftrDataMsg.ipv4Packet ); // Transmit the IPv4Packet to the AFTRComponent for 'Clause then' processing v_HostAftrDataMsg.hostId := p_hostId; dataPort.send(v_HostAftrDataMsg); f_selfOrClientSyncAndVerdict(c_initDone, e_success); ipv4Port.send(p_host.payload.ipv4Packet); // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Nothing to do Loading @@ -609,15 +619,18 @@ module AtsDSLite_TestCases { } // End of f_TC_DSLITE_B4_BF_BV_001_host function f_TC_DSLITE_B4_BF_BV_001_aftr() runs on AFTRComponent { /** * @desc Implements AFTR side behavior * @param p_hostAftrDataMsgs The list of the expected IPv4 packet t be forwarded * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_B4_BF_BV_001_aftr(HostAftrDataMsgs p_hostAftrDataMsgs) runs on AFTRComponent { // Local variables var integer v_hostNum := lengthof(PX_HOST_V4_LIST); var HostAftrDataMsgs v_hostAftrDataMsgs; var HostAftrDataMsg v_hostAftrDataMsg; var ResultsList v_results; var Ipv6Packet v_ipv6Packet; var integer v_host; var integer v_hostNum := lengthof(p_hostAftrDataMsgs); /** Expected number of IPv4 packets to be forwarded */ var ResultsList v_results; /** List of flags indicating the linked IPv4 packet was forwarded */ var Ipv6Packet v_ipv6Packet; /** Received IPv6 packet */ var integer v_host; /** 'for' statement counter */ // Preamble // Clause 'Initial conditions' Loading @@ -627,23 +640,7 @@ module AtsDSLite_TestCases { // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets tc_ac.start; alt { [] dataPort.receive(HostAftrDataMsg:?) -> value v_hostAftrDataMsg { // Build the list of tsenthe IPv4Packet v_hostAftrDataMsgs[v_hostAftrDataMsg.hostId] := v_hostAftrDataMsg; if (lengthof(v_results) != v_hostNum) { repeat; } else { tc_ac.stop; } } [] tc_ac.timeout { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); log("*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); } } // End of 'altstep' statement f_selfOrClientSyncAndVerdict(c_initDone, e_success); // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet v_host := 0; tc_ac.start; Loading @@ -656,10 +653,10 @@ module AtsDSLite_TestCases { ? // containing unchanged IPv4 packet )) -> value v_ipv6Packet { tc_ac.stop; for (v_host := 0; v_host < lengthof(v_hostAftrDataMsgs); v_host := v_host + 1) { for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { var template (value) Ipv4Packet v_ipv4Packet; if (decvalue(oct2bit(v_ipv6Packet.ipv6Payload.octetstringMsg), v_ipv4Packet) == 0) { if (match(v_ipv4Packet, v_hostAftrDataMsgs[v_hostAftrDataMsg.hostId].ipv4Packet) == true) { if (match(v_ipv4Packet, p_hostAftrDataMsgs[v_host].payload.ipv4Packet) == true) { log("*** " & __SCOPE__ & ": INFO: Receives encapsulated IPv4 packet #", v_host, ". ***"); v_results[v_host] := true; break; Loading Loading @@ -984,22 +981,56 @@ module AtsDSLite_TestCases { testcase TC_DSLITE_AFTR_BF_BV_001() runs on DSLiteComponent system TestAdapter { // Local variables var integer v_hostNum := lengthof(PX_HOST_V6_LIST); /** Expected number of IPv6 packets to be forwarded */ var HostAftrDataMsgs v_hostAftrDataMsgs; /** Expected of IPv6 packets to be forwarded */ var Ipv4Packet v_ipv4Packet; /** IPv4 packets to be encapsulated into IPv6 */ var integer v_host; /** 'for' statement counter */ // Test control // Test component configuration // vc_dhcpv6Component := DHCPv6Component.create(c_COMP_DHCP); vc_aftrComponent := AFTRComponent.create(c_COMP_AFTR); for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { vc_hostComponents[v_host] := HostComponent.create(c_COMP_HOST & int2str(v_host)); } // End of 'for' statement f_cf01Up_B4(); // Test adapter configuration // Build the list of the IPv6packet to be sent for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { f_finalyzeIpv4Packet( m_ipv4Packet_dummy( PX_HOST_V4_LIST[v_host].srcAddress, PX_HOST_V4_LIST[v_host].dstAddress, m_tcp_packet( PX_HOST_V4_LIST[v_host].srcPort, PX_HOST_V4_LIST[v_host].dstPort, PX_HOST_V4_LIST[v_host].payload ) ), v_ipv4Packet ); v_hostAftrDataMsgs[v_host].hostId := v_host; v_hostAftrDataMsgs[v_host].payload.ipv6Packet := m_generalIpv6_extHdr_data( c_ipip, PX_AFTR_B4_ADDRESS, // containing source address indicating B4 IPv6 address PX_AFTR_GW_ADDRESS, // containing destination address indicating IUT GW IPv6 address omit, // No extended header bit2oct(encvalue(v_ipv4Packet)) // containing IPv4 payload ); } // End of 'for' statement // Start all components vc_aftrComponent.start(f_TC_DSLITE_AFTR_BF_BV_001_aftr(v_hostAftrDataMsgs)); for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { vc_hostComponents[v_host].start(f_TC_DSLITE_AFTR_BF_BV_001_host(v_hostAftrDataMsgs[v_host])); } // End of 'for' statement f_serverSyncNClientsAndStop(1, { c_prDone, c_tbDone, c_poDone }); f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, c_tbDone, c_poDone }); // Test Body // Clause 'when': action("the IUT in its initial state"); // Clause 'then': Nothing to do, refer to a_default Loading @@ -1010,6 +1041,100 @@ module AtsDSLite_TestCases { group f_TC_DSLITE_AFTR_BF_BV_001 { /** * @desc Implements multiple hosts from the outside IPv6 network side * @param p_host * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_AFTR_BF_BV_001_host(in HostAftrDataMsg p_host) runs on HostComponent { // Local variables var HostAftrDataMsg v_HostAftrDataMsg; // Preamble // Clause 'Initial conditions' f_preamble_host(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); log("*** " & __SCOPE__ & ": INFO: Preamble done. ***"); // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets ipv6Port.send(p_host.payload.ipv6Packet); // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Nothing to do // Postamble f_postamble_host(); f_selfOrClientSyncAndVerdict(c_poDone, e_success); log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); } // End of f_TC_DSLITE_AFTR_BF_BV_001_host /** * @desc Implements the AFTR/B4 side behavior * @param p_hostAftrDataMsgs * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_AFTR_BF_BV_001_aftr(HostAftrDataMsgs p_hostAftrDataMsgs) runs on AFTRComponent { // Local variables var integer v_hostNum := lengthof(p_hostAftrDataMsgs); /** Expected number of IPv6 packets to be forwarded */ var ResultsList v_results; /** List of flags indicating the linked IPv6 packet was forwarded */ var Ipv6Packet v_ipv6Packet; /** Received IPv6 packet */ var integer v_host; /** 'for' statement counter */ // Preamble // Clause 'Initial conditions' f_preamble_aftr(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); log("*** " & __SCOPE__ & ": INFO: Preamble done. ***"); // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet v_host := 0; tc_ac.start; alt { [] aftrPort.receive( mdw_generalIpv6_extHdr_dst_ipv6Payload( c_ipip, PX_AFTR_GW_ADDRESS, // containing destination address indicating IPv6 AFTR GW address ?, ? // containing unchanged IPv4 packet )) -> value v_ipv6Packet { tc_ac.stop; for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { // var template (value) Ipv4Packet v_ipv4Packet; // if (decvalue(oct2bit(v_ipv6Packet.ipv6Payload.octetstringMsg), v_ipv4Packet) == 0) { // if (match(v_ipv4Packet, p_hostAftrDataMsgs[v_host].payload.ipv4Packet) == true) { // log("*** " & __SCOPE__ & ": INFO: Receives encapsulated IPv4 packet #", v_host, ". ***"); // v_results[v_host] := true; // break; // } // } } // End of 'for' statement if (lengthof(v_results) == v_hostNum) { log("*** " & __SCOPE__ & ": PASS: All encapsulated IPv6 packets were forwarded. ***"); } else { tc_ac.start; repeat; } } [] tc_ac.timeout { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); log("*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); } } // End of 'altstep' statement // Postamble f_postamble_aftr(); f_selfOrClientSyncAndVerdict(c_poDone, e_success); log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); } // End of fucntion f_TC_DSLITE_AFTR_BF_BV_001_aftr } // End of group f_TC_DSLITE_AFTR_BF_BV_001 /** Loading ttcn/AtsDSlite/AtsDSLite_TypeAndValues.ttcn3 +47 −12 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
ttcn/AtsDSlite/AtsDSLite_Functions.ttcn3 +4 −8 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ module AtsDSLite_Functions { for (v_host:=0; v_host<v_hosts; v_host:=v_host + 1) { connect(vc_hostComponents[v_host]:ipv6Port, self:ipv6HostPort); connect(vc_hostComponents[v_host]:ipv4Port, self:ipv4HostPort); connect(vc_hostComponents[v_host]:dataPort, vc_aftrComponent:dataPort); } } if (vc_dhcpv6Component != null) { Loading Loading @@ -283,14 +282,13 @@ module AtsDSLite_Functions { } /** * @desc This sends an Tcp packet from an dual stack IPv4/IPv6 node to * @desc This finalyzes (checksum calculations...) an Tcp packet from an dual stack IPv4/IPv6 node to * any NUT. Prior it modifies * @remark The template passed in must NOT contain any matching expressions! * @param p_ipv4Packet Ipv4 packet value or template with echo request to be sent * @return execution status */ function f_sendIpv4Packet (in template Ipv4Packet p_ipv4Packet, out Ipv4Packet p_result) runs on HostComponent function f_finalyzeIpv4Packet (in template Ipv4Packet p_ipv4Packet, out Ipv4Packet p_result) return FncRetCode { var Ipv4Packet v_ipPkt := valueof(p_ipv4Packet); Loading @@ -304,12 +302,10 @@ module AtsDSLite_Functions { v_ipPkt.ipv4Hdr ); //send p_result := v_ipPkt; ipv4Port.send(v_ipPkt); return e_success; } // End of function f_sendIpv4Packet } // End of function f_finalyzeIpv4Packet } // End of group auxiliary Loading
ttcn/AtsDSlite/AtsDSLite_Interfaces.ttcn3 +1 −24 Original line number Diff line number Diff line Loading @@ -23,8 +23,7 @@ module AtsDSLite_Interfaces { import from LibIpv6_Interface_TypesAndValues { type LibIpv6Node, Ipv4Port, Ipv6Port, Ipv4Packet Ipv4Port, Ipv6Port }; import from LibIpv6_CommonRfcsDhcp_TypesAndValues { type Loading Loading @@ -87,24 +86,6 @@ module AtsDSLite_Interfaces { group componentPorts { /** * @desc Port for inter-component data exchanges */ type port HostAftrDataPort message { inout HostAftrDataMsg } // End of port HostAftrDataPort /** * @desc Message description for inter-component data exchanges * @member vc_aftrIPv6Address The AFTR IPv6 address * @member vc_aftrNameOption The AFTR-name option * @member vc_dnsIPv6AddressThe DNS IPv6 address */ type record HostAftrDataMsg { integer hostId, Ipv4Packet ipv4Packet // TODO Use an union? } // End of type HostAftrDataMsg } // End of group componentPorts /** Loading @@ -120,8 +101,6 @@ module AtsDSLite_Interfaces { port Ipv6Port ipv6Port; /** IPv4 message port */ port Ipv4Port ipv4Port; /** Inter-component communication port */ port HostAftrDataPort dataPort; /** Timer used for expected received message */ timer tc_ac:= PX_TAC; /** Timer used for unexpected received message */ Loading @@ -140,8 +119,6 @@ module AtsDSLite_Interfaces { type component AFTRComponent extends SelfSyncComp { /** IPv6 message port */ port Ipv6Port aftrPort; /** Inter-component communication port */ port HostAftrDataPort dataPort; /** Timer used for expected received message */ timer tc_ac:= PX_TAC; /** Timer used for unexpected received message */ Loading
ttcn/AtsDSlite/AtsDSLite_Pixits.ttcn3 +14 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,11 @@ module AtsDSLite_Pixits { // DSLite import from AtsDSLite_TypesAndValues all; /** * @desc Indicates the IPv6 address of the B4 equipment */ modulepar Ipv6Address PX_AFTR_B4_ADDRESS := c_16ZeroBytes; /** * @desc Indicates the IPv6 address of the AFTR equipment */ Loading @@ -30,10 +35,8 @@ module AtsDSLite_Pixits { modulepar HostV4Descriptions PX_HOST_V4_LIST := { { 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 dstPort := 80, payload := { rawPayload := 'CAFEDECA'O // TODO To be enhanced Loading @@ -49,7 +52,15 @@ module AtsDSLite_Pixits { } } // Host #1 // TODO Could be extended } } // End of modulepar PX_HOST_V4_LIST /** * @desc Defines a list of IPv4 host services * @see TC_DSLITE_B4_BF_BV_001 */ modulepar HostV6Descriptions PX_HOST_V6_LIST := { // TODO Could be extended } // End of modulepar PX_HOST_V6_LIST modulepar integer PX_DS_MTU := 1500; Loading
ttcn/AtsDSlite/AtsDSLite_TestCases.ttcn3 +177 −52 Original line number Diff line number Diff line Loading @@ -12,6 +12,9 @@ module AtsDSLite_TestCases { // LibIPv6 import from LibIpv6_CommonRfcsDhcp_TypesAndValues all; import from LibIpv6_Interface_TypesAndValues all; import from LibIpv6_Interface_Templates { template m_generalIpv6_extHdr_data }; // AtsCommon import from AtsCommon_TypesAndValues all; Loading Loading @@ -535,8 +538,9 @@ module AtsDSLite_TestCases { testcase TC_DSLITE_B4_BF_BV_001() runs on DSLiteComponent system TestAdapter { // Local variables var integer v_hostNum := lengthof(PX_HOST_V4_LIST); var integer v_host; var integer v_hostNum := lengthof(PX_HOST_V4_LIST); /** Expected number of IPv4 packets to be forwarded */ var HostAftrDataMsgs v_hostAftrDataMsgs; /** Expected of IPv4 packets to be forwarded */ var integer v_host; /** 'for' statement counter */ // Test control Loading @@ -549,13 +553,30 @@ module AtsDSLite_TestCases { // Test adapter configuration // Build the list of the IPv4packet to be sent for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { v_hostAftrDataMsgs[v_host].hostId := v_host; f_finalyzeIpv4Packet( m_ipv4Packet_dummy( PX_HOST_V4_LIST[v_host].srcAddress, // containing source address indicating a private IPv4 address PX_HOST_V4_LIST[v_host].dstAddress, // containing destination address indicating a public IPv4 address from multiple hosts m_tcp_packet( PX_HOST_V4_LIST[v_host].srcPort, PX_HOST_V4_LIST[v_host].dstPort, PX_HOST_V4_LIST[v_host].payload ) ), v_hostAftrDataMsgs[v_host].payload.ipv4Packet ); } // End of 'for' statement // Start all components vc_aftrComponent.start(f_TC_DSLITE_B4_BF_BV_001_aftr()); vc_aftrComponent.start(f_TC_DSLITE_B4_BF_BV_001_aftr(v_hostAftrDataMsgs)); for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { vc_hostComponents[v_host].start(f_TC_DSLITE_B4_BF_BV_001_host(v_host)); vc_hostComponents[v_host].start(f_TC_DSLITE_B4_BF_BV_001_host(v_hostAftrDataMsgs[v_host])); } // End of 'for' statement f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, c_initDone, c_tbDone, c_poDone }); f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, c_tbDone, c_poDone }); // Test Body // Clause 'when': Loading @@ -569,10 +590,14 @@ module AtsDSLite_TestCases { group f_TC_DSLITE_B4_BF_BV_001 { function f_TC_DSLITE_B4_BF_BV_001_host(in integer p_hostId) runs on HostComponent { /** * @desc Implements multiple host side behavior * @param p_host The host to simulate * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_B4_BF_BV_001_host(in HostAftrDataMsg p_host) runs on HostComponent { // Local variables var HostAftrDataMsg v_HostAftrDataMsg; // Preamble // Clause 'Initial conditions' Loading @@ -582,22 +607,7 @@ module AtsDSLite_TestCases { // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets f_sendIpv4Packet( m_ipv4Packet_dummy( PX_HOST_V4_LIST[p_hostId].srcAddress, PX_HOST_V4_LIST[p_hostId].dstAddress, m_tcp_packet( PX_HOST_V4_LIST[p_hostId].srcPort, PX_HOST_V4_LIST[p_hostId].dstPort, PX_HOST_V4_LIST[p_hostId].payload ) ), v_HostAftrDataMsg.ipv4Packet ); // Transmit the IPv4Packet to the AFTRComponent for 'Clause then' processing v_HostAftrDataMsg.hostId := p_hostId; dataPort.send(v_HostAftrDataMsg); f_selfOrClientSyncAndVerdict(c_initDone, e_success); ipv4Port.send(p_host.payload.ipv4Packet); // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Nothing to do Loading @@ -609,15 +619,18 @@ module AtsDSLite_TestCases { } // End of f_TC_DSLITE_B4_BF_BV_001_host function f_TC_DSLITE_B4_BF_BV_001_aftr() runs on AFTRComponent { /** * @desc Implements AFTR side behavior * @param p_hostAftrDataMsgs The list of the expected IPv4 packet t be forwarded * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_B4_BF_BV_001_aftr(HostAftrDataMsgs p_hostAftrDataMsgs) runs on AFTRComponent { // Local variables var integer v_hostNum := lengthof(PX_HOST_V4_LIST); var HostAftrDataMsgs v_hostAftrDataMsgs; var HostAftrDataMsg v_hostAftrDataMsg; var ResultsList v_results; var Ipv6Packet v_ipv6Packet; var integer v_host; var integer v_hostNum := lengthof(p_hostAftrDataMsgs); /** Expected number of IPv4 packets to be forwarded */ var ResultsList v_results; /** List of flags indicating the linked IPv4 packet was forwarded */ var Ipv6Packet v_ipv6Packet; /** Received IPv6 packet */ var integer v_host; /** 'for' statement counter */ // Preamble // Clause 'Initial conditions' Loading @@ -627,23 +640,7 @@ module AtsDSLite_TestCases { // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets tc_ac.start; alt { [] dataPort.receive(HostAftrDataMsg:?) -> value v_hostAftrDataMsg { // Build the list of tsenthe IPv4Packet v_hostAftrDataMsgs[v_hostAftrDataMsg.hostId] := v_hostAftrDataMsg; if (lengthof(v_results) != v_hostNum) { repeat; } else { tc_ac.stop; } } [] tc_ac.timeout { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); log("*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); } } // End of 'altstep' statement f_selfOrClientSyncAndVerdict(c_initDone, e_success); // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet v_host := 0; tc_ac.start; Loading @@ -656,10 +653,10 @@ module AtsDSLite_TestCases { ? // containing unchanged IPv4 packet )) -> value v_ipv6Packet { tc_ac.stop; for (v_host := 0; v_host < lengthof(v_hostAftrDataMsgs); v_host := v_host + 1) { for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { var template (value) Ipv4Packet v_ipv4Packet; if (decvalue(oct2bit(v_ipv6Packet.ipv6Payload.octetstringMsg), v_ipv4Packet) == 0) { if (match(v_ipv4Packet, v_hostAftrDataMsgs[v_hostAftrDataMsg.hostId].ipv4Packet) == true) { if (match(v_ipv4Packet, p_hostAftrDataMsgs[v_host].payload.ipv4Packet) == true) { log("*** " & __SCOPE__ & ": INFO: Receives encapsulated IPv4 packet #", v_host, ". ***"); v_results[v_host] := true; break; Loading Loading @@ -984,22 +981,56 @@ module AtsDSLite_TestCases { testcase TC_DSLITE_AFTR_BF_BV_001() runs on DSLiteComponent system TestAdapter { // Local variables var integer v_hostNum := lengthof(PX_HOST_V6_LIST); /** Expected number of IPv6 packets to be forwarded */ var HostAftrDataMsgs v_hostAftrDataMsgs; /** Expected of IPv6 packets to be forwarded */ var Ipv4Packet v_ipv4Packet; /** IPv4 packets to be encapsulated into IPv6 */ var integer v_host; /** 'for' statement counter */ // Test control // Test component configuration // vc_dhcpv6Component := DHCPv6Component.create(c_COMP_DHCP); vc_aftrComponent := AFTRComponent.create(c_COMP_AFTR); for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { vc_hostComponents[v_host] := HostComponent.create(c_COMP_HOST & int2str(v_host)); } // End of 'for' statement f_cf01Up_B4(); // Test adapter configuration // Build the list of the IPv6packet to be sent for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { f_finalyzeIpv4Packet( m_ipv4Packet_dummy( PX_HOST_V4_LIST[v_host].srcAddress, PX_HOST_V4_LIST[v_host].dstAddress, m_tcp_packet( PX_HOST_V4_LIST[v_host].srcPort, PX_HOST_V4_LIST[v_host].dstPort, PX_HOST_V4_LIST[v_host].payload ) ), v_ipv4Packet ); v_hostAftrDataMsgs[v_host].hostId := v_host; v_hostAftrDataMsgs[v_host].payload.ipv6Packet := m_generalIpv6_extHdr_data( c_ipip, PX_AFTR_B4_ADDRESS, // containing source address indicating B4 IPv6 address PX_AFTR_GW_ADDRESS, // containing destination address indicating IUT GW IPv6 address omit, // No extended header bit2oct(encvalue(v_ipv4Packet)) // containing IPv4 payload ); } // End of 'for' statement // Start all components vc_aftrComponent.start(f_TC_DSLITE_AFTR_BF_BV_001_aftr(v_hostAftrDataMsgs)); for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { vc_hostComponents[v_host].start(f_TC_DSLITE_AFTR_BF_BV_001_host(v_hostAftrDataMsgs[v_host])); } // End of 'for' statement f_serverSyncNClientsAndStop(1, { c_prDone, c_tbDone, c_poDone }); f_serverSyncNClientsAndStop(v_hostNum + 1, { c_prDone, c_tbDone, c_poDone }); // Test Body // Clause 'when': action("the IUT in its initial state"); // Clause 'then': Nothing to do, refer to a_default Loading @@ -1010,6 +1041,100 @@ module AtsDSLite_TestCases { group f_TC_DSLITE_AFTR_BF_BV_001 { /** * @desc Implements multiple hosts from the outside IPv6 network side * @param p_host * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_AFTR_BF_BV_001_host(in HostAftrDataMsg p_host) runs on HostComponent { // Local variables var HostAftrDataMsg v_HostAftrDataMsg; // Preamble // Clause 'Initial conditions' f_preamble_host(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); log("*** " & __SCOPE__ & ": INFO: Preamble done. ***"); // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets ipv6Port.send(p_host.payload.ipv6Packet); // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // Nothing to do // Postamble f_postamble_host(); f_selfOrClientSyncAndVerdict(c_poDone, e_success); log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); } // End of f_TC_DSLITE_AFTR_BF_BV_001_host /** * @desc Implements the AFTR/B4 side behavior * @param p_hostAftrDataMsgs * @verdict pass on success, inconc on timeout, fail otherwise */ function f_TC_DSLITE_AFTR_BF_BV_001_aftr(HostAftrDataMsgs p_hostAftrDataMsgs) runs on AFTRComponent { // Local variables var integer v_hostNum := lengthof(p_hostAftrDataMsgs); /** Expected number of IPv6 packets to be forwarded */ var ResultsList v_results; /** List of flags indicating the linked IPv6 packet was forwarded */ var Ipv6Packet v_ipv6Packet; /** Received IPv6 packet */ var integer v_host; /** 'for' statement counter */ // Preamble // Clause 'Initial conditions' f_preamble_aftr(); f_selfOrClientSyncAndVerdict(c_prDone, e_success); log("*** " & __SCOPE__ & ": INFO: Preamble done. ***"); // Test Body // Clause 'when': the IUT receives multiple HTML IPv4 packets // Clause 'then':the IUT encapsulates each HTML IPv4 packet unchanged into IPv6 packet v_host := 0; tc_ac.start; alt { [] aftrPort.receive( mdw_generalIpv6_extHdr_dst_ipv6Payload( c_ipip, PX_AFTR_GW_ADDRESS, // containing destination address indicating IPv6 AFTR GW address ?, ? // containing unchanged IPv4 packet )) -> value v_ipv6Packet { tc_ac.stop; for (v_host := 0; v_host < v_hostNum; v_host := v_host + 1) { // var template (value) Ipv4Packet v_ipv4Packet; // if (decvalue(oct2bit(v_ipv6Packet.ipv6Payload.octetstringMsg), v_ipv4Packet) == 0) { // if (match(v_ipv4Packet, p_hostAftrDataMsgs[v_host].payload.ipv4Packet) == true) { // log("*** " & __SCOPE__ & ": INFO: Receives encapsulated IPv4 packet #", v_host, ". ***"); // v_results[v_host] := true; // break; // } // } } // End of 'for' statement if (lengthof(v_results) == v_hostNum) { log("*** " & __SCOPE__ & ": PASS: All encapsulated IPv6 packets were forwarded. ***"); } else { tc_ac.start; repeat; } } [] tc_ac.timeout { f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout); log("*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); } } // End of 'altstep' statement // Postamble f_postamble_aftr(); f_selfOrClientSyncAndVerdict(c_poDone, e_success); log("*** " & __SCOPE__ & ": INFO: Postamble done. ***"); } // End of fucntion f_TC_DSLITE_AFTR_BF_BV_001_aftr } // End of group f_TC_DSLITE_AFTR_BF_BV_001 /** Loading
ttcn/AtsDSlite/AtsDSLite_TypeAndValues.ttcn3 +47 −12 File changed.Preview size limit exceeded, changes collapsed. Show changes