Commit c34d776c authored by garciay's avatar garciay
Browse files

Remove dataPort between HostComponent and AFTRComponent

Finalise TC_DSLITE_B4_BF_BV_001
Start implementation of TC_DSLITE_AFTR_BF_BV_001
parent a62123dc
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -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) { 
@@ -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);
            
@@ -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
    
+1 −24
Original line number Diff line number Diff line
@@ -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 
@@ -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
        
        /**
@@ -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 */
@@ -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 */
+14 −3
Original line number Diff line number Diff line
@@ -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
     */
@@ -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
@@ -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;
    
+177 −52
Original line number Diff line number Diff line
@@ -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;
@@ -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
                    
@@ -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':  
@@ -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'
@@ -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
@@ -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'
@@ -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;
@@ -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;
@@ -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
                    
@@ -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
                
                /**
+47 −12

File changed.

Preview size limit exceeded, changes collapsed.