A Discrete-Event Network Simulator
API
mpi-test-fixtures.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright 2018. Lawrence Livermore National Security, LLC.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Steven Smith <smith84@llnl.gov>
19  */
20 
21 #include "mpi-test-fixtures.h"
22 
23 #include "ns3/simulator.h"
24 #include "ns3/packet.h"
25 #include "ns3/inet-socket-address.h"
26 #include "ns3/inet6-socket-address.h"
27 #include "ns3/address.h"
28 #include "ns3/ptr.h"
29 
30 #include "mpi.h"
31 
32 namespace ns3 {
33 
34 unsigned long SinkTracer::m_sinkCount = 0;
35 unsigned long SinkTracer::m_line = 0;
36 int SinkTracer::m_worldRank = -1;
37 int SinkTracer::m_worldSize = -1;
38 
39 void
41 {
42  m_sinkCount = 0;
43  m_line = 0;
44  MPI_Comm_rank(MPI_COMM_WORLD, &m_worldRank);
45  MPI_Comm_size (MPI_COMM_WORLD, &m_worldSize);
46 }
47 
48 
49 void
51  const ns3::Address &srcAddress,
52  const ns3::Address &destAddress)
53 {
54  m_sinkCount++;
55 }
56 
57 void
58 SinkTracer::Verify (unsigned long expectedCount)
59 {
60 
61  unsigned long globalCount;
62 
63 #ifdef NS3_MPI
64  MPI_Reduce(&m_sinkCount, &globalCount, 1, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
65 #else
66  globalCount = m_sinkCount;
67 #endif
68 
69  if (expectedCount == globalCount)
70  {
71  RANK0COUT ("PASSED\n");
72  }
73  else
74  {
75  RANK0COUT ("FAILED Observed sink traces (" << globalCount << ") not equal to expected (" << expectedCount << ")\n");
76  }
77 }
78 
79 std::string
81 {
82  std::stringstream ss;
83 
85  {
87  << ":"
89  }
91  {
93  << ":"
95  }
96  return ss.str ();
97 }
98 
99 } // namespace ns3
a polymophic address class
Definition: address.h:91
static Inet6SocketAddress ConvertFrom(const Address &addr)
Convert the address to a InetSocketAddress.
static bool IsMatchingType(const Address &addr)
If the address match.
Ipv6Address GetIpv6(void) const
Get the IPv6 address.
uint16_t GetPort(void) const
Get the port.
uint16_t GetPort(void) const
Ipv4Address GetIpv4(void) const
static bool IsMatchingType(const Address &address)
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address.
static void SinkTrace(const ns3::Ptr< const ns3::Packet > packet, const ns3::Address &srcAddress, const ns3::Address &destAddress)
PacketSink receive trace callback.
static void Init(void)
PacketSink Init.
static int m_worldRank
MPI CommWorld rank.
static void Verify(unsigned long expectedCount)
Verify the sink trace count observed matches the expected count.
static int m_worldSize
MPI CommWorld size.
static unsigned long m_line
Current output line number for ordering output.
static unsigned long m_sinkCount
Running sum of number of SinkTrace calls observed.
static std::string FormatAddress(const ns3::Address address)
Get the source address and port, as a formatted string.
#define RANK0COUT(x)
Write to std::cout only from rank 0.
Common methods for MPI examples.
address
Definition: first.py:44
Every class exported by the ns3 library is enclosed in the ns3 namespace.