new LTE module release by the LENA project

2,165 views
Skip to first unread message

Nicola Baldo

unread,
Jan 23, 2013, 1:31:09 PM1/23/13
to ns-developers, ns-3-users

Hi all,

we'd like to announce a new release of the LTE module by the LENA
project available at http://lena.cttc.es/hg/lena/

This release includes the following new features:

- MIMO model
- HARQ model integrated with error model
- Control Channel and Reference Signals models
- MAC Random Access model with protocol interference model
for preamble collisions
- RRC implementation with new UE and ENB state machines and
ASN.1-encoded RRC PDUs sent over Signaling Radio Bearers
- RLC TM model
- MME, S1-AP and S11 logical models
- X2 implementation supporting handover and SON primitives
- additional KPIs: RSRP & SINR traces, PHY tx/rx traces,
SRB stats
- several bug fixes

The details of all the new features are described in the documentation,
which is available in html format here:
http://lena.cttc.es/manual/

and in PDF format here:
http://iptechwiki.cttc.es/images/e/e3/Lte-sim-doc.pdf


Feedback welcome!

Best Regards,

the CTTC LENA team
Nicola Baldo
Marco Miozzo
Manuel Requena
Lluis Parcerisa

Konstantinos

unread,
Jan 26, 2013, 3:29:46 PM1/26/13
to ns-3-...@googlegroups.com
Hi Nicola,

one question, is this LTE module portable to ns-3.16 just by copying the LTE folder, or there are other changes in other modules/core of ns-3 as well?

regards,
Konstantinos

Nicola Baldo

unread,
Jan 28, 2013, 5:39:26 AM1/28/13
to ns-3-...@googlegroups.com
I think no ns-3 module is meant to be portable across ns-3 versions by just copying its folder...

That said, in the LENA tree there are no changes to modules other than LTE. Well, there was some on the spectrum model but I think it has already been merged with ns-3.16.
So what you could do is to use mercurial and merge the LENA tree with the ns-3.16 tree. There will be some merge conflicts to solve.

valerio...@gmail.com

unread,
Jan 28, 2013, 11:00:33 AM1/28/13
to ns-3-...@googlegroups.com, ns-developers
Hi Nicola,
I am having a problem related to the management of uplink transmissions in LTE.
I am using the version of ns3 http://lena.cttc.es/hg/lena/rev/ba61cb7864db.
I am trying to set a scenario LTE+EPC where the LTE user equipments trasmit UDP traffic towards a remote host ( 1 eNb and N UE).  
I found that when the number of UE is larger than 20, I obtain this message of error:

msg="too many UEs (41) for current SRS periodicity 40, consider increasing the value of ns3::LteEnbRrc::SrsPeriodicity", file=../src/lte/model/lte-enb-rrc.cc, line=1829
terminate called without an active exception

Do you know why I have this problem?

Regards

Valerio

Vedran Miletić

unread,
Jan 28, 2013, 1:11:04 PM1/28/13
to Nicola Baldo, ns-developers, ns-3-users
Hi Nicola,

congratulations on this milestone. What are the plans, if any, for
merging this into mainline ns-3?

Regards,
Vedran

2013/1/23 Nicola Baldo <nba...@cttc.es>:

Tyron Bonsu

unread,
Jan 30, 2013, 11:24:48 AM1/30/13
to ns-3-...@googlegroups.com, ns-developers
Brilliant update. I've just merged the changes into my local ns-3.16 repository, looking good. Glad to see handover functionality


On Wednesday, January 23, 2013 6:31:09 PM UTC, Nicola Baldo wrote:

kcy7...@gmail.com

unread,
Jan 31, 2013, 7:47:40 AM1/31/13
to ns-3-...@googlegroups.com, ns-developers
hi, everyone

    I download the M5 release using this command:

  
    then I build using the following command:

    ./waf -d debug --enable-examples --enable-tests configure
    ./waf 

    The ns-3 system can be build successfully.

    My question is that when I type this command:

    ./test.py -c core

    It show that

    *** glibc detected *** /home/ee720a/LENA/lena/build/utils/ns3-dev-test-runner-debug: corrupted double-linked list: 0x08ff91a8 ***

    Why can't I run test.py?

    Can someone solve my question?

    Thanks.

