--- a/src/lte/helper/lte-helper.cc Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/helper/lte-helper.cc Wed Nov 28 12:21:56 2012 +0100
@@ -634,6 +634,7 @@
EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters params;
params.rnti = rnti;
params.bearer = bearer;
+ params.bearerId = 0;
params.gtpTeid = 0; // don't care
enbRrc->GetS1SapUser ()->DataRadioBearerSetupRequest (params);
done = true;
--- a/src/lte/model/epc-enb-application.cc Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/model/epc-enb-application.cc Wed Nov 28 12:21:56 2012 +0100
@@ -128,31 +128,6 @@
}
void
-EpcEnbApplication::ErabSetupRequest (uint32_t teid, uint64_t imsi, EpsBearer bearer)
-{
- NS_LOG_FUNCTION (this << teid << imsi);
- // request the RRC to setup a radio bearer
- struct EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters params;
- params.bearer = bearer;
- params.gtpTeid = teid;
- std::map<uint64_t, uint16_t>::iterator it = m_imsiRntiMap.find (imsi);
- NS_ASSERT_MSG (it != m_imsiRntiMap.end (), "unknown IMSI");
- params.rnti = it->second;
- m_s1SapUser->DataRadioBearerSetupRequest (params);
-}
-
-void
-EpcEnbApplication::DoS1BearerSetupRequest (EpcEnbS1SapProvider::S1BearerSetupRequestParameters params)
-{
- NS_LOG_FUNCTION (this << params.rnti << params.bid);
- EpsFlowId_t rbid (params.rnti, params.bid);
- // side effect: create entries if not exist
- m_rbidTeidMap[rbid] = params.gtpTeid;
- m_teidRbidMap[params.gtpTeid] = rbid;
-}
-
-
-void
EpcEnbApplication::DoInitialUeMessage (uint64_t imsi, uint16_t rnti)
{
NS_LOG_FUNCTION (this);
@@ -167,11 +142,29 @@
{
NS_LOG_FUNCTION (this);
- for (std::list<EpcS1apSapEnb::ErabToBeSetupItem>::iterator it = erabToBeSetupList.begin ();
- it != erabToBeSetupList.end ();
- ++it)
+ for (std::list<EpcS1apSapEnb::ErabToBeSetupItem>::iterator erabIt = erabToBeSetupList.begin ();
+ erabIt != erabToBeSetupList.end ();
+ ++erabIt)
{
- ErabSetupRequest (it->sgwTeid, mmeUeS1Id, it->erabLevelQosParameters);
+ // request the RRC to setup a radio bearer
+
+ uint64_t imsi = mmeUeS1Id;
+ std::map<uint64_t, uint16_t>::iterator imsiIt = m_imsiRntiMap.find (imsi);
+ NS_ASSERT_MSG (imsiIt != m_imsiRntiMap.end (), "unknown IMSI");
+ uint16_t rnti = imsiIt->second;
+
+ struct EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters params;
+ params.rnti = rnti;
+ params.bearer = erabIt->erabLevelQosParameters;
+ params.bearerId = erabIt->erabId;
+ params.gtpTeid = erabIt->sgwTeid;
+ m_s1SapUser->DataRadioBearerSetupRequest (params);
+
+ EpsFlowId_t rbid (rnti, erabIt->erabId);
+ // side effect: create entries if not exist
+ m_rbidTeidMap[rbid] = params.gtpTeid;
+ m_teidRbidMap[params.gtpTeid] = rbid;
+
}
}
--- a/src/lte/model/epc-enb-application.h Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/model/epc-enb-application.h Wed Nov 28 12:21:56 2012 +0100
@@ -106,18 +106,7 @@
* \return the ENB side of the S1-AP SAP
*/
EpcS1apSapEnb* GetS1apSapEnb ();
-
- /**
- * This method is triggered after the eNB received
- * a S1-AP message of type E-RAB Setup Request by the MME and will
- * trigger the corresponding RadioBearer creation
- *
- * \param teid the Tunnel Endpoint IDentifier of the S1-bearer to be setup.
- * \param imsi the unique ID of the UE
- * \param bearer the specification of the corresponding EPS bearer
- */
- void ErabSetupRequest (uint32_t teid, uint64_t imsi, EpsBearer bearer);
-
+
/**
* Method to be assigned to the recv callback of the LTE socket. It is called when the eNB receives a data packet from the radio interface that is to be forwarded to the SGW.
*
@@ -151,7 +140,6 @@
private:
// ENB S1 SAP provider methods
- void DoS1BearerSetupRequest (EpcEnbS1SapProvider::S1BearerSetupRequestParameters params);
void DoInitialUeMessage (uint64_t imsi, uint16_t rnti);
// S1-AP SAP ENB methods
--- a/src/lte/model/epc-enb-s1-sap.h Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/model/epc-enb-s1-sap.h Wed Nov 28 12:21:56 2012 +0100
@@ -53,12 +53,6 @@
uint32_t gtpTeid; /**< S1-bearer GTP tunnel endpoint identifier, see 36.423 9.2.1 */
};
- /**
- * Request the setup of a S1 bearer
- *
- */
- virtual void S1BearerSetupRequest (S1BearerSetupRequestParameters params) = 0;
-
/**
*
*
@@ -92,6 +86,7 @@
DataRadioBearer is to be created */
EpsBearer bearer; /**< the characteristics of the bearer to be set
up */
+ uint8_t bearerId; /**< the EPS Bearer Identifier */
uint32_t gtpTeid; /**< S1-bearer GTP tunnel endpoint identifier, see 36.423 9.2.1 */
Ipv4Address transportLayerAddress; /**< IP Address of the SGW, see 36.423 9.2.1 */
};
@@ -119,7 +114,6 @@
MemberEpcEnbS1SapProvider (C* owner);
// inherited from EpcEnbS1SapProvider
- virtual void S1BearerSetupRequest (S1BearerSetupRequestParameters params);
virtual void InitialUeMessage (uint64_t imsi, uint16_t rnti);
private:
@@ -138,12 +132,6 @@
{
}
-template <class C>
-void MemberEpcEnbS1SapProvider<C>::S1BearerSetupRequest (S1BearerSetupRequestParameters params)
-{
- m_owner->DoS1BearerSetupRequest (params);
-}
-
template <class C>
void MemberEpcEnbS1SapProvider<C>::InitialUeMessage (uint64_t imsi, uint16_t rnti)
--- a/src/lte/model/epc-s1ap-sap.h Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/model/epc-s1ap-sap.h Wed Nov 28 12:21:56 2012 +0100
@@ -110,7 +110,7 @@
struct ErabToBeSetupItem
{
- uint16_t erabId;
+ uint8_t erabId;
EpsBearer erabLevelQosParameters;
Ipv4Address transportLayerAddress;
uint32_t sgwTeid;
@@ -133,7 +133,7 @@
*/
struct ErabSwitchedInUplinkItem
{
- uint16_t erabId;
+ uint8_t erabId;
Ipv4Address transportLayerAddress;
uint32_t enbTeid;
};
--- a/src/lte/model/lte-enb-rrc.cc Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/model/lte-enb-rrc.cc Wed Nov 28 12:21:56 2012 +0100
@@ -1101,15 +1101,10 @@
void
LteEnbRrc::DoDataRadioBearerSetupRequest (EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters request)
{
- EpcEnbS1SapProvider::S1BearerSetupRequestParameters response;
+
Ptr<UeManager> ueManager = GetUeManager (request.rnti);
- response.rnti = request.rnti;
- response.bid = ueManager->SetupDataRadioBearer (request.bearer, request.gtpTeid, request.transportLayerAddress);
- response.gtpTeid = request.gtpTeid;
- if (m_s1SapProvider)
- {
- m_s1SapProvider->S1BearerSetupRequest (response);
- }
+ uint8_t bid = ueManager->SetupDataRadioBearer (request.bearer, request.gtpTeid, request.transportLayerAddress);
+ NS_ASSERT_MSG ( request.bearerId == 0 || bid == request.bearerId, "bearer ID mismatch (" << (uint32_t) bid << " != " << (uint32_t) request.bearerId << ", the assumption that ID are allocated in the same way by MME and RRC is not valid any more");
ueManager->ScheduleRrcConnectionReconfiguration ();
}
--- a/src/lte/test/lte-test-entities.cc Wed Nov 28 11:37:28 2012 +0100
+++ b/src/lte/test/lte-test-entities.cc Wed Nov 28 12:21:56 2012 +0100
@@ -657,11 +657,7 @@
void
EpcTestRrc::DoDataRadioBearerSetupRequest (EpcEnbS1SapUser::DataRadioBearerSetupRequestParameters request)
{
- EpcEnbS1SapProvider::S1BearerSetupRequestParameters response;
- response.rnti = request.rnti;
- response.bid = 1;
- response.gtpTeid = request.gtpTeid;
- m_s1SapProvider->S1BearerSetupRequest (response);
+
}