Commit ba072239 authored by juvancic's avatar juvancic
Browse files

Initial version of ATS for S1AP - STF 519

parent 6f36ef51
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
/**
 *	@author 	STF 519
 *  @version    $Id: $
 *	@desc		This module provides the types used by the test component for S1AP tests.
 */

module LibS1AP_Interface
{
    //LibCommon
    import from LibCommon_Sync {type SelfSyncComp; 
                                modulepar PX_TSYNC_TIME_LIMIT;};
    import from LibCommon_BasicTypesAndValues {type UInt32;};

    //LibS1AP
	import from S1AP_Constants language "ASN.1:1997" all;
	import from S1AP_CommonDataTypes language "ASN.1:1997" all;
	import from S1AP_Containers language "ASN.1:1997" all;
	import from S1AP_IEs language "ASN.1:1997" all;
	import from S1AP_PDU_Contents language "ASN.1:1997" all;
	import from S1AP_PDU_Descriptions language "ASN.1:1997" all;
	
	//import from LibS1AP_TypesAndValues all;
	
	import from LibS1AP_PIXITS all;
	
    type port S1APPort message {inout S1AP_PDU}; 

    type component S1APComponent extends SelfSyncComp
    {
      //port
      port S1APPort S1_MMEeNB_P;
	
	  //global variables
	  var charstring vc_ETS_address := ""; 		//defined in init
	  var charstring vc_ETS_address2 := ""; 	//defined in init
	  var integer vc_ETS_port		:= 3868;  	//defined in init
      var integer vc_ETS_port2		:= 3869;  	//defined in init
      var charstring vc_SUT_address := ""; 		//defined in init
      var integer vc_SUT_port 		:= 3868;  	//defined in init
            
      var S1AP_PDU vc_sendS1AP_PDU ;
      var S1AP_PDU vc_recvS1AP_PDU ;
      var S1AP_PDU vc_recvS1AP_PDUDefault ; //global variable defined to save Dimeter message received within default altstep

      //init of values at component started
      //TODO:

      //general timers
      timer tc_wait  := PX_S1AP_TWAIT;
      timer tc_delay := 0.3;  // delay next Request

      // variables for storing default references
	  var default 	vc_default_s1ap;
	  var default 	vc_def_catchSyncStop_s1ap;

      //var boolean vc_isAF := false;
      var boolean vc_serverStop:=false;
  } // end S1APComponent

} // end module LibS1AP_Interface
 No newline at end of file
+35 −0
Original line number Diff line number Diff line
/**
 *	@author 	STF 519
 *  @version    $Id: $
 *	@desc		This module provides PIXITS used by the test component for S1AP tests.
 */

module LibS1AP_PIXITS
{
	type enumerated TransportProtocol{
	    UDP_E,
	    TCP_E,
	    SCTP_E
	}
	
    group S1AP_PIXIT_Parameters{

      /** @desc	boolean (This is an operator option, not a protocol option),
                  True, if IPv6 addresses are used
      */
      modulepar boolean PX_IPv6 	:= true;
	  
	  /** @desc enumerated (This is an operator option, not a protocol option),
      */
      modulepar TransportProtocol PX_S1AP_TRANSPORT_PROTOCOL := SCTP_E;

	}//group S1AP_PIXIT_Parameters

    group S1AP_Timers{

        /** @desc	float for TWait default value for waiting an operator action
        */
        modulepar float    PX_S1AP_TWAIT:= 30.0;
    }//group S1AP_Timers

} // end module LibS1AP_PIXITS
 No newline at end of file
+370 −0
Original line number Diff line number Diff line
/**
 *    @author     STF 519
 *  @version    $Id: $
 *    @desc        This module provides functions used in S1AP
 */

module LibS1AP_Steps
{
    //LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl {type FncRetCode;
                                          function f_setVerdict;};
    import from LibCommon_BasicTypesAndValues {type UInt32;};
    
    //LibS1AP
    //import from LibS1AP_TypesAndValues all;
    import from LibS1AP_Interface all;
    import from LibS1AP_PIXITS all;
	import from LibS1AP_Templates all;
	