Tyron Bonsu於 2013年1月31日星期四UTC+8上午12時24分48秒寫道:

mrcd...@gmail.com

unread,
Jan 31, 2013, 11:35:11 AM1/31/13
to ns-3-...@googlegroups.com, ns-developers
Hi Nicola,

first of all congratulations about the great work on the new release of the LTE module.
The handover functionality is really something i was looking for and that i was hardly trying to implement
myself on the old release.
Now in my project i can use specific algorithms to attach Ues to specific Enbs during the simulation.
About that I just want to point out the fact that in a scenario with many users and enbs (distant ~1000 m)
there are some issues concerning the "ConnectionTimeout" method of LteEnbRrc. In fact with many handovers
a "RemoveUe" method could happen while the Ue is in "HANDOVER_JOINING" state, just before the enb could access to its m_UeMap,
causing errors.
In my case I found a solution adjusting the value of "maxConnectionDelay" in the UeManager::DoStart () method,
have I done right?

Regards,
Marco 

Il giorno mercoledì 23 gennaio 2013 19:31:09 UTC+1, Nicola Baldo ha scritto:

Giovanna Garcia

unread,
Jan 31, 2013, 12:11:43 PM1/31/13
to ns-3-...@googlegroups.com
Hi Nicola,
I tried now to merge the new LENA on ns3-16, and I had need to modify some things on many files, but for the being time all things ok.
=D

Regards,
Giovanna


--
You received this message because you are subscribed to the Google Groups "ns-3-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ns-3-users+...@googlegroups.com.
To post to this group, send email to ns-3-...@googlegroups.com.



--
-------------------------------------------------------
   _     [GGarciaBas @ mail ~] $ uname --information 
  °v°     > Giovanna Garcia
 /(_)\    > Student at the Universidade Tecnológica Federal do Paraná
  ^ ^     > +55 45 9931-3158 (TIM)

 SEJA LIVRE!!
-------------------------------------------------------

Nicola Baldo

unread,
Feb 1, 2013, 10:17:54 AM2/1/13
to ns-3-...@googlegroups.com, ns-developers


On Thursday, January 31, 2013 1:47:40 PM UTC+1, kcy7...@gmail.com wrote:
    My question is that when I type this command:

    ./test.py -c core

    It show that

    *** glibc detected *** /home/ee720a/LENA/lena/build/utils/ns3-dev-test-runner-debug: corrupted double-linked list: 0x08ff91a8 ***

    Why can't I run test.py?

    Can someone solve my question?


no idea, sorry. These tests work ok on all the machine that we tested.

Nicola Baldo

unread,
Feb 1, 2013, 10:19:31 AM2/1/13
to ns-3-...@googlegroups.com, ns-developers


On Monday, January 28, 2013 5:00:33 PM UTC+1, valerio...@gmail.com wrote:
I found that when the number of UE is larger than 20, I obtain this message of error:

msg="too many UEs (41) for current SRS periodicity 40, consider increasing the value of ns3::LteEnbRrc::SrsPeriodicity", file=../src/lte/model/lte-enb-rrc.cc, line=1829
terminate called without an active exception

Do you know why I have this problem?


Yes, both the reason and the solution are explained in the error message that you reported....


Nicola Baldo

unread,
Feb 1, 2013, 11:04:14 AM2/1/13
to ns-3-...@googlegroups.com


On Thursday, January 31, 2013 5:35:11 PM UTC+1, mrcd...@gmail.com wrote:
I just want to point out the fact that in a scenario with many users and enbs (distant ~1000 m)
there are some issues concerning the "ConnectionTimeout" method of LteEnbRrc. In fact with many handovers
a "RemoveUe" method could happen while the Ue is in "HANDOVER_JOINING" state, just before the enb could access to its m_UeMap,
causing errors.
In my case I found a solution adjusting the value of "maxConnectionDelay" in the UeManager::DoStart () method,
have I done right?

It could be that if the cell is overloaded then it takes a longer times for UEs to finalize the handover. In this case, your workaround would make sense.

Nicola Baldo

unread,
Feb 1, 2013, 11:10:13 AM2/1/13
to ns-3-...@googlegroups.com

One generic request: can you please post questions on one thread per topic? Having all these different questions in a single thread is very messy.

