A Discrete-Event Network Simulator
API
epc-test-s1u-uplink.cc
Go to the documentation of this file.
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2007,2008,2009 INRIA, UDCAST
4  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation;
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * The original version of UdpClient is by Amine Ismail
20  * <amine.ismail@sophia.inria.fr> <amine.ismail@udcast.com>
21  * The rest of the code (including modifying UdpClient into
22  * EpsBearerTagUdpClient) is by Nicola Baldo <nbaldo@cttc.es>
23  */
24 
25 
26 
27 #include "ns3/simulator.h"
28 #include "ns3/log.h"
29 #include "ns3/test.h"
30 #include "ns3/point-to-point-epc-helper.h"
31 #include "ns3/epc-enb-application.h"
32 #include "ns3/packet-sink-helper.h"
33 #include "ns3/point-to-point-helper.h"
34 #include "ns3/csma-helper.h"
35 #include "ns3/internet-stack-helper.h"
36 #include "ns3/ipv4-address-helper.h"
37 #include "ns3/inet-socket-address.h"
38 #include "ns3/packet-sink.h"
39 #include <ns3/ipv4-static-routing-helper.h>
40 #include <ns3/ipv4-static-routing.h>
41 #include <ns3/ipv4-interface.h>
42 #include <ns3/mac48-address.h>
43 #include "ns3/seq-ts-header.h"
44 #include "ns3/eps-bearer-tag.h"
45 #include "ns3/arp-cache.h"
46 #include "ns3/boolean.h"
47 #include "ns3/uinteger.h"
48 #include "ns3/config.h"
49 #include "lte-test-entities.h"
50 
51 using namespace ns3;
52 
53 NS_LOG_COMPONENT_DEFINE ("EpcTestS1uUplink");
54 
55 /*
56  * A Udp client. Sends UDP packet carrying sequence number and time
57  * stamp but also including the EpsBearerTag. This tag is normally
58  * generated by the LteEnbNetDevice when forwarding packet in the
59  * uplink. But in this test we don't have the LteEnbNetDevice, because
60  * we test the S1-U interface with simpler devices to make sure it
61  * just works.
62  *
63  */
65 {
66 public:
67  static TypeId
68  GetTypeId (void);
69 
71  EpsBearerTagUdpClient (uint16_t rnti, uint8_t bid);
72 
73  virtual ~EpsBearerTagUdpClient ();
74 
80  void SetRemote (Ipv4Address ip, uint16_t port);
81 
82 protected:
83  virtual void DoDispose (void);
84 
85 private:
86 
87  virtual void StartApplication (void);
88  virtual void StopApplication (void);
89 
90  void ScheduleTransmit (Time dt);
91  void Send (void);
92 
93  uint32_t m_count;
95  uint32_t m_size;
96 
97  uint32_t m_sent;
100  uint16_t m_peerPort;
102 
103  uint16_t m_rnti;
104  uint8_t m_bid;
105 
106 };
107 
108 
109 
110 TypeId
112 {
113  static TypeId tid = TypeId ("ns3::EpsBearerTagUdpClient")
115  .AddConstructor<EpsBearerTagUdpClient> ()
116  .AddAttribute ("MaxPackets",
117  "The maximum number of packets the application will send",
118  UintegerValue (100),
120  MakeUintegerChecker<uint32_t> ())
121  .AddAttribute ("Interval",
122  "The time to wait between packets", TimeValue (Seconds (1.0)),
124  MakeTimeChecker ())
125  .AddAttribute (
126  "RemoteAddress",
127  "The destination Ipv4Address of the outbound packets",
128  Ipv4AddressValue (),
131  .AddAttribute ("RemotePort", "The destination port of the outbound packets",
132  UintegerValue (100),
134  MakeUintegerChecker<uint16_t> ())
135  .AddAttribute ("PacketSize",
136  "Size of packets generated. The minimum packet size is 12 bytes which is the size of the header carrying the sequence number and the time stamp.",
137  UintegerValue (1024),
139  MakeUintegerChecker<uint32_t> ())
140  ;
141  return tid;
142 }
143 
145  : m_rnti (0),
146  m_bid (0)
147 {
149  m_sent = 0;
150  m_socket = 0;
151  m_sendEvent = EventId ();
152 }
153 
155  : m_rnti (rnti),
156  m_bid (bid)
157 {
159  m_sent = 0;
160  m_socket = 0;
161  m_sendEvent = EventId ();
162 }
163 
165 {
167 }
168 
169 void
171 {
172  m_peerAddress = ip;
173  m_peerPort = port;
174 }
175 
176 void
178 {
180  Application::DoDispose ();
181 }
182 
183 void
185 {
187 
188  if (m_socket == 0)
189  {
190  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
191  m_socket = Socket::CreateSocket (GetNode (), tid);
192  m_socket->Bind ();
194  }
195 
197  m_sendEvent = Simulator::Schedule (Seconds (0.0), &EpsBearerTagUdpClient::Send, this);
198 }
199 
200 void
202 {
204  Simulator::Cancel (m_sendEvent);
205 }
206 
207 void
209 {
212  SeqTsHeader seqTs;
213  seqTs.SetSeq (m_sent);
214  Ptr<Packet> p = Create<Packet> (m_size-(8+4)); // 8+4 : the size of the seqTs header
215  p->AddHeader (seqTs);
216 
217  EpsBearerTag tag (m_rnti, m_bid);
218  p->AddPacketTag (tag);
219 
220  if ((m_socket->Send (p)) >= 0)
221  {
222  ++m_sent;
223  NS_LOG_INFO ("TraceDelay TX " << m_size << " bytes to "
224  << m_peerAddress << " Uid: " << p->GetUid ()
225  << " Time: " << (Simulator::Now ()).GetSeconds ());
226 
227  }
228  else
229  {
230  NS_LOG_INFO ("Error while sending " << m_size << " bytes to "
231  << m_peerAddress);
232  }
233 
234  if (m_sent < m_count)
235  {
236  m_sendEvent = Simulator::Schedule (m_interval, &EpsBearerTagUdpClient::Send, this);
237  }
238 }
239 
240 
241 
243 {
244  UeUlTestData (uint32_t n, uint32_t s, uint16_t r, uint8_t l);
245 
246  uint32_t numPkts;
247  uint32_t pktSize;
248  uint16_t rnti;
249  uint8_t bid;
250 
253 };
254 
255  UeUlTestData::UeUlTestData (uint32_t n, uint32_t s, uint16_t r, uint8_t l)
256  : numPkts (n),
257  pktSize (s),
258  rnti (r),
259  bid (l)
260 {
261 }
262 
264 {
265  std::vector<UeUlTestData> ues;
266 };
267 
268 
270 {
271 public:
272  EpcS1uUlTestCase (std::string name, std::vector<EnbUlTestData> v);
273  virtual ~EpcS1uUlTestCase ();
274 
275 private:
276  virtual void DoRun (void);
277  std::vector<EnbUlTestData> m_enbUlTestData;
278 };
279 
280 
281 EpcS1uUlTestCase::EpcS1uUlTestCase (std::string name, std::vector<EnbUlTestData> v)
282  : TestCase (name),
283  m_enbUlTestData (v)
284 {
285 }
286 
288 {
289 }
290 
291 void
293 {
294  Ptr<PointToPointEpcHelper> epcHelper = CreateObject<PointToPointEpcHelper> ();
295  Ptr<Node> pgw = epcHelper->GetPgwNode ();
296 
297  // allow jumbo packets
298  Config::SetDefault ("ns3::CsmaNetDevice::Mtu", UintegerValue (30000));
299  Config::SetDefault ("ns3::PointToPointNetDevice::Mtu", UintegerValue (30000));
300  epcHelper->SetAttribute ("S1uLinkMtu", UintegerValue (30000));
301 
302  // Create a single RemoteHost
303  NodeContainer remoteHostContainer;
304  remoteHostContainer.Create (1);
305  Ptr<Node> remoteHost = remoteHostContainer.Get (0);
306  InternetStackHelper internet;
307  internet.Install (remoteHostContainer);
308 
309  // Create the internet
310  PointToPointHelper p2ph;
311  p2ph.SetDeviceAttribute ("DataRate", DataRateValue (DataRate ("100Gb/s")));
312  NetDeviceContainer internetDevices = p2ph.Install (pgw, remoteHost);
313  Ipv4AddressHelper ipv4h;
314  ipv4h.SetBase ("1.0.0.0", "255.0.0.0");
315  Ipv4InterfaceContainer internetNodesIpIfaceContainer = ipv4h.Assign (internetDevices);
316 
317  // setup default gateway for the remote hosts
318  Ipv4StaticRoutingHelper ipv4RoutingHelper;
319  Ptr<Ipv4StaticRouting> remoteHostStaticRouting = ipv4RoutingHelper.GetStaticRouting (remoteHost->GetObject<Ipv4> ());
320 
321  // hardcoded UE addresses for now
322  remoteHostStaticRouting->AddNetworkRouteTo (Ipv4Address ("7.0.0.0"), Ipv4Mask ("255.255.255.0"), 1);
323 
324 
325 
326  uint16_t udpSinkPort = 1234;
327 
328  NodeContainer enbs;
329  uint16_t cellIdCounter = 0;
330 
331  for (std::vector<EnbUlTestData>::iterator enbit = m_enbUlTestData.begin ();
332  enbit < m_enbUlTestData.end ();
333  ++enbit)
334  {
335  Ptr<Node> enb = CreateObject<Node> ();
336  enbs.Add (enb);
337 
338  // we test EPC without LTE, hence we use:
339  // 1) a CSMA network to simulate the cell
340  // 2) a raw socket opened on the CSMA device to simulate the LTE socket
341 
342  uint16_t cellId = ++cellIdCounter;
343 
344  NodeContainer ues;
345  ues.Create (enbit->ues.size ());
346 
347  NodeContainer cell;
348  cell.Add (ues);
349  cell.Add (enb);
350 
351  CsmaHelper csmaCell;
352  NetDeviceContainer cellDevices = csmaCell.Install (cell);
353 
354  // the eNB's CSMA NetDevice acting as an LTE NetDevice.
355  Ptr<NetDevice> enbDevice = cellDevices.Get (cellDevices.GetN () - 1);
356 
357  // Note that the EpcEnbApplication won't care of the actual NetDevice type
358  epcHelper->AddEnb (enb, enbDevice, cellId);
359 
360  // Plug test RRC entity
362  NS_ASSERT_MSG (enbApp != 0, "cannot retrieve EpcEnbApplication");
363  Ptr<EpcTestRrc> rrc = CreateObject<EpcTestRrc> ();
364  rrc->SetS1SapProvider (enbApp->GetS1SapProvider ());
365  enbApp->SetS1SapUser (rrc->GetS1SapUser ());
366 
367  // we install the IP stack on UEs only
368  InternetStackHelper internet;
369  internet.Install (ues);
370 
371  // assign IP address to UEs, and install applications
372  for (uint32_t u = 0; u < ues.GetN (); ++u)
373  {
374  Ptr<NetDevice> ueLteDevice = cellDevices.Get (u);
375  Ipv4InterfaceContainer ueIpIface = epcHelper->AssignUeIpv4Address (NetDeviceContainer (ueLteDevice));
376 
377  Ptr<Node> ue = ues.Get (u);
378 
379  // disable IP Forwarding on the UE. This is because we use
380  // CSMA broadcast MAC addresses for this test. The problem
381  // won't happen with a LteUeNetDevice.
382  Ptr<Ipv4> ueIpv4 = ue->GetObject<Ipv4> ();
383  ueIpv4->SetAttribute ("IpForward", BooleanValue (false));
384 
385  // tell the UE to route all packets to the GW
386  Ptr<Ipv4StaticRouting> ueStaticRouting = ipv4RoutingHelper.GetStaticRouting (ueIpv4);
387  Ipv4Address gwAddr = epcHelper->GetUeDefaultGatewayAddress ();
388  NS_LOG_INFO ("GW address: " << gwAddr);
389  ueStaticRouting->SetDefaultRoute (gwAddr, 1);
390 
391  // since the UEs in this test use CSMA with IP enabled, and
392  // the eNB uses CSMA but without IP, we fool the UE's ARP
393  // cache into thinking that the IP address of the GW can be
394  // reached by sending a CSMA packet to the broadcast
395  // address, so the eNB will get it.
396  int32_t ueLteIpv4IfIndex = ueIpv4->GetInterfaceForDevice (ueLteDevice);
397  Ptr<Ipv4L3Protocol> ueIpv4L3Protocol = ue->GetObject<Ipv4L3Protocol> ();
398  Ptr<Ipv4Interface> ueLteIpv4Iface = ueIpv4L3Protocol->GetInterface (ueLteIpv4IfIndex);
399  Ptr<ArpCache> ueArpCache = ueLteIpv4Iface->GetArpCache ();
400  ueArpCache->SetAliveTimeout (Seconds (1000));
401  ArpCache::Entry* arpCacheEntry = ueArpCache->Add (gwAddr);
402  arpCacheEntry->SetMacAddresss (Mac48Address::GetBroadcast ());
403  arpCacheEntry->MarkPermanent ();
404 
405 
406  PacketSinkHelper packetSinkHelper ("ns3::UdpSocketFactory",
407  InetSocketAddress (Ipv4Address::GetAny (), udpSinkPort));
408  ApplicationContainer sinkApp = packetSinkHelper.Install (remoteHost);
409  sinkApp.Start (Seconds (1.0));
410  sinkApp.Stop (Seconds (10.0));
411  enbit->ues[u].serverApp = sinkApp.Get (0)->GetObject<PacketSink> ();
412 
413  Time interPacketInterval = Seconds (0.01);
414  Ptr<EpsBearerTagUdpClient> client = CreateObject<EpsBearerTagUdpClient> (enbit->ues[u].rnti, enbit->ues[u].bid);
415  client->SetAttribute ("RemoteAddress", Ipv4AddressValue (internetNodesIpIfaceContainer.GetAddress (1)));
416  client->SetAttribute ("RemotePort", UintegerValue (udpSinkPort));
417  client->SetAttribute ("MaxPackets", UintegerValue (enbit->ues[u].numPkts));
418  client->SetAttribute ("Interval", TimeValue (interPacketInterval));
419  client->SetAttribute ("PacketSize", UintegerValue (enbit->ues[u].pktSize));
420  ue->AddApplication (client);
421  ApplicationContainer clientApp;
422  clientApp.Add (client);
423  clientApp.Start (Seconds (2.0));
424  clientApp.Stop (Seconds (10.0));
425  enbit->ues[u].clientApp = client;
426 
427  uint64_t imsi = u+1;
428  epcHelper->AddUe (ueLteDevice, imsi);
429  epcHelper->ActivateEpsBearer (ueLteDevice, imsi, EpcTft::Default (), EpsBearer (EpsBearer::NGBR_VIDEO_TCP_DEFAULT));
430  enbApp->GetS1SapProvider ()->InitialUeMessage (imsi, (uint16_t) imsi);
431 
432  // need this since all sinks are installed in the same node
433  ++udpSinkPort;
434  }
435 
436  }
437 
438  Simulator::Run ();
439 
440  for (std::vector<EnbUlTestData>::iterator enbit = m_enbUlTestData.begin ();
441  enbit < m_enbUlTestData.end ();
442  ++enbit)
443  {
444  for (std::vector<UeUlTestData>::iterator ueit = enbit->ues.begin ();
445  ueit < enbit->ues.end ();
446  ++ueit)
447  {
448  NS_TEST_ASSERT_MSG_EQ (ueit->serverApp->GetTotalRx (), (ueit->numPkts) * (ueit->pktSize), "wrong total received bytes");
449  }
450  }
451 
452  Simulator::Destroy ();
453 }
454 
455 
456 
457 
458 
463 {
464 public:
466 
468 
470  : TestSuite ("epc-s1u-uplink", SYSTEM)
471 {
472  std::vector<EnbUlTestData> v1;
473  EnbUlTestData e1;
474  UeUlTestData f1 (1, 100, 1, 1);
475  e1.ues.push_back (f1);
476  v1.push_back (e1);
477  AddTestCase (new EpcS1uUlTestCase ("1 eNB, 1UE", v1), TestCase::QUICK);
478 
479 
480  std::vector<EnbUlTestData> v2;
481  EnbUlTestData e2;
482  UeUlTestData f2_1 (1, 100, 1, 1);
483  e2.ues.push_back (f2_1);
484  UeUlTestData f2_2 (2, 200, 2, 1);
485  e2.ues.push_back (f2_2);
486  v2.push_back (e2);
487  AddTestCase (new EpcS1uUlTestCase ("1 eNB, 2UEs", v2), TestCase::QUICK);
488 
489 
490  std::vector<EnbUlTestData> v3;
491  v3.push_back (e1);
492  v3.push_back (e2);
493  AddTestCase (new EpcS1uUlTestCase ("2 eNBs", v3), TestCase::QUICK);
494 
495 
496  EnbUlTestData e3;
497  UeUlTestData f3_1 (3, 50, 1, 1);
498  e3.ues.push_back (f3_1);
499  UeUlTestData f3_2 (5, 1472, 2, 1);
500  e3.ues.push_back (f3_2);
501  UeUlTestData f3_3 (1, 1, 3, 1);
502  e3.ues.push_back (f3_2);
503  std::vector<EnbUlTestData> v4;
504  v4.push_back (e3);
505  v4.push_back (e1);
506  v4.push_back (e2);
507  AddTestCase (new EpcS1uUlTestCase ("3 eNBs", v4), TestCase::QUICK);
508 
509  std::vector<EnbUlTestData> v5;
510  EnbUlTestData e5;
511  UeUlTestData f5 (10, 3000, 1, 1);
512  e5.ues.push_back (f5);
513  v5.push_back (e5);
514  AddTestCase (new EpcS1uUlTestCase ("1 eNB, 10 pkts 3000 bytes each", v5), TestCase::QUICK);
515 
516  std::vector<EnbUlTestData> v6;
517  EnbUlTestData e6;
518  UeUlTestData f6 (50, 3000, 1, 1);
519  e6.ues.push_back (f6);
520  v6.push_back (e6);
521  AddTestCase (new EpcS1uUlTestCase ("1 eNB, 50 pkts 3000 bytes each", v6), TestCase::QUICK);
522 
523  std::vector<EnbUlTestData> v7;
524  EnbUlTestData e7;
525  UeUlTestData f7 (10, 15000, 1, 1);
526  e7.ues.push_back (f7);
527  v7.push_back (e7);
528  AddTestCase (new EpcS1uUlTestCase ("1 eNB, 10 pkts 15000 bytes each", v7), TestCase::QUICK);
529 
530  std::vector<EnbUlTestData> v8;
531  EnbUlTestData e8;
532  UeUlTestData f8 (100, 15000, 1, 1);
533  e8.ues.push_back (f8);
534  v8.push_back (e8);
535  AddTestCase (new EpcS1uUlTestCase ("1 eNB, 100 pkts 15000 bytes each", v8), TestCase::QUICK);
536 
537 }
virtual void DoRun(void)
Implementation to actually run this TestCase.
holds a vector of ns3::Application pointers.
uint32_t AddApplication(Ptr< Application > application)
Associate an Application to this Node.
Definition: node.cc:157
void MarkPermanent(void)
Changes the state of this entry to Permanent.
Definition: arp-cache.cc:414
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:102
an Inet address class
Test that the S1-U interface implementation works correctly.
AttributeValue implementation for Boolean.
Definition: boolean.h:34
ArpCache::Entry * Add(Ipv4Address to)
Add an Ipv4Address to this ARP cache.
Definition: arp-cache.cc:330
holds a vector of std::pair of Ptr and interface index.
void SetDefaultRoute(Ipv4Address nextHop, uint32_t interface, uint32_t metric=0)
Add a default route to the static routing table.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Definition: object.h:462
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
NetDeviceContainer Install(NodeContainer c)
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:257
void Add(ApplicationContainer other)
Append the contents of another ApplicationContainer to the end of this container. ...
void SetMacAddresss(Address macAddress)
Definition: arp-cache.cc:460
EpcS1uUlTestCase(std::string name, std::vector< EnbUlTestData > v)
Ptr< Application > clientApp
A suite of tests to run.
Definition: test.h:1333
void AddPacketTag(const Tag &tag) const
Add a packet tag.
Definition: packet.cc:824
uint64_t GetUid(void) const
Returns the packet's Uid.
Definition: packet.cc:368
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
Definition: assert.h:67
virtual void AddUe(Ptr< NetDevice > ueLteDevice, uint64_t imsi)
Notify the EPC of the existance of a new UE which might attach at a later time.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:201
aggregate IP/TCP/UDP functionality to existing Nodes.
Tag used to define the RNTI and EPS bearer ID for packets interchanged between the EpcEnbApplication ...
NetDeviceContainer Install(Ptr< Node > node) const
This method creates an ns3::CsmaChannel with the attributes configured by CsmaHelper::SetChannelAttri...
Definition: csma-helper.cc:215
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Definition: log.h:244
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
Callback< R > MakeNullCallback(void)
Definition: callback.h:1635
Build a set of PointToPointNetDevice objects.
encapsulates test code
Definition: test.h:1147
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
virtual void DoDispose(void)
Destructor implementation.
uint16_t port
Definition: dsdv-manet.cc:44
Ptr< const AttributeChecker > MakeTimeChecker(const Time min, const Time max)
Helper to make a Time checker with bounded range.
Definition: time.cc:446
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
Class for representing data rates.
Definition: data-rate.h:88
virtual void StartApplication(void)
Application specific startup code.
void SetS1SapUser(EpcEnbS1SapUser *s)
Set the S1 SAP User.
This class contains the specification of EPS Bearers.
Definition: eps-bearer.h:71
Ptr< Application > GetApplication(uint32_t index) const
Retrieve the index-th Application associated to this node.
Definition: node.cc:168
void AddTestCase(TestCase *testCase, enum TestDuration duration)
Add an individual child TestCase to this test suite.
Definition: test.cc:298
The base class for all ns3 applications.
Definition: application.h:60
AttributeValue implementation for Time.
Definition: nstime.h:957
virtual uint8_t ActivateEpsBearer(Ptr< NetDevice > ueLteDevice, uint64_t imsi, Ptr< EpcTft > tft, EpsBearer bearer)
Activate an EPS bearer, setting up the corresponding S1-U tunnel.
std::vector< EnbUlTestData > m_enbUlTestData
Ptr< const AttributeChecker > MakeIpv4AddressChecker(void)
Hold an unsigned integer type.
Definition: uinteger.h:44
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:161
holds a vector of ns3::NetDevice pointers
Ptr< Node > GetNode() const
Definition: application.cc:104
void SetRemote(Ipv4Address ip, uint16_t port)
set the remote address and port
static TypeId GetTypeId(void)
void SetRecvCallback(Callback< void, Ptr< Socket > >)
Notify application when new data is available to be read.
Definition: socket.cc:128
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
void SetS1SapProvider(EpcEnbS1SapProvider *s)
Set the S1 SAP Provider.
EpcEnbS1SapUser * GetS1SapUser()
virtual void AddEnb(Ptr< Node > enbNode, Ptr< NetDevice > lteEnbNetDevice, uint16_t cellId)
Add an eNB to the EPC.
std::vector< UeUlTestData > ues
Packet header for UDP client/server application.
Definition: seq-ts-header.h:36
virtual int Connect(const Address &address)=0
Initiate a connection to a remote host.
Access to the IPv4 forwarding table, interfaces, and configuration.
Definition: ipv4.h:76
void SetAliveTimeout(Time aliveTimeout)
Set the time the entry will be in ALIVE state (unless refreshed)
Definition: arp-cache.cc:136
Implement the IPv4 layer.
virtual Ipv4Address GetUeDefaultGatewayAddress()
virtual int Bind(const Address &address)=0
Allocate a local endpoint for this socket.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
keep track of a set of node pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
EpcEnbS1SapProvider * GetS1SapProvider()
A record that that holds information about an ArpCache entry.
Definition: arp-cache.h:186
AttributeValue implementation for Ipv4Address.
Definition: ipv4-address.h:327
Ptr< const AttributeAccessor > MakeTimeAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: nstime.h:958
UeUlTestData(uint32_t n, uint32_t s, uint16_t r, uint8_t l)
build a set of CsmaNetDevice objects
Definition: csma-helper.h:46
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
Definition: assert.h:90
virtual Ipv4InterfaceContainer AssignUeIpv4Address(NetDeviceContainer ueDevices)
Assign IPv4 addresses to UE devices.
virtual void InitialUeMessage(uint64_t imsi, uint16_t rnti)=0
void AddNetworkRouteTo(Ipv4Address network, Ipv4Mask networkMask, Ipv4Address nextHop, uint32_t interface, uint32_t metric=0)
Add a network route to the static routing table.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:40
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter...
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
This application is installed inside eNBs and provides the bridge functionality for user data plane p...
Ptr< PacketSink > serverApp
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
Ptr< Ipv4StaticRouting > GetStaticRouting(Ptr< Ipv4 > ipv4) const
Try and find the static routing protocol as either the main routing protocol or in the list of routin...
An identifier for simulation events.
Definition: event-id.h:53
Helper class that adds ns3::Ipv4StaticRouting objects.
AttributeValue implementation for DataRate.
Definition: data-rate.h:242
Ptr< Ipv4Interface > GetInterface(uint32_t i) const
Get an interface.
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
void SetSeq(uint32_t seq)
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:895
void SetDefault(std::string name, const AttributeValue &value)
Definition: config.cc:774
virtual void StopApplication(void)
Application specific shutdown code.
virtual int32_t GetInterfaceForDevice(Ptr< const NetDevice > device) const =0
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
Time Now(void)
create an ns3::Time instance which contains the current simulation time.
Definition: simulator.cc:340
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< const AttributeAccessor > MakeIpv4AddressAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: ipv4-address.h:327
Receive and consume traffic generated to an IP address and port.
Definition: packet-sink.h:68
virtual int Send(Ptr< Packet > p, uint32_t flags)=0
Send data (or dummy data) to the remote host.
void SetAttribute(std::string name, const AttributeValue &value)
Set a single attribute, raising fatal errors if unsuccessful.
Definition: object-base.cc:191
bool IsExpired(void) const
This method is syntactic sugar for the ns3::Simulator::IsExpired method.
Definition: event-id.cc:59
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Definition: uinteger.h:45
a unique identifier for an interface.
Definition: type-id.h:58
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Definition: type-id.cc:904
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:257
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const