/*
 * Copyright 2019-present Infosys Limited
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**************************************
*
* This is an auto generated file.
* Please do not edit this file.
* All edits to be made through template source file
* <TOP-DIR/scripts/SMCodeGen/templates/ctxtManagerTmpls/dataBlock.cpp.tt>
***************************************/
#include "contextManager/dataBlocks.h"

namespace mme
{
	/******************************************************************************
	*******************************************************************************
	*							UEContext
	*******************************************************************************
	******************************************************************************/
	
	/******************************************************************************
	* Constructor
	******************************************************************************/
	UEContext::UEContext(): enbFd_m(0), s1apEnbUeId_m(0), subscriptionStatus_m(0),
	        netAccessMode_m(0), contextID_m(0), rauTauTimer_m(0),
	        accessRestrictionData_m(0), imsi_m(), msisdn_m(),
	        dwnLnkSeqNo_m(0), upLnkSeqNo_m(0), ueState_m(InvalidState),
	        tai_m(), utranCgi_m(), msNetCapab_m(), ueNetCapab_m(),
	        ueSecInfo_m(), ambr_m(), aiaSecInfo_m(),
	        mTmsi_m(0), MmContext_mp(NULL), SessionContext_mp(NULL)
	{
	}
	
	/******************************************************************************
	* Destructor
	******************************************************************************/
	UEContext::~UEContext()
	{
	}
	
	/******************************************************************************
	* sets enbFd
	******************************************************************************/
	void UEContext::setEnbFd( int enbFd_i )
	{
		enbFd_m = enbFd_i;
	}
	
	/******************************************************************************
	* returns enbFd
	******************************************************************************/	
	int UEContext::getEnbFd()
	{
		return enbFd_m;
	}
	/******************************************************************************
	* sets s1apEnbUeId
	******************************************************************************/
	void UEContext::setS1apEnbUeId( int s1apEnbUeId_i )
	{
		s1apEnbUeId_m = s1apEnbUeId_i;
	}
	
	/******************************************************************************
	* returns s1apEnbUeId
	******************************************************************************/	
	int UEContext::getS1apEnbUeId()
	{
		return s1apEnbUeId_m;
	}
	/******************************************************************************
	* sets subscriptionStatus
	******************************************************************************/
	void UEContext::setSubscriptionStatus( int subscriptionStatus_i )
	{
		subscriptionStatus_m = subscriptionStatus_i;
	}
	
	/******************************************************************************
	* returns subscriptionStatus
	******************************************************************************/	
	int UEContext::getSubscriptionStatus()
	{
		return subscriptionStatus_m;
	}
	/******************************************************************************
	* sets netAccessMode
	******************************************************************************/
	void UEContext::setNetAccessMode( int netAccessMode_i )
	{
		netAccessMode_m = netAccessMode_i;
	}
	
	/******************************************************************************
	* returns netAccessMode
	******************************************************************************/	
	int UEContext::getNetAccessMode()
	{
		return netAccessMode_m;
	}
	/******************************************************************************
	* sets contextID
	******************************************************************************/
	void UEContext::setContextID( uint32_t contextID_i )
	{
		contextID_m = contextID_i;
	}
	
	/******************************************************************************
	* returns contextID
	******************************************************************************/	
	uint32_t UEContext::getContextID()
	{
		return contextID_m;
	}
	/******************************************************************************
	* sets rauTauTimer
	******************************************************************************/
	void UEContext::setRauTauTimer( unsigned int rauTauTimer_i )
	{
		rauTauTimer_m = rauTauTimer_i;
	}
	
	/******************************************************************************
	* returns rauTauTimer
	******************************************************************************/	
	unsigned int UEContext::getRauTauTimer()
	{
		return rauTauTimer_m;
	}
	/******************************************************************************
	* sets accessRestrictionData
	******************************************************************************/
	void UEContext::setAccessRestrictionData( unsigned int accessRestrictionData_i )
	{
		accessRestrictionData_m = accessRestrictionData_i;
	}
	
	/******************************************************************************
	* returns accessRestrictionData
	******************************************************************************/	
	unsigned int UEContext::getAccessRestrictionData()
	{
		return accessRestrictionData_m;
	}
	/******************************************************************************
	* sets imsi
	******************************************************************************/
	void UEContext::setImsi( const DigitRegister15& imsi_i )
	{
		imsi_m = imsi_i;
	}
	
