21 #include "ns3/assert.h"
25 #include "ns3/net-device.h"
26 #include "ns3/loopback-net-device.h"
27 #include "ns3/mac16-address.h"
28 #include "ns3/mac48-address.h"
29 #include "ns3/mac64-address.h"
31 #include "ns3/ipv6-address-generator.h"
32 #include "ns3/traffic-control-helper.h"
33 #include "ns3/traffic-control-layer.h"
91 NS_FATAL_ERROR (
"Did not pass in a valid Mac Address (16, 48 or 64 bits)");
121 for (uint32_t i = 0; i < c.
GetN (); ++i)
126 NS_ASSERT_MSG (node,
"Ipv6AddressHelper::Allocate (): Bad node");
129 NS_ASSERT_MSG (ipv6,
"Ipv6AddressHelper::Allocate (): Bad ipv6");
132 ifIndex = ipv6->GetInterfaceForDevice (device);
135 ifIndex = ipv6->AddInterface (device);
137 NS_ASSERT_MSG (ifIndex >= 0,
"Ipv6AddressHelper::Allocate (): "
138 "Interface index not found");
141 ipv6->SetMetric (ifIndex, 1);
142 ipv6->AddAddress (ifIndex, ipv6Addr);
143 ipv6->SetUp (ifIndex);
145 retval.
Add (ipv6, ifIndex);
151 if (tc && DynamicCast<LoopbackNetDevice> (device) == 0 && tc->GetRootQueueDiscOnDevice (device) == 0)
153 NS_LOG_LOGIC (
"Installing default traffic control configuration");
165 for (uint32_t i = 0; i < c.
GetN (); ++i)
170 NS_ASSERT_MSG (node,
"Ipv6AddressHelper::Allocate (): Bad node");
173 NS_ASSERT_MSG (ipv6,
"Ipv6AddressHelper::Allocate (): Bad ipv6");
175 int32_t ifIndex = ipv6->GetInterfaceForDevice (device);
178 ifIndex = ipv6->AddInterface (device);
180 NS_ASSERT_MSG (ifIndex >= 0,
"Ipv6AddressHelper::Allocate (): "
181 "Interface index not found");
183 ipv6->SetMetric (ifIndex, 1);
185 if (withConfiguration.at (i))
188 ipv6->AddAddress (ifIndex, ipv6Addr);
191 ipv6->SetUp (ifIndex);
192 retval.
Add (ipv6, ifIndex);
198 if (tc && DynamicCast<LoopbackNetDevice> (device) == 0 && tc->GetRootQueueDiscOnDevice (device) == 0)
200 NS_LOG_LOGIC (
"Installing default traffic control configuration");
212 std::vector<bool> withConfiguration;
213 for (uint32_t i = 0; i < c.
GetN (); ++i)
215 withConfiguration.push_back (
false);
217 return Assign (c, withConfiguration);
static bool IsMatchingType(const Address &address)
static Ipv6Address NextAddress(const Ipv6Prefix prefix)
Allocate the next Ipv6Address for the configured network and prefix.
Smart pointer class similar to boost::intrusive_ptr.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
QueueDiscContainer Install(NetDeviceContainer c)
Keep track of a set of IPv6 interfaces.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
Access to the IPv6 forwarding table, interfaces, and configuration.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
Introspection did not find any typical Config paths.
static Mac16Address ConvertFrom(const Address &address)
static bool IsMatchingType(const Address &address)
void Add(Ptr< Ipv6 > ipv6, uint32_t interface)
Add a couple IPv6/interface.
static Ipv6Address MakeAutoconfiguredAddress(Mac16Address addr, Ipv6Address prefix)
Make the autoconfigured IPv6 address with Mac16Address.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
IPv6 address associated with an interface.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
a polymophic address class
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.
holds a vector of ns3::NetDevice pointers
Build a set of QueueDisc objects.
static Mac48Address ConvertFrom(const Address &address)
Every class exported by the ns3 library is enclosed in the ns3 namespace.
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
static Ipv6Address NextNetwork(const Ipv6Prefix prefix)
Get the next network according to the given Ipv6Prefix.
static void Init(const Ipv6Address net, const Ipv6Prefix prefix, const Ipv6Address interfaceId="::1")
Initialise the base network and interfaceId for the generator.
Describes an IPv6 address.
static Mac64Address ConvertFrom(const Address &address)
static bool AddAllocated(const Ipv6Address addr)
Add the Ipv6Address to the list of IPv6 entries.
Describes an IPv6 prefix.
static TrafficControlHelper Default(void)
static bool IsMatchingType(const Address &address)
static Ipv6Address GetNetwork(const Ipv6Prefix prefix)
Get the current network of the given Ipv6Prefix.
Ipv6InterfaceContainer AssignWithoutAddress(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer but do not assign any IPv6 addresses.
Ipv6AddressHelper()
Constructor.
void NewNetwork(void)
Allocate a new network.
Ipv6Address NewAddress(void)
Allocate a new Ipv6Address with interface ID equal to the next one in the underlying generator...