IPv6 layer implementation. More...
#include <ipv6-l3-protocol.h>
Public Types | |
enum | DropReason { DROP_TTL_EXPIRED = 1, DROP_NO_ROUTE, DROP_INTERFACE_DOWN, DROP_ROUTE_ERROR, DROP_UNKNOWN_PROTOCOL } |
Reason why a packet has been dropped. More... |
Public Member Functions | |
Ipv6L3Protocol () | |
Constructor. | |
virtual | ~Ipv6L3Protocol () |
Destructor. | |
bool | AddAddress (uint32_t i, Ipv6InterfaceAddress address) |
Add an address on interface. | |
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. | |
uint32_t | AddInterface (Ptr< NetDevice > device) |
Add IPv6 interface for a device. | |
Ptr< Socket > | CreateRawSocket () |
Create raw IPv6 socket. | |
void | DeleteRawSocket (Ptr< Socket > socket) |
Remove raw IPv6 socket. | |
Ipv6InterfaceAddress | GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const |
Get an address. | |
Ptr< Icmpv6L4Protocol > | GetIcmpv6 () const |
Get ICMPv6 protocol. | |
Ptr< Ipv6Interface > | GetInterface (uint32_t i) const |
Get an interface. | |
int32_t | GetInterfaceForAddress (Ipv6Address addr) const |
Get interface index which has specified IPv6 address. | |
int32_t | GetInterfaceForDevice (Ptr< const NetDevice > device) const |
Get interface index which is on a specified net device. | |
int32_t | GetInterfaceForPrefix (Ipv6Address addr, Ipv6Prefix mask) const |
Get interface index which match specified address/prefix. | |
uint16_t | GetMetric (uint32_t i) const |
Get metric for an interface. | |
uint16_t | GetMtu (uint32_t i) const |
Get MTU for an interface. | |
uint32_t | GetNAddresses (uint32_t interface) const |
Get number of address for an interface. | |
Ptr< NetDevice > | GetNetDevice (uint32_t i) |
Get device by index. | |
uint32_t | GetNInterfaces () const |
Get current number of interface on this stack. | |
Ptr< IpL4Protocol > | GetProtocol (int protocolNumber) const |
Get L4 protocol by protocol number. | |
Ptr< Ipv6RoutingProtocol > | GetRoutingProtocol () const |
Get current routing protocol used. | |
void | Insert (Ptr< IpL4Protocol > protocol) |
Add an L4 protocol. | |
bool | IsForwarding (uint32_t i) const |
Is interface allows forwarding ? | |
bool | IsUp (uint32_t i) const |
Is specified interface up ? | |
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. This method removes IPv6 header and forward up to L4 protocol. | |
virtual void | RegisterExtensions () |
Register the IPv6 Extensions. | |
virtual void | RegisterOptions () |
Register the IPv6 Options. | |
void | Remove (Ptr< IpL4Protocol > protocol) |
Remove an L4 protocol. | |
bool | RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex) |
Remove an address from an interface. | |
void | RemoveAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter) |
Remove an autoconfigured address. | |
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. | |
void | SetDefaultTtl (uint8_t ttl) |
Set the default TTL. | |
void | SetDown (uint32_t i) |
set an interface down. | |
void | SetForwarding (uint32_t i, bool val) |
Enable or disable forwarding on interface. | |
void | SetMetric (uint32_t i, uint16_t metric) |
Set metric for an interface. | |
void | SetNode (Ptr< Node > node) |
Set node for this stack. | |
void | SetRoutingProtocol (Ptr< Ipv6RoutingProtocol > routingProtocol) |
Set routing protocol for this stack. | |
void | SetUp (uint32_t i) |
Set an interface up. | |
![]() | |
Ipv6 () | |
Constructor. | |
virtual | ~Ipv6 () |
Destructor. | |
![]() | |
Object () | |
virtual | ~Object () |
void | AggregateObject (Ptr< Object > other) |
void | Dispose (void) |
AggregateIterator | GetAggregateIterator (void) const |
virtual TypeId | GetInstanceTypeId (void) const |
template<typename T > | |
Ptr< T > | GetObject (void) const |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
void | Start (void) |
![]() | |
SimpleRefCount () | |
SimpleRefCount (const SimpleRefCount &o) | |
uint32_t | GetReferenceCount (void) const |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
void | Ref (void) const |
void | Unref (void) const |
![]() | |
virtual | ~ObjectBase () |
void | GetAttribute (std::string name, AttributeValue &value) const |
bool | GetAttributeFailSafe (std::string name, AttributeValue &attribute) const |
void | SetAttribute (std::string name, const AttributeValue &value) |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get the type ID of this class. |
Static Public Attributes | |
static const uint16_t | PROT_NUMBER = 0x86DD |
The protocol number for IPv6 (0x86DD). | |
![]() | |
static const uint32_t | IF_ANY = 0xffffffff |
Any interface magic number. |
Protected Member Functions | |
virtual void | DoDispose () |
Dispose object. | |
virtual void | NotifyNewAggregate () |
Notify other components connected to the node that a new stack member is now connected. |
Private Types | |
typedef std::list< Ptr < Ipv6AutoconfiguredPrefix > > | Ipv6AutoconfiguredPrefixList |
typedef std::list< Ptr < Ipv6AutoconfiguredPrefix > >::iterator | Ipv6AutoconfiguredPrefixListI |
typedef std::list< Ptr < Ipv6Interface > > | Ipv6InterfaceList |
typedef std::list< Ptr < IpL4Protocol > > | L4List_t |
typedef std::list< Ptr < Ipv6RawSocketImpl > > | SocketList |
Private Member Functions | |
Ipv6L3Protocol (const Ipv6L3Protocol &o) | |
Copy constructor. | |
uint32_t | AddIpv6Interface (Ptr< Ipv6Interface > interface) |
Add an IPv6 interface to the stack. | |
Ipv6Header | BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol, uint16_t payloadSize, uint8_t ttl) |
Construct an IPv6 header. | |
virtual bool | GetIpForward () const |
Get IPv6 forwarding state. | |
virtual bool | GetSendIcmpv6Redirect () const |
Get the ICMPv6 Redirect sending state. | |
void | IpForward (Ptr< Ipv6Route > rtentry, Ptr< const Packet > p, const Ipv6Header &header) |
Forward a packet. | |
void | IpMulticastForward (Ptr< Ipv6MulticastRoute > mrtentry, Ptr< const Packet > p, const Ipv6Header &header) |
Forward a packet in multicast. | |
void | LocalDeliver (Ptr< const Packet > p, Ipv6Header const &ip, uint32_t iif) |
Deliver a packet. | |
Ipv6L3Protocol & | operator= (const Ipv6L3Protocol &o) |
Copy constructor. | |
void | RouteInputError (Ptr< const Packet > p, const Ipv6Header &ipHeader, Socket::SocketErrno sockErrno) |
Fallback when no route is found. | |
void | SendRealOut (Ptr< Ipv6Route > route, Ptr< Packet > packet, Ipv6Header const &ipHeader) |
Send packet with route. | |
virtual void | SetIpForward (bool forward) |
Set IPv6 forwarding state. | |
virtual void | SetSendIcmpv6Redirect (bool sendIcmpv6Redirect) |
Set the ICMPv6 Redirect sending state. | |
void | SetupLoopback () |
Setup loopback interface. |
Private Attributes | |
uint8_t | m_defaultTtl |
Default TTL for outgoing packets. | |
TracedCallback< const Ipv6Header &, Ptr< const Packet >, DropReason, Ptr < Ipv6 >, uint32_t > | m_dropTrace |
Callback to trace drop packets. | |
Ipv6InterfaceList | m_interfaces |
List of IPv6 interfaces. | |
bool | m_ipForward |
Forwarding packets (i.e. router mode) state. | |
uint32_t | m_nInterfaces |
Number of IPv6 interfaces managed by the stack. | |
Ptr< Node > | m_node |
Node attached to stack. | |
Ipv6AutoconfiguredPrefixList | m_prefixes |
List of IPv6 prefix received from RA. | |
L4List_t | m_protocols |
List of transport protocol. | |
Ptr< Ipv6RoutingProtocol > | m_routingProtocol |
Routing protocol. | |
TracedCallback< Ptr< const Packet >, Ptr< Ipv6 > , uint32_t > | m_rxTrace |
Callback to trace RX (reception) packets. | |
bool | m_sendIcmpv6Redirect |
Allow ICMPv6 Redirect sending state. | |
SocketList | m_sockets |
List of IPv6 raw sockets. | |
TracedCallback< Ptr< const Packet >, Ptr< Ipv6 > , uint32_t > | m_txTrace |
Callback to trace TX (transmission) packets. |
Friends | |
class | Ipv6ExtensionLooseRouting |
class | Ipv6L3ProtocolTestCase |
IPv6 layer implementation.
This class contains two distinct groups of trace sources. The trace sources 'Rx' and 'Tx' are called, respectively, immediately after receiving from the NetDevice and immediately before sending to a NetDevice for transmitting a packet. These are low level trace sources that include the Ipv6Header already serialized into the packet. In contrast, the Drop, SendOutgoing, UnicastForward, and LocalDeliver trace sources are slightly higher-level and pass around the Ipv6Header as an explicit parameter and not as part of the packet.
Definition at line 58 of file ipv6-l3-protocol.h.
|
private |
Definition at line 365 of file ipv6-l3-protocol.h.
|
private |
Definition at line 366 of file ipv6-l3-protocol.h.
|
private |
Definition at line 361 of file ipv6-l3-protocol.h.
|
private |
Definition at line 363 of file ipv6-l3-protocol.h.
|
private |
Definition at line 362 of file ipv6-l3-protocol.h.
Reason why a packet has been dropped.
DROP_TTL_EXPIRED |
Packet TTL has expired |
DROP_NO_ROUTE |
No route to host |
DROP_INTERFACE_DOWN |
Interface is down so can not send packet |
DROP_ROUTE_ERROR |
Route error |
DROP_UNKNOWN_PROTOCOL |
Unknown L4 protocol |
Definition at line 76 of file ipv6-l3-protocol.h.
ns3::Ipv6L3Protocol::Ipv6L3Protocol | ( | ) |
|
virtual |
|
private |
Copy constructor.
o | object to copy |
|
virtual |
Add an address on interface.
i | interface index |
address | to add |
Implements ns3::Ipv6.
Definition at line 333 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::AddAddress(), GetInterface(), m_routingProtocol, ns3::Ipv6RoutingProtocol::NotifyAddAddress(), and NS_LOG_FUNCTION.
Referenced by AddAutoconfiguredAddress().
void ns3::Ipv6L3Protocol::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.
interface | interface index |
network | network prefix |
mask | network mask |
flags | flags of the prefix information option (home agent, ...) |
validTime | valid time of the prefix |
preferredTime | preferred time of the prefix |
defaultRouter | default router address |
Definition at line 253 of file ipv6-l3-protocol.cc.
References AddAddress(), ns3::Mac48Address::ConvertFrom(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::NetDevice::GetAddress(), ns3::Ipv6Address::GetAny(), ns3::Ipv6Interface::GetDevice(), GetInterface(), GetRoutingProtocol(), ns3::Mac48Address::IsMatchingType(), m_node, m_prefixes, ns3::Ipv6Address::MakeAutoconfiguredAddress(), ns3::Ipv6RoutingProtocol::NotifyAddRoute(), NS_FATAL_ERROR, NS_LOG_FUNCTION, NS_LOG_INFO, and ns3::Ipv6AutoconfiguredPrefix::StartPreferredTimer().
Add IPv6 interface for a device.
device | net device |
Implements ns3::Ipv6.
Definition at line 144 of file ipv6-l3-protocol.cc.
References AddIpv6Interface(), ns3::CreateObject(), m_ipForward, m_node, ns3::MakeCallback(), NS_LOG_FUNCTION, PROT_NUMBER, Receive(), and ns3::Node::RegisterProtocolHandler().
|
private |
Add an IPv6 interface to the stack.
interface | interface to add |
Definition at line 157 of file ipv6-l3-protocol.cc.
References m_interfaces, m_nInterfaces, and NS_LOG_FUNCTION.
Referenced by AddInterface(), and SetupLoopback().
|
private |
Construct an IPv6 header.
src | source IPv6 address |
dst | destination IPv6 address |
protocol | L4 protocol |
payloadSize | payload size |
ttl | TTL |
Definition at line 1070 of file ipv6-l3-protocol.cc.
References NS_LOG_FUNCTION, ns3::Ipv6Header::SetDestinationAddress(), ns3::Ipv6Header::SetHopLimit(), ns3::Ipv6Header::SetNextHeader(), ns3::Ipv6Header::SetPayloadLength(), and ns3::Ipv6Header::SetSourceAddress().
Referenced by Send().
Create raw IPv6 socket.
Definition at line 564 of file ipv6-l3-protocol.cc.
References m_node, m_sockets, NS_LOG_FUNCTION_NOARGS, and ns3::Ipv6RawSocketImpl::SetNode().
Remove raw IPv6 socket.
socket | socket to remove |
Definition at line 573 of file ipv6-l3-protocol.cc.
References m_sockets, and NS_LOG_FUNCTION.
|
protectedvirtual |
Dispose object.
Reimplemented from ns3::Object.
Definition at line 92 of file ipv6-l3-protocol.cc.
References m_interfaces, m_node, m_prefixes, m_protocols, m_routingProtocol, m_sockets, and NS_LOG_FUNCTION_NOARGS.
|
virtual |
Get an address.
interfaceIndex | interface index |
addressIndex | address index on the interface |
Implements ns3::Ipv6.
Definition at line 353 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetAddress(), GetInterface(), and NS_LOG_FUNCTION.
Ptr< Icmpv6L4Protocol > ns3::Ipv6L3Protocol::GetIcmpv6 | ( | ) | const |
Get ICMPv6 protocol.
Definition at line 587 of file ipv6-l3-protocol.cc.
References ns3::Object::GetObject(), GetProtocol(), ns3::Icmpv6L4Protocol::GetStaticProtocolNumber(), and NS_LOG_FUNCTION_NOARGS.
Referenced by IpForward(), LocalDeliver(), and SendRealOut().
Ptr< Ipv6Interface > ns3::Ipv6L3Protocol::GetInterface | ( | uint32_t | i | ) | const |
Get an interface.
i | interface index |
Definition at line 167 of file ipv6-l3-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION.
Referenced by AddAddress(), AddAutoconfiguredAddress(), GetAddress(), GetMetric(), GetMtu(), GetNAddresses(), GetNetDevice(), IsForwarding(), IsUp(), LocalDeliver(), RemoveAddress(), RemoveAutoconfiguredAddress(), SendRealOut(), SetDown(), SetForwarding(), SetMetric(), and SetUp().
|
virtual |
Get interface index which has specified IPv6 address.
addr | IPv6 address |
Implements ns3::Ipv6.
Definition at line 189 of file ipv6-l3-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION.
Referenced by Send().
Get interface index which is on a specified net device.
device | net device |
Implements ns3::Ipv6.
Definition at line 237 of file ipv6-l3-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION.
Referenced by Send(), and SendRealOut().
|
virtual |
Get interface index which match specified address/prefix.
addr | IPv6 address |
mask | IPv6 prefix (mask) |
Implements ns3::Ipv6.
Definition at line 211 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Address::CombinePrefix(), m_interfaces, and NS_LOG_FUNCTION.
|
privatevirtual |
Get IPv6 forwarding state.
Definition at line 495 of file ipv6-l3-protocol.cc.
References m_ipForward, and NS_LOG_FUNCTION_NOARGS.
|
virtual |
Get metric for an interface.
i | index |
Implements ns3::Ipv6.
Definition at line 384 of file ipv6-l3-protocol.cc.
References GetInterface(), ns3::Ipv6Interface::GetMetric(), and NS_LOG_FUNCTION.
|
virtual |
Get MTU for an interface.
i | index |
Implements ns3::Ipv6.
Definition at line 391 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetDevice(), GetInterface(), ns3::NetDevice::GetMtu(), and NS_LOG_FUNCTION.
|
virtual |
Get number of address for an interface.
interface | interface index |
Implements ns3::Ipv6.
Definition at line 346 of file ipv6-l3-protocol.cc.
References GetInterface(), ns3::Ipv6Interface::GetNAddresses(), and NS_LOG_FUNCTION.
Get device by index.
i | device index on this stack |
Implements ns3::Ipv6.
Definition at line 231 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetDevice(), GetInterface(), and NS_LOG_FUNCTION.
Referenced by IpMulticastForward(), and Send().
|
virtual |
Get current number of interface on this stack.
Implements ns3::Ipv6.
Definition at line 183 of file ipv6-l3-protocol.cc.
References m_nInterfaces, and NS_LOG_FUNCTION_NOARGS.
Ptr< IpL4Protocol > ns3::Ipv6L3Protocol::GetProtocol | ( | int | protocolNumber | ) | const |
Get L4 protocol by protocol number.
protocolNumber | protocol number |
Definition at line 550 of file ipv6-l3-protocol.cc.
References m_protocols, and NS_LOG_FUNCTION.
Referenced by GetIcmpv6(), and LocalDeliver().
|
virtual |
Get current routing protocol used.
Implements ns3::Ipv6.
Definition at line 138 of file ipv6-l3-protocol.cc.
References m_routingProtocol, and NS_LOG_FUNCTION_NOARGS.
Referenced by AddAutoconfiguredAddress(), and RemoveAutoconfiguredAddress().
|
privatevirtual |
Get the ICMPv6 Redirect sending state.
Definition at line 507 of file ipv6-l3-protocol.cc.
References m_sendIcmpv6Redirect, and NS_LOG_FUNCTION_NOARGS.
Referenced by GetTypeId().
|
static |
Get the type ID of this class.
This method returns the TypeId associated to ns3::Ipv6L3Protocol.
Attributes defined for this type:
Attributes defined in parent class ns3::Ipv6:
TraceSources defined for this type:
Reimplemented from ns3::Ipv6.
Definition at line 53 of file ipv6-l3-protocol.cc.
References GetSendIcmpv6Redirect(), m_defaultTtl, m_dropTrace, m_interfaces, m_rxTrace, m_txTrace, ns3::MakeObjectVectorAccessor(), ns3::MakeTraceSourceAccessor(), ns3::TypeId::SetParent(), and SetSendIcmpv6Redirect().
void ns3::Ipv6L3Protocol::Insert | ( | Ptr< IpL4Protocol > | protocol | ) |
Add an L4 protocol.
protocol | L4 protocol |
Definition at line 538 of file ipv6-l3-protocol.cc.
References m_protocols, and NS_LOG_FUNCTION.
Referenced by ns3::AddInternetStack().
|
private |
Forward a packet.
rtentry | route |
p | packet to forward |
header | IPv6 header to add to the packet |
Definition at line 863 of file ipv6-l3-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Ipv6Address::CombinePrefix(), ns3::Packet::Copy(), DROP_TTL_EXPIRED, ns3::Ipv6Header::GetDestinationAddress(), GetIcmpv6(), ns3::Node::GetId(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSourceAddress(), ns3::Icmpv6Header::ICMPV6_HOPLIMIT, ns3::Ipv6Address::IsAny(), m_dropTrace, m_node, m_sendIcmpv6Redirect, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, ns3::Icmpv6L4Protocol::PROT_NUMBER, and SendRealOut().
Referenced by Receive().
|
private |
Forward a packet in multicast.
mrtentry | route |
p | packet to forward |
header | IPv6 header to add to the packet |
Definition at line 932 of file ipv6-l3-protocol.cc.
References ns3::Packet::Copy(), DROP_TTL_EXPIRED, ns3::Ipv6Address::GetAny(), ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6Header::GetHopLimit(), ns3::Node::GetId(), GetNetDevice(), ns3::Object::GetObject(), ns3::Ipv6Header::GetSourceAddress(), m_dropTrace, m_node, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, SendRealOut(), and ns3::Ipv6Header::SetHopLimit().
Referenced by Receive().
|
virtual |
Is interface allows forwarding ?
i | interface index |
Implements ns3::Ipv6.
Definition at line 468 of file ipv6-l3-protocol.cc.
References GetInterface(), NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
virtual |
Is specified interface up ?
i | interface index |
Implements ns3::Ipv6.
Definition at line 398 of file ipv6-l3-protocol.cc.
References GetInterface(), ns3::Ipv6Interface::IsUp(), and NS_LOG_FUNCTION.
|
private |
Deliver a packet.
p | packet delivered |
ip | IPv6 header |
iif | input interface packet was received |
Definition at line 964 of file ipv6-l3-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Packet::Copy(), ns3::Packet::CopyData(), DROP_UNKNOWN_PROTOCOL, ns3::Ipv6Header::GetDestinationAddress(), GetIcmpv6(), GetInterface(), ns3::Ipv6Header::GetNextHeader(), ns3::Object::GetObject(), GetProtocol(), ns3::Ipv6Header::GetSerializedSize(), ns3::Ipv6Header::GetSourceAddress(), ns3::Icmpv6Header::ICMPV6_PORT_UNREACHABLE, ns3::Icmpv6Header::ICMPV6_UNKNOWN_NEXT_HEADER, ns3::Ipv6Header::IPV6_EXT_FRAGMENTATION, ns3::Ipv6Header::IPV6_EXT_HOP_BY_HOP, ns3::Ipv6Address::IsMulticast(), m_dropTrace, m_node, NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::IpL4Protocol::Receive(), ns3::Packet::RemoveAtStart(), ns3::IpL4Protocol::RX_CSUM_FAILED, ns3::IpL4Protocol::RX_ENDPOINT_CLOSED, ns3::IpL4Protocol::RX_ENDPOINT_UNREACH, and ns3::IpL4Protocol::RX_OK.
Referenced by Receive().
|
protectedvirtual |
Notify other components connected to the node that a new stack member is now connected.
This will be used to notify Layer 3 protocol of layer 4 protocol stack to connect them together.
Reimplemented from ns3::Object.
Definition at line 513 of file ipv6-l3-protocol.cc.
References m_node, NS_LOG_FUNCTION_NOARGS, and SetNode().
|
private |
Copy constructor.
o | object to copy |
void ns3::Ipv6L3Protocol::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. This method removes IPv6 header and forward up to L4 protocol.
device | network device |
p | the packet |
protocol | next header value |
from | address of the correspondant |
to | address of the destination |
packetType | type of the packet |
Definition at line 680 of file ipv6-l3-protocol.cc.
References ns3::Packet::Copy(), DROP_INTERFACE_DOWN, DROP_NO_ROUTE, ns3::Ipv6RawSocketImpl::ForwardUp(), ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6Interface::GetDevice(), ns3::Node::GetId(), ns3::Ipv6Header::GetNextHeader(), ns3::Object::GetObject(), ns3::Ipv6Header::GetPayloadLength(), IpForward(), IpMulticastForward(), ns3::Ipv6Header::IPV6_EXT_HOP_BY_HOP, ns3::Ipv6Interface::IsUp(), LocalDeliver(), m_dropTrace, m_interfaces, m_node, m_routingProtocol, m_rxTrace, m_sockets, ns3::MakeCallback(), NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, ns3::Ipv6RoutingProtocol::RouteInput(), and RouteInputError().
Referenced by AddInterface(), and SetupLoopback().
|
virtual |
Register the IPv6 Extensions.
Implements ns3::Ipv6.
Definition at line 1083 of file ipv6-l3-protocol.cc.
References ns3::Object::AggregateObject(), m_node, and ns3::Ipv6Extension::SetNode().
Referenced by ns3::AddInternetStack(), ns3::AddInternetStack6(), and ns3::CreateDualStackNode().
|
virtual |
Register the IPv6 Options.
Implements ns3::Ipv6.
Definition at line 1116 of file ipv6-l3-protocol.cc.
References ns3::Object::AggregateObject(), and m_node.
Referenced by ns3::AddInternetStack(), ns3::AddInternetStack6(), and ns3::CreateDualStackNode().
void ns3::Ipv6L3Protocol::Remove | ( | Ptr< IpL4Protocol > | protocol | ) |
Remove an L4 protocol.
protocol | L4 protocol to remove |
Definition at line 544 of file ipv6-l3-protocol.cc.
References m_protocols, and NS_LOG_FUNCTION.
|
virtual |
Remove an address from an interface.
interfaceIndex | interface index |
addressIndex | address index on the interface |
Implements ns3::Ipv6.
Definition at line 360 of file ipv6-l3-protocol.cc.
References GetInterface(), m_routingProtocol, ns3::Ipv6RoutingProtocol::NotifyRemoveAddress(), and NS_LOG_FUNCTION.
Referenced by RemoveAutoconfiguredAddress().
void ns3::Ipv6L3Protocol::RemoveAutoconfiguredAddress | ( | uint32_t | interface, |
Ipv6Address | network, | ||
Ipv6Prefix | mask, | ||
Ipv6Address | defaultRouter | ||
) |
Remove an autoconfigured address.
Typically it is used when an autoconfigured address expires.
interface | interface index |
network | network prefix |
mask | network mask |
defaultRouter | gateway |
Definition at line 301 of file ipv6-l3-protocol.cc.
References ns3::Mac48Address::ConvertFrom(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::NetDevice::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Ipv6Address::GetAny(), ns3::Ipv6Interface::GetDevice(), GetInterface(), ns3::Ipv6Interface::GetNAddresses(), GetRoutingProtocol(), m_prefixes, ns3::Ipv6Address::MakeAutoconfiguredAddress(), ns3::Ipv6RoutingProtocol::NotifyRemoveRoute(), NS_LOG_FUNCTION, and RemoveAddress().
|
private |
Fallback when no route is found.
p | packet |
ipHeader | IPv6 header |
sockErrno | error number |
Definition at line 1063 of file ipv6-l3-protocol.cc.
References DROP_ROUTE_ERROR, ns3::Object::GetObject(), m_dropTrace, m_node, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by Receive().
void ns3::Ipv6L3Protocol::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.
packet | packet to send |
source | source address of packet |
destination | address of packet |
protocol | number of packet |
route | route to take |
Definition at line 608 of file ipv6-l3-protocol.cc.
References BuildHeader(), DROP_NO_ROUTE, GetInterfaceForAddress(), GetInterfaceForDevice(), GetNetDevice(), ns3::Object::GetObject(), ns3::Packet::GetSize(), ns3::SocketIpTtlTag::GetTtl(), ns3::Ipv6Address::GetZero(), ns3::Ipv6Address::IsAllHostsMulticast(), ns3::Ipv6Address::IsAllNodesMulticast(), ns3::Ipv6Address::IsAllRoutersMulticast(), ns3::Ipv6Address::IsLinkLocal(), ns3::Ipv6Address::IsSolicitedMulticast(), m_defaultTtl, m_dropTrace, m_node, m_routingProtocol, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, ns3::Packet::RemovePacketTag(), ns3::Ipv6RoutingProtocol::RouteOutput(), and SendRealOut().
Referenced by ns3::TcpL4Protocol::NotifyNewAggregate(), ns3::UdpL4Protocol::NotifyNewAggregate(), and ns3::Icmpv6L4Protocol::NotifyNewAggregate().
|
private |
Send packet with route.
route | route |
packet | packet to send |
ipHeader | IPv6 header to add to the packet |
Definition at line 758 of file ipv6-l3-protocol.cc.
References ns3::Packet::AddHeader(), DROP_INTERFACE_DOWN, ns3::Ipv6Address::GetAny(), ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6Interface::GetDevice(), ns3::Ipv6ExtensionFragment::GetFragments(), GetIcmpv6(), GetInterface(), GetInterfaceForDevice(), ns3::NetDevice::GetMtu(), ns3::Object::GetObject(), ns3::Packet::GetSize(), ns3::Ipv6Header::GetSourceAddress(), ns3::Ipv6Header::IPV6_EXT_FRAGMENTATION, ns3::Ipv6Interface::IsUp(), list, m_dropTrace, m_ipForward, m_node, m_txTrace, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_LOGIC, ns3::PeekPointer(), and ns3::Ipv6Interface::Send().
Referenced by IpForward(), IpMulticastForward(), and Send().
void ns3::Ipv6L3Protocol::SetDefaultTtl | ( | uint8_t | ttl | ) |
Set the default TTL.
ttl | TTL to set |
Definition at line 602 of file ipv6-l3-protocol.cc.
References m_defaultTtl, and NS_LOG_FUNCTION.
|
virtual |
set an interface down.
i | interface index |
Implements ns3::Ipv6.
Definition at line 418 of file ipv6-l3-protocol.cc.
References GetInterface(), m_routingProtocol, ns3::Ipv6RoutingProtocol::NotifyInterfaceDown(), NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetDown().
|
virtual |
Enable or disable forwarding on interface.
i | interface index |
val | true = enable forwarding, false = disable |
Implements ns3::Ipv6.
Definition at line 477 of file ipv6-l3-protocol.cc.
References GetInterface(), NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetForwarding().
|
privatevirtual |
Set IPv6 forwarding state.
forward | IPv6 forwarding enabled or not |
Definition at line 484 of file ipv6-l3-protocol.cc.
References m_interfaces, m_ipForward, and NS_LOG_FUNCTION.
|
virtual |
Set metric for an interface.
i | index |
metric |
Implements ns3::Ipv6.
Definition at line 377 of file ipv6-l3-protocol.cc.
References GetInterface(), NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetMetric().
Set node for this stack.
node | node to set |
Definition at line 530 of file ipv6-l3-protocol.cc.
References m_node, NS_LOG_FUNCTION, and SetupLoopback().
Referenced by NotifyNewAggregate().
|
virtual |
Set routing protocol for this stack.
routingProtocol | IPv6 routing protocol to set |
Implements ns3::Ipv6.
Definition at line 131 of file ipv6-l3-protocol.cc.
References m_routingProtocol, NS_LOG_FUNCTION, and ns3::Ipv6RoutingProtocol::SetIpv6().
Referenced by ns3::AddInternetStack(), ns3::AddInternetStack6(), and ns3::CreateDualStackNode().
|
privatevirtual |
Set the ICMPv6 Redirect sending state.
sendIcmpv6Redirect | ICMPv6 Redirect sending enabled or not |
Definition at line 501 of file ipv6-l3-protocol.cc.
References m_sendIcmpv6Redirect, and NS_LOG_FUNCTION.
Referenced by GetTypeId().
|
virtual |
Set an interface up.
i | interface index |
Implements ns3::Ipv6.
Definition at line 405 of file ipv6-l3-protocol.cc.
References GetInterface(), m_routingProtocol, ns3::Ipv6RoutingProtocol::NotifyInterfaceUp(), NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetUp().
|
private |
Setup loopback interface.
Definition at line 431 of file ipv6-l3-protocol.cc.
References ns3::Node::AddDevice(), AddIpv6Interface(), ns3::CreateObject(), ns3::Node::GetDevice(), ns3::Ipv6Address::GetLoopback(), ns3::Node::GetNDevices(), m_node, m_routingProtocol, ns3::MakeCallback(), ns3::Ipv6RoutingProtocol::NotifyInterfaceUp(), NS_LOG_FUNCTION_NOARGS, PROT_NUMBER, Receive(), and ns3::Node::RegisterProtocolHandler().
Referenced by SetNode().
|
friend |
Definition at line 359 of file ipv6-l3-protocol.h.
|
friend |
Definition at line 358 of file ipv6-l3-protocol.h.
|
private |
Default TTL for outgoing packets.
Definition at line 511 of file ipv6-l3-protocol.h.
Referenced by GetTypeId(), Send(), and SetDefaultTtl().
|
private |
Callback to trace drop packets.
Definition at line 381 of file ipv6-l3-protocol.h.
Referenced by GetTypeId(), IpForward(), IpMulticastForward(), LocalDeliver(), Receive(), RouteInputError(), Send(), and SendRealOut().
|
private |
List of IPv6 interfaces.
Definition at line 501 of file ipv6-l3-protocol.h.
Referenced by AddIpv6Interface(), DoDispose(), GetInterface(), GetInterfaceForAddress(), GetInterfaceForDevice(), GetInterfaceForPrefix(), GetTypeId(), Receive(), and SetIpForward().
|
private |
Forwarding packets (i.e. router mode) state.
Definition at line 491 of file ipv6-l3-protocol.h.
Referenced by AddInterface(), GetIpForward(), SendRealOut(), and SetIpForward().
|
private |
Number of IPv6 interfaces managed by the stack.
Definition at line 506 of file ipv6-l3-protocol.h.
Referenced by AddIpv6Interface(), and GetNInterfaces().
Node attached to stack.
Definition at line 486 of file ipv6-l3-protocol.h.
Referenced by AddAutoconfiguredAddress(), AddInterface(), CreateRawSocket(), DoDispose(), IpForward(), IpMulticastForward(), LocalDeliver(), NotifyNewAggregate(), Receive(), RegisterExtensions(), RegisterOptions(), RouteInputError(), Send(), SendRealOut(), SetNode(), and SetupLoopback().
|
private |
List of IPv6 prefix received from RA.
Definition at line 526 of file ipv6-l3-protocol.h.
Referenced by AddAutoconfiguredAddress(), DoDispose(), and RemoveAutoconfiguredAddress().
|
private |
List of transport protocol.
Definition at line 496 of file ipv6-l3-protocol.h.
Referenced by DoDispose(), GetProtocol(), Insert(), and Remove().
|
private |
Routing protocol.
Definition at line 516 of file ipv6-l3-protocol.h.
Referenced by AddAddress(), DoDispose(), GetRoutingProtocol(), Receive(), RemoveAddress(), Send(), SetDown(), SetRoutingProtocol(), SetUp(), and SetupLoopback().
|
private |
Callback to trace RX (reception) packets.
Definition at line 376 of file ipv6-l3-protocol.h.
Referenced by GetTypeId(), and Receive().
|
private |
Allow ICMPv6 Redirect sending state.
Definition at line 531 of file ipv6-l3-protocol.h.
Referenced by GetSendIcmpv6Redirect(), IpForward(), and SetSendIcmpv6Redirect().
|
private |
List of IPv6 raw sockets.
Definition at line 521 of file ipv6-l3-protocol.h.
Referenced by CreateRawSocket(), DeleteRawSocket(), DoDispose(), and Receive().
|
private |
Callback to trace TX (transmission) packets.
Definition at line 371 of file ipv6-l3-protocol.h.
Referenced by GetTypeId(), and SendRealOut().
|
static |
The protocol number for IPv6 (0x86DD).
Definition at line 70 of file ipv6-l3-protocol.h.
Referenced by AddInterface(), ns3::NdiscCache::Entry::FunctionDelayTimeout(), ns3::NdiscCache::Entry::FunctionProbeTimeout(), ns3::Ipv6Interface::Send(), and SetupLoopback().