	/******************************************************************************
	* returns imsi
	******************************************************************************/	
	const DigitRegister15& UEContext::getImsi()const
	{
		return imsi_m;
	}
	/******************************************************************************
	* sets msisdn
	******************************************************************************/
	void UEContext::setMsisdn( const DigitRegister15& msisdn_i )
	{
		msisdn_m = msisdn_i;
	}
	
	/******************************************************************************
	* returns msisdn
	******************************************************************************/	
	const DigitRegister15& UEContext::getMsisdn()const
	{
		return msisdn_m;
	}
	/******************************************************************************
	* sets dwnLnkSeqNo
	******************************************************************************/
	void UEContext::setDwnLnkSeqNo( unsigned short dwnLnkSeqNo_i )
	{
		dwnLnkSeqNo_m = dwnLnkSeqNo_i;
	}
	
	/******************************************************************************
	* returns dwnLnkSeqNo
	******************************************************************************/	
	unsigned short UEContext::getDwnLnkSeqNo()
	{
		return dwnLnkSeqNo_m;
	}
	/******************************************************************************
	* sets upLnkSeqNo
	******************************************************************************/
	void UEContext::setUpLnkSeqNo( unsigned short upLnkSeqNo_i )
	{
		upLnkSeqNo_m = upLnkSeqNo_i;
	}
	
	/******************************************************************************
	* returns upLnkSeqNo
	******************************************************************************/	
	unsigned short UEContext::getUpLnkSeqNo()
	{
		return upLnkSeqNo_m;
	}

	/******************************************************************************
	* sets ueState
	******************************************************************************/
	void UEContext::setUeState( UE_State_e ueState_i )
	{
		ueState_m = ueState_i;
	}
	
	/******************************************************************************
	* returns ueState
	******************************************************************************/	
	UE_State_e UEContext::getUeState()
	{
		return ueState_m;
	}
	/******************************************************************************
	* sets tai
	******************************************************************************/
	void UEContext::setTai( const Tai& tai_i )
	{
		tai_m = tai_i;
	}
	
	/******************************************************************************
	* returns tai
	******************************************************************************/	
	const Tai& UEContext::getTai()const
	{
		return tai_m;
	}
	/******************************************************************************
	* sets utranCgi
	******************************************************************************/
	void UEContext::setUtranCgi( const Cgi& utranCgi_i )
	{
		utranCgi_m = utranCgi_i;
	}
	
	/******************************************************************************
	* returns utranCgi
	******************************************************************************/	
	const Cgi& UEContext::getUtranCgi()const
	{
		return utranCgi_m;
	}
	/******************************************************************************
	* sets msNetCapab
	******************************************************************************/
	void UEContext::setMsNetCapab( const Ms_net_capab& msNetCapab_i )
	{
		msNetCapab_m = msNetCapab_i;
	}
	
	/******************************************************************************
	* returns msNetCapab
	******************************************************************************/	
	const Ms_net_capab& UEContext::getMsNetCapab()const
	{
		return msNetCapab_m;
	}
	/******************************************************************************
	* sets ueNetCapab
	******************************************************************************/
	void UEContext::setUeNetCapab( const Ue_net_capab& ueNetCapab_i )
	{
		ueNetCapab_m = ueNetCapab_i;
	}
	
	/******************************************************************************
	* returns ueNetCapab
	******************************************************************************/	
	const Ue_net_capab& UEContext::getUeNetCapab()const
	{
		return ueNetCapab_m;
	}
	/******************************************************************************
	* sets ueSecInfo
	******************************************************************************/
	void UEContext::setUeSecInfo( const Secinfo& ueSecInfo_i )
	{
		ueSecInfo_m = ueSecInfo_i;
	}
	
	/******************************************************************************
	* returns ueSecInfo
	******************************************************************************/	
	const Secinfo& UEContext::getUeSecInfo()const
	{
		return ueSecInfo_m;
	}
	/******************************************************************************
	* sets ambr
	******************************************************************************/
	void UEContext::setAmbr( const Ambr& ambr_i )
	{
		ambr_m = ambr_i;
	}
	
	/******************************************************************************
	* returns ambr
	******************************************************************************/	
	const Ambr& UEContext::getAmbr()const
	{
		return ambr_m;
	}
	/******************************************************************************
	* sets aiaSecInfo
	******************************************************************************/
	void UEContext::setAiaSecInfo( const E_utran_sec_vector& aiaSecInfo_i )
	{
		aiaSecInfo_m = aiaSecInfo_i;
	}
	
