11#include "ns3/assert.h" 
   12#include "ns3/ipv6-address-generator.h" 
   15#include "ns3/loopback-net-device.h" 
   16#include "ns3/mac16-address.h" 
   17#include "ns3/mac48-address.h" 
   18#include "ns3/mac64-address.h" 
   19#include "ns3/net-device-queue-interface.h" 
   20#include "ns3/net-device.h" 
   23#include "ns3/traffic-control-helper.h" 
   24#include "ns3/traffic-control-layer.h" 
   50                  "Ipv6AddressHelper: network address and prefix mismatch: " << 
m_network << 
" " 
   54                  "Ipv6AddressHelper: base address and prefix mismatch: " << base << 
" " 
 
   69                  "Ipv6AddressHelper::SetBase(): network address and prefix mismatch: " 
   73                  "Ipv6AddressHelper::SetBase(): base address and prefix mismatch: " << base << 
" " 
 
  111        NS_FATAL_ERROR(
"Did not pass in a valid Mac Address (8, 16, 48 or 64 bits)");
 
 
  135                  "Ipv6AddressHelper::NewAddress(): Too many hosts in the network: " 
  138    for (uint8_t i = 0; i < 16; i++)
 
  140        addrBuf[i] = netBuf[i] | hostBuf[i];
 
  147    sum = 
static_cast<uint16_t
>(hostBuf[15]) + 1;
 
  149    for (uint8_t index = 0; index < 15; index++)
 
  151        if (sum > hostBuf[15 - index])
 
  153            sum = 
static_cast<uint16_t
>(hostBuf[14 - index]) + 1;
 
  154            hostBuf[14 - index] += 1;
 
 
  179    for (uint8_t index = 0; index < 16; index++)
 
  182        if (index == prefixIndex)
 
  184            addBuf[index] = (1 << prefixPosition);
 
  189    for (uint8_t index = 0; index < 16; index++)
 
  191        sum[index] = 
static_cast<uint16_t
>(netBuf[index]) + 
static_cast<uint16_t
>(addBuf[index]);
 
  192        netBuf[index] += addBuf[index];
 
  195    for (uint8_t index = 0; index < 15; index++)
 
  197        if (sum[15 - index] > netBuf[15 - index])
 
  199            sum[14 - index] = 
static_cast<uint16_t
>(netBuf[14 - index]) + 1;
 
  200            netBuf[14 - index] += 1;
 
 
  212    std::vector<bool> withConfiguration(c.
GetN(), 
true);
 
  213    return Assign(c, withConfiguration);
 
 
  220    std::vector<bool> onLink(c.
GetN(), 
true);
 
  221    return Assign(c, withConfiguration, onLink);
 
 
  226                          std::vector<bool> withConfiguration,
 
  227                          std::vector<bool> onLink)
 
  236        NS_ASSERT_MSG(node, 
"Ipv6AddressHelper::Allocate (): Bad node");
 
  239        NS_ASSERT_MSG(ipv6, 
"Ipv6AddressHelper::Allocate (): Bad ipv6");
 
  241        int32_t ifIndex = ipv6->GetInterfaceForDevice(device);
 
  244            ifIndex = ipv6->AddInterface(device);
 
  247                      "Ipv6AddressHelper::Allocate (): " 
  248                      "Interface index not found");
 
  252        ipv6->SetUp(ifIndex);
 
  254        ipv6->SetMetric(ifIndex, 1);
 
  256        if (withConfiguration.at(i))
 
  261            ipv6->AddAddress(ifIndex, ipv6Addr, onLink.at(i));
 
  264        ipv6->SetUp(ifIndex);
 
  265        retval.
Add(ipv6, ifIndex);
 
  280                std::size_t nTxQueues = ndqi->GetNTxQueues();
 
  281                NS_LOG_LOGIC(
"Installing default traffic control configuration (" 
  282                             << nTxQueues << 
" device queue(s))");
 
 
  296    std::vector<bool> withConfiguration(c.
GetN(), 
false);
 
  297    return Assign(c, withConfiguration);
 
 
  305    std::vector<bool> withConfiguration(c.
GetN(), 
true);
 
  306    std::vector<bool> onLink(c.
GetN(), 
false);
 
  308    return Assign(c, withConfiguration, onLink);
 
 
a polymophic address class
static bool AddAllocated(const Ipv6Address addr)
Add the Ipv6Address to the list of IPv6 entries.
Ipv6InterfaceContainer AssignWithoutAddress(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer but do not assign any IPv6 addresses.
void SetBase(Ipv6Address network, Ipv6Prefix prefix, Ipv6Address base=Ipv6Address("::1"))
Set the base network number, network prefix, and base interface ID.
Ipv6Address m_base
host base address
void NewNetwork()
Allocate a new network.
Ipv6Address m_network
network address
Ipv6Address m_address
host address
Ipv6InterfaceContainer AssignWithoutOnLink(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses, but do not set the on-link property ...
Ipv6Prefix m_prefix
prefix length
Ipv6InterfaceContainer Assign(const NetDeviceContainer &c)
Allocate an Ipv6InterfaceContainer with auto-assigned addresses.
Ipv6AddressHelper()
Constructor.
Ipv6Address NewAddress()
Allocate a new Ipv6Address with interface ID equal to the next one in the underlying generator.
Describes an IPv6 address.
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address.
static Ipv6Address MakeAutoconfiguredAddress(Address addr, Ipv6Address prefix)
Make the autoconfigured IPv6 address from a Mac address.
void GetBytes(uint8_t buf[16]) const
Get the bytes corresponding to the address.
Ipv6Address CombinePrefix(const Ipv6Prefix &prefix) const
Combine this address with a prefix.
Access to the IPv6 forwarding table, interfaces, and configuration.
IPv6 address associated with an interface.
Keep track of a set of IPv6 interfaces.
void Add(Ptr< Ipv6 > ipv6, uint32_t interface)
Add a couple IPv6/interface.
Describes an IPv6 prefix.
uint8_t GetPrefixLength() const
Get prefix length.
static bool IsMatchingType(const Address &address)
static Mac16Address ConvertFrom(const Address &address)
static bool IsMatchingType(const Address &address)
static Mac48Address ConvertFrom(const Address &address)
static bool IsMatchingType(const Address &address)
static Mac64Address ConvertFrom(const Address &address)
static Mac8Address ConvertFrom(const Address &address)
Convert a generic address to a Mac8Address.
static bool IsMatchingType(const Address &address)
Check that a generic Address is compatible with Mac8Address.
holds a vector of ns3::NetDevice pointers
uint32_t GetN() const
Get the number of Ptr<NetDevice> stored in this container.
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
Network device transmission queue interface.
Smart pointer class similar to boost::intrusive_ptr.
Build a set of QueueDisc objects.
QueueDiscContainer Install(NetDeviceContainer c)
static TrafficControlHelper Default(std::size_t nTxQueues=1)
The Traffic Control layer aims at introducing an equivalent of the Linux Traffic Control infrastructu...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.