Commit 9c14805f authored by tepelmann's avatar tepelmann
Browse files

Added TC_DSLITE_B4_FRAG_BV_002.

parent 7b3af0fd
Loading
Loading
Loading
Loading
+88 −7
Original line number Diff line number Diff line
@@ -818,7 +818,7 @@ module AtsDSLite_TestCases {
                                    c_ipv4Hdr,
                                    PX_AFTR_GW_ADDRESS,                     // containing destination address indicating IPv6 AFTR GW address
                                    ?,
                                    v_firstFragment                         // containing fragment 1
                                    v_firstFragment                         // containing first fragment
                            )) {
                                log("*** " & __SCOPE__ & ": First fragmented packet received. ***");
                                tc_ac.stop;
@@ -862,7 +862,6 @@ module AtsDSLite_TestCases {
                    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'
@@ -919,7 +918,14 @@ module AtsDSLite_TestCases {
                testcase TC_DSLITE_B4_FRAG_BV_002() runs on DSLiteComponent system TestAdapter {
                    
                    // Local variables
                    var integer v_host;
                    var integer v_host := 0;
                    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(1, PX_HOST_V4_LIST_B4[v_host].srcAddress, PX_HOST_V4_LIST_B4[v_host].dstAddress, v_tcpMsg);
                    
                    f_finalyzeIpv4Packet(
                        v_ipv4Packet,
                        v_ipv4Packet
                    );
                    
                    // Test control
                    
@@ -931,8 +937,8 @@ module AtsDSLite_TestCases {
                    // Test adapter configuration
                    
                    // Start all components
                    vc_aftrComponent.start(f_TC_DSLITE_B4_FRAG_BV_002_aftr());
                    vc_hostComponents[0].start(f_TC_DSLITE_B4_FRAG_BV_002_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': 
@@ -949,9 +955,15 @@ module AtsDSLite_TestCases {
                
                group f_TC_DSLITE_B4_FRAG_BV_002 {
                    
                    function f_TC_DSLITE_B4_FRAG_BV_002_aftr() runs on AFTRComponent {
                    function f_TC_DSLITE_B4_FRAG_BV_002_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 octetstring v_firstPart;
                        var octetstring v_lastPart;
                        var Ipv6Packet v_ipv6Packet;
                         
                        // Preamble
                        // Clause 'Initial conditions'
@@ -961,6 +973,73 @@ module AtsDSLite_TestCases {
                        
                        // Test Body
                        // Clause 'when': 
                        //construct encapsulated fragments
                        v_firstFragment := p_ipv4Packet;
                        v_firstFragment.ipv4Payload.rawPacket := ?;
                        
                        //receive encapsulated fragments
                        tc_ac.start;
                        alt {
                            [v_firstReceived==false] aftrPort.receive(
                                mdw_generalIpv6_extHdr_dst_ipv4Payload(
                                    c_fragHdr,
                                    PX_AFTR_GW_ADDRESS,                     // containing destination address indicating IPv6 AFTR GW address
                                    m_extHdrList_1Elem (
                                        m_extHdr_fragmentHeader (
                                            c_icmpHdr,
                                            c_fragOffset0,
                                            c_moreFragments,
                                            c_fragmentId1
                                        )
                                    ),
                                    v_firstFragment                         // containing first fragment
                            )) -> value ipv6Packet {
                                log("*** " & __SCOPE__ & ": First fragmented packet received. ***");
                                tc_ac.stop;
                                v_firstReceived := true;
                                v_firstPart := v_ipv6Packet.ipv6Payload.ipv4Packet.ipv4Payload.rawPacket;
                                if (v_lastReceived == false) {
                                    tc_ac.start;
                                    repeat;
                                }
                            }
                            [v_lastReceived==false] aftrPort.receive(
                                m_generalIpv6_extHdr_data(
                                    c_fragHdr,
                                    PX_AFTR_GW_ADDRESS,                     // containing destination address indicating IPv6 AFTR GW address
                                    m_extHdrList_1Elem (
                                        m_extHdr_fragmentHeader (
                                            c_noNextHdr,
                                            c_fragOffset2,
                                            c_noMoreFragments,
                                            c_fragmentId1 
                                        )
                                    ),
                                    ?                                       // containing last fragment
                            )) -> value ipv6Packet {
                                log("*** " & __SCOPE__ & ": Last fragmented packet received. ***");
                                tc_ac.stop;
                                v_lastReceived := true;
                                v_lastPart := v_ipv6Packet.ipv6Payload.octetstringMsg;
                                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. ***");
                            }
                        }
                        
                        if (match(v_firstPart & v_lastPart, p_ipv4Packet.ipv4Payload.rawPacket)) {
	                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
	                        log("*** " & __SCOPE__ & ": PASS: IUT correctly forwarded fragmented packets. ***");
                        }
                        else {
                            f_selfOrClientSyncAndVerdict(c_tbDone, e_error);
                            log("*** " & __SCOPE__ & ": FAIL: IUT did not correctly forward fragmented packets. ***");
                        }
                        
                        // Postamble
                        f_postamble_aftr();
@@ -969,7 +1048,7 @@ module AtsDSLite_TestCases {
                        
                    } // End of fucntion f_TC_DSLITE_B4_FRAG_BV_002_aftr
                    
                    function f_TC_DSLITE_B4_FRAG_BV_002_host(in integer p_hostId) runs on HostComponent {
                    function f_TC_DSLITE_B4_FRAG_BV_002_host(in integer p_hostId, in template(value) Ipv4Packet  p_ipv4Packet) runs on HostComponent {
                        
                        // Local variables
                         
@@ -981,6 +1060,8 @@ module AtsDSLite_TestCases {
                        
                        // Test Body
                        // Clause 'when': 
                        ipv4Port.send(p_ipv4Packet);
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success);
                        
                        // Postamble
                        f_postamble_host();