	/******************************************************************************
	* returns aiaSecInfo
	******************************************************************************/	
	const E_utran_sec_vector& UEContext::getAiaSecInfo()const
	{
		return aiaSecInfo_m;
	}

	/******************************************************************************
	* sets mTmsi
	******************************************************************************/
	void UEContext::setMtmsi( uint32_t mTmsi_i )
	{
		mTmsi_m = mTmsi_i;
	}

	/******************************************************************************
	* returns ambr
	******************************************************************************/
	uint32_t UEContext::getMtmsi()
	{
		return mTmsi_m;
	}
	
	/******************************************************************************
	* sets MmContext
	******************************************************************************/
	void UEContext::setMmContext( MmContext* MmContextp )
	{
		MmContext_mp = MmContextp;
	}
	
	/******************************************************************************
	* returns MmContext
	******************************************************************************/
	MmContext* UEContext::getMmContext()
	{
		return MmContext_mp;
	}
	/******************************************************************************
	* sets SessionContext
	******************************************************************************/
	void UEContext::setSessionContext( SessionContext* SessionContextp )
	{
		SessionContext_mp = SessionContextp;
	}
	
	/******************************************************************************
	* returns SessionContext
	******************************************************************************/
	SessionContext* UEContext::getSessionContext()
	{
		return SessionContext_mp;
	}
	/******************************************************************************
	*******************************************************************************
	*							MmContext
	*******************************************************************************
	******************************************************************************/
	
	/******************************************************************************
	* Constructor
	******************************************************************************/
	MmContext::MmContext(): mmState_m(InvalidState)
	{
	}
	
	/******************************************************************************
	* Destructor
	******************************************************************************/
	MmContext::~MmContext()
	{
	}
	
	/******************************************************************************
	* sets mmState
	******************************************************************************/
	void MmContext::setMmState( EmmState mmState_i )
	{
		mmState_m = mmState_i;
	}
	
	/******************************************************************************
	* returns mmState
	******************************************************************************/	
	EmmState MmContext::getMmState()
	{
		return mmState_m;
	}
	
	/******************************************************************************
	*******************************************************************************
	*							SessionContext
	*******************************************************************************
	******************************************************************************/
	
	/******************************************************************************
	* Constructor
	******************************************************************************/
	SessionContext::SessionContext(): sessionId_m(0), s11SgwCtrlFteid_m(),
	        s5S8PgwCtrlFteid_m(), pdnAddr_m(), accessPtName_m(), apnConfigProfileCtxId_m(),
	        pti_m(0), BearerContext_mp(NULL)
	{
	}
	
	/******************************************************************************
	* Destructor
	******************************************************************************/
	SessionContext::~SessionContext()
	{
	}
	
	/******************************************************************************
	* sets sessionId
	******************************************************************************/
	void SessionContext::setSessionId( uint8_t sessionId_i )
	{
		sessionId_m = sessionId_i;
	}
	
	/******************************************************************************
	* returns sessionId
	******************************************************************************/	
	uint8_t SessionContext::getSessionId()
	{
		return sessionId_m;
	}

	/******************************************************************************
	* sets s11SgwCtrlFteid
	******************************************************************************/
	void SessionContext::setS11SgwCtrlFteid( const Fteid& s11SgwCtrlFteid_i )
	{
		s11SgwCtrlFteid_m = s11SgwCtrlFteid_i;
	}
	
	/******************************************************************************
	* returns s11SgwCtrlFteid
	******************************************************************************/	
	const Fteid& SessionContext::getS11SgwCtrlFteid()const
	{
		return s11SgwCtrlFteid_m;
	}
	/******************************************************************************
	* sets s5S8PgwCtrlFteid
	******************************************************************************/
	void SessionContext::setS5S8PgwCtrlFteid( const Fteid& s5S8PgwCtrlFteid_i )
	{
		s5S8PgwCtrlFteid_m = s5S8PgwCtrlFteid_i;
	}
	
	/******************************************************************************
	* returns s5S8PgwCtrlFteid
	******************************************************************************/	
	const Fteid& SessionContext::getS5S8PgwCtrlFteid()const
	{
		return s5S8PgwCtrlFteid_m;
	}
	/******************************************************************************
	* sets pdnAddr
	******************************************************************************/
	void SessionContext::setPdnAddr( const Paa& pdnAddr_i )
	{
		pdnAddr_m = pdnAddr_i;
	}
	
