From 4b6a1ce6006b169f3f3db1fae2728303bd927d35 Mon Sep 17 00:00:00 2001 From: Manuel Requena Date: Wed, 20 Jul 2011 14:10:36 +0200 Subject: [PATCH 1/2] RLC SAP --- src/lte/model/lte-rlc-sap.cc | 33 ++++++++ src/lte/model/lte-rlc-sap.h | 148 +++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 src/lte/model/lte-rlc-sap.cc create mode 100644 src/lte/model/lte-rlc-sap.h diff --git a/src/lte/model/lte-rlc-sap.cc b/src/lte/model/lte-rlc-sap.cc new file mode 100644 index 000000000..6ab5a4401 --- /dev/null +++ b/src/lte/model/lte-rlc-sap.cc @@ -0,0 +1,33 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Manuel Requena + */ + +#include "ns3/lte-rlc-sap.h" + +namespace ns3 { + +LteRlcSapProvider::~LteRlcSapProvider () +{ +} + +LteRlcSapUser::~LteRlcSapUser () +{ +} + +} // namespace ns3 diff --git a/src/lte/model/lte-rlc-sap.h b/src/lte/model/lte-rlc-sap.h new file mode 100644 index 000000000..0f76b6163 --- /dev/null +++ b/src/lte/model/lte-rlc-sap.h @@ -0,0 +1,148 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Manuel Requena + */ + +#ifndef LTE_RLC_SAP_H +#define LTE_RLC_SAP_H + +#include "ns3/packet.h" + +namespace ns3 { + +/** + * Service Access Point (SAP) offered by the UM-RLC and AM-RLC entities to the PDCP entity + * See 3GPP 36.322 Radio Link Control (RLC) protocol specification + * + * This is the RLC SAP Provider + * (i.e. the part of the SAP that contains the RLC methods called by the PDCP) + */ +class LteRlcSapProvider +{ +public: + virtual ~LteRlcSapProvider (); + + /** + * Parameters for LteRlcSapProvider::TransmitPdcpPdu + */ + struct TransmitPdcpPduParameters + { + Ptr pdcpPdu; /**< the PDCP PDU */ + uint16_t rnti; /**< the C-RNTI identifying the UE */ + uint8_t lcid; /**< the logical channel id corresponding to the sending RLC instance */ + }; + + /** + * Send a PDCP PDU to the RLC for transmission + * This method is to be called + * when upper PDCP entity has a PDCP PDU ready to send + */ + virtual void TransmitPdcpPdu (TransmitPdcpPduParameters params) = 0; +}; + + +/** + * Service Access Point (SAP) offered by the UM-RLC and AM-RLC entities to the PDCP entity + * See 3GPP 36.322 Radio Link Control (RLC) protocol specification + * + * This is the RLC SAP User + * (i.e. the part of the SAP that contains the PDCP methos called by the RLC) + */ +class LteRlcSapUser +{ +public: + virtual ~LteRlcSapUser (); + + /** + * Called by the RLC entity to notify the PDCP entity of the reception of a new PDCP PDU + * + * \param p the PDCP PDU + */ + virtual void ReceivePdcpPdu (Ptr p) = 0; +}; + +/////////////////////////////////////// + +template +class LteRlcSpecificLteRlcSapProvider : public LteRlcSapProvider +{ +public: + LteRlcSpecificLteRlcSapProvider (C* rlc); + + // Interface implemented from LteRlcSapProvider + virtual void TransmitPdcpPdu (TransmitPdcpPduParameters params); + +private: + LteRlcSpecificLteRlcSapProvider (); + C* m_rlc; +}; + +template +LteRlcSpecificLteRlcSapProvider::LteRlcSpecificLteRlcSapProvider (C* rlc) + : m_rlc (rlc) +{ +} + +template +LteRlcSpecificLteRlcSapProvider::LteRlcSpecificLteRlcSapProvider () +{ +} + +template +void LteRlcSpecificLteRlcSapProvider::TransmitPdcpPdu (TransmitPdcpPduParameters params) +{ + m_rlc->DoTransmitPdcpPdu (params.pdcpPdu); +} + +/////////////////////////////////////// + +template +class LteRlcSpecificLteRlcSapUser : public LteRlcSapUser +{ +public: + LteRlcSpecificLteRlcSapUser (C* pdcp); + + // Interface implemented from LteRlcSapUser + virtual void ReceivePdcpPdu (Ptr p); + +private: + LteRlcSpecificLteRlcSapUser (); + C* m_pdcp; +}; + +template +LteRlcSpecificLteRlcSapUser::LteRlcSpecificLteRlcSapUser (C* pdcp) + : m_pdcp (pdcp) +{ +} + +template +LteRlcSpecificLteRlcSapUser::LteRlcSpecificLteRlcSapUser () +{ +} + +template +void LteRlcSpecificLteRlcSapUser::ReceivePdcpPdu (Ptr p) +{ + m_pdcp->DoReceivePdcpPdu (p); +} + + +} // namespace ns3 + +#endif // LTE_RLC_SAP_H From a1b52efc557a0f1d2527063d52d0a6ebb405808b Mon Sep 17 00:00:00 2001 From: Manuel Requena Date: Wed, 20 Jul 2011 16:22:00 +0200 Subject: [PATCH 2/2] PDCP SAP --- src/lte/model/lte-pdcp-sap.cc | 33 ++++++++ src/lte/model/lte-pdcp-sap.h | 148 ++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 src/lte/model/lte-pdcp-sap.cc create mode 100644 src/lte/model/lte-pdcp-sap.h diff --git a/src/lte/model/lte-pdcp-sap.cc b/src/lte/model/lte-pdcp-sap.cc new file mode 100644 index 000000000..8da25ebd0 --- /dev/null +++ b/src/lte/model/lte-pdcp-sap.cc @@ -0,0 +1,33 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Manuel Requena + */ + +#include "ns3/lte-pdcp-sap.h" + +namespace ns3 { + +LtePdcpSapProvider::~LtePdcpSapProvider () +{ +} + +LtePdcpSapUser::~LtePdcpSapUser () +{ +} + +} // namespace ns3 diff --git a/src/lte/model/lte-pdcp-sap.h b/src/lte/model/lte-pdcp-sap.h new file mode 100644 index 000000000..8fefe88f8 --- /dev/null +++ b/src/lte/model/lte-pdcp-sap.h @@ -0,0 +1,148 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Manuel Requena + */ + +#ifndef LTE_PDCP_SAP_H +#define LTE_PDCP_SAP_H + +#include "ns3/packet.h" + +namespace ns3 { + +/** + * Service Access Point (SAP) offered by the PDCP entity to the RRC entity + * See 3GPP 36.323 Packet Data Convergence Protocol (PDCP) specification + * + * This is the PDCP SAP Provider + * (i.e. the part of the SAP that contains the PDCP methods called by the RRC) + */ +class LtePdcpSapProvider +{ +public: + virtual ~LtePdcpSapProvider (); + + /** + * Parameters for LtePdcpSapProvider::TransmitRrcPdu + */ + struct TransmitRrcPduParameters + { + Ptr rrcPdu; /**< the RRC PDU */ + uint16_t rnti; /**< the C-RNTI identifying the UE */ + uint8_t lcid; /**< the logical channel id corresponding to the sending RLC instance */ + }; + + /** + * Send a RRC PDU to the RDCP for transmission + * This method is to be called + * when upper RRC entity has a RRC PDU ready to send + */ + virtual void TransmitRrcPdu (TransmitRrcPduParameters params) = 0; +}; + + +/** + * Service Access Point (SAP) offered by the PDCP entity to the RRC entity + * See 3GPP 36.323 Packet Data Convergence Protocol (PDCP) specification + * + * This is the PDCP SAP User + * (i.e. the part of the SAP that contains the RRC methods called by the PDCP) + */ +class LtePdcpSapUser +{ +public: + virtual ~LtePdcpSapUser (); + + /** + * Called by the PDCP entity to notify the RRC entity of the reception of a new RRC PDU + * + * \param p the RRC PDU + */ + virtual void ReceiveRrcPdu (Ptr p) = 0; +}; + +/////////////////////////////////////// + +template +class LtePdcpSpecificLtePdcpSapProvider : public LtePdcpSapProvider +{ +public: + LtePdcpSpecificLtePdcpSapProvider (C* pdcp); + + // Interface implemented from LtePdcpSapProvider + virtual void TransmitRrcPdu (TransmitRrcPduParameters params); + +private: + LtePdcpSpecificLtePdcpSapProvider (); + C* m_pdcp; +}; + +template +LtePdcpSpecificLtePdcpSapProvider::LtePdcpSpecificLtePdcpSapProvider (C* pdcp) + : m_pdcp (pdcp) +{ +} + +template +LtePdcpSpecificLtePdcpSapProvider::LtePdcpSpecificLtePdcpSapProvider () +{ +} + +template +void LtePdcpSpecificLtePdcpSapProvider::TransmitRrcPdu (TransmitRrcPduParameters params) +{ + m_pdcp->DoTransmitRrcPdu (params.rrcPdu); +} + +/////////////////////////////////////// + +template +class LtePdcpSpecificLtePdcpSapUser : public LtePdcpSapUser +{ +public: + LtePdcpSpecificLtePdcpSapUser (C* rrc); + + // Interface implemented from LtePdcpSapUser + virtual void ReceiveRrcPdu (Ptr p); + +private: + LtePdcpSpecificLtePdcpSapUser (); + C* m_rrc; +}; + +template +LtePdcpSpecificLtePdcpSapUser::LtePdcpSpecificLtePdcpSapUser (C* rrc) + : m_rrc (rrc) +{ +} + +template +LtePdcpSpecificLtePdcpSapUser::LtePdcpSpecificLtePdcpSapUser () +{ +} + +template +void LtePdcpSpecificLtePdcpSapUser::ReceiveRrcPdu (Ptr p) +{ + m_rrc->DoReceiveRrcPdu (p); +} + + +} // namespace ns3 + +#endif // LTE_PDCP_SAP_H