internet-apps: Add PingHelper

This commit is contained in:
Tommaso Pecorella
2022-12-06 13:05:37 -08:00
committed by Tommaso Pecorella
parent c8b260fee3
commit 37190f5db8
3 changed files with 203 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ build_lib(
LIBNAME internet-apps
SOURCE_FILES
helper/dhcp-helper.cc
helper/ping-helper.cc
helper/ping6-helper.cc
helper/radvd-helper.cc
helper/v4ping-helper.cc
@@ -18,6 +19,7 @@ build_lib(
model/v4traceroute.cc
HEADER_FILES
helper/dhcp-helper.h
helper/ping-helper.h
helper/ping6-helper.h
helper/radvd-helper.h
helper/v4ping-helper.h

View File

@@ -0,0 +1,85 @@
/*
* Copyright (c) 2022 Universita' di Firenze, Italy
* Copyright (c) 2008-2009 Strasbourg University (original Ping6 helper)
* Copyright (c) 2008 INRIA (original v4Ping helper)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
*
* Derived from original v4Ping helper (author: Mathieu Lacage)
* Derived from original ping6 helper (author: Sebastien Vincent)
*/
#include "ping-helper.h"
#include "ns3/names.h"
#include "ns3/ping.h"
namespace ns3
{
PingHelper::PingHelper()
{
m_factory.SetTypeId("ns3::Ping");
}
PingHelper::PingHelper(Address remote, Address local)
{
m_factory.SetTypeId("ns3::Ping");
m_factory.Set("Destination", AddressValue(remote));
m_factory.Set("InterfaceAddress", AddressValue(local));
}
void
PingHelper::SetAttribute(std::string name, const AttributeValue& value)
{
m_factory.Set(name, value);
}
ApplicationContainer
PingHelper::Install(Ptr<Node> node) const
{
return ApplicationContainer(InstallPriv(node));
}
ApplicationContainer
PingHelper::Install(std::string nodeName) const
{
Ptr<Node> node = Names::Find<Node>(nodeName);
return ApplicationContainer(InstallPriv(node));
}
ApplicationContainer
PingHelper::Install(NodeContainer c) const
{
ApplicationContainer apps;
for (NodeContainer::Iterator i = c.Begin(); i != c.End(); ++i)
{
apps.Add(InstallPriv(*i));
}
return apps;
}
Ptr<Application>
PingHelper::InstallPriv(Ptr<Node> node) const
{
Ptr<Ping> app = m_factory.Create<Ping>();
node->AddApplication(app);
return app;
}
} // namespace ns3

View File

@@ -0,0 +1,116 @@
/*
* Copyright (c) 2022 Universita' di Firenze, Italy
* Copyright (c) 2008-2009 Strasbourg University (original Ping6 helper)
* Copyright (c) 2008 INRIA (original v4Ping helper)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
*
* Derived from original v4Ping helper (author: Mathieu Lacage)
* Derived from original ping6 helper (author: Sebastien Vincent)
*/
#ifndef PING_HELPER_H
#define PING_HELPER_H
#include "ns3/application-container.h"
#include "ns3/ipv4-address.h"
#include "ns3/ipv6-address.h"
#include "ns3/node-container.h"
#include "ns3/object-factory.h"
#include "ns3/ping.h"
#include <stdint.h>
namespace ns3
{
/**
* \ingroup ping
* \brief Create a ping application and associate it to a node
*
* This class creates one or multiple instances of ns3::Ping and associates
* it/them to one/multiple node(s).
*/
class PingHelper
{
public:
/**
* Create a PingHelper which is used to make life easier for people wanting
* to use ping Applications.
*/
PingHelper();
/**
* Create a PingHelper which is used to make life easier for people wanting
* to use ping Applications.
*
* \param remote The address which should be pinged
* \param local The source address
*/
PingHelper(Address remote, Address local = Address());
/**
* Install a Ping application on each Node in the provided NodeContainer.
*
* \param nodes The NodeContainer containing all of the nodes to get a Ping
* application.
*
* \returns A list of Ping applications, one for each input node
*/
ApplicationContainer Install(NodeContainer nodes) const;
/**
* Install a Ping application on the provided Node. The Node is specified
* directly by a Ptr<Node>
*
* \param node The node to install the Ping application on.
*
* \returns An ApplicationContainer holding the Ping application created.
*/
ApplicationContainer Install(Ptr<Node> node) const;
/**
* Install a Ping application on the provided Node. The Node is specified
* by a string that must have previously been associated with a Node using the
* Object Name Service.
*
* \param nodeName The node to install the Ping application on.
*
* \returns An ApplicationContainer holding the Ping application created.
*/
ApplicationContainer Install(std::string nodeName) const;
/**
* \brief Configure ping applications attribute
* \param name attribute's name
* \param value attribute's value
*/
void SetAttribute(std::string name, const AttributeValue& value);
private:
/**
* \brief Do the actual application installation in the node
* \param node the node
* \returns a Smart pointer to the installed application
*/
Ptr<Application> InstallPriv(Ptr<Node> node) const;
/// Object factory
ObjectFactory m_factory;
};
} // namespace ns3
#endif /* PING_HELPER_H */