	/******************************************************************************
	* returns pdnAddr
	******************************************************************************/	
	const Paa& SessionContext::getPdnAddr()const
	{
		return pdnAddr_m;
	}
	/******************************************************************************
	* sets accessPtName
	******************************************************************************/
	void SessionContext::setAccessPtName( const Apn_name& accessPtName_i )
	{
		accessPtName_m = accessPtName_i;
	}
	
	/******************************************************************************
	* returns accessPtName
	******************************************************************************/	
	const Apn_name& SessionContext::getAccessPtName()const
	{
		return accessPtName_m;
	}

	/******************************************************************************
	* sets apnConfigProfileCtxId
	******************************************************************************/
	void SessionContext::setApnConfigProfileCtxId( unsigned int apnConfigProfileCtxId_i )
	{
		apnConfigProfileCtxId_m = apnConfigProfileCtxId_i;
	}
	
	/******************************************************************************
	* returns apnConfigProfileCtxId
	******************************************************************************/	
	unsigned int SessionContext::getApnConfigProfileCtxId()
	{
		return apnConfigProfileCtxId_m;
	}

	/******************************************************************************
	 *  sets pti
	 *******************************************************************************/
	void SessionContext::setPti( uint8_t pti_i )
	{
		pti_m = pti_i;
	}

	/******************************************************************************
	* returns pti
	******************************************************************************/
	uint8_t SessionContext::getPti()
	{
		return pti_m;
	}

	/******************************************************************************
	* sets BearerContext
	******************************************************************************/
	void SessionContext::setBearerContext( BearerContext* BearerContextp )
	{
		BearerContext_mp = BearerContextp;
	}
	
	/******************************************************************************
	* returns BearerContext
	******************************************************************************/
	BearerContext* SessionContext::getBearerContext()
	{
		return BearerContext_mp;
	}
	/******************************************************************************
	*******************************************************************************
	*							BearerContext
	*******************************************************************************
	******************************************************************************/
	
	/******************************************************************************
	* Constructor
	******************************************************************************/
	BearerContext::BearerContext():s1uSgwUserFteid_m(), s5S8PgwUserFteid_m(),
	        s1uEnbUserFteid_m(), bearerId_m(0)
	{
	}
	
	/******************************************************************************
	* Destructor
	******************************************************************************/
	BearerContext::~BearerContext()
	{
	}
	
	/******************************************************************************
	* sets s1uSgwUserFteid
	******************************************************************************/
	void BearerContext::setS1uSgwUserFteid( const Fteid& s1uSgwUserFteid_i )
	{
		s1uSgwUserFteid_m = s1uSgwUserFteid_i;
	}
	
	/******************************************************************************
	* returns s1uSgwUserFteid
	******************************************************************************/	
	const Fteid& BearerContext::getS1uSgwUserFteid()const
	{
		return s1uSgwUserFteid_m;
	}
	/******************************************************************************
	* sets s5S8PgwUserFteid
	******************************************************************************/
	void BearerContext::setS5S8PgwUserFteid( const Fteid& s5S8PgwUserFteid_i )
	{
		s5S8PgwUserFteid_m = s5S8PgwUserFteid_i;
	}
	
	/******************************************************************************
	* returns s5S8PgwUserFteid
	******************************************************************************/	
	const Fteid& BearerContext::getS5S8PgwUserFteid()const
	{
		return s5S8PgwUserFteid_m;
	}
	/******************************************************************************
	* sets s1uEnbUserFteid
	******************************************************************************/
	void BearerContext::setS1uEnbUserFteid( const Fteid& s1uEnbUserFteid_i )
	{
		s1uEnbUserFteid_m = s1uEnbUserFteid_i;
	}
	
	/******************************************************************************
	* returns s1uEnbUserFteid
	******************************************************************************/	
	const Fteid& BearerContext::getS1uEnbUserFteid()const
	{
		return s1uEnbUserFteid_m;
	}
	/******************************************************************************
	* sets bearerId
	******************************************************************************/
	void BearerContext::setBearerId( unsigned char bearerId_i )
	{
		bearerId_m = bearerId_i;
	}
	
	/******************************************************************************
	* returns bearerId
	******************************************************************************/	
	unsigned char BearerContext::getBearerId()
	{
		return bearerId_m;
	}
	
	/******************************************************************************
	*******************************************************************************
	*							MmeProcedureCtxt
	*******************************************************************************
	******************************************************************************/
	
