IPv6 layer implementation. More...
#include <introspected-doxygen.h>
Inheritance diagram for ns3::Ipv6L3Protocol: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. More... | |
| 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. More... | |
| uint32_t | AddInterface (Ptr< NetDevice > device) |
| Add IPv6 interface for a device. More... | |
| Ptr< Socket > | CreateRawSocket () |
| Create raw IPv6 socket. More... | |
| void | DeleteRawSocket (Ptr< Socket > socket) |
| Remove raw IPv6 socket. More... | |
| Ipv6InterfaceAddress | GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const |
| Get an address. More... | |
| Ptr< Icmpv6L4Protocol > | GetIcmpv6 () const |
| Get ICMPv6 protocol. More... | |
| Ptr< Ipv6Interface > | GetInterface (uint32_t i) const |
| Get an interface. More... | |
| int32_t | GetInterfaceForAddress (Ipv6Address addr) const |
| Get interface index which has specified IPv6 address. More... | |
| int32_t | GetInterfaceForDevice (Ptr< const NetDevice > device) const |
| Get interface index which is on a specified net device. More... | |
| int32_t | GetInterfaceForPrefix (Ipv6Address addr, Ipv6Prefix mask) const |
| Get interface index which match specified address/prefix. More... | |
| uint16_t | GetMetric (uint32_t i) const |
| Get metric for an interface. More... | |
| uint16_t | GetMtu (uint32_t i) const |
| Get MTU for an interface. More... | |
| uint32_t | GetNAddresses (uint32_t interface) const |
| Get number of address for an interface. More... | |
| Ptr< NetDevice > | GetNetDevice (uint32_t i) |
| Get device by index. More... | |
| uint32_t | GetNInterfaces () const |
| Get current number of interface on this stack. More... | |
| Ptr< IpL4Protocol > | GetProtocol (int protocolNumber) const |
| Get L4 protocol by protocol number. More... | |
| Ptr< Ipv6RoutingProtocol > | GetRoutingProtocol () const |
| Get current routing protocol used. More... | |
| void | Insert (Ptr< IpL4Protocol > protocol) |
| Add an L4 protocol. More... | |
| bool | IsForwarding (uint32_t i) const |
| Is interface allows forwarding ? More... | |
| bool | IsUp (uint32_t i) const |
| Is specified interface up ? More... | |
| 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. More... | |
| virtual void | RegisterExtensions () |
| Register the IPv6 Extensions. | |
| virtual void | RegisterOptions () |
| Register the IPv6 Options. | |
| void | Remove (Ptr< IpL4Protocol > protocol) |
| Remove an L4 protocol. More... | |
| bool | RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex) |
| Remove an address from an interface. More... | |
| void | RemoveAutoconfiguredAddress (uint32_t interface, Ipv6Address network, Ipv6Prefix mask, Ipv6Address defaultRouter) |
| Remove an autoconfigured address. More... | |
| 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. More... | |
| void | SetDefaultTclass (uint8_t tclass) |
| Set the default TCLASS. More... | |
| void | SetDefaultTtl (uint8_t ttl) |
| Set the default TTL. More... | |
| void | SetDown (uint32_t i) |
| set an interface down. More... | |
| void | SetForwarding (uint32_t i, bool val) |
| Enable or disable forwarding on interface. More... | |
| void | SetMetric (uint32_t i, uint16_t metric) |
| Set metric for an interface. More... | |
| void | SetNode (Ptr< Node > node) |
| Set node for this stack. More... | |
| void | SetRoutingProtocol (Ptr< Ipv6RoutingProtocol > routingProtocol) |
| Set routing protocol for this stack. More... | |
| void | SetUp (uint32_t i) |
| Set an interface up. More... | |
Public Member Functions inherited from ns3::Ipv6 | |
| Ipv6 () | |
| Constructor. | |
| virtual | ~Ipv6 () |
| Destructor. | |
Public Member Functions inherited from ns3::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 | Initialize (void) |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
| SimpleRefCount (const SimpleRefCount &o) | |
| uint32_t | GetReferenceCount (void) const |
| SimpleRefCount & | operator= (const SimpleRefCount &o) |
| void | Ref (void) const |
| void | Unref (void) const |
Public Member Functions inherited from ns3::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. More... | |
Static Public Member Functions inherited from ns3::Ipv6 | |
| static TypeId | GetTypeId (void) |
Static Public Member Functions inherited from ns3::Object | |
| static TypeId | GetTypeId (void) |
Static Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
| static void | Cleanup (void) |
Static Public Member Functions inherited from ns3::ObjectBase | |
| static TypeId | GetTypeId (void) |
Static Public Attributes | |
| static const uint16_t | PROT_NUMBER = 0x86DD |
| The protocol number for IPv6 (0x86DD). | |
Static Public Attributes inherited from ns3::Ipv6 | |
| 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. More... | |
Protected Member Functions inherited from ns3::Object | |
| Object (const Object &o) | |
| virtual void | DoInitialize (void) |
Protected Member Functions inherited from ns3::ObjectBase | |
| void | ConstructSelf (const AttributeConstructionList &attributes) |
| virtual void | NotifyConstructionCompleted (void) |
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. More... | |
| uint32_t | AddIpv6Interface (Ptr< Ipv6Interface > interface) |
| Add an IPv6 interface to the stack. More... | |
| Ipv6Header | BuildHeader (Ipv6Address src, Ipv6Address dst, uint8_t protocol, uint16_t payloadSize, uint8_t hopLimit, uint8_t tclass) |
| Construct an IPv6 header. More... | |
| virtual bool | GetIpForward () const |
| Get IPv6 forwarding state. More... | |
| virtual bool | GetSendIcmpv6Redirect () const |
| Get the ICMPv6 Redirect sending state. More... | |
| void | IpForward (Ptr< Ipv6Route > rtentry, Ptr< const Packet > p, const Ipv6Header &header) |
| Forward a packet. More... | |
| void | IpMulticastForward (Ptr< Ipv6MulticastRoute > mrtentry, Ptr< const Packet > p, const Ipv6Header &header) |
| Forward a packet in multicast. More... | |
| void | LocalDeliver (Ptr< const Packet > p, Ipv6Header const &ip, uint32_t iif) |
| Deliver a packet. More... | |
| Ipv6L3Protocol & | operator= (const Ipv6L3Protocol &o) |
| Copy constructor. More... | |
| void | RouteInputError (Ptr< const Packet > p, const Ipv6Header &ipHeader, Socket::SocketErrno sockErrno) |
| Fallback when no route is found. More... | |
| void | SendRealOut (Ptr< Ipv6Route > route, Ptr< Packet > packet, Ipv6Header const &ipHeader) |
| Send packet with route. More... | |
| virtual void | SetIpForward (bool forward) |
| Set IPv6 forwarding state. More... | |
| virtual void | SetSendIcmpv6Redirect (bool sendIcmpv6Redirect) |
| Set the ICMPv6 Redirect sending state. More... | |
| void | SetupLoopback () |
| Setup loopback interface. | |
Private Attributes | |
| uint8_t | m_defaultTclass |
| Default TCLASS for outgoing packets. | |
| 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.
ns3::Ipv6L3Protocol is accessible through the following paths with Config::Set and Config::Connect:
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.
Reason why a packet has been dropped.
| Enumerator | |
|---|---|
| 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.
|
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 337 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::AddAddress(), m_routingProtocol, 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 257 of file ipv6-l3-protocol.cc.
References AddAddress(), ns3::Mac48Address::ConvertFrom(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Address::GetAny(), ns3::Ipv6Interface::GetDevice(), GetInterface(), GetRoutingProtocol(), ns3::Mac48Address::IsMatchingType(), m_node, m_prefixes, ns3::Ipv6Address::MakeAutoconfiguredAddress(), 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 148 of file ipv6-l3-protocol.cc.
References AddIpv6Interface(), 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 161 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 |
| hopLimit | Hop limit |
Definition at line 1091 of file ipv6-l3-protocol.cc.
References NS_LOG_FUNCTION, ns3::Ipv6Header::SetDestinationAddress(), ns3::Ipv6Header::SetHopLimit(), ns3::Ipv6Header::SetNextHeader(), ns3::Ipv6Header::SetPayloadLength(), ns3::Ipv6Header::SetSourceAddress(), and ns3::Ipv6Header::SetTrafficClass().
Referenced by Send().
Create raw IPv6 socket.
Definition at line 568 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 577 of file ipv6-l3-protocol.cc.
References m_sockets, and NS_LOG_FUNCTION.
|
virtual |
Get an address.
| interfaceIndex | interface index |
| addressIndex | address index on the interface |
Implements ns3::Ipv6.
Definition at line 357 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetAddress(), and NS_LOG_FUNCTION.
| Ptr< Icmpv6L4Protocol > ns3::Ipv6L3Protocol::GetIcmpv6 | ( | ) | const |
Get ICMPv6 protocol.
Definition at line 591 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 171 of file ipv6-l3-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION.
Referenced by AddAutoconfiguredAddress(), GetNetDevice(), LocalDeliver(), RemoveAutoconfiguredAddress(), and SendRealOut().
|
virtual |
Get interface index which has specified IPv6 address.
| addr | IPv6 address |
Implements ns3::Ipv6.
Definition at line 193 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 241 of file ipv6-l3-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION.
Referenced by Send().
|
virtual |
Get interface index which match specified address/prefix.
| addr | IPv6 address |
| mask | IPv6 prefix (mask) |
Implements ns3::Ipv6.
Definition at line 215 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Address::CombinePrefix(), m_interfaces, and NS_LOG_FUNCTION.
|
privatevirtual |
Get IPv6 forwarding state.
Implements ns3::Ipv6.
Definition at line 499 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 388 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetMetric(), and NS_LOG_FUNCTION.
|
virtual |
Get MTU for an interface.
| i | index |
Implements ns3::Ipv6.
Definition at line 395 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetDevice(), and NS_LOG_FUNCTION.
|
virtual |
Get number of address for an interface.
| interface | interface index |
Implements ns3::Ipv6.
Definition at line 350 of file ipv6-l3-protocol.cc.
References ns3::Ipv6Interface::GetNAddresses(), and NS_LOG_FUNCTION.
Get device by index.
| i | device index on this stack |
Implements ns3::Ipv6.
Definition at line 235 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 187 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 554 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 142 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 511 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.
Definition at line 53 of file ipv6-l3-protocol.cc.
References GetSendIcmpv6Redirect(), m_defaultTclass, m_defaultTtl, m_dropTrace, m_interfaces, m_rxTrace, m_txTrace, ns3::MakeTraceSourceAccessor(), ns3::TypeId::SetParent(), and SetSendIcmpv6Redirect().
| void ns3::Ipv6L3Protocol::Insert | ( | Ptr< IpL4Protocol > | protocol | ) |
Add an L4 protocol.
| protocol | L4 protocol |
Definition at line 542 of file ipv6-l3-protocol.cc.
References m_protocols, and NS_LOG_FUNCTION.
|
private |
Forward a packet.
| rtentry | route |
| p | packet to forward |
| header | IPv6 header to add to the packet |
Definition at line 882 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::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 951 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 472 of file ipv6-l3-protocol.cc.
References NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
virtual |
Is specified interface up ?
| i | interface index |
Implements ns3::Ipv6.
Definition at line 402 of file ipv6-l3-protocol.cc.
References 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 983 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::Ipv6Address::IsMulticast(), m_dropTrace, m_node, NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, ns3::IpL4Protocol::Receive(), and ns3::Packet::RemoveAtStart().
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 517 of file ipv6-l3-protocol.cc.
References m_node, ns3::Object::NotifyNewAggregate(), 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 699 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::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, and RouteInputError().
Referenced by AddInterface(), and SetupLoopback().
| void ns3::Ipv6L3Protocol::Remove | ( | Ptr< IpL4Protocol > | protocol | ) |
Remove an L4 protocol.
| protocol | L4 protocol to remove |
Definition at line 548 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 364 of file ipv6-l3-protocol.cc.
References m_routingProtocol, 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 305 of file ipv6-l3-protocol.cc.
References ns3::Mac48Address::ConvertFrom(), ns3::Ipv6InterfaceAddress::GetAddress(), ns3::Ipv6Interface::GetAddress(), ns3::Ipv6Address::GetAny(), ns3::Ipv6Interface::GetDevice(), GetInterface(), ns3::Ipv6Interface::GetNAddresses(), GetRoutingProtocol(), m_prefixes, ns3::Ipv6Address::MakeAutoconfiguredAddress(), NS_LOG_FUNCTION, and RemoveAddress().
|
private |
Fallback when no route is found.
| p | packet |
| ipHeader | IPv6 header |
| sockErrno | error number |
Definition at line 1084 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 618 of file ipv6-l3-protocol.cc.
References BuildHeader(), DROP_NO_ROUTE, GetInterfaceForAddress(), GetInterfaceForDevice(), GetNetDevice(), ns3::Object::GetObject(), ns3::Packet::GetSize(), ns3::Ipv6Address::GetZero(), ns3::Ipv6Address::IsAllHostsMulticast(), ns3::Ipv6Address::IsAllNodesMulticast(), ns3::Ipv6Address::IsAllRoutersMulticast(), ns3::Ipv6Address::IsLinkLocal(), ns3::Ipv6Address::IsSolicitedMulticast(), m_defaultTclass, m_defaultTtl, m_dropTrace, m_node, m_routingProtocol, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_LOGIC, NS_LOG_WARN, ns3::Packet::RemovePacketTag(), and SendRealOut().
Referenced by ns3::UdpL4Protocol::NotifyNewAggregate(), ns3::TcpL4Protocol::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 777 of file ipv6-l3-protocol.cc.
References ns3::Packet::AddHeader(), DROP_INTERFACE_DOWN, ns3::Ipv6Address::GetAny(), ns3::Ipv6Header::GetDestinationAddress(), ns3::Ipv6ExtensionFragment::GetFragments(), GetIcmpv6(), GetInterface(), ns3::Object::GetObject(), ns3::Packet::GetSize(), ns3::Ipv6Header::GetSourceAddress(), m_dropTrace, m_ipForward, m_node, m_txTrace, NS_ASSERT, NS_LOG_FUNCTION, and NS_LOG_LOGIC.
Referenced by IpForward(), IpMulticastForward(), and Send().
| void ns3::Ipv6L3Protocol::SetDefaultTclass | ( | uint8_t | tclass | ) |
Set the default TCLASS.
| tclass | TCLASS to set |
Definition at line 612 of file ipv6-l3-protocol.cc.
References m_defaultTclass, and NS_LOG_FUNCTION.
| void ns3::Ipv6L3Protocol::SetDefaultTtl | ( | uint8_t | ttl | ) |
Set the default TTL.
| ttl | TTL to set |
Definition at line 606 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 422 of file ipv6-l3-protocol.cc.
References m_routingProtocol, 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 481 of file ipv6-l3-protocol.cc.
References NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetForwarding().
|
privatevirtual |
Set IPv6 forwarding state.
| forward | IPv6 forwarding enabled or not |
Implements ns3::Ipv6.
Definition at line 488 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 381 of file ipv6-l3-protocol.cc.
References NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetMetric().
Set node for this stack.
| node | node to set |
Definition at line 534 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 135 of file ipv6-l3-protocol.cc.
References m_routingProtocol, and NS_LOG_FUNCTION.
|
privatevirtual |
Set the ICMPv6 Redirect sending state.
| sendIcmpv6Redirect | ICMPv6 Redirect sending enabled or not |
Definition at line 505 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 409 of file ipv6-l3-protocol.cc.
References m_routingProtocol, NS_LOG_FUNCTION, and ns3::Ipv6Interface::SetUp().