//    import from S1AP_Constants language "ASN.1:1997" all;
//    import from S1AP_CommonDataTypes language "ASN.1:1997" all;
//    import from S1AP_Containers language "ASN.1:1997" all;
//    import from S1AP_IEs language "ASN.1:1997" all;
//    import from S1AP_PDU_Contents language "ASN.1:1997" all;
    import from S1AP_PDU_Descriptions language "ASN.1:1997" all;

    group CommonFunctions{
    
        /**
        *
        * @desc  f_gtZero, return true if value of p_int greater than 0
        * @param p_int - integer value
        */
        function f_gtZero(integer p_int)
        return boolean
        {
            if (p_int > 0){
                return true;
            }
            else{
                return false;
            }
        }
    
        /**
        *
        * @desc  f_Inc, return incremented value of p_int 0
        * @param p_int - integer value
        */
        function f_inc( inout UInt32 p_int)
        return UInt32
        {
            p_int:=p_int+1;
            return p_int;
        }
    
    }//end group CommonFunctions

    group ReceivePDU {

		/**
		 *  @desc    This is a test step that assign common S1AP
		 *  @param
		 */
		 function f_S1APPDU_Get( inout S1AP_PDU p_PDU)
		 runs on S1APComponent {

			 vc_recvS1AP_PDU := p_PDU;
			 
			 if (ischosen(p_PDU.initiatingMessage)){
				 //TODO...
			 }
			 if (ischosen(p_PDU.successfulOutcome)){
				 //TODO...
			 }
			 if (ischosen(p_PDU.unsuccessfulOutcome)){
				  //TODO...
			 }
		 } // end function f_S1APPDU_Get    	
    	
    
        /**
        *
        * @desc receive S1AP PDU
        * @param p_PDU template of the message to be received
        */
        function f_recv_S1AP_PDU(in template S1AP_PDU p_PDU) 
        runs on S1APComponent
        {
            var S1AP_PDU v_PDU;
            tc_wait.start;
            alt
            {
                []S1_MMEeNB_P.receive(p_PDU) -> value v_PDU
                  {
                    tc_wait.stop;
					f_S1APPDU_Get(v_PDU)
                  }
                [] tc_wait.timeout {
                    setverdict(inconc,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***");
                    //Stop the component in case of timeout            
                    all timer.stop;
                    f_componentStop();
                }
            }    
        } // end f_recv_S1AP_PDU
        
        function f_recv_S1AP_initiatingMessage(template (present)InitiatingMessage p_initiatingMessage)
        runs on S1APComponent
        {
            f_recv_S1AP_PDU( {initiatingMessage := p_initiatingMessage})
        }//end f_recv_S1AP_initiatingMessage

        function f_recv_S1AP_successfulOutcome(template (present)SuccessfulOutcome p_successfulOutcome)
        runs on S1APComponent
        {
            f_recv_S1AP_PDU( {successfulOutcome := p_successfulOutcome})
        }//end f_recv_S1AP_successfulOutcome

        function f_recv_S1AP_unsuccessfulOutcome(template (present)UnsuccessfulOutcome p_unsuccessfulOutcome)
        runs on S1APComponent
        {
            f_recv_S1AP_PDU( {unsuccessfulOutcome := p_unsuccessfulOutcome})
        }//end f_recv_S1AP_unsuccessfulOutcome
        
    } // end ReceivePDU

    group SendPDU {
    
        /**
        *  @desc    This is a test step that assign common S1AP
        *  @param
        */
        function f_S1APPDU_Set( inout template (value) S1AP_PDU p_PDU)
        runs on S1APComponent {

            if (ischosen(p_PDU.initiatingMessage)){
                //TODO...
                vc_sendS1AP_PDU:=valueof(p_PDU);
            }
            if (ischosen(p_PDU.successfulOutcome)){
                //TODO...
                vc_sendS1AP_PDU:=valueof(p_PDU);
            }
            if (ischosen(p_PDU.unsuccessfulOutcome)){
                 //TODO...
                 vc_sendS1AP_PDU:=valueof(p_PDU);
            }
        } // end function f_S1APPDU_Set
    
        /**
        *
        * @desc  send S1AP PDU
        * @param p_PDU template of the message to be sent
        */
        function f_send_S1AP_PDU(template (value) S1AP_PDU p_PDU)
        runs on S1APComponent
        {
            f_S1APPDU_Set(p_PDU);
            S1_MMEeNB_P.send(p_PDU);
        }//end f_send_S1APPDU
    
        function f_send_S1AP_initiatingMessage(template (value)InitiatingMessage p_initiatingMessage)
        runs on S1APComponent
        {
            f_send_S1AP_PDU( {initiatingMessage := p_initiatingMessage})
        }//end f_send_S1AP_initiatingMessage
        
        function f_send_S1AP_successfulOutcome(template (value)SuccessfulOutcome p_successfulOutcome)
        runs on S1APComponent
        {
            f_send_S1AP_PDU( {successfulOutcome := p_successfulOutcome})
        }//end f_send_S1AP_successfulOutcome
        
        function f_send_S1AP_unsuccessfulOutcome(template (value)UnsuccessfulOutcome p_unsuccessfulOutcome)
        runs on S1APComponent
        {
            f_send_S1AP_PDU( {unsuccessfulOutcome := p_unsuccessfulOutcome})
        }//end f_send_S1AP_unsuccessfulOutcome 
    
    } // end SendPDU

    group GlobalSteps{
        
        /**
        *  @desc    This is a test step that init S1AP component
        *  @param
        */
        function f_S1AP_Init_Component()
        runs on S1APComponent {
    
        } // end function f_S1AP_Init_Component
        
        /**
        *
        * @desc component termination
        */
        function f_S1AP_terminate_component()
        runs on S1APComponent {
            
            log("component terminated - forced!");
            deactivate;
            stop;
        }
    
        /**
        * @desc component termination
        */
        function f_componentStop()
        runs on S1APComponent {
            
            syncPort.send(m_syncClientStop);
            S1_MMEeNB_P.clear;
            stop;
        }
    
        /**
        *
        * @desc original copied from older LibCommon_VerdictControl
        */
        function f_getVerdict()
        return FncRetCode {
            
            var FncRetCode v_ret := e_error;
               if (getverdict == pass or getverdict == none) {
                    v_ret := e_success;
                }
                return v_ret;
            }    
    
        /**
        * 
        * @desc function waits for particular time before next expected message
        */    
        function f_wait(float p_time)
        runs on S1APComponent {
            
            tc_wait.start(p_time);
            alt {
                [] tc_wait.timeout{}        
            }
        }
    
    }// end group GlobalSteps


    group Preambles {

        group preamble_S1AP{
    
            function f_preambleS1AP_MME()
            runs on S1APComponent {
                //TODO:...        
            }
            
            function f_preambleS1AP_eNB()
            runs on S1APComponent {
                //TODO:...        
            }
    
        }//end group preamble_S1AP

    }// end group Preambles

    group Postambles {

        group postamble_S1AP{
    
            function f_postambleS1AP_MME()
            runs on S1APComponent {
                //TODO:...
            }
            function f_postambleS1AP_eNB()
            runs on S1APComponent {
                //TODO:...
            }
    
        }//end group postamble_S1AP

    } //end group Postambles

    group DefaultsTestStep
    {
    
        altstep a_defaultS1AP()
        runs on S1APComponent
        {
            [] any timer.timeout
             {
                  all timer.stop;
                  if (vc_serverStop==false) {
                      f_selfOrClientSyncAndVerdict("error", e_timeout);
                  }
                  else {
                      stop;
                  }
             }
            [] S1_MMEeNB_P.receive (S1AP_PDU:{initiatingMessage := ?}) -> value vc_recvS1AP_PDUDefault
             {
                   repeat;
             }
            [] S1_MMEeNB_P.receive (S1AP_PDU:{successfulOutcome := ?}) -> value vc_recvS1AP_PDUDefault
             {
                  repeat;
             }
            [] S1_MMEeNB_P.receive (S1AP_PDU:{unsuccessfulOutcome := ?}) -> value vc_recvS1AP_PDUDefault
             {
                  repeat;
             }
            [] S1_MMEeNB_P.receive (S1AP_PDU:?) -> value vc_recvS1AP_PDUDefault
             {
                  if (vc_serverStop==false) {
                      f_selfOrClientSyncAndVerdict("error", e_error);
                  }
                  else {
                      stop;
                  }
             }
            [] S1_MMEeNB_P.receive
             {
                  if (vc_serverStop==false) {
                      f_selfOrClientSyncAndVerdict("error", e_error);
                  }
                  else {
                      stop;
                  }
             }
            [] a_shutdown() {
                // Process temination on error
                log("*** a_defaultS1AP() : Process temination on error ***");
                // Terminate component execution
                stop;
            }
        }//end a_defaultS1AP
        
        altstep a_defaultS1AP_MME()
        runs on S1APComponent
        {
            [] any timer.timeout
             {
                  all timer.stop;
                  if (vc_serverStop==false) {
                      f_selfOrClientSyncAndVerdict("error", e_timeout);
                  }
                  else {
                      stop;
                  }
             }
             //TODO:...
        }//end a_defaultS1AP_MME
        
        altstep a_defaultS1AP_eNB()
        runs on S1APComponent
        {
            [] any timer.timeout
             {
                  all timer.stop;
                  if (vc_serverStop==false) {
                      f_selfOrClientSyncAndVerdict("error", e_timeout);
                  }
                  else {
                      stop;
                  }
             }
             //TODO:...
        }//end a_defaultS1AP_eNB
    
    } // end of group DefaultsTestStep
} // end module LibS1AP_Steps
 No newline at end of file