	/******************************************************************************
	* Constructor
	******************************************************************************/
	MmeProcedureCtxt::MmeProcedureCtxt(): ctxtType_m(invalidProcedureType_c),
	        mmeErrorCause_m(noError_c), attachType_m(invalidAttachType_c),
	        pti_m(0), esmInfoTxRequired_m(false)
	{
	    memset(pcoOptions_m, 0, sizeof(pcoOptions_m));
	}
	
	/******************************************************************************
	* Destructor
	******************************************************************************/
	MmeProcedureCtxt::~MmeProcedureCtxt()
	{
	}
	
	/******************************************************************************
	* sets ctxtType
	******************************************************************************/
	void MmeProcedureCtxt::setCtxtType( ProcedureType ctxtType_i )
	{
		ctxtType_m = ctxtType_i;
	}
	
	/******************************************************************************
	* returns ctxtType
	******************************************************************************/	
	ProcedureType MmeProcedureCtxt::getCtxtType()
	{
		return ctxtType_m;
	}
		
	/******************************************************************************
	* sets pcoOptions
	******************************************************************************/
	void MmeProcedureCtxt::setPcoOptions(const unsigned short int* pcoOptions_i )
	{
		memcpy(pcoOptions_m,pcoOptions_i,10);
	}

	/******************************************************************************
	* returns pcoOptions
   	******************************************************************************/
	const unsigned short int* MmeProcedureCtxt::getPcoOptions()const
	{
		return &pcoOptions_m[0];
   	}	

	/******************************************************************************
	* sets esmInfoTxRequired
	******************************************************************************/
	void MmeProcedureCtxt::setEsmInfoTxRequired ( bool esmInfoTxRequired_i )
	{
		esmInfoTxRequired_m = esmInfoTxRequired_i;
	}
	
	/******************************************************************************
	* returns esmInfoTxRequired
	******************************************************************************/	
	bool MmeProcedureCtxt::getEsmInfoTxRequired()
	{
		return esmInfoTxRequired_m;
	}

	/******************************************************************************
	* sets attachType
	******************************************************************************/
	void MmeProcedureCtxt::setAttachType( AttachType attachType_i )
	{
		attachType_m = attachType_i;
	}

	/******************************************************************************
	* returns attachType
	******************************************************************************/
	AttachType MmeProcedureCtxt::getAttachType()
	{
		return attachType_m;
	}	

	/******************************************************************************
	* sets pti
	* ******************************************************************************/
	void MmeProcedureCtxt::setPti( uint8_t pti_i )
	{
		pti_m = pti_i;
	}

	/******************************************************************************
	* returns pti
	******************************************************************************/
	uint8_t MmeProcedureCtxt::getPti()
	{
		return pti_m;
	}

	/******************************************************************************
	* sets mmeErrorCause
	* ******************************************************************************/
	void MmeProcedureCtxt::setMmeErrorCause( MmeErrorCause mmeErrorCause_i )
	{
	    mmeErrorCause_m = mmeErrorCause_i;
	}

	/******************************************************************************
	* returns mmeErrorCause
	*******************************************************************************/
	MmeErrorCause MmeProcedureCtxt::getMmeErrorCause()
	{
	    return mmeErrorCause_m;
	}

	
	/******************************************************************************
	*******************************************************************************
	*                           MmeDetachProcedureCtxt
	*******************************************************************************
	******************************************************************************/

	/******************************************************************************
	* Constructor
	******************************************************************************/
	MmeDetachProcedureCtxt::MmeDetachProcedureCtxt():
	        detachType_m(invalidDetachType_c), cancellationType_m(INVALID_TYPE)
	{
	}

	/******************************************************************************
	* Destructor
	******************************************************************************/
	MmeDetachProcedureCtxt::~MmeDetachProcedureCtxt()
	{
	}

	/******************************************************************************
	* sets detachType
	******************************************************************************/
	void MmeDetachProcedureCtxt::setDetachType( DetachType detachType_i )
	{
		detachType_m = detachType_i;
	}
	
	/******************************************************************************
	* returns detachType
	*******************************************************************************/
	DetachType MmeDetachProcedureCtxt::getDetachType()
	{
		return detachType_m;
	}

	/******************************************************************************
	* sets cancellationType
	*******************************************************************************/
	void MmeDetachProcedureCtxt::setCancellationType( CancellationType cancellationType_i )
	{
	    cancellationType_m = cancellationType_i;
	}

