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 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author: Steven Smith <smith84@llnl.gov>
7 */
8
9#include "mpi-test-fixtures.h"
10
11#include "ns3/address.h"
12#include "ns3/inet-socket-address.h"
13#include "ns3/inet6-socket-address.h"
14#include "ns3/packet.h"
15#include "ns3/ptr.h"
16#include "ns3/simulator.h"
17
18#include <mpi.h>
19
20namespace ns3
21{
22
23unsigned long SinkTracer::m_sinkCount = 0;
24unsigned long SinkTracer::m_line = 0;
27
28void
30{
31 m_sinkCount = 0;
32 m_line = 0;
33 MPI_Comm_rank(MPI_COMM_WORLD, &m_worldRank);
34 MPI_Comm_size(MPI_COMM_WORLD, &m_worldSize);
35}
36
37void
39 const ns3::Address& srcAddress,
40 const ns3::Address& destAddress)
41{
43}
44
45void
46SinkTracer::Verify(unsigned long expectedCount)
47{
48 unsigned long globalCount;
49
50#ifdef NS3_MPI
51 MPI_Reduce(&m_sinkCount, &globalCount, 1, MPI_UNSIGNED_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
52#else
53 globalCount = m_sinkCount;
54#endif
55
56 if (expectedCount == globalCount)
57 {
58 RANK0COUT("PASSED\n");
59 }
60 else
61 {
62 RANK0COUT("FAILED Observed sink traces (" << globalCount << ") not equal to expected ("
63 << expectedCount << ")\n");
64 }
65}
66
67std::string
69{
70 std::stringstream ss;
71
73 {
74 ss << InetSocketAddress::ConvertFrom(address).GetIpv4() << ":"
76 }
77 else if (Inet6SocketAddress::IsMatchingType(address))
78 {
79 ss << Inet6SocketAddress::ConvertFrom(address).GetIpv6() << ":"
81 }
82 return ss.str();
83}
84
85} // namespace ns3
a polymophic address class
Definition address.h:90
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.
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.