+210 −0
Original line number Diff line number Diff line
/**
 *	@author 	STF 519
 *  @version    $Id: $
 *	@desc		This module provides Lib S1AP Templates used by the test component for S1AP tests.
 */

module LibS1AP_Templates
{
	import from S1AP_Constants language "ASN.1:1997" all;
	import from S1AP_CommonDataTypes language "ASN.1:1997" all;
	// import from S1AP_Containers language "ASN.1:1997" all;
	import from S1AP_IEs language "ASN.1:1997" all;
	import from S1AP_PDU_Contents language "ASN.1:1997" all;
	import from S1AP_PDU_Descriptions language "ASN.1:1997" all;
	
	import from LibS1AP_Types all;

	group g_S1AP{
		
		group  g_S1AP_PDU{
		
			template S1AP_PDU m_initiatingMessage (ProcedureCode p_procedureCode, anytype p_value):= {
				initiatingMessage := {
					procedureCode := p_procedureCode,
					criticality := reject,
					value_ := p_value
				}
			}
		}//end group g_S1AP_PDU
    	
		group Class1{
			group Send{
    	
				group HandoverPreparation{

					group initiatingMessage{
					}//End group initiatingMessage

					group successfulOutcome{
					}//End group successfulOutcome

					group unsuccessfulOutcome{
					}//End group unsuccessfulOutcome

				}//End group HandoverPreparation
			
				group HandoverResourceAllocation{
    		
				}//End group HandoverResourceAllocation
				
				group ERABSetup{

					//template S1AP_PDU m_initiatingMessage_E_RABSetup(template RecordOf_ProtocolIE p_value) := {
					template InitiatingMessage m_initiatingMessage_E_RABSetup(template RecordOf_ProtocolIE p_value) := {	
						//initiatingMessage := {
							procedureCode := id_E_RABSetup,
							criticality := reject,
							value_ := {RecordOf_ProtocolIE := valueof(p_value)}
						//}
					}
						
				}//End group ERABSetup
				
				//TODO: Other....
			}
    
			group Receive{
    		
				group HandoverPreparation{
    		
				}//End group HandoverPreparation

				group HandoverResourceAllocation{

				}//End group HandoverResourceAllocation
				
				group ERABSetup{
					
					//template S1AP_PDU mw_successfulOutcome_E_RABSetupResponse(template (present) ProcedureCode p_procedureCode := ?,
					//														  template (present) RecordOf_ProtocolIE p_value)
					//	:= {
					template SuccessfulOutcome mw_successfulOutcome_E_RABSetupResponse(template (present) ProcedureCode p_procedureCode := ?,
																								  template (present) RecordOf_ProtocolIE p_value)
											:= {
						//successfulOutcome := {
							procedureCode := p_procedureCode,
							criticality := reject,
							value_ := {RecordOf_ProtocolIE := p_value}
						//}
					}
				}//End group ERABSetup

				//TODO: Other....
    		
			}
		}//End of group Class1
	
		group Class2{
	
		}//End of group Class2
	
	}// End of group g_S1AP
    