	/******************************************************************************
	* returns cancellationType
	*******************************************************************************/
	CancellationType MmeDetachProcedureCtxt::getCancellationType()
	{
		return cancellationType_m;
	}


	/******************************************************************************
	*******************************************************************************
				MmeSvcReqProcedureContext
	*******************************************************************************
	******************************************************************************/

	/******************************************************************************
	* Constructor
	******************************************************************************/
	MmeSvcReqProcedureCtxt::MmeSvcReqProcedureCtxt(): pagingTrigger_m(none_c),
	        epsBearerId_m(0), arp_m(), ddnSeqNum_m()
	{
	}

	/******************************************************************************
	* Destructor
	******************************************************************************/
	MmeSvcReqProcedureCtxt::~MmeSvcReqProcedureCtxt()
	{
	}
	
	/******************************************************************************
	* sets ddnSeqNo
	*******************************************************************************/
	void MmeSvcReqProcedureCtxt::setDdnSeqNo( uint32_t ddnSeqNum_i )
	{
	    ddnSeqNum_m = ddnSeqNum_i;
	}

	/******************************************************************************
	* returns ddnSeqNo
	*******************************************************************************/
	uint32_t MmeSvcReqProcedureCtxt::getDdnSeqNo()
	{
	    return ddnSeqNum_m;
	}

	/******************************************************************************
	* sets pagingTrigger
	******************************************************************************/
	void MmeSvcReqProcedureCtxt::setPagingTrigger( PagingTrigger pagingTrigger_i )
	{
		pagingTrigger_m = pagingTrigger_i;
	}

	/******************************************************************************
	* returns pagingTrigger
	******************************************************************************/
	PagingTrigger MmeSvcReqProcedureCtxt::getPagingTrigger()
	{
		return pagingTrigger_m;
	}

	/******************************************************************************
	* sets epsBearerId
	******************************************************************************/
	void MmeSvcReqProcedureCtxt::setEpsBearerId( unsigned char epsBearerId_i )
	{
		epsBearerId_m = epsBearerId_i;
	}

	/******************************************************************************
	* returns epsBearerId
	******************************************************************************/
	unsigned char MmeSvcReqProcedureCtxt::getEpsBearerId()
	{
		return epsBearerId_m;
	}


	/******************************************************************************
	* sets arp
	******************************************************************************/
	void MmeSvcReqProcedureCtxt::setArp( const Arp& arp_i )
	{
		arp_m = arp_i;
	}

	/******************************************************************************
	* returns arp
	******************************************************************************/
	const Arp& MmeSvcReqProcedureCtxt::getArp()const
	{
		return arp_m;
	}

	
	/******************************************************************************
	*******************************************************************************
				MmeTauProcedureCtxt
	*******************************************************************************
	******************************************************************************/

	/******************************************************************************
	* Constructor
	******************************************************************************/
	MmeTauProcedureCtxt::MmeTauProcedureCtxt():s1apEnbUeId_m(0), tai_m(), enbFd_m()
	{
	}

	/******************************************************************************
	* Destructor
	******************************************************************************/
	MmeTauProcedureCtxt::~MmeTauProcedureCtxt()
	{
	}
	
	/******************************************************************************
	* sets s1apEnbUeId
	******************************************************************************/
	void MmeTauProcedureCtxt::setS1apEnbUeId( int s1apEnbUeId_i )
	{
		s1apEnbUeId_m = s1apEnbUeId_i;
	}
	
	/******************************************************************************
	* returns s1apEnbUeId
	******************************************************************************/	
	int MmeTauProcedureCtxt::getS1apEnbUeId()
	{
		return s1apEnbUeId_m;
	}
	
	/******************************************************************************
	* sets tai
	******************************************************************************/
	void MmeTauProcedureCtxt::setTai( const Tai& tai_i )
	{
		tai_m = tai_i;
	}
	
	/******************************************************************************
	* returns tai
	******************************************************************************/	
	const Tai& MmeTauProcedureCtxt::getTai()const
	{
		return tai_m;
	}
	
	/******************************************************************************
	* sets enbFd
	******************************************************************************/
	void MmeTauProcedureCtxt::setEnbFd( int enbFd_i )
	{
		enbFd_m = enbFd_i;
	}
	
	/******************************************************************************
	* returns enbFd
	******************************************************************************/	
	int MmeTauProcedureCtxt::getEnbFd()
	{
		return enbFd_m;
	}
	
} // mme