Julien Boite

unread,
Feb 27, 2013, 8:41:24 AM2/27/13
to ns-3-...@googlegroups.com
Hi Nicola,

First of all, thanks to all the LENA project members for their job and the new functionalities coming with this last release. And thank you for annoucning it!
I'm very interested in running simulations for multiple LTE networks scenarios, and I have one general question (that, I hope, matches the topic!): in addition to announcing the new functionalities coming with the latest release, could you please give more detail on ongoing/future developments?
In particular, I would like to know if ongoing/future developments include the implementation of the S1 handover. If the answer is "yes", have you got an idea about the timescale?.

Thanks you for providing such useful (for me, at least!) information.

Julien

coderc...@gmail.com

unread,
Mar 14, 2013, 6:34:52 PM3/14/13
to ns-3-...@googlegroups.com
Hi all,

I have recently been working on LENA that is merged with NS-3.16.  However, I have now tried to use the new LENA release.  I am trying to run the same simulation, but it seems I cannot obtain the same results.  Below is a minimized version of the code that I am using, which is based on lena-simple-epc.cc.  Basically I want to send packets with MyApp Class and receive them (so that eventually I can read the contents.)  The packets are being created but they do not leave the remote host.  Have there been modifications that are affecting this behaviour please?


#include "ns3/lte-helper.h"
#include "ns3/epc-helper.h"
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/internet-module.h"
#include "ns3/mobility-module.h"
#include "ns3/lte-module.h"
#include "ns3/applications-module.h"
#include "ns3/point-to-point-helper.h"
#include "ns3/config-store.h"
//#include "ns3/gtk-config-store.h"

using namespace ns3;
using namespace std; 


class MyApp : public Application 
{
public:
  MyApp ();
  virtual ~MyApp();

  void Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate);

private:
  virtual void StartApplication (void);
  virtual void StopApplication (void);

  void ScheduleTx (void);
  void SendPacket (void);


  Ptr<Socket>     m_socket;
  Address         m_peer;
  uint32_t        m_packetSize;
  uint32_t        m_nPackets;
  DataRate        m_dataRate;
  EventId         m_sendEvent;
  bool            m_running;
  uint32_t        m_packetsSent;
};



MyApp::MyApp ()
  : m_socket (0), 
    m_peer (), 
    m_packetSize (0), 
    m_nPackets (0), 
    m_dataRate (0), 
    m_sendEvent (), 
    m_running (false), 
    m_packetsSent (0)
{
}