	group S1AP_Protocol_IEs{
		group Send_IEs{

		  group E_RAB_IEsend {

			template(value) ProtocolIE m_E_RAB_IE_MME (template(value)MME_UE_S1AP_ID p_value:= 1):= {
				id := S1AP_Constants.id_MME_UE_S1AP_ID,
				criticality := reject,
				value_ := { MME_UE_S1AP_ID := valueof(p_value) }
			}

			template(value) ProtocolIE m_E_RAB_IE_ENB (ENB_UE_S1AP_ID p_value:= 1):= {
				id := S1AP_Constants.id_eNB_UE_S1AP_ID,
				criticality := reject,
				value_ := { ENB_UE_S1AP_ID := p_value }
			}		
			template(value) ProtocolIE m_E_RAB_IE_ERAB (template(value)RecordOf_E_RABToBeSetupItemBearerSUReq p_value := {m_E_RABToBeSetupItemBearerSUReq}):= {
				id := S1AP_Constants.id_E_RABToBeSetupListBearerSUReq,
				criticality := reject,
				value_ := { RecordOf_E_RABToBeSetupItemBearerSUReq := valueof(p_value) }
			}
		  }//end group E_RAB_IEsend

		} // end group Send_IEs
		
		group Receive_IEs{
	
			template ProtocolIE mw_E_RAB_IE_MME(template(present) MME_UE_S1AP_ID p_parm
												 := ?) := {
				id := S1AP_Constants.id_MME_UE_S1AP_ID,
				criticality := ignore,
				value_ := {MME_UE_S1AP_ID := p_parm}
			}

			template ProtocolIE mw_E_RAB_IE_ENB(template(present) ENB_UE_S1AP_ID p_parm
												 := ?) := {
				id := S1AP_Constants.id_eNB_UE_S1AP_ID,
				criticality := ignore,
				value_ := {ENB_UE_S1AP_ID := p_parm}
			}

			template ProtocolIE mw_E_RAB_IE_ERAB 
			  (template(present) RecordOf_E_RABSetupItemBearerSURes p_value := {mw_E_RABSetupItemBearerSURes}):= {
				id := S1AP_Constants.id_E_RABSetupListBearerSURes,
				criticality := ignore,
				value_ := { RecordOf_E_RABSetupItemBearerSURes := p_value }
			}
	
			template ProtocolIE mw_E_RAB_IE_fSUL 
			  (template(present) RecordOf_E_RABItem p_value := {?}):= {
				id := S1AP_Constants.id_E_RABFailedToSetupListBearerSURes,
				criticality := ignore,
				value_ := { RecordOf_E_RABItem := p_value }
			}

		} // end group Receive_IEs

        group g_IEParameters {
			template(value)
			E_RABToBeSetupItemBearerSUReq m_E_RABToBeSetupItemBearerSUReq
			(E_RAB_ID p_e_RAB_ID := 0,
			 template(value) E_RABLevelQoSParameters p_e_RABlevelQoSParameters:=m_e_RABlevelQoSParameters) := {
				e_RAB_ID := p_e_RAB_ID,
				e_RABlevelQoSParameters := valueof(p_e_RABlevelQoSParameters),
				transportLayerAddress := '0'B,
				gTP_TEID := '00000000'O,
				nAS_PDU := '0000'O,
				iE_Extensions := omit
			}
    
			template(value) E_RABLevelQoSParameters m_e_RABlevelQoSParameters (QCI p_qCI := 0):= {
				qCI := p_qCI,
				allocationRetentionPriority := {
					priorityLevel := 0,
					pre_emptionCapability := shall_not_trigger_pre_emption,
					pre_emptionVulnerability := pre_emptable,
					iE_Extensions := omit
				},
				gbrQosInformation := omit,
				iE_Extensions := omit
			}
	
			template(present) E_RABSetupItemBearerSURes mw_E_RABSetupItemBearerSURes (template(present) E_RAB_ID p_e_RAB_ID := ?):=  {
				 e_RAB_ID                        := p_e_RAB_ID,
				 transportLayerAddress           := '?'B,
				 gTP_TEID                        := ?,
				 iE_Extensions                   := *
			 }
	 
			template(present) E_RABItem mw_E_RABItem(template(present) E_RAB_ID
														 p_e_RAB_ID := ?,
													 template(present) Cause p_cause :=
													 ?) := {
				e_RAB_ID := p_e_RAB_ID,cause := p_cause,iE_Extensions := *
			}
        	        
        } // end of group g_IEParameters
		
	}// End of group S1AP_Protocol_IEs

		/** 
	 * @desc Type functions 
	 */
	group functionsForTemplates {
	} // End of group functionsForTemplates

} // end module LibS1AP_Templates
 No newline at end of file
+3 −3
Original line number Diff line number Diff line
/**
 * @desc Types 
 */
module S1AP_Types {
module LibS1AP_Types {

    import from S1AP_Constants language "ASN.1:1997" all;
	import from S1AP_CommonDataTypes language "ASN.1:1997" all;
@@ -11,8 +11,8 @@ module S1AP_Types {
    import from S1AP_PDU_Descriptions language "ASN.1:1997" all;

	    
    type port S1AP_PortType message {inout S1AP_PDU};
    type component MME {port S1AP_PortType eBport}
    //type port S1AP_PortType message {inout S1AP_PDU};
    //type component MME {port S1AP_PortType eBport}

    type record of E_RABToBeSetupItemBearerSUReq RecordOf_E_RABToBeSetupItemBearerSUReq;
    type record of E_RABSetupItemBearerSURes RecordOf_E_RABSetupItemBearerSURes;
Loading