IPv6 layer implementation. More...
#include <introspected-doxygen.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. 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().