MyApp::~MyApp()
{
  m_socket = 0;   // deleting socket


void
MyApp::Setup (Ptr<Socket> socket, Address address, uint32_t packetSize, uint32_t nPackets, DataRate dataRate)
{
  m_socket = socket;
  m_peer = address;
  m_packetSize = packetSize;
  m_nPackets = nPackets;
  m_dataRate = dataRate;
}



void
MyApp::StartApplication (void)
{
  GetTypeId();
  m_running = true;
  m_packetsSent = 0;
  m_socket->Bind ();                             //binds socket on the local side of the connection
  m_socket->Connect (m_peer);            //establish a connection at address m_peer
  SendPacket ();                                   //send packets
}

void MyApp::StopApplication (void)
{
   m_running = false;
  if (m_sendEvent.IsRunning ())
    {
      Simulator::Cancel (m_sendEvent);
    }

  // close socket to tear down connection
  if (m_socket)
    {
      m_socket->Close ();                       
    }
}


void MyApp::SendPacket (void)
{
  for (int i=0; i<5; i++)
  {
    Ptr<Packet> p = Create<Packet> ();

        m_socket->Send (p);
        if (++m_packetsSent < m_nPackets)
        {
          ScheduleTx ();
        }
  }
}


void MyApp::ScheduleTx (void)
{
  if (m_running) 
    {
      Time tNext (Seconds (m_packetSize * 8 / static_cast<double> (m_dataRate.GetBitRate ())));
      m_sendEvent = Simulator::Schedule (tNext, &MyApp::SendPacket, this);
    } 
}

//MAIN

void dstSocketRecv (Ptr<Socket> socket);

int main (int argc, char *argv[])
{

  uint16_t numberOfNodes = 2;
  double distance = 60.0;
  double interPacketInterval = 100;

  // Command line arguments
  CommandLine cmd;
  cmd.AddValue("numberOfNodes", "Number of eNodeBs + UE pairs", numberOfNodes);
  cmd.AddValue("simTime", "Total duration of the simulation [s])", simTime);
  cmd.AddValue("distance", "Distance between eNBs [m]", distance);
  cmd.AddValue("interPacketInterval", "Inter packet interval [ms])", interPacketInterval);
  cmd.Parse(argc, argv);

  Ptr<LteHelper> lteHelper = CreateObject<LteHelper> ();
  Ptr<EpcHelper>  epcHelper = CreateObject<EpcHelper> ();
  lteHelper->SetEpcHelper (epcHelper);
  lteHelper->SetSchedulerType("ns3::PfFfMacScheduler");

  ConfigStore inputConfig;
  inputConfig.ConfigureDefaults();

  cmd.Parse(argc, argv);

  Ptr<Node> pgw = epcHelper->GetPgwNode ();

   // Create a single RemoteHost
  NodeContainer remoteHostContainer;
  remoteHostContainer.Create (1);
  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
  InternetStackHelper internet;
  internet.Install (remoteHostContainer);

  // Create the Internet
  PointToPointHelper p2ph;
  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
  p2ph.SetDeviceAttribute ("Mtu", UintegerValue (1500));
  p2ph.SetChannelAttribute ("Delay", TimeValue (Seconds (0.010)));
  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
  Ipv4AddressHelper ipv4h;
  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
  Ipv4InterfaceContainer internetIpIfaces = ipv4h.Assign (internetDevices);
  // interface 0 is localhost, 1 is the p2p device
  //Ipv4Address remoteHostAddr = internetIpIfaces.GetAddress (1);

  Ipv4StaticRoutingHelper ipv4RoutingHelper;
  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.0.0.0"), 1);

  NodeContainer ueNodes;
  NodeContainer enbNodes;
  enbNodes.Create(numberOfNodes);
  ueNodes.Create(numberOfNodes);

  // Install Mobility Model
  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
  for (uint16_t i = 0; i < numberOfNodes; i++)
    {
      positionAlloc->Add (Vector(distance * i, 0, 0));
    }
  MobilityHelper mobility;
  mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
  mobility.SetPositionAllocator(positionAlloc);
  mobility.Install(enbNodes);
  mobility.Install(ueNodes);

  // Install LTE Devices to the nodes
  NetDeviceContainer enbLteDevs = lteHelper->InstallEnbDevice (enbNodes);
  NetDeviceContainer ueLteDevs = lteHelper->InstallUeDevice (ueNodes);

  // Install the IP stack on the UEs
  internet.Install (ueNodes);
  Ipv4InterfaceContainer ueIpIface;
  ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevs));
 
 // Assign IP address to UEs, and install applications
  for (uint32_t u = 0; u < ueNodes.GetN (); ++u)
    {
      Ptr<Node> ueNode = ueNodes.Get (u);
      // Set the default gateway for the UE
      Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueNode->GetObject<Ipv4> ());
      ueStaticRouting->SetDefaultRoute (epcHelper->GetUeDefaultGatewayAddress (), 1);
    }

  // Attach one UE per eNodeB
  for (uint16_t i = 0; i < numberOfNodes; i++)
      {
        lteHelper->Attach (ueLteDevs.Get(i), enbLteDevs.Get(i));
        // side effect: the default EPS bearer will be activated
      }


  // APPLICATION

  uint16_t dlPort = 1234;
  Address sinkAddress (InetSocketAddress (ueIpIface.GetAddress (0), dlPort));

  //sender

  Ptr<Socket> ns3UdpSocket = Socket::CreateSocket (remoteHostContainer.Get (0), UdpSocketFactory::GetTypeId ());
  Ptr<MyApp> app = CreateObject<MyApp> ();
  app->Setup (ns3UdpSocket, sinkAddress, 1, 1, DataRate ("1Mbps"));
  remoteHostContainer.Get (0)->AddApplication (app);   

  app->SetStartTime (Seconds (0));  
  app->SetStopTime (Seconds (100));
 

  //receiver

  Ptr<Socket> dstSocket = Socket::CreateSocket (ueNodes.Get(0), TypeId::LookupByName ("ns3::UdpSocketFactory"));
  uint16_t dstport = 1234;
  Ipv4Address dstaddr ("7.0.0.2");
  InetSocketAddress dst = InetSocketAddress (dstaddr, dstport);
  dstSocket->Bind (dst);
  dstSocket->SetRecvCallback (MakeCallback (&dstSocketRecv));


  Simulator::Stop (Seconds (100));

  lteHelper->EnableTraces ();
  
  Simulator::Run();

  Simulator::Destroy();
  return 0;

}


