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
std::pair< Ptr< Ipv4 >, uint32_t > Get(uint32_t i) const
NetDeviceContainer m_leftRouterDevices
Keep track of a set of IPv6 interfaces.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4InterfaceContainer m_leftLeafInterfaces
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
NetDeviceContainer Install(NodeContainer c)
void BoundingBox(double ulx, double uly, double lrx, double lry)
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...
#define NS_LOG_COMPONENT_DEFINE(name)
aggregate IP/TCP/UDP functionality to existing Nodes.
static Ipv6Address NextNetwork(const Ipv6Prefix prefix)
Get the next network acoording 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<Node> stored in this container.
~PointToPointDumbbellHelper()
std::vector< std::pair< Ptr< Ipv6 >, uint32_t > >::const_iterator Iterator
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
void Install(std::string nodeName) const
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<Node> 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. It is just a bitmask like Ipv4Mask.
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)
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)
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.