MME2 changes - Propped commits from openmme/paging branch. Added scripts
for code gen

Change-Id: Ie55032217232214ac8544ca76ea34335205329e4
diff --git a/src/mme-app/contextManager/bearerContextManager.cpp b/src/mme-app/contextManager/bearerContextManager.cpp
new file mode 100644
index 0000000..72fd2cf
--- /dev/null
+++ b/src/mme-app/contextManager/bearerContextManager.cpp
@@ -0,0 +1,52 @@
+ /*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * bearerContextManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/bearerContextManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	BearerContextManager::BearerContextManager(int numOfBlocks): poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	BearerContextManager::~BearerContextManager()
+	{
+	}
+	
+	/******************************************************************************
+	* allocate BearerContext data block
+	******************************************************************************/
+	BearerContext* BearerContextManager::allocateBearerContext()
+	{
+		BearerContext* BearerContext_p = poolManager_m.allocate();
+		return BearerContext_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a BearerContext data block
+	******************************************************************************/
+	void BearerContextManager::deallocateBearerContext(BearerContext* BearerContextp )
+	{
+		poolManager_m.free( BearerContextp );
+	}
+}
diff --git a/src/mme-app/contextManager/dataBlocks.cpp b/src/mme-app/contextManager/dataBlocks.cpp
new file mode 100644
index 0000000..4134d7f
--- /dev/null
+++ b/src/mme-app/contextManager/dataBlocks.cpp
@@ -0,0 +1,970 @@
+/*
+ * 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
diff --git a/src/mme-app/contextManager/mmContextManager.cpp b/src/mme-app/contextManager/mmContextManager.cpp
new file mode 100644
index 0000000..ad702f1
--- /dev/null
+++ b/src/mme-app/contextManager/mmContextManager.cpp
@@ -0,0 +1,52 @@
+ /*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * mmContextManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/mmContextManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	MmContextManager::MmContextManager( int numOfBlocks ):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	MmContextManager::~MmContextManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate MmContext data block
+	******************************************************************************/
+	MmContext* MmContextManager::allocateMmContext()
+	{
+		MmContext* MmContext_p = poolManager_m.allocate();
+		return MmContext_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a MmContext data block
+	******************************************************************************/
+	void MmContextManager::deallocateMmContext(MmContext* MmContextp )
+	{
+		poolManager_m.free( MmContextp );
+	}
+}
diff --git a/src/mme-app/contextManager/mmeDetachProcedureCtxtManager.cpp b/src/mme-app/contextManager/mmeDetachProcedureCtxtManager.cpp
new file mode 100644
index 0000000..d9f6997
--- /dev/null
+++ b/src/mme-app/contextManager/mmeDetachProcedureCtxtManager.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * mmeDetachProcedureCtxtManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/mmeDetachProcedureCtxtManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	MmeDetachProcedureCtxtManager::MmeDetachProcedureCtxtManager(int numOfBlocks):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	MmeDetachProcedureCtxtManager::~MmeDetachProcedureCtxtManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate MmeDetachProcedureCtxt data block
+	******************************************************************************/
+	MmeDetachProcedureCtxt* MmeDetachProcedureCtxtManager::allocateMmeDetachProcedureCtxt()
+	{
+		MmeDetachProcedureCtxt* MmeDetachProcedureCtxt_p = poolManager_m.allocate();
+		return MmeDetachProcedureCtxt_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a MmeDetachProcedureCtxt data block
+	******************************************************************************/
+	void MmeDetachProcedureCtxtManager::deallocateMmeDetachProcedureCtxt(MmeDetachProcedureCtxt* MmeDetachProcedureCtxtp )
+	{
+		poolManager_m.free( MmeDetachProcedureCtxtp );
+	}
+}
diff --git a/src/mme-app/contextManager/mmeProcedureCtxtManager.cpp b/src/mme-app/contextManager/mmeProcedureCtxtManager.cpp
new file mode 100644
index 0000000..84c25dc
--- /dev/null
+++ b/src/mme-app/contextManager/mmeProcedureCtxtManager.cpp
@@ -0,0 +1,52 @@
+ /*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * mmeProcedureCtxtManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/mmeProcedureCtxtManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	MmeProcedureCtxtManager::MmeProcedureCtxtManager(int numOfBlocks):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	MmeProcedureCtxtManager::~MmeProcedureCtxtManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate MmeProcedureCtxt data block
+	******************************************************************************/
+	MmeProcedureCtxt* MmeProcedureCtxtManager::allocateMmeProcedureCtxt()
+	{
+		MmeProcedureCtxt* MmeProcedureCtxt_p = poolManager_m.allocate();
+		return MmeProcedureCtxt_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a MmeProcedureCtxt data block
+	******************************************************************************/
+	void MmeProcedureCtxtManager::deallocateMmeProcedureCtxt(MmeProcedureCtxt* MmeProcedureCtxtp )
+	{
+		poolManager_m.free( MmeProcedureCtxtp );
+	}
+}
diff --git a/src/mme-app/contextManager/mmeSvcReqProcedureCtxtManager.cpp b/src/mme-app/contextManager/mmeSvcReqProcedureCtxtManager.cpp
new file mode 100644
index 0000000..fd70058
--- /dev/null
+++ b/src/mme-app/contextManager/mmeSvcReqProcedureCtxtManager.cpp
@@ -0,0 +1,52 @@
+ /*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * mmeSvcReqProcedureCtxtManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/mmeSvcReqProcedureCtxtManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	MmeSvcReqProcedureCtxtManager::MmeSvcReqProcedureCtxtManager(int numOfBlocks):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	MmeSvcReqProcedureCtxtManager::~MmeSvcReqProcedureCtxtManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate MmeSvcReqProcedureCtxt data block
+	******************************************************************************/
+	MmeSvcReqProcedureCtxt* MmeSvcReqProcedureCtxtManager::allocateMmeSvcReqProcedureCtxt()
+	{
+		MmeSvcReqProcedureCtxt* MmeSvcReqProcedureCtxt_p = poolManager_m.allocate();
+		return MmeSvcReqProcedureCtxt_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a MmeSvcReqProcedureCtxt data block
+	******************************************************************************/
+	void MmeSvcReqProcedureCtxtManager::deallocateMmeSvcReqProcedureCtxt(MmeSvcReqProcedureCtxt* MmeSvcReqProcedureCtxtp )
+	{
+		poolManager_m.free( MmeSvcReqProcedureCtxtp );
+	}
+}
diff --git a/src/mme-app/contextManager/mmeTauProcedureCtxtManager.cpp b/src/mme-app/contextManager/mmeTauProcedureCtxtManager.cpp
new file mode 100644
index 0000000..92149ac
--- /dev/null
+++ b/src/mme-app/contextManager/mmeTauProcedureCtxtManager.cpp
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * mmeTauProcedureCtxtManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/mmeTauProcedureCtxtManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	MmeTauProcedureCtxtManager::MmeTauProcedureCtxtManager(int numOfBlocks):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	MmeTauProcedureCtxtManager::~MmeTauProcedureCtxtManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate MmeTauProcedureCtxt data block
+	******************************************************************************/
+	MmeTauProcedureCtxt* MmeTauProcedureCtxtManager::allocateMmeTauProcedureCtxt()
+	{
+		MmeTauProcedureCtxt* MmeTauProcedureCtxt_p = poolManager_m.allocate();
+		return MmeTauProcedureCtxt_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a MmeTauProcedureCtxt data block
+	******************************************************************************/
+	void MmeTauProcedureCtxtManager::deallocateMmeTauProcedureCtxt(MmeTauProcedureCtxt* MmeTauProcedureCtxtp)
+	{
+		poolManager_m.free( MmeTauProcedureCtxtp );
+	}
+}
diff --git a/src/mme-app/contextManager/sessionContextManager.cpp b/src/mme-app/contextManager/sessionContextManager.cpp
new file mode 100644
index 0000000..0dad793
--- /dev/null
+++ b/src/mme-app/contextManager/sessionContextManager.cpp
@@ -0,0 +1,52 @@
+ /*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * sessionContextManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/sessionContextManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	SessionContextManager::SessionContextManager(int numOfBlocks):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	SessionContextManager::~SessionContextManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate SessionContext data block
+	******************************************************************************/
+	SessionContext* SessionContextManager::allocateSessionContext()
+	{
+		SessionContext* SessionContext_p = poolManager_m.allocate();
+		return SessionContext_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a SessionContext data block
+	******************************************************************************/
+	void SessionContextManager::deallocateSessionContext(SessionContext* SessionContextp )
+	{
+		poolManager_m.free( SessionContextp );
+	}
+}
diff --git a/src/mme-app/contextManager/subsDataGroupManager.cpp b/src/mme-app/contextManager/subsDataGroupManager.cpp
new file mode 100644
index 0000000..b3a5154
--- /dev/null
+++ b/src/mme-app/contextManager/subsDataGroupManager.cpp
@@ -0,0 +1,242 @@
+/*
+ * 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/subsDataGroupManager.cpp.tt>
+ ***************************************/
+#include "contextManager/subsDataGroupManager.h"
+#include "log.h"
+#include "mmeStates/defaultMmeState.h"
+#include <sstream>
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	SubsDataGroupManager::SubsDataGroupManager()
+	{
+			UEContextManagerm_p = NULL;
+			MmContextManagerm_p = NULL;
+			SessionContextManagerm_p = NULL;
+			BearerContextManagerm_p = NULL;
+			MmeProcedureCtxtManagerm_p = NULL;
+			MmeDetachProcedureCtxtManagerm_p = NULL;
+			MmeSvcReqProcedureCtxtManagerm_p = NULL;
+			MmeTauProcedureCtxtManagerm_p = NULL;
+
+			initialize();
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	SubsDataGroupManager::~SubsDataGroupManager()
+	{
+			delete UEContextManagerm_p;
+			delete MmContextManagerm_p;
+			delete SessionContextManagerm_p;
+			delete BearerContextManagerm_p;
+			delete MmeProcedureCtxtManagerm_p;
+			delete MmeDetachProcedureCtxtManagerm_p;
+			delete MmeSvcReqProcedureCtxtManagerm_p;
+			delete MmeTauProcedureCtxtManagerm_p;
+	}
+	
+	/******************************************
+	*  Initializes control block and pool managers
+	******************************************/
+	void SubsDataGroupManager::initialize()
+	{
+		initializeCBStore(8000);
+
+		UEContextManagerm_p = new UEContextManager(8000);
+		MmContextManagerm_p = new MmContextManager(8000);
+		SessionContextManagerm_p = new SessionContextManager(8000);
+		BearerContextManagerm_p = new BearerContextManager(8000);
+		MmeProcedureCtxtManagerm_p = new MmeProcedureCtxtManager(8000);
+		MmeDetachProcedureCtxtManagerm_p = new MmeDetachProcedureCtxtManager(8000);
+		MmeSvcReqProcedureCtxtManagerm_p = new MmeSvcReqProcedureCtxtManager(8000);
+		MmeTauProcedureCtxtManagerm_p = new MmeTauProcedureCtxtManager(8000);
+	}
+	
+	/******************************************************************************
+	* creates and returns static instance
+	******************************************************************************/
+	SubsDataGroupManager* SubsDataGroupManager::Instance()
+	{
+			static SubsDataGroupManager subDataGroupMgr;
+			return &subDataGroupMgr;
+	}
+
+	UEContext* SubsDataGroupManager::getUEContext()
+	{
+		return UEContextManagerm_p->allocateUEContext();
+	}
+	
+	void SubsDataGroupManager::deleteUEContext(UEContext* UEContextp )
+	{
+		UEContextManagerm_p->deallocateUEContext( UEContextp );
+	}
+	
+	MmContext* SubsDataGroupManager::getMmContext()
+	{
+		return MmContextManagerm_p->allocateMmContext();
+	}
+	
+	void SubsDataGroupManager::deleteMmContext(MmContext* MmContextp )
+	{
+		MmContextManagerm_p->deallocateMmContext( MmContextp );
+	}
+	
+	SessionContext* SubsDataGroupManager::getSessionContext()
+	{
+		return SessionContextManagerm_p->allocateSessionContext();
+	}
+	
+	void SubsDataGroupManager::deleteSessionContext(SessionContext* SessionContextp )
+	{
+		SessionContextManagerm_p->deallocateSessionContext( SessionContextp );
+	}
+	
+	BearerContext* SubsDataGroupManager::getBearerContext()
+	{
+		return BearerContextManagerm_p->allocateBearerContext();
+	}
+	
+	void SubsDataGroupManager::deleteBearerContext(BearerContext* BearerContextp )
+	{
+		BearerContextManagerm_p->deallocateBearerContext( BearerContextp );
+	}
+	
+	MmeProcedureCtxt* SubsDataGroupManager::getMmeProcedureCtxt()
+	{
+		return MmeProcedureCtxtManagerm_p->allocateMmeProcedureCtxt();
+	}
+	
+	void SubsDataGroupManager::deleteMmeProcedureCtxt(MmeProcedureCtxt* MmeProcedureCtxtp )
+	{
+		MmeProcedureCtxtManagerm_p->deallocateMmeProcedureCtxt( MmeProcedureCtxtp );
+	}
+
+	MmeDetachProcedureCtxt* SubsDataGroupManager::getMmeDetachProcedureCtxt()
+	{
+		return MmeDetachProcedureCtxtManagerm_p->allocateMmeDetachProcedureCtxt();
+	}
+
+	void SubsDataGroupManager::deleteMmeDetachProcedureCtxt(MmeDetachProcedureCtxt* MmeDetachProcedureCtxtp )
+	{
+		MmeDetachProcedureCtxtManagerm_p->deallocateMmeDetachProcedureCtxt( MmeDetachProcedureCtxtp );
+	}
+
+	MmeSvcReqProcedureCtxt* SubsDataGroupManager::getMmeSvcReqProcedureCtxt()
+	{
+		return MmeSvcReqProcedureCtxtManagerm_p->allocateMmeSvcReqProcedureCtxt();
+	}
+
+	void SubsDataGroupManager::deleteMmeSvcReqProcedureCtxt(MmeSvcReqProcedureCtxt* MmeSvcReqProcedureCtxtp )
+	{
+		MmeSvcReqProcedureCtxtManagerm_p->deallocateMmeSvcReqProcedureCtxt( MmeSvcReqProcedureCtxtp );
+	}
+
+	MmeTauProcedureCtxt* SubsDataGroupManager::getMmeTauProcedureCtxt()
+	{
+		return MmeTauProcedureCtxtManagerm_p->allocateMmeTauProcedureCtxt();
+	}
+	
+	void SubsDataGroupManager::deleteMmeTauProcedureCtxt(MmeTauProcedureCtxt* MmeTauProcedureCtxtp )
+	{
+		MmeTauProcedureCtxtManagerm_p->deallocateMmeTauProcedureCtxt( MmeTauProcedureCtxtp );
+	}
+	
+	/******************************************
+	* Add a imsi as key and cb index as value to imsi_cb_id_map
+	******************************************/
+	int SubsDataGroupManager::addimsikey( DigitRegister15 key, int cb_index )
+	{
+		std::lock_guard<std::mutex> lock(imsi_cb_id_map_mutex);
+
+		int rc = 1;
+		auto itr = imsi_cb_id_map.insert(std::pair<DigitRegister15, int>( key, cb_index ));
+		if (itr.second == false)
+		{
+			rc = -1;
+		}
+		return rc;
+	}
+	
+	/******************************************
+	* Delete a imsi key from imsi_cb_id_map
+	******************************************/		
+	int SubsDataGroupManager::deleteimsikey( DigitRegister15 key )
+	{
+		std::lock_guard<std::mutex> lock(imsi_cb_id_map_mutex);
+
+		return imsi_cb_id_map.erase( key );
+	}
+	
+	/******************************************
+	* Find cb with given imsi from imsi_cb_id_map
+	* returns -1 if not found, else cb index
+	******************************************/	
+	int SubsDataGroupManager::findCBWithimsi( DigitRegister15 key )
+	{
+		std::lock_guard<std::mutex> lock(imsi_cb_id_map_mutex);
+
+		auto itr = imsi_cb_id_map.find( key );
+		if( itr != imsi_cb_id_map.end())
+		{
+			return itr->second;
+		}
+		return -1;
+	}
+
+	/******************************************
+	* Add a mTmsi as key and cb index as value to mTmsi_cb_id_map
+	******************************************/
+	int SubsDataGroupManager::addmTmsikey( uint32_t key, int cb_index )
+	{
+		std::lock_guard<std::mutex> lock(mTmsi_cb_id_map_mutex);
+
+		int rc = 1;
+		auto itr = mTmsi_cb_id_map.insert(std::pair<uint32_t, int>( key, cb_index ));
+		if (itr.second == false)
+		{
+			rc = -1;
+		}
+		return rc;
+	}
+
+	/******************************************
+	* Delete a mTmsi key from mTmsi_cb_id_map
+	******************************************/
+	int SubsDataGroupManager::deletemTmsikey( uint32_t key )
+	{
+		std::lock_guard<std::mutex> lock(mTmsi_cb_id_map_mutex);
+
+		return mTmsi_cb_id_map.erase( key );
+	}
+
+	/******************************************
+	* Find cb with given mTmsi from mTmsi_cb_id_map
+	* returns -1 if not found, else cb index
+	******************************************/
+	int SubsDataGroupManager::findCBWithmTmsi( uint32_t key )
+	{
+		std::lock_guard<std::mutex> lock(mTmsi_cb_id_map_mutex);
+
+		auto itr = mTmsi_cb_id_map.find( key );
+		if( itr != mTmsi_cb_id_map.end())
+		{
+			return itr->second;
+		}
+		return -1;
+	}
+}
diff --git a/src/mme-app/contextManager/uEContextManager.cpp b/src/mme-app/contextManager/uEContextManager.cpp
new file mode 100644
index 0000000..62362bc
--- /dev/null
+++ b/src/mme-app/contextManager/uEContextManager.cpp
@@ -0,0 +1,52 @@
+ /*
+ * Copyright 2019-present Infosys Limited
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */ 
+/******************************************************************************
+ * uEContextManager.cpp
+ * 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/blockPoolManager.cpp.tt>
+ ******************************************************************************/
+
+#include "memPoolManager.h"
+#include "contextManager/dataBlocks.h"
+#include "contextManager/uEContextManager.h"
+
+using namespace cmn::memPool;
+
+namespace mme
+{
+	/******************************************************************************
+	* Constructor
+	******************************************************************************/
+	UEContextManager::UEContextManager(int numOfBlocks):poolManager_m(numOfBlocks)
+	{
+	}
+	
+	/******************************************************************************
+	* Destructor
+	******************************************************************************/
+	UEContextManager::~UEContextManager()
+	{
+	}
+	
+	/******************************************************************************
+	* Allocate UEContext data block
+	******************************************************************************/
+	UEContext* UEContextManager::allocateUEContext()
+	{
+		UEContext* UEContext_p = poolManager_m.allocate();
+		return UEContext_p;
+	}
+	
+	/******************************************************************************
+	* Deallocate a UEContext data block
+	******************************************************************************/
+	void UEContextManager::deallocateUEContext(UEContext* UEContextp )
+	{
+		poolManager_m.free( UEContextp );
+	}
+}