27 #include "ns3/point-to-point-dumbbell.h"
28 #include "ns3/constant-position-mobility-model.h"
30 #include "ns3/node-list.h"
31 #include "ns3/point-to-point-net-device.h"
32 #include "ns3/vector.h"
33 #include "ns3/ipv6-address-generator.h"
54 for (uint32_t i = 0; i < nLeftLeaf; ++i)
62 for (uint32_t i = 0; i < nRightLeaf; ++i)
139 for (uint32_t i = 0; i <
LeftCount (); ++i)
170 addressHelper.
SetBase (v6network, prefix);
175 for (uint32_t i = 0; i <
LeftCount (); ++i)
178 addressHelper.
SetBase (v6network, prefix);
194 addressHelper.
SetBase (v6network, prefix);
210 double lrx,
double lry)
231 double xAdder = xDist / 3.0;
232 double thetaL = M_PI / (
LeftCount () + 1.0);
240 loc = CreateObject<ConstantPositionMobilityModel> ();
243 Vector lrl (ulx + xAdder, uly + yDist/2.0, 0);
244 loc->SetPosition (lrl);
251 loc = CreateObject<ConstantPositionMobilityModel> ();
254 Vector rrl (ulx + xAdder * 2, uly + yDist/2.0, 0);
255 loc->SetPosition (rrl);
258 double theta = -M_PI_2 + thetaL;
259 for (uint32_t l = 0; l <
LeftCount (); ++l)
263 if ((LeftCount () % 2) == 1)
265 if (l == (LeftCount () / 2))
274 loc = CreateObject<ConstantPositionMobilityModel> ();
277 Vector lnl (lrl.
x - std::cos (theta) * xAdder,
278 lrl.
y + std::sin (theta) * xAdder, 0);
288 loc->SetPosition (lnl);
292 theta = -M_PI_2 + thetaR;
296 if ((RightCount () % 2) == 1)
298 if (r == (RightCount () / 2))
307 loc = CreateObject<ConstantPositionMobilityModel> ();
310 Vector rnl (rrl.
x + std::cos (theta) * xAdder,
311 rrl.
y + std::sin (theta) * xAdder, 0);
321 loc->SetPosition (rnl);
Ipv4Address GetRightIpv4Address(uint32_t i) const
double x
x coordinate of vector
std::pair< Ptr< Ipv4 >, uint32_t > Get(uint32_t i) const
Get the std::pair of an Ptr and interface stored at the location specified by the index...
NetDeviceContainer m_leftRouterDevices
Keep track of a set of IPv6 interfaces.
holds a vector of std::pair of Ptr and interface index.
Ipv4InterfaceContainer m_leftLeafInterfaces
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
NetDeviceContainer Install(NodeContainer c)
void BoundingBox(double ulx, double uly, double lrx, double lry)
Sets up the node canvas locations for every node in the dumbbell.
void Add(Ptr< Ipv6 > ipv6, uint32_t interface)
Add a couple IPv6/interface.
Mobility model for which the current position does not change once it has been set and until it is se...
aggregate IP/TCP/UDP functionality to existing Nodes.
static Ipv6Address NextNetwork(const Ipv6Prefix prefix)
Get the next network according to the given Ipv6Prefix.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
Ptr< Node > GetRight() const
Build a set of PointToPointNetDevice objects.
NetDeviceContainer m_rightRouterDevices
Ipv4InterfaceContainer m_rightLeafInterfaces
Ipv6InterfaceContainer m_leftLeafInterfaces6
NetDeviceContainer m_leftLeafDevices
Ptr< Node > GetLeft() const
Ipv4InterfaceContainer m_routerInterfaces
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
uint32_t GetN(void) const
Get the number of Ptr stored in this container.
~PointToPointDumbbellHelper()
std::vector< std::pair< Ptr< Ipv6 >, uint32_t > >::const_iterator Iterator
Container Const Iterator for pairs of Ipv6 smart pointer / Interface Index.
Ipv6InterfaceContainer m_rightLeafInterfaces6
void Add(NetDeviceContainer other)
Append the contents of another NetDeviceContainer to the end of this container.
static void Init(const Ipv6Address net, const Ipv6Prefix prefix, const Ipv6Address interfaceId="::1")
Initialise the base network and interfaceId for the generator.
Ipv6InterfaceContainer m_rightRouterInterfaces6
holds a vector of ns3::NetDevice pointers
Ipv6Address GetRightIpv6Address(uint32_t i) const
void AggregateObject(Ptr< Object > other)
uint32_t LeftCount() const
Ipv4InterfaceContainer m_leftRouterInterfaces
NS_LOG_COMPONENT_DEFINE("PointToPointDumbbellHelper")
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
double y
y coordinate of vector
void AssignIpv4Addresses(Ipv4AddressHelper leftIp, Ipv4AddressHelper rightIp, Ipv4AddressHelper routerIp)
Helper class to auto-assign global IPv6 unicast addresses.
Describes an IPv6 address.
uint32_t RightCount() const
Ipv4 addresses are stored in host order in this class.
NetDeviceContainer m_routerDevices
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
Ipv6InterfaceContainer m_leftRouterInterfaces6
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
void InstallStack(InternetStackHelper stack)
Ipv6Address GetLeftIpv6Address(uint32_t i) const
Ipv4InterfaceContainer m_rightRouterInterfaces
Iterator Begin(void) const
Get an iterator which refers to the first pair in the container.
Describes an IPv6 prefix.
Ipv4Address NewNetwork(void)
Increment the network number and reset the IP address counter to the base value provided in the SetBa...
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void AssignIpv6Addresses(Ipv6Address network, Ipv6Prefix prefix)
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void Add(Ipv4InterfaceContainer other)
Concatenate the entries in the other container with ours.
NodeContainer m_rightLeaf
Ipv4Address GetLeftIpv4Address(uint32_t i) const
Ptr< T > GetObject(void) const
PointToPointDumbbellHelper(uint32_t nLeftLeaf, PointToPointHelper leftHelper, uint32_t nRightLeaf, PointToPointHelper rightHelper, PointToPointHelper bottleneckHelper)
Create a PointToPointDumbbellHelper in order to easily create dumbbell topologies using p2p links...
Ipv6Address GetAddress(uint32_t i, uint32_t j) const
Get the address for the specified index.
NetDeviceContainer m_rightLeafDevices
Ipv6InterfaceContainer m_routerInterfaces6
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
static Ipv6Address GetNetwork(const Ipv6Prefix prefix)
Get the current network of the given Ipv6Prefix.