void 
dstSocketRecv (Ptr<Socket> socket)
{
  // accessing packet
  Address from;
  Ptr<Packet> packet = socket->RecvFrom (from);
  packet->RemoveAllPacketTags ();
  packet->RemoveAllByteTags ();
  InetSocketAddress address = InetSocketAddress::ConvertFrom (from);
  NS_LOG_INFO ("Destination Received " << packet->GetSize () << " bytes from " << address.GetIpv4 ());

}


Any insight would be appreciated.  Thank you for your time


Nicola Baldo

unread,
Mar 15, 2013, 5:13:38 PM3/15/13
to ns-3-...@googlegroups.com
Hi Julien,

we are currently working on UE measurements and automatic handover triggering at the eNB. Unfortunately we do not plan to add the S1-based handover functionality, at least not in the short term. Anyway, patches welcome!

Regards,

Nicola

Codey Codey

unread,
Mar 15, 2013, 5:39:32 PM3/15/13
to ns-3-...@googlegroups.com
Hi Nicola,

Any insight on the posted program regarding MyApp? Thank you.  


--
You received this message because you are subscribed to a topic in the Google Groups "ns-3-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ns-3-users/5V7y4WicRdk/unsubscribe?hl=en.
To unsubscribe from this group and all its topics, send an email to ns-3-users+...@googlegroups.com.

chand

unread,
Mar 17, 2013, 7:15:07 PM3/17/13
to ns-3-...@googlegroups.com
Hi,

I had faced a similar problem.
The issue is  in ns-3.15 & 3.16 versions Attach() function of LteHelper do not call ActivateEpsBearer() fn to activate default bearer.
You have to do it explicitly..

Hence add this line after you Attach() all UEs to eNodeB- 
  lteHelper->ActivateEpsBearer(ueLteDevs, EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT), EpcTft::Default ());

Julien Boite

unread,
Mar 25, 2013, 5:36:31 AM3/25/13
to ns-3-...@googlegroups.com
Hi Nicola,

Thanks a lot for your feedback on ongoing developments for LENA.
I am running LTE scenarios step by step, and I will probably have to develop S1 handover in several weeks (or months). This could be a contribution to the LENA project.
I will use the other topic ("LTE S1 handover in LENA") to ask for help if needed, or more generally to communicate about my developments.

Regards,

Julien

Daniele Azzarelli

unread,
Apr 30, 2013, 4:51:43 AM4/30/13
to ns-3-...@googlegroups.com, ns-developers
Hi, I have to merge LENA module in NS3 3.16, I have seen you have already made it, can you suggest me any steps to do it?. Kip in mind that I'm a newbie in NS3 and Mercurial. I thank you in advantage, it is really important for me to execute this merging. Bye

Mohammed KASRI

unread,
Jun 23, 2013, 6:45:28 PM6/23/13
to ns-3-...@googlegroups.com, ns-developers
Hi Nicola
 
I'm working on X2 handover decision in LTE, I want to know when the source eNB decides to do handover and what kind of messages they transferred in this phase ?

Nicola Baldo

unread,
Jul 3, 2013, 7:49:38 AM7/3/13
to ns-3-...@googlegroups.com, ns-developers


On Monday, June 24, 2013 12:45:28 AM UTC+2, Mohammed KASRI wrote:
I'm working on X2 handover decision in LTE, I want to know when the source eNB decides to do handover and what kind of messages they transferred in this phase ?

Mohammed KASRI

unread,
Jul 3, 2013, 8:23:20 AM7/3/13
to ns-3-...@googlegroups.com, ns-developers

Thanks
Reply all
Reply to author
Forward
0 new messages