A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
mpi-test-fixtures.cc
Go to the documentation of this file.
1/*
2 * Copyright 2018. Lawrence Livermore National Security, LLC.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 *
17 * Author: Steven Smith <smith84@llnl.gov>
18 */
19
20#include "mpi-test-fixtures.h"
21
22#include "ns3/address.h"
23#include "ns3/inet-socket-address.h"
24#include "ns3/inet6-socket-address.h"
25#include "ns3/packet.h"
26#include "ns3/ptr.h"
27#include "ns3/simulator.h"
28
29#include <mpi.h>
30
31namespace ns3
32{
33
34unsigned long SinkTracer::m_sinkCount = 0;
35unsigned long SinkTracer::m_line = 0;
38
39void
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
48void
50 const ns3::Address& srcAddress,
51 const ns3::Address& destAddress)
52{
54}
55
56void
57SinkTracer::Verify(unsigned long expectedCount)
58{
59 unsigned long globalCount;
60
61#ifdef NS3_MPI
62 MPI_Reduce(&m_sinkCount, &globalCount, 1, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
63#else
64 globalCount = m_sinkCount;
65#endif
66
67 if (expectedCount == globalCount)
68 {
69 RANK0COUT("PASSED\n");
70 }
71 else
72 {
73 RANK0COUT("FAILED Observed sink traces (" << globalCount << ") not equal to expected ("
74 << expectedCount << ")\n");
75 }
76}
77
78std::string
80{
81 std::stringstream ss;
82
84 {
85 ss << InetSocketAddress::ConvertFrom(address).GetIpv4() << ":"
87 }
88 else if (Inet6SocketAddress::IsMatchingType(address))
89 {
90 ss << Inet6SocketAddress::ConvertFrom(address).GetIpv6() << ":"
92 }
93 return ss.str();
94}
95
96} // namespace ns3
a polymophic address class
Definition: address.h:101
static Inet6SocketAddress ConvertFrom(const Address &addr)
Convert the address to a InetSocketAddress.
uint16_t GetPort() const
Get the port.
static bool IsMatchingType(const Address &addr)
If the address match.
Ipv6Address GetIpv6() const
Get the IPv6 address.
static bool IsMatchingType(const Address &address)
Ipv4Address GetIpv4() const
static InetSocketAddress ConvertFrom(const Address &address)
Returns an InetSocketAddress which corresponds to the input Address.
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static void SinkTrace(const ns3::Ptr< const ns3::Packet > packet, const ns3::Address &srcAddress, const ns3::Address &destAddress)
PacketSink receive trace callback.
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 void Init()
PacketSink Init.
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.
Every class exported by the ns3 library is enclosed in the ns3 namespace.