23 #include "ns3/uinteger.h" 24 #include "ns3/vector.h" 25 #include "ns3/boolean.h" 26 #include "ns3/callback.h" 27 #include "ns3/trace-source-accessor.h" 28 #include "ns3/object-vector.h" 29 #include "ns3/ipv6-routing-protocol.h" 30 #include "ns3/ipv6-route.h" 31 #include "ns3/mac16-address.h" 32 #include "ns3/mac64-address.h" 33 #include "ns3/traffic-control-layer.h" 50 #define IPV6_MIN_MTU 1280 64 .SetGroupName (
"Internet")
66 .AddAttribute (
"DefaultTtl",
67 "The TTL value set by default on all " 68 "outgoing packets generated on this node.",
71 MakeUintegerChecker<uint8_t> ())
72 .AddAttribute (
"DefaultTclass",
73 "The TCLASS value set by default on all " 74 "outgoing packets generated on this node.",
77 MakeUintegerChecker<uint8_t> ())
78 .AddAttribute (
"InterfaceList",
79 "The set of IPv6 interfaces associated to this IPv6 stack.",
82 MakeObjectVectorChecker<Ipv6Interface> ())
83 .AddAttribute (
"SendIcmpv6Redirect",
84 "Send the ICMPv6 Redirect when appropriate.",
89 .AddAttribute (
"StrongEndSystemModel",
90 "Reject packets for an address not configured on the interface they're coming from (RFC1222).",
94 .AddTraceSource (
"Tx",
95 "Send IPv6 packet to outgoing interface.",
97 "ns3::Ipv6L3Protocol::TxRxTracedCallback")
98 .AddTraceSource (
"Rx",
99 "Receive IPv6 packet from incoming interface.",
101 "ns3::Ipv6L3Protocol::TxRxTracedCallback")
102 .AddTraceSource (
"Drop",
105 "ns3::Ipv6L3Protocol::DropTracedCallback")
107 .AddTraceSource (
"SendOutgoing",
108 "A newly-generated packet by this node is " 109 "about to be queued for transmission",
111 "ns3::Ipv6L3Protocol::SentTracedCallback")
112 .AddTraceSource (
"UnicastForward",
113 "A unicast IPv6 packet was received by this node " 114 "and is being forwarded to another node",
116 "ns3::Ipv6L3Protocol::SentTracedCallback")
117 .AddTraceSource (
"LocalDeliver",
118 "An IPv6 packet was received by/for this node, " 119 "and it is being forward up the stack",
121 "ns3::Ipv6L3Protocol::SentTracedCallback")
170 (*it)->StopValidTimer ();
171 (*it)->StopPreferredTimer ();
210 interface->SetNode (
m_node);
211 interface->SetDevice (device);
212 interface->SetTrafficControl (tc);
253 uint32_t
max = (*it)->GetNAddresses ();
255 for (j = 0; j <
max; j++)
257 if ((*it)->GetAddress (j).GetAddress () ==
address)
275 for (j = 0; j < (*it)->GetNAddresses (); j++)
277 if ((*it)->GetAddress (j).GetAddress ().CombinePrefix (mask) ==
address.CombinePrefix (mask))
300 return (*iter).second;
308 NS_LOG_FUNCTION (
this << interface << network << mask << (uint32_t)flags << validTime << preferredTime);
313 if (flags & (1 << 6))
320 if ((*it)->GetInterface () ==
interface && (*it)->GetPrefix () == network && (*it)->GetMask () == mask)
322 (*it)->StopPreferredTimer ();
323 (*it)->StopValidTimer ();
324 (*it)->StartPreferredTimer ();
336 if (!defaultRouter.
IsAny())
368 if ((*it)->GetInterface () ==
interface && (*it)->GetPrefix () == network && (*it)->GetMask () == mask)
471 return interface->
GetDevice ()->GetMtu ();
485 return interface->
IsUp ();
498 if (interface->GetDevice ()->GetMtu () >= 1280)
509 NS_LOG_LOGIC (
"Interface " <<
int(i) <<
" is set to be down for IPv6. Reason: not respecting minimum IPv6 MTU (1280 octets)");
544 device = CreateObject<LoopbackNetDevice> ();
548 interface->SetDevice (device);
549 interface->SetNode (
m_node);
551 interface->AddAddress (ifaceAddr);
568 NS_LOG_LOGIC (
"Forwarding state: " << interface->IsForwarding ());
569 return interface->IsForwarding ();
591 return test.GetAddress ();
594 NS_ASSERT_MSG (
false,
"No link-local address found on interface " << interface);
603 if (test.IsInSameSubnet (dest))
605 return test.GetAddress ();
609 ret = test.GetAddress ();
625 (*it)->SetForwarding (forward);
665 Ptr<Node> node = this->GetObject<Node> ();
732 NS_LOG_WARN (
"Trying to remove an non-existent protocol " <<
int(protocol->
GetProtocolNumber ()) <<
" on interface " <<
int(interfaceIndex));
752 L4List_t::const_iterator i;
753 if (interfaceIndex >= 0)
756 key = std::make_pair (protocolNumber, interfaceIndex);
764 key = std::make_pair (protocolNumber, -1);
826 NS_LOG_FUNCTION (
this << packet << source << destination << (uint32_t)protocol << route);
855 NS_LOG_LOGIC (
"Ipv6L3Protocol::Send case 1: passed in with a route");
866 NS_LOG_LOGIC (
"Ipv6L3Protocol::Send case 2: probably sent to machine on same IPv6 network");
875 NS_LOG_LOGIC (
"Ipv6L3Protocol::Send case 3: passed in with no route " << destination);
888 NS_ASSERT_MSG (index >= 0,
"Can not find an outgoing interface for a packet with src " << source <<
" and dst " << destination);
909 NS_LOG_FUNCTION (
this << device << p << protocol << from << to << packetType);
913 uint32_t
interface = GetInterfaceForDevice(device);
918 if (ipv6Interface->IsUp ())
924 NS_LOG_LOGIC (
"Dropping received packet-- interface is down");
955 std::list<NdiscCache::Entry *> entryList = ndiscCache->
LookupInverse (from);
956 std::list<NdiscCache::Entry *>::iterator iter;
957 for (iter = entryList.begin (); iter != entryList.end (); iter ++)
959 (*iter)->UpdateReachableTimer ();
976 bool stopProcessing =
false;
977 bool isDropped =
false;
982 ipv6Extension = ipv6ExtensionDemux->GetExtension (nextHeader);
986 ipv6Extension->Process (packet, 0, hdr, hdr.
GetDestinationAddress (), (uint8_t *)0, stopProcessing, isDropped, dropReason);
1015 if (isSolicited || isRegisteredGlobally || isRegisteredOnInterface)
1035 NS_LOG_LOGIC (
"For me (destination " << addr <<
" match)");
1055 NS_LOG_WARN (
"No route found for forwarding packet. Drop.");
1066 m_txTrace (packetCopy, ipv6, interface);
1080 int32_t
interface = GetInterfaceForDevice (dev);
1084 NS_LOG_LOGIC (
"Send via NetDevice ifIndex " << dev->GetIfIndex () <<
" Ipv6InterfaceIndex " << interface);
1087 std::list<Ipv6ExtensionFragment::Ipv6PayloadHeaderPair> fragments;
1093 targetMtu = dev->GetMtu ();
1096 if (packet->
GetSize () > targetMtu + 40)
1100 bool fromMe =
false;
1118 icmpv6->SendErrorTooBig (packet, ipHeader.
GetSourceAddress (), dev->GetMtu ());
1128 ipv6Fragment->GetFragments (packet, ipHeader, targetMtu, fragments);
1133 if (outInterface->
IsUp ())
1135 NS_LOG_LOGIC (
"Send to gateway " << route->GetGateway ());
1137 if (fragments.size () != 0)
1139 std::ostringstream oss;
1141 for (std::list<Ipv6ExtensionFragment::Ipv6PayloadHeaderPair>::const_iterator it = fragments.begin (); it != fragments.end (); it++)
1144 outInterface->
Send (it->first, it->second, route->GetGateway ());
1150 outInterface->
Send (packet, ipHeader, route->GetGateway ());
1155 NS_LOG_LOGIC (
"Dropping-- outgoing interface is down: " << route->GetGateway ());
1161 if (outInterface->
IsUp ())
1165 if (fragments.size () != 0)
1167 std::ostringstream oss;
1169 for (std::list<Ipv6ExtensionFragment::Ipv6PayloadHeaderPair>::const_iterator it = fragments.begin (); it != fragments.end (); it++)
1197 NS_LOG_WARN (
"Received a packet for 2001:db8::/32 (documentation class). Drop.");
1248 if (target.
IsAny ())
1256 if (icmpv6->Lookup (target, rtentry->GetOutputDevice (), 0, &hardwareTarget))
1258 icmpv6->SendRedirection (copy, linkLocal, src, target, dst, hardwareTarget);
1262 icmpv6->SendRedirection (copy, linkLocal, src, target, dst,
Address ());
1278 std::map<uint32_t, uint32_t> ttlMap = mrtentry->GetOutputTtlMap ();
1279 std::map<uint32_t, uint32_t>::iterator mapIter;
1281 for (mapIter = ttlMap.begin (); mapIter != ttlMap.end (); mapIter++)
1283 uint32_t interfaceId = mapIter->first;
1294 NS_LOG_LOGIC (
"Forward multicast via interface " << interfaceId);
1315 uint8_t nextHeaderPosition = 0;
1316 bool isDropped =
false;
1317 bool stopProcessing =
false;
1328 NS_LOG_WARN(
"Double Ipv6Header::IPV6_EXT_HOP_BY_HOP in packet, dropping packet");
1337 ipv6Extension = ipv6ExtensionDemux->GetExtension (nextHeader);
1341 uint8_t nextHeaderStep = 0;
1342 uint8_t curHeader = nextHeader;
1343 nextHeaderStep = ipv6Extension->Process (p, nextHeaderPosition, ip, dst, &nextHeader, stopProcessing, isDropped, dropReason);
1344 nextHeaderPosition += nextHeaderStep;
1356 "Zero-size IPv6 Option Header, aborting" << *packet );
1370 if (nextHeaderPosition == 0)
1414 while (ipv6Extension);
1420 NS_LOG_LOGIC (
"Route input failure-- dropping packet to " << ipHeader <<
" with errno " << sockErrno);
1434 NS_LOG_FUNCTION (
this << src << dst << (uint32_t)protocol << (uint32_t)payloadSize << (uint32_t)ttl << (uint32_t)tclass);
1449 ipv6ExtensionDemux->SetNode (
m_node);
1452 hopbyhopExtension->SetNode (
m_node);
1454 destinationExtension->SetNode (
m_node);
1456 fragmentExtension->SetNode (
m_node);
1462 ipv6ExtensionDemux->Insert (hopbyhopExtension);
1463 ipv6ExtensionDemux->Insert (destinationExtension);
1464 ipv6ExtensionDemux->Insert (fragmentExtension);
1465 ipv6ExtensionDemux->Insert (routingExtension);
1470 routingExtensionDemux->SetNode (
m_node);
1472 looseRoutingExtension->SetNode (
m_node);
1473 routingExtensionDemux->Insert (looseRoutingExtension);
1482 ipv6OptionDemux->SetNode (
m_node);
1485 pad1Option->SetNode (
m_node);
1487 padnOption->SetNode (
m_node);
1489 jumbogramOption->SetNode (
m_node);
1491 routerAlertOption->SetNode (
m_node);
1493 ipv6OptionDemux->Insert (pad1Option);
1494 ipv6OptionDemux->Insert (padnOption);
1495 ipv6OptionDemux->Insert (jumbogramOption);
1496 ipv6OptionDemux->Insert (routerAlertOption);
void SetNode(Ptr< Node > node)
Set the node associated with this socket.
uint16_t GetMtu(uint32_t i) const
Get MTU for an interface.
std::pair< int, int32_t > L4ListKey_t
Container of the IPv6 L4 keys: protocol number, interface index.
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
static Ipv6Address GetLoopback()
Get the loopback address.
Ipv6Header BuildHeader(Ipv6Address src, Ipv6Address dst, uint8_t protocol, uint16_t payloadSize, uint8_t hopLimit, uint8_t tclass)
Construct an IPv6 header.
void SetForwarding(uint32_t i, bool val)
Enable or disable forwarding on interface.
Ipv6Address GetAddress() const
Get the IPv6 address.
bool AddAddress(Ipv6InterfaceAddress iface)
Add an IPv6 address.
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 "...
uint16_t GetMetric(uint32_t i) const
Get metric for an interface.
std::map< Ipv6RegisteredMulticastAddressKey_t, uint32_t >::const_iterator Ipv6RegisteredMulticastAddressCIter_t
Container Const Iterator of the IPv6 multicast addresses.
virtual ~Ipv6L3Protocol()
Destructor.
Ptr< Ipv6RoutingProtocol > GetRoutingProtocol() const
Get current routing protocol used.
void SetUp()
Enable this interface.
AttributeValue implementation for Boolean.
Ipv6InterfaceAddress GetLinkLocalAddress() const
Get link-local address from IPv6 interface.
Ipv6L3Protocol()
Constructor.
virtual void SetPmtu(Ipv6Address dst, uint32_t pmtu)
Set the Path MTU for the specified IPv6 destination address.
bool IsUp(uint32_t i) const
Is specified interface up ?
uint32_t GetId(void) const
This class implements a tag that carries the socket-specific HOPLIMIT of a packet to the IPv6 layer...
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
Ptr< NetDevice > GetNetDevice(uint32_t i)
Get device by index.
bool AddAddress(uint32_t i, Ipv6InterfaceAddress address)
Add an address on interface.
Ptr< Ipv6RoutingProtocol > m_routingProtocol
Routing protocol.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
NS_ASSERT_MSG(false, "Ipv4AddressGenerator::MaskToIndex(): Impossible")
Access to the IPv6 forwarding table, interfaces, and configuration.
bool IsRegisteredMulticastAddress(Ipv6Address address) const
Checks if the address has been registered.
Introspection did not find any typical Config paths.
std::map< Ipv6Address, uint32_t >::const_iterator Ipv6RegisteredMulticastAddressNoInterfaceCIter_t
Container Const Iterator of the IPv6 multicast addresses.
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
uint32_t AddIpv6Interface(Ptr< Ipv6Interface > interface)
Add an IPv6 interface to the stack.
virtual void Send(Ptr< Packet > packet, Ipv6Address source, Ipv6Address destination, uint8_t protocol, Ptr< Ipv6Route > route)
Higher-level layers call this method to send a packet down the stack to the MAC and PHY layers...
IPv6 layer implementation.
Ptr< const AttributeAccessor > MakeBooleanAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
Demultiplexes IPv6 extensions.
void AggregateObject(Ptr< Object > other)
Aggregate two Objects together.
static Ipv6Address MakeAutoconfiguredAddress(Address addr, Ipv6Address prefix)
Make the autoconfigured IPv6 address from a Mac address.
uint8_t GetTclass(void) const
Get the tag's Tclass.
Interface is down so can not send packet.
Ptr< const AttributeAccessor > MakeObjectVectorAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector.
void SetNode(Ptr< Node > node)
Set the node.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
U * PeekPointer(const Ptr< U > &p)
static Ipv6Address GetAny()
Get the "any" (::) Ipv6Address.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
IPv6 address associated with an interface.
Link-local address (fe80::/64)
void Receive(Ptr< NetDevice > device, Ptr< const Packet > p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
Receive method when a packet arrive in the stack.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
virtual Ptr< NetDevice > GetDevice() const
Get the NetDevice.
int32_t GetInterfaceForPrefix(Ipv6Address addr, Ipv6Prefix mask) const
Get interface index which match specified address/prefix.
virtual void DoDispose(void)
Destructor implementation.
virtual void Receive(Ptr< NetDevice > device, Ptr< const Packet > p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
Called by NetDevices, incoming packet.
Ptr< Ipv6Interface > GetInterface(uint32_t i) const
Get an interface.
virtual void DoDispose()
Dispose object.
void SetMetric(uint32_t i, uint16_t metric)
Set metric for an interface.
virtual int GetProtocolNumber(void) const =0
Returns the protocol number of this protocol.
bool ForwardUp(Ptr< const Packet > p, Ipv6Header hdr, Ptr< NetDevice > device)
Forward up to receive method.
uint32_t AddInterface(Ptr< NetDevice > device)
Add IPv6 interface for a device.
SocketErrno
Enumeration of the possible errors returned by a socket.
Ptr< Node > m_node
Node attached to stack.
TracedCallback< const Ipv6Header &, Ptr< const Packet >, uint32_t > m_localDeliverTrace
Trace of locally delivered packets.
std::pair< Ipv6Address, uint64_t > Ipv6RegisteredMulticastAddressKey_t
IPv6 multicast addresses / interface key.
void CallTxTrace(const Ipv6Header &ipHeader, Ptr< Packet > packet, Ptr< Ipv6 > ipv6, uint32_t interface)
Make a copy of the packet, add the header and invoke the TX trace callback.
void AddMulticastAddress(Ipv6Address address)
Adds a multicast address to the list of addresses to pass to local deliver.
a polymophic address class
virtual void SetIpForward(bool forward)
Set IPv6 forwarding state.
Ptr< const TraceSourceAccessor > MakeTraceSourceAccessor(T a)
Create a TraceSourceAccessor which will control access to the underlying trace source.
virtual void NotifyNewAggregate()
Notify other components connected to the node that a new stack member is now connected.
Ptr< Icmpv6L4Protocol > GetIcmpv6() const
Get ICMPv6 protocol.
uint32_t m_nInterfaces
Number of IPv6 interfaces managed by the stack.
void SetDefaultTclass(uint8_t tclass)
Set the default TCLASS.
The IPv6 representation of a network interface.
void Send(Ptr< Packet > p, const Ipv6Header &hdr, Ipv6Address dest)
Send a packet through this interface.
bool m_strongEndSystemModel
Rejects packets directed to an interface with wrong address (RFC 1222).
void SetMetric(uint16_t metric)
Set the metric.
void RemoveAtStart(uint32_t size)
Remove size bytes from the start of the current packet.
virtual bool GetSendIcmpv6Redirect() const
Get the ICMPv6 Redirect sending state.
virtual Ptr< IpL4Protocol > GetProtocol(int protocolNumber) const
Get L4 protocol by protocol number.
bool IsDocumentation() const
If the IPv6 address is a documentation address (2001:DB8::/32).
Ptr< Socket > CreateRawSocket()
Create raw IPv6 socket.
#define IPV6_MIN_MTU
Minimum IPv6 MTU, as defined by RFC 2460
Hold an unsigned integer type.
L4List_t m_protocols
List of transport protocol.
Ipv6InterfaceAddress GetAddress(uint32_t interfaceIndex, uint32_t addressIndex) const
Get an address.
void SetDefaultTtl(uint8_t ttl)
Set the default TTL.
static Ipv6Address GetZero()
Get the 0 (::) Ipv6Address.
bool IsUp() const
Is the interface UP ?
void IpMulticastForward(Ptr< const NetDevice > idev, Ptr< Ipv6MulticastRoute > mrtentry, Ptr< const Packet > p, const Ipv6Header &header)
Forward a multicast packet.
void RemoveMulticastAddress(Ipv6Address address)
Removes a multicast address from the list of addresses to pass to local deliver.
indicates whether the socket has a priority set.
bool IsLinkLocal() const
If the IPv6 address is a link-local address (fe80::/64).
void SetUp(uint32_t i)
Set an interface up.
An implementation of the ICMPv6 protocol.
virtual enum RxStatus Receive(Ptr< Packet > p, Ipv4Header const &header, Ptr< Ipv4Interface > incomingInterface)=0
Called from lower-level layers to send the packet up in the stack.
virtual void ReportDrop(Ipv6Header ipHeader, Ptr< Packet > p, DropReason dropReason)
Report a packet drop.
static TypeId GetTypeId()
Get the type ID of this class.
Ipv6InterfaceList m_interfaces
List of IPv6 interfaces.
bool m_ipForward
Forwarding packets (i.e.
TracedCallback< const Ipv6Header &, Ptr< const Packet >, uint32_t > m_unicastForwardTrace
Trace of unicast forwarded packets.
void SetForwarding(bool forward)
Set forwarding enabled or not.
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
std::list< Ptr< Ipv6AutoconfiguredPrefix > >::iterator Ipv6AutoconfiguredPrefixListI
Iterator of the container of the IPv6 Autoconfigured addresses.
Ipv6RegisteredMulticastAddress_t m_multicastAddresses
List of multicast IP addresses of interest, divided per interface.
bool IsAllRoutersMulticast() const
If the IPv6 address is "all routers multicast" (ff02::2/8).
Ipv6AutoconfiguredPrefixList m_prefixes
List of IPv6 prefix received from RA.
bool IsMulticast() const
If the IPv6 address is multicast (ff00::/8).
Every class exported by the ns3 library is enclosed in the ns3 namespace.
void LocalDeliver(Ptr< const Packet > p, Ipv6Header const &ip, uint32_t iif)
Deliver a packet.
bool IsAllNodesMulticast() const
If the IPv6 address is "all nodes multicast" (ff02::1/8).
void DeleteRawSocket(Ptr< Socket > socket)
Remove raw IPv6 socket.
Global address (2000::/3)
static uint16_t GetStaticProtocolNumber()
Get ICMPv6 protocol number.
Ipv6Address SourceAddressSelection(uint32_t interface, Ipv6Address dest)
Choose the source address to use with destination address.
void IpForward(Ptr< const NetDevice > idev, Ptr< Ipv6Route > rtentry, Ptr< const Packet > p, const Ipv6Header &header)
Forward a packet.
Ptr< Packet > Copy(void) const
performs a COW copy of the packet.
void RemoveAtEnd(uint32_t size)
Remove size bytes from the end of the current packet.
uint8_t m_defaultTtl
Default TTL for outgoing packets.
indicates whether the socket has IPV6_TCLASS set.
TracedCallback< const Ipv6Header &, Ptr< const Packet >, DropReason, Ptr< Ipv6 >, uint32_t > m_dropTrace
Callback to trace drop packets.
TracedCallback< Ptr< const Packet >, Ptr< Ipv6 >, uint32_t > m_rxTrace
Callback to trace RX (reception) packets.
uint32_t GetNAddresses(void) const
Get number of addresses on this IPv6 interface.
Ipv6InterfaceAddress GetAddress(uint32_t index) const
Get an address from IPv6 interface.
void SetNode(Ptr< Node > node)
Set node associated with this stack.
Ipv6InterfaceReverseContainer m_reverseInterfacesContainer
Container of NetDevice / Interface index associations.
uint32_t GetNInterfaces() const
Get current number of interface on this stack.
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
void RemoveAutoconfiguredAddress(uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter)
Remove an autoconfigured address.
void SendRealOut(Ptr< Ipv6Route > route, Ptr< Packet > packet, Ipv6Header const &ipHeader)
Send packet with route.
void RegisterProtocolHandler(ProtocolHandler handler, uint16_t protocolType, Ptr< NetDevice > device, bool promiscuous=false)
void UpdateReachableTimer()
Update the reachable timer.
bool IsLinkLocalMulticast() const
If the IPv6 address is link-local multicast (ff02::/16).
void SetupLoopback()
Setup loopback interface.
std::list< NdiscCache::Entry * > LookupInverse(Address dst)
Lookup in the cache for a MAC address.
double max(double x, double y)
virtual void RegisterExtensions()
Register the IPv6 Extensions.
virtual bool GetMtuDiscover(void) const
Get IPv6 MTU discover state.
Describes an IPv6 address.
void SetRoutingProtocol(Ptr< Ipv6RoutingProtocol > routingProtocol)
Set routing protocol for this stack.
uint16_t GetMetric() const
Get the metric.
bool IsForwarding(uint32_t i) const
Is interface allows forwarding ?
virtual NdiscCache::Entry * Lookup(Ipv6Address dst)
Lookup in the cache.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
Copy the packet contents to a byte buffer.
bool RemovePacketTag(Tag &tag)
Remove a packet tag.
virtual void Insert(Ptr< IpL4Protocol > protocol)
Add a L4 protocol.
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Ipv6RegisteredMulticastAddressNoInterface_t m_multicastAddressesNoInterface
List of multicast IP addresses of interest for all the interfaces.
virtual bool GetIpForward() const
Get IPv6 forwarding state.
bool m_sendIcmpv6Redirect
Allow ICMPv6 Redirect sending state.
int32_t GetInterfaceForDevice(Ptr< const NetDevice > device) const
Get interface index which is on a specified net device.
virtual void RegisterOptions()
Register the IPv6 Options.
TracedCallback< const Ipv6Header &, Ptr< const Packet >, uint32_t > m_sendOutgoingTrace
Trace of sent packets.
Describes an IPv6 prefix.
void SetDown(uint32_t i)
set an interface down.
A record that holds information about a NdiscCache entry.
uint32_t GetNAddresses(uint32_t interface) const
Get number of address for an interface.
bool m_mtuDiscover
MTU Discover (i.e.
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
bool RemoveAddress(uint32_t interfaceIndex, uint32_t addressIndex)
Remove an address from an interface.
PacketType
Packet types are used as they are in Linux.
Container for a set of ns3::Object pointers.
Ptr< Ipv6PmtuCache > m_pmtuCache
Path MTU Cache.
int32_t GetInterfaceForAddress(Ipv6Address addr) const
Get interface index which has specified IPv6 address.
TracedCallback< Ptr< const Packet >, Ptr< Ipv6 >, uint32_t > m_txTrace
Callback to trace TX (transmission) packets.
virtual void SetMtuDiscover(bool mtuDiscover)
Set IPv6 MTU discover state.
uint8_t m_defaultTclass
Default TCLASS for outgoing packets.
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method...
void SetDown()
Disable this interface.
a unique identifier for an interface.
uint8_t GetHopLimit(void) const
Get the tag's Hop Limit.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
SocketList m_sockets
List of IPv6 raw sockets.
static const uint16_t PROT_NUMBER
The protocol number for IPv6 (0x86DD).
void AddHeader(const Header &header)
Add header to this packet.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
uint32_t GetNDevices(void) const
bool IsAny() const
If the IPv6 address is the "Any" address.
virtual void Remove(Ptr< IpL4Protocol > protocol)
Remove a L4 protocol.
void AddAutoconfiguredAddress(uint32_t interface, Ipv6Address network, Ipv6Prefix mask, uint8_t flags, uint32_t validTime, uint32_t preferredTime, Ipv6Address defaultRouter=Ipv6Address::GetZero())
Add an autoconfigured address with RA information.
DropReason
Reason why a packet has been dropped.
virtual void SetSendIcmpv6Redirect(bool sendIcmpv6Redirect)
Set the ICMPv6 Redirect sending state.
void RouteInputError(Ptr< const Packet > p, const Ipv6Header &ipHeader, Socket::SocketErrno sockErrno)
Fallback when no route is found.