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
static unsigned long m_line
static int m_worldRank
Ipv6Address GetIpv6(void) const
Get the IPv6 address.
static unsigned long m_sinkCount
Common methods for MPI examples.
static void Init(void)
PacketSink receive trace callback.
a polymophic address class
Definition: address.h:90
static void Verify(unsigned long expectedCount)
Verify the sink trace count observed matches the expected count.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address.
address
Definition: first.py:44
uint16_t GetPort(void) const
static int m_worldSize
static std::string FormatAddress(const ns3::Address address)
Get the source address and port, as a formatted string.
static Inet6SocketAddress ConvertFrom(const Address &addr)
Convert the address to a InetSocketAddress.
static bool IsMatchingType(const Address &addr)
If the address match.
uint16_t GetPort(void) const
Get the port.
static void SinkTrace(const ns3::Ptr< const ns3::Packet > packet, const ns3::Address &srcAddress, const ns3::Address &destAddress)
PacketSink receive trace callback.
static bool IsMatchingType(const Address &address)
Ipv4Address GetIpv4(void) const
#define RANK0COUT(x)
Write to std::cout only from rank 0.