Commit 7b3af0fd authored by tepelmann's avatar tepelmann
Browse files

Last version of TC_DSLITE_B4_FRAG_BV_001.

parent 15a4b389
Loading
Loading
Loading
Loading
+75 −7
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ module AtsDSLite_TestCases {
    import from LibIpv6_Interface_Templates {
        template m_generalIpv6_extHdr_data
    };
    import from LibIpv6_Interface_Functions all;
    
    // AtsCommon
    import from AtsCommon_TypesAndValues all;
@@ -655,7 +656,7 @@ module AtsDSLite_TestCases {
                        alt {
                            [] aftrPort.receive(
                                mdw_generalIpv6_extHdr_dst_ipv4Payload(
                                    c_tunneledIpHdr,
                                    c_ipv4Hdr,
                                    PX_AFTR_GW_ADDRESS,                     // containing destination address indicating IPv6 AFTR GW address
                                    ?,
                                    ?                                       // containing unchanged IPv4 packet
@@ -742,9 +743,13 @@ module AtsDSLite_TestCases {
                    
                    // Local variables
                    var integer v_host := 0;
                    var template (value) TcpPacket v_tcpMsg := m_tcp_packet(50000, 80, { httpPayload := int2oct(0, PX_DS_MTU) }); //TODO adapt values
                    var template (value) TcpPacket v_tcpMsg := m_tcp_packet(50000, 80, { httpPayload := int2oct(0, PX_DS_MTU) }); //leads to 2 fragments //TODO adapt values?
                    var template(value) Ipv4Packet  v_ipv4Packet := m_ipv4Packet_df(0, PX_HOST_V4_LIST_B4[v_host].srcAddress, PX_HOST_V4_LIST_B4[v_host].dstAddress, v_tcpMsg);
                    var octetstring v_encTcpMsg := v_ipv4Packet.ipv4Payload.rawPacket;
                    
                    f_finalyzeIpv4Packet(
                        v_ipv4Packet,
                        v_ipv4Packet
                    );
                    
                    // Test control
                    
@@ -756,8 +761,8 @@ module AtsDSLite_TestCases {
                    // Test adapter configuration
                    
                    // Start all components
                    vc_aftrComponent.start(f_TC_DSLITE_B4_FRAG_BV_001_aftr());
                    vc_hostComponents[0].start(f_TC_DSLITE_B4_FRAG_BV_001_host(v_host));
                    vc_aftrComponent.start(f_TC_DSLITE_B4_FRAG_BV_001_aftr(v_ipv4Packet));
                    vc_hostComponents[0].start(f_TC_DSLITE_B4_FRAG_BV_001_host(v_host, v_ipv4Packet));
                    
                    // Test Body
                    // Clause 'when': 
@@ -774,9 +779,15 @@ module AtsDSLite_TestCases {
                
                group f_TC_DSLITE_B4_FRAG_BV_001 {
                    
                    function f_TC_DSLITE_B4_FRAG_BV_001_aftr() runs on AFTRComponent {
                    type record of octetstring OctetstringList;
                    
                    function f_TC_DSLITE_B4_FRAG_BV_001_aftr(in template(value) Ipv4Packet  p_ipv4Packet) runs on AFTRComponent {
                        
                        // Local variables
                        var boolean v_firstReceived := false;
                        var boolean v_lastReceived := false;
                        var template(present) Ipv4Packet v_firstFragment;
                        var template(present) Ipv4Packet v_lastFragment;
                         
                        // Preamble
                        // Clause 'Initial conditions'
@@ -786,6 +797,60 @@ module AtsDSLite_TestCases {
                        
                        // Test Body
                        // Clause 'when': 
                        //construct encapsulated fragments
                        v_firstFragment := p_ipv4Packet;
                        v_firstFragment.ipv4Hdr.totalLength := PX_DS_MTU;
                        v_firstFragment.ipv4Hdr.hcs := ?;
                        v_firstFragment.ipv4Hdr.moreFragsFlag := c_moreFragsFlag1;
                        v_firstFragment.ipv4Payload.rawPacket := substr(p_ipv4Packet.ipv4Payload.rawPacket, 0, PX_DS_MTU - p_ipv4Packet.ipv4Hdr.headerLength);
                        v_lastFragment := p_ipv4Packet;
                        v_lastFragment.ipv4Hdr.totalLength := p_ipv4Packet.ipv4Hdr.headerLength + p_ipv4Packet.ipv4Hdr.headerLength;
                        v_lastFragment.ipv4Hdr.hcs := ?;
                        v_firstFragment.ipv4Hdr.moreFragsFlag := c_moreFragsFlag0;
                        v_lastFragment.ipv4Hdr.fragmentOffset := PX_DS_MTU - p_ipv4Packet.ipv4Hdr.headerLength;
                        v_lastFragment.ipv4Payload.rawPacket := substr(p_ipv4Packet.ipv4Payload.rawPacket, v_lastFragment.ipv4Hdr.fragmentOffset, p_ipv4Packet.ipv4Hdr.headerLength);
                        
                        //receive encapsulated fragments
                        tc_ac.start;
                        alt {
                            [v_firstReceived==false] aftrPort.receive(
                                mdw_generalIpv6_extHdr_dst_ipv4Payload(
                                    c_ipv4Hdr,
                                    PX_AFTR_GW_ADDRESS,                     // containing destination address indicating IPv6 AFTR GW address
                                    ?,
                                    v_firstFragment                         // containing fragment 1
                            )) {
                                log("*** " & __SCOPE__ & ": First fragmented packet received. ***");
                                tc_ac.stop;
                                v_firstReceived := true;
                                if (v_lastReceived == false) {
	                                tc_ac.start;
	                                repeat;
                                }
                            }
                            [v_lastReceived==false] aftrPort.receive(
                                mdw_generalIpv6_extHdr_dst_ipv4Payload(
                                    c_ipv4Hdr,
                                    PX_AFTR_GW_ADDRESS,                     // containing destination address indicating IPv6 AFTR GW address
                                    ?,
                                    v_lastFragment                          // containing last fragment
                            )) {
                                log("*** " & __SCOPE__ & ": Last fragmented packet received. ***");
                                tc_ac.stop;
                                v_lastReceived := true;
                                if (v_firstReceived == false) {
                                    tc_ac.start;
                                    repeat;
                                }
                            }
                            [] tc_ac.timeout {
                                f_selfOrClientSyncAndVerdict(c_tbDone, e_timeout);
                                log("*** " & __SCOPE__ & ": INCONC: Message was not received in time. ***");
                            }
                        }
                        
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        log("*** " & __SCOPE__ & ": PASS: IUT correctly forwarded fragmented packets. ***");
                        
                        // Postamble
                        f_postamble_aftr();
@@ -794,9 +859,10 @@ module AtsDSLite_TestCases {
                        
                    } // End of fucntion f_TC_DSLITE_B4_FRAG_BV_001_aftr
                    
                    function f_TC_DSLITE_B4_FRAG_BV_001_host(in integer p_hostId) runs on HostComponent {
                    function f_TC_DSLITE_B4_FRAG_BV_001_host(in integer p_hostId, in template(value) Ipv4Packet  p_ipv4Packet) runs on HostComponent {
                        
                        // Local variables
                        var Ipv4Packet v_ipv4Packet;
                         
                        // Preamble
                        // Clause 'Initial conditions'
@@ -806,6 +872,8 @@ module AtsDSLite_TestCases {
                        
                        // Test Body
                        // Clause 'when': 
                        ipv4Port.send(p_ipv4Packet);
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        
                        // Postamble
                        f_postamble_host();