internet-apps: Add PingHelper
This commit is contained in:
committed by
Tommaso Pecorella
parent
c8b260fee3
commit
37190f5db8
@@ -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
|
||||
|
||||
85
src/internet-apps/helper/ping-helper.cc
Normal file
85
src/internet-apps/helper/ping-helper.cc
Normal 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
|
||||
116
src/internet-apps/helper/ping-helper.h
Normal file
116
src/internet-apps/helper/ping-helper.h
Normal 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 */
|
||||
Reference in New Issue
Block a user