Implement the Ipv4 layer specifically for Click nodes to allow a clean integration of Click. More...
#include "ipv4-l3-click-protocol.h"
Public Member Functions | |
Ipv4L3ClickProtocol () | |
~Ipv4L3ClickProtocol () override | |
bool | AddAddress (uint32_t i, Ipv4InterfaceAddress address) override |
uint32_t | AddInterface (Ptr< NetDevice > device) override |
uint32_t | AddIpv4Interface (Ptr< Ipv4Interface > interface) |
Adds an Ipv4Interface to the interfaces list. More... | |
Ptr< Socket > | CreateRawSocket () override |
Creates a raw-socket. More... | |
void | DeleteRawSocket (Ptr< Socket > socket) override |
Deletes a particular raw socket. More... | |
Ipv4InterfaceAddress | GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const override |
Because addresses can be removed, the addressIndex is not guaranteed to be static across calls to this method. More... | |
Ptr< Icmpv4L4Protocol > | GetIcmp () const |
Returns the Icmpv4L4Protocol for the node. More... | |
Ptr< Ipv4Interface > | GetInterface (uint32_t i) const |
Get a pointer to the i'th Ipv4Interface. More... | |
int32_t | GetInterfaceForAddress (Ipv4Address addr) const override |
Return the interface number of the interface that has been assigned the specified IP address. More... | |
int32_t | GetInterfaceForDevice (Ptr< const NetDevice > device) const override |
int32_t | GetInterfaceForPrefix (Ipv4Address addr, Ipv4Mask mask) const override |
Return the interface number of first interface found that has an Ipv4 address within the prefix specified by the input address and mask parameters. More... | |
uint16_t | GetMetric (uint32_t i) const override |
uint16_t | GetMtu (uint32_t i) const override |
uint32_t | GetNAddresses (uint32_t interface) const override |
Ptr< NetDevice > | GetNetDevice (uint32_t i) override |
uint32_t | GetNInterfaces () const override |
Ptr< IpL4Protocol > | GetProtocol (int protocolNumber) const override |
Ptr< IpL4Protocol > | GetProtocol (int protocolNumber, int32_t interfaceIndex) const override |
Get L4 protocol by protocol number for the specified interface. More... | |
Ptr< Ipv4RoutingProtocol > | GetRoutingProtocol () const override |
Get the routing protocol to be used by this Ipv4 stack. More... | |
void | Insert (Ptr< IpL4Protocol > protocol) override |
void | Insert (Ptr< IpL4Protocol > protocol, uint32_t interfaceIndex) override |
Add a L4 protocol to a specific interface. More... | |
bool | IsDestinationAddress (Ipv4Address address, uint32_t iif) const override |
Determine whether address and interface corresponding to received packet can be accepted for local delivery. More... | |
bool | IsForwarding (uint32_t i) const override |
bool | IsUp (uint32_t i) const override |
void | LocalDeliver (Ptr< const Packet > p, const Ipv4Header &ip, uint32_t iif) |
Ipv4ClickRouting calls this to locally deliver a packet. More... | |
void | Receive (Ptr< NetDevice > device, Ptr< const Packet > p, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType) |
Lower layer calls this method to send a packet to Click. More... | |
void | Remove (Ptr< IpL4Protocol > protocol) override |
void | Remove (Ptr< IpL4Protocol > protocol, uint32_t interfaceIndex) override |
Remove a L4 protocol from a specific interface. More... | |
bool | RemoveAddress (uint32_t interfaceIndex, Ipv4Address address) override |
Remove the given address on named Ipv4 interface. More... | |
bool | RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex) override |
Remove the address at addressIndex on named interface. More... | |
Ipv4Address | SelectSourceAddress (Ptr< const NetDevice > device, Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope) override |
Return the first primary source address with scope less than or equal to the requested scope, to use in sending a packet to destination dst out of the specified device. More... | |
void | Send (Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol, Ptr< Ipv4Route > route) override |
void | SendDown (Ptr< Packet > packet, int ifid) |
void | SendWithHeader (Ptr< Packet > packet, Ipv4Header ipHeader, Ptr< Ipv4Route > route) override |
void | SetDefaultTtl (uint8_t ttl) |
void | SetDown (uint32_t i) override |
void | SetForwarding (uint32_t i, bool val) override |
void | SetMetric (uint32_t i, uint16_t metric) override |
void | SetNode (Ptr< Node > node) |
Calls m_node = node and sets up Loopback if needed. More... | |
void | SetPromisc (uint32_t i) |
Sets an interface to run on promiscuous mode. More... | |
void | SetRoutingProtocol (Ptr< Ipv4RoutingProtocol > routingProtocol) override |
Register a new routing protocol to be used by this Ipv4 stack. More... | |
void | SetUp (uint32_t i) override |
void | SetupLoopback () |
Sets up a Loopback device. More... | |
Ipv4Address | SourceAddressSelection (uint32_t interface, Ipv4Address dest) override |
Choose the source address to use with destination address. More... | |
Public Member Functions inherited from ns3::Ipv4 | |
Ipv4 () | |
~Ipv4 () override | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. More... | |
~Object () override | |
Destructor. More... | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. More... | |
void | Dispose () |
Dispose of this Object. More... | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. More... | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. More... | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. More... | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. More... | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. More... | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. More... | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. More... | |
bool | IsInitialized () const |
Check if the object has been initialized. More... | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. More... | |
SimpleRefCount (const SimpleRefCount &o[[maybe_unused]]) | |
Copy constructor. More... | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. More... | |
SimpleRefCount & | operator= (const SimpleRefCount &o[[maybe_unused]]) |
Assignment operator. More... | |
void | Ref () const |
Increment the reference count. More... | |
void | Unref () const |
Decrement the reference count. More... | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. More... | |
void | GetAttribute (std::string name, AttributeValue &value) const |
Get the value of an attribute, raising fatal errors if unsuccessful. More... | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. More... | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. More... | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. More... | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. More... | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. More... | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. More... | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. More... | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Get Type ID. More... | |
Static Public Member Functions inherited from ns3::Ipv4 | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. More... | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Static Public Attributes | |
static const uint16_t | PROT_NUMBER = 0x0800 |
Protocol number for Ipv4 L3 (0x0800). More... | |
Static Public Attributes inherited from ns3::Ipv4 | |
static const uint32_t | IF_ANY = 0xffffffff |
interface wildcard, meaning any interface More... | |
Protected Member Functions | |
void | DoDispose () override |
Destructor implementation. More... | |
void | NotifyNewAggregate () override |
This function will 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. More... | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | DoInitialize () |
Initialize() implementation. More... | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. More... | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. More... | |
Private Types | |
typedef std::vector< Ptr< Ipv4Interface > > | Ipv4InterfaceList |
List of IPv4 interfaces. More... | |
typedef std::map< Ptr< const NetDevice >, uint32_t > | Ipv4InterfaceReverseContainer |
Container of NetDevices registered to IPv4 and their interface indexes. More... | |
typedef std::map< L4ListKey_t, Ptr< IpL4Protocol > > | L4List_t |
Container of the IPv4 L4 instances. More... | |
typedef std::pair< int, int32_t > | L4ListKey_t |
Container of the IPv4 L4 keys: protocol number, interface index. More... | |
typedef std::list< Ptr< Ipv4RawSocketImpl > > | SocketList |
List of sockets. More... | |
Private Member Functions | |
Ipv4Header | BuildHeader (Ipv4Address source, Ipv4Address destination, uint8_t protocol, uint16_t payloadSize, uint8_t ttl, bool mayFragment) |
Build IPv4 header. More... | |
bool | GetIpForward () const override |
Get the IP forwarding state. More... | |
bool | GetStrongEndSystemModel () const override |
Get the Strong End System Model status. More... | |
bool | GetWeakEsModel () const override |
Get the Weak Es Model status. More... | |
void | SetIpForward (bool forward) override |
Set or unset the IP forwarding state. More... | |
void | SetStrongEndSystemModel (bool model) override |
Set or unset the Strong End System Model. More... | |
void | SetWeakEsModel (bool model) override |
Set or unset the Weak Es Model. More... | |
Private Attributes | |
uint8_t | m_defaultTtl |
Default TTL. More... | |
uint16_t | m_identification |
Identification. More... | |
Ipv4InterfaceList | m_interfaces |
List of interfaces. More... | |
bool | m_ipForward |
Whether IP forwarding is enabled. More... | |
TracedCallback< const Ipv4Header &, Ptr< const Packet >, uint32_t > | m_localDeliverTrace |
Ptr< Node > | m_node |
Node. More... | |
std::vector< bool > | m_promiscDeviceList |
List of promiscuous devices. More... | |
L4List_t | m_protocols |
List of IPv4 L4 protocols. More... | |
Ipv4InterfaceReverseContainer | m_reverseInterfacesContainer |
Container of NetDevice / Interface index associations. More... | |
Ptr< Ipv4RoutingProtocol > | m_routingProtocol |
IPv4 routing protocol. More... | |
TracedCallback< const Ipv4Header &, Ptr< const Packet >, uint32_t > | m_sendOutgoingTrace |
SocketList | m_sockets |
List of sockets. More... | |
bool | m_strongEndSystemModel |
Whether to use Strong End System Model. More... | |
TracedCallback< const Ipv4Header &, Ptr< const Packet >, uint32_t > | m_unicastForwardTrace |
Additional Inherited Members | |
Related Functions inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
Implement the Ipv4 layer specifically for Click nodes to allow a clean integration of Click.
This is code is mostly repeated from the Ipv4L3Protocol implementation. Changes include:
Definition at line 62 of file ipv4-l3-click-protocol.h.
|
private |
List of IPv4 interfaces.
Definition at line 282 of file ipv4-l3-click-protocol.h.
|
private |
Container of NetDevices registered to IPv4 and their interface indexes.
Definition at line 287 of file ipv4-l3-click-protocol.h.
|
private |
Container of the IPv4 L4 instances.
Definition at line 302 of file ipv4-l3-click-protocol.h.
|
private |
Container of the IPv4 L4 keys: protocol number, interface index.
Definition at line 297 of file ipv4-l3-click-protocol.h.
|
private |
List of sockets.
Definition at line 292 of file ipv4-l3-click-protocol.h.
ns3::Ipv4L3ClickProtocol::Ipv4L3ClickProtocol | ( | ) |
Definition at line 69 of file ipv4-l3-click-protocol.cc.
|
override |
Definition at line 74 of file ipv4-l3-click-protocol.cc.
|
overridevirtual |
interface | Interface number of an Ipv4 interface |
address | Ipv4InterfaceAddress address to associate with the underlying Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 395 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::AddAddress(), first::address, m_routingProtocol, and NS_LOG_FUNCTION.
device | device to add to the list of Ipv4 interfaces which can be used as output interfaces during packet forwarding. |
Once a device has been added, it can never be removed: if you want to disable it, you can invoke Ipv4::SetDown which will make sure that it is never used during packet forwarding.
Implements ns3::Ipv4.
Definition at line 642 of file ipv4-l3-click-protocol.cc.
References AddIpv4Interface(), ns3::CreateObject(), m_ipForward, m_node, ns3::MakeCallback(), NS_LOG_FUNCTION, PROT_NUMBER, ns3::ArpL3Protocol::PROT_NUMBER, Receive(), ns3::Node::RegisterProtocolHandler(), and ns3::Ipv4Interface::SetNode().
uint32_t ns3::Ipv4L3ClickProtocol::AddIpv4Interface | ( | Ptr< Ipv4Interface > | interface | ) |
Adds an Ipv4Interface to the interfaces list.
interface | Pointer to the Ipv4Interface to be added |
Definition at line 661 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::GetDevice(), m_interfaces, m_reverseInterfacesContainer, and NS_LOG_FUNCTION.
Referenced by AddInterface(), and SetupLoopback().
|
private |
Build IPv4 header.
source | IPv4 source address. |
destination | IPv4 destination address. |
protocol | Protocol. |
payloadSize | Payload size. |
ttl | Time To Live (TTL). |
mayFragment | Whether the packet can be fragmented or not. |
Definition at line 674 of file ipv4-l3-click-protocol.cc.
References ns3::Node::ChecksumEnabled(), ns3::Ipv4Header::EnableChecksum(), m_identification, NS_LOG_FUNCTION_NOARGS, ns3::Ipv4Header::SetDestination(), ns3::Ipv4Header::SetDontFragment(), ns3::Ipv4Header::SetIdentification(), ns3::Ipv4Header::SetMayFragment(), ns3::Ipv4Header::SetPayloadSize(), ns3::Ipv4Header::SetProtocol(), ns3::Ipv4Header::SetSource(), and ns3::Ipv4Header::SetTtl().
Referenced by Send().
Creates a raw-socket.
Implements ns3::Ipv4.
Definition at line 363 of file ipv4-l3-click-protocol.cc.
References m_node, m_sockets, NS_LOG_FUNCTION, and ns3::Ipv4RawSocketImpl::SetNode().
Deletes a particular raw socket.
socket | Pointer of socket to be deleted |
Implements ns3::Ipv4.
Definition at line 373 of file ipv4-l3-click-protocol.cc.
References m_sockets, and NS_LOG_FUNCTION.
|
overrideprotectedvirtual |
Destructor implementation.
This method is called by Dispose() or by the Object's destructor, whichever comes first.
Subclasses are expected to implement their real destruction code in an overridden version of this method and chain up to their parent's implementation once they are done. i.e, for simplicity, the destructor of every subclass should be empty and its content should be moved to the associated DoDispose() method.
It is safe to call GetObject() from within this method.
Reimplemented from ns3::Object.
Definition at line 79 of file ipv4-l3-click-protocol.cc.
References ns3::Object::DoDispose(), m_interfaces, m_node, m_protocols, m_reverseInterfacesContainer, m_routingProtocol, m_sockets, and NS_LOG_FUNCTION.
|
overridevirtual |
Because addresses can be removed, the addressIndex is not guaranteed to be static across calls to this method.
interface | Interface number of an Ipv4 interface |
addressIndex | index of Ipv4InterfaceAddress |
Implements ns3::Ipv4.
Definition at line 408 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::GetAddress(), and NS_LOG_FUNCTION.
Referenced by IsDestinationAddress(), LocalDeliver(), SelectSourceAddress(), and SourceAddressSelection().
Ptr< Icmpv4L4Protocol > ns3::Ipv4L3ClickProtocol::GetIcmp | ( | ) | const |
Returns the Icmpv4L4Protocol for the node.
Definition at line 890 of file ipv4-l3-click-protocol.cc.
References ns3::Object::GetObject(), GetProtocol(), and ns3::Icmpv4L4Protocol::GetStaticProtocolNumber().
Referenced by LocalDeliver().
Ptr< Ipv4Interface > ns3::Ipv4L3ClickProtocol::GetInterface | ( | uint32_t | i | ) | const |
Get a pointer to the i'th Ipv4Interface.
i | index of interface, pointer to which is to be returned |
Definition at line 132 of file ipv4-l3-click-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION.
Referenced by GetNAddresses(), GetNetDevice(), and LocalDeliver().
|
overridevirtual |
Return the interface number of the interface that has been assigned the specified IP address.
address | The IP address being searched for |
Each IP interface has one or more IP addresses associated with it. This method searches the list of interfaces for one that holds a particular address. This call takes an IP address as a parameter and returns the interface number of the first interface that has been assigned that address, or -1 if not found. There must be an exact match; this method will not match broadcast or multicast addresses.
Implements ns3::Ipv4.
Definition at line 150 of file ipv4-l3-click-protocol.cc.
References first::address, m_interfaces, and NS_LOG_FUNCTION.
|
overridevirtual |
device | The NetDevice for an Ipv4Interface |
Implements ns3::Ipv4.
Definition at line 190 of file ipv4-l3-click-protocol.cc.
References ns3::NetDevice::GetIfIndex(), m_reverseInterfacesContainer, and NS_LOG_FUNCTION.
Referenced by SelectSourceAddress().
|
overridevirtual |
Return the interface number of first interface found that has an Ipv4 address within the prefix specified by the input address and mask parameters.
address | The IP address assigned to the interface of interest. |
mask | The IP prefix to use in the mask |
Each IP interface has one or more IP addresses associated with it. This method searches the list of interfaces for the first one found that holds an address that is included within the prefix formed by the input address and mask parameters. The value -1 is returned if no match is found.
Implements ns3::Ipv4.
Definition at line 170 of file ipv4-l3-click-protocol.cc.
References first::address, m_interfaces, and NS_LOG_FUNCTION.
|
overrideprivatevirtual |
Get the IP forwarding state.
Implements ns3::Ipv4.
Definition at line 282 of file ipv4-l3-click-protocol.cc.
References m_ipForward.
|
overridevirtual |
interface | The interface number of an Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 561 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::GetMetric(), and NS_LOG_FUNCTION.
|
overridevirtual |
interface | Interface number of Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 569 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::GetDevice(), and NS_LOG_FUNCTION.
|
overridevirtual |
interface | Interface number of an Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 416 of file ipv4-l3-click-protocol.cc.
References GetInterface(), ns3::Ipv4Interface::GetNAddresses(), and NS_LOG_FUNCTION.
Referenced by IsDestinationAddress(), LocalDeliver(), SelectSourceAddress(), and SourceAddressSelection().
interface | The interface number of an Ipv4 interface. |
Implements ns3::Ipv4.
Definition at line 312 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::GetDevice(), GetInterface(), and NS_LOG_FUNCTION.
Referenced by SendDown(), and SetPromisc().
|
overridevirtual |
Implements ns3::Ipv4.
Definition at line 143 of file ipv4-l3-click-protocol.cc.
References m_interfaces, and NS_LOG_FUNCTION_NOARGS.
Referenced by IsDestinationAddress(), and SelectSourceAddress().
|
overridevirtual |
protocolNumber | number of protocol to lookup in this L4 Demux |
This method is typically called by lower layers to forward packets up the stack to the right protocol.
Implements ns3::Ipv4.
Definition at line 967 of file ipv4-l3-click-protocol.cc.
References NS_LOG_FUNCTION.
Referenced by GetIcmp(), and LocalDeliver().
|
overridevirtual |
Get L4 protocol by protocol number for the specified interface.
protocolNumber | protocol number |
interfaceIndex | interface index, -1 means "any" interface. |
Implements ns3::Ipv4.
Definition at line 975 of file ipv4-l3-click-protocol.cc.
References m_protocols, and NS_LOG_FUNCTION.
|
overridevirtual |
Get the routing protocol to be used by this Ipv4 stack.
Implements ns3::Ipv4.
Definition at line 126 of file ipv4-l3-click-protocol.cc.
References m_routingProtocol.
Referenced by Receive().
|
overrideprivatevirtual |
Get the Strong End System Model status.
RFC1122 term for whether host rejects datagram with a dest. address on another interface
Implements ns3::Ipv4.
Definition at line 306 of file ipv4-l3-click-protocol.cc.
References m_strongEndSystemModel.
Referenced by IsDestinationAddress().
|
static |
Get Type ID.
Definition at line 48 of file ipv4-l3-click-protocol.cc.
References m_defaultTtl, m_interfaces, ns3::MakeObjectVectorAccessor(), ns3::MakeUintegerAccessor(), and ns3::TypeId::SetParent().
|
overrideprivatevirtual |
Get the Weak Es Model status.
RFC1122 term for whether host accepts datagram with a dest. address on another interface
Implements ns3::Ipv4.
Definition at line 294 of file ipv4-l3-click-protocol.cc.
References m_strongEndSystemModel.
|
overridevirtual |
protocol | a template for the protocol to add to this L4 Demux. |
Invoke Copy on the input template to get a copy of the input protocol which can be used on the Node on which this L4 Demux is running. The new L4Protocol is registered internally as a working L4 Protocol and returned from this method. The caller does not get ownership of the returned pointer.
Implements ns3::Ipv4.
Definition at line 904 of file ipv4-l3-click-protocol.cc.
References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.
|
overridevirtual |
Add a L4 protocol to a specific interface.
This may be called multiple times for multiple interfaces for the same protocol. To insert for all interfaces, use the separate Insert (Ptr<IpL4Protocol> protocol) method.
Setting a protocol on a specific interface will overwrite the previously bound protocol.
protocol | L4 protocol. |
interfaceIndex | interface index. |
Implements ns3::Ipv4.
Definition at line 916 of file ipv4-l3-click-protocol.cc.
References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.
|
overridevirtual |
Determine whether address and interface corresponding to received packet can be accepted for local delivery.
address | The IP address being considered |
iif | The incoming Ipv4 interface index |
This method can be used to determine whether a received packet has an acceptable address for local delivery on the host. The address may be a unicast, multicast, or broadcast address. This method will return true if address is an exact match of a unicast address on one of the host's interfaces (see below), if address corresponds to a multicast group that the host has joined (and the incoming device is acceptable), or if address corresponds to a broadcast address.
If the Ipv4 attribute StrongEndSystemModel is true, the address must match one assigned to the incoming device. If the attribute is false, the unicast address may match any of the Ipv4 addresses on any interface.
Implements ns3::Ipv4.
Definition at line 204 of file ipv4-l3-click-protocol.cc.
References first::address, GetAddress(), ns3::Ipv4InterfaceAddress::GetBroadcast(), ns3::Ipv4InterfaceAddress::GetLocal(), GetNAddresses(), GetNInterfaces(), GetStrongEndSystemModel(), NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
overridevirtual |
interface | Interface number of Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 611 of file ipv4-l3-click-protocol.cc.
References NS_LOG_FUNCTION, and NS_LOG_LOGIC.
|
overridevirtual |
interface | Interface number of Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 577 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Interface::IsUp(), and NS_LOG_FUNCTION.
void ns3::Ipv4L3ClickProtocol::LocalDeliver | ( | Ptr< const Packet > | p, |
const Ipv4Header & | ip, | ||
uint32_t | iif | ||
) |
Ipv4ClickRouting calls this to locally deliver a packet.
p | the packet |
ip | The Ipv4Header of the packet |
iif | The interface on which the packet was received |
Definition at line 842 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Address::CombineMask(), ns3::Packet::Copy(), GetAddress(), ns3::Ipv4Header::GetDestination(), GetIcmp(), GetInterface(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Ipv4InterfaceAddress::GetMask(), GetNAddresses(), ns3::Ipv4Header::GetProtocol(), GetProtocol(), ns3::Ipv4Address::IsBroadcast(), ns3::Ipv4Address::IsMulticast(), ns3::Ipv4Address::IsSubnetDirectedBroadcast(), m_localDeliverTrace, NS_LOG_FUNCTION, ns3::IpL4Protocol::Receive(), ns3::IpL4Protocol::RX_CSUM_FAILED, ns3::IpL4Protocol::RX_ENDPOINT_CLOSED, ns3::IpL4Protocol::RX_ENDPOINT_UNREACH, and ns3::IpL4Protocol::RX_OK.
|
overrideprotectedvirtual |
This function will 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 102 of file ipv4-l3-click-protocol.cc.
References m_node, ns3::Object::NotifyNewAggregate(), and SetNode().
void ns3::Ipv4L3ClickProtocol::Receive | ( | Ptr< NetDevice > | device, |
Ptr< const Packet > | p, | ||
uint16_t | protocol, | ||
const Address & | from, | ||
const Address & | to, | ||
NetDevice::PacketType | packetType | ||
) |
Lower layer calls this method to send a packet to Click.
device | network device |
p | the packet |
protocol | protocol value |
from | address of the correspondent |
to | address of the destination |
packetType | type of the packet |
Definition at line 785 of file ipv4-l3-click-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Node::ChecksumEnabled(), ns3::Mac48Address::ConvertFrom(), ns3::Packet::Copy(), ns3::Ipv4Header::EnableChecksum(), ns3::Ipv4RawSocketImpl::ForwardUp(), ns3::Node::GetId(), GetRoutingProtocol(), ns3::Ipv4Interface::IsUp(), m_interfaces, m_node, m_sockets, NS_ASSERT_MSG, NS_LOG_FUNCTION, NS_LOG_LOGIC, PROT_NUMBER, ns3::Packet::RemoveHeader(), ns3::EthernetHeader::SetDestination(), ns3::EthernetHeader::SetLengthType(), and ns3::EthernetHeader::SetSource().
Referenced by AddInterface(), SetPromisc(), and SetupLoopback().
|
overridevirtual |
protocol | protocol to remove from this demux. |
The input value to this method should be the value returned from the Ipv4L4Protocol::Insert method.
Implements ns3::Ipv4.
Definition at line 930 of file ipv4-l3-click-protocol.cc.
References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.
|
overridevirtual |
Remove a L4 protocol from a specific interface.
protocol | L4 protocol to remove. |
interfaceIndex | interface index. |
Implements ns3::Ipv4.
Definition at line 948 of file ipv4-l3-click-protocol.cc.
References ns3::IpL4Protocol::GetProtocolNumber(), m_protocols, NS_LOG_FUNCTION, and NS_LOG_WARN.
|
overridevirtual |
Remove the given address on named Ipv4 interface.
interface | Interface number of an Ipv4 interface |
address | The address to remove |
Implements ns3::Ipv4.
Definition at line 441 of file ipv4-l3-click-protocol.cc.
References first::address, ns3::Ipv4Address::GetLoopback(), m_routingProtocol, NS_LOG_FUNCTION, and NS_LOG_WARN.
|
overridevirtual |
Remove the address at addressIndex on named interface.
The addressIndex for all higher indices will decrement by one after this method is called; so, for example, to remove 5 addresses from an interface i, one could call RemoveAddress (i, 0); 5 times.
interface | Interface number of an Ipv4 interface |
addressIndex | index of Ipv4InterfaceAddress to remove |
Implements ns3::Ipv4.
Definition at line 424 of file ipv4-l3-click-protocol.cc.
References first::address, m_routingProtocol, and NS_LOG_FUNCTION.
|
overridevirtual |
Return the first primary source address with scope less than or equal to the requested scope, to use in sending a packet to destination dst out of the specified device.
This method mirrors the behavior of Linux inet_select_addr() and is provided because interfaces may have multiple IP addresses configured on them with different scopes, and with a primary and secondary status. Secondary addresses are never returned.
If a non-zero device pointer is provided, the method first tries to return a primary address that is configured on that device, and whose subnet matches that of dst and whose scope is less than or equal to the requested scope. If a primary address does not match the subnet of dst but otherwise matches the scope, it is returned. If no such address on the device is found, the other devices are searched in order of their interface index, but not considering dst as a factor in the search. Because a loopback interface is typically the first one configured on a node, it will be the first alternate device to be tried. Addresses scoped at LINK scope are not returned in this phase.
If no device pointer is provided, the same logic as above applies, only that there is no preferred device that is consulted first. This means that if the device pointer is null, input parameter dst will be ignored.
If there are no possible addresses to return, a warning log message is issued and the all-zeroes address is returned.
device | output NetDevice (optionally provided, only to constrain the search) |
dst | Destination address to match, if device is provided |
scope | Scope of returned address must be less than or equal to this |
Implements ns3::Ipv4.
Definition at line 491 of file ipv4-l3-click-protocol.cc.
References ns3::Ipv4Address::CombineMask(), GetAddress(), GetInterfaceForDevice(), ns3::Ipv4InterfaceAddress::GetLocal(), ns3::Ipv4InterfaceAddress::GetMask(), GetNAddresses(), GetNInterfaces(), ns3::Ipv4InterfaceAddress::GetScope(), ns3::Ipv4InterfaceAddress::IsSecondary(), ns3::Ipv4InterfaceAddress::LINK, NS_ASSERT_MSG, NS_LOG_FUNCTION, and NS_LOG_WARN.
|
overridevirtual |
packet | packet to send |
source | source address of packet |
destination | address of packet |
protocol | number of packet |
route | route entry |
Higher-level layers call this method to send a packet to Click
Implements ns3::Ipv4.
Definition at line 709 of file ipv4-l3-click-protocol.cc.
References ns3::Packet::AddHeader(), BuildHeader(), ns3::Node::ChecksumEnabled(), ns3::Packet::Copy(), ns3::Ipv4Header::EnableChecksum(), ns3::Packet::GetSize(), ns3::SocketIpTtlTag::GetTtl(), m_defaultTtl, m_routingProtocol, NS_LOG_FUNCTION, and ns3::Packet::RemovePacketTag().
packet | packet to send down the stack |
ifid | interface to be used for sending down packet |
Ipv4ClickRouting calls this method to send a packet further down the stack
Definition at line 752 of file ipv4-l3-click-protocol.cc.
References ns3::EthernetHeader::GetDestination(), ns3::EthernetHeader::GetLengthType(), GetNetDevice(), ns3::LlcSnapHeader::GetType(), and ns3::Packet::RemoveHeader().
|
overridevirtual |
packet | packet to send |
ipHeader | IP Header |
route | route entry |
Higher-level layers call this method to send a packet with IPv4 Header (Intend to be used with IpHeaderInclude attribute.)
Implements ns3::Ipv4.
Definition at line 738 of file ipv4-l3-click-protocol.cc.
References ns3::Packet::AddHeader(), ns3::Node::ChecksumEnabled(), ns3::Packet::Copy(), ns3::Ipv4Header::EnableChecksum(), ns3::Ipv4Header::GetDestination(), ns3::Ipv4Header::GetSource(), m_routingProtocol, and NS_LOG_FUNCTION.
void ns3::Ipv4L3ClickProtocol::SetDefaultTtl | ( | uint8_t | ttl | ) |
ttl | default ttl to use |
When we need to send an ipv4 packet, we use this default ttl value.
Definition at line 319 of file ipv4-l3-click-protocol.cc.
References m_defaultTtl, and NS_LOG_FUNCTION_NOARGS.
|
overridevirtual |
interface | Interface number of Ipv4 interface |
Set the interface into the "down" state. In this state, it is ignored during Ipv4 forwarding.
Implements ns3::Ipv4.
Definition at line 598 of file ipv4-l3-click-protocol.cc.
References m_routingProtocol, NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetDown().
|
overridevirtual |
interface | Interface number of Ipv4 interface |
val | Value to set the forwarding flag |
If set to true, IP forwarding is enabled for input datagrams on this device
Implements ns3::Ipv4.
Definition at line 620 of file ipv4-l3-click-protocol.cc.
References NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetForwarding().
|
overrideprivatevirtual |
Set or unset the IP forwarding state.
forward | the forwarding state |
Implements ns3::Ipv4.
Definition at line 271 of file ipv4-l3-click-protocol.cc.
References m_interfaces, m_ipForward, and NS_LOG_FUNCTION.
|
overridevirtual |
interface | The interface number of an Ipv4 interface |
metric | routing metric (cost) associated to the underlying Ipv4 interface |
Implements ns3::Ipv4.
Definition at line 553 of file ipv4-l3-click-protocol.cc.
References NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetMetric().
Calls m_node = node and sets up Loopback if needed.
node | Pointer to the node |
Definition at line 387 of file ipv4-l3-click-protocol.cc.
References m_node, and SetupLoopback().
Referenced by NotifyNewAggregate().
void ns3::Ipv4L3ClickProtocol::SetPromisc | ( | uint32_t | i | ) |
Sets an interface to run on promiscuous mode.
i | Interface ID. |
Definition at line 628 of file ipv4-l3-click-protocol.cc.
References GetNetDevice(), ns3::MakeCallback(), NS_ASSERT, Receive(), and ns3::Node::RegisterProtocolHandler().
|
overridevirtual |
Register a new routing protocol to be used by this Ipv4 stack.
This call will replace any routing protocol that has been previously registered. If you want to add multiple routing protocols, you must add them to a Ipv4ListRoutingProtocol directly.
routingProtocol | smart pointer to Ipv4RoutingProtocol object |
Implements ns3::Ipv4.
Definition at line 118 of file ipv4-l3-click-protocol.cc.
References m_routingProtocol, and NS_LOG_FUNCTION.
|
overrideprivatevirtual |
Set or unset the Strong End System Model.
RFC1122 term for whether host rejects datagram with a dest. address on another interface
model | true for Strong End System Model |
Implements ns3::Ipv4.
Definition at line 300 of file ipv4-l3-click-protocol.cc.
References m_strongEndSystemModel.
|
overridevirtual |
interface | Interface number of Ipv4 interface |
Set the interface into the "up" state. In this state, it is considered valid during Ipv4 forwarding.
Implements ns3::Ipv4.
Definition at line 585 of file ipv4-l3-click-protocol.cc.
References m_routingProtocol, NS_LOG_FUNCTION, and ns3::Ipv4Interface::SetUp().
void ns3::Ipv4L3ClickProtocol::SetupLoopback | ( | ) |
Sets up a Loopback device.
Definition at line 326 of file ipv4-l3-click-protocol.cc.
References ns3::Node::AddDevice(), AddIpv4Interface(), ns3::CreateObject(), ns3::Node::GetDevice(), ns3::Ipv4Address::GetLoopback(), ns3::Ipv4Mask::GetLoopback(), ns3::Node::GetNDevices(), m_node, m_routingProtocol, ns3::MakeCallback(), NS_LOG_FUNCTION_NOARGS, PROT_NUMBER, Receive(), and ns3::Node::RegisterProtocolHandler().
Referenced by SetNode().
|
overrideprivatevirtual |
Set or unset the Weak Es Model.
RFC1122 term for whether host accepts datagram with a dest. address on another interface
model | true for Weak Es Model |
Implements ns3::Ipv4.
Definition at line 288 of file ipv4-l3-click-protocol.cc.
References m_strongEndSystemModel.
|
overridevirtual |
Choose the source address to use with destination address.
interface | interface index |
dest | IPv4 destination address |
Implements ns3::Ipv4.
Definition at line 464 of file ipv4-l3-click-protocol.cc.
References GetAddress(), ns3::Ipv4InterfaceAddress::GetLocal(), GetNAddresses(), and NS_LOG_FUNCTION.
|
private |
Default TTL.
Definition at line 311 of file ipv4-l3-click-protocol.h.
Referenced by GetTypeId(), Send(), and SetDefaultTtl().
|
private |
Identification.
Definition at line 312 of file ipv4-l3-click-protocol.h.
Referenced by BuildHeader().
|
private |
List of interfaces.
Definition at line 308 of file ipv4-l3-click-protocol.h.
Referenced by AddIpv4Interface(), DoDispose(), GetInterface(), GetInterfaceForAddress(), GetInterfaceForPrefix(), GetNInterfaces(), GetTypeId(), Receive(), and SetIpForward().
|
private |
Whether IP forwarding is enabled.
Definition at line 305 of file ipv4-l3-click-protocol.h.
Referenced by AddInterface(), GetIpForward(), and SetIpForward().
|
private |
Definition at line 321 of file ipv4-l3-click-protocol.h.
Referenced by LocalDeliver().
Node.
Definition at line 314 of file ipv4-l3-click-protocol.h.
Referenced by AddInterface(), CreateRawSocket(), DoDispose(), NotifyNewAggregate(), Receive(), SetNode(), and SetupLoopback().
|
private |
List of promiscuous devices.
Definition at line 325 of file ipv4-l3-click-protocol.h.
|
private |
List of IPv4 L4 protocols.
Definition at line 307 of file ipv4-l3-click-protocol.h.
Referenced by DoDispose(), GetProtocol(), Insert(), and Remove().
|
private |
Container of NetDevice / Interface index associations.
Definition at line 310 of file ipv4-l3-click-protocol.h.
Referenced by AddIpv4Interface(), DoDispose(), and GetInterfaceForDevice().
|
private |
IPv4 routing protocol.
Definition at line 304 of file ipv4-l3-click-protocol.h.
Referenced by AddAddress(), DoDispose(), GetRoutingProtocol(), RemoveAddress(), Send(), SendWithHeader(), SetDown(), SetRoutingProtocol(), SetUp(), and SetupLoopback().
|
private |
Definition at line 317 of file ipv4-l3-click-protocol.h.
|
private |
List of sockets.
Definition at line 323 of file ipv4-l3-click-protocol.h.
Referenced by CreateRawSocket(), DeleteRawSocket(), DoDispose(), and Receive().
|
private |
Whether to use Strong End System Model.
Definition at line 306 of file ipv4-l3-click-protocol.h.
Referenced by GetStrongEndSystemModel(), GetWeakEsModel(), SetStrongEndSystemModel(), and SetWeakEsModel().
|
private |
Definition at line 319 of file ipv4-l3-click-protocol.h.
|
static |
Protocol number for Ipv4 L3 (0x0800).
Definition at line 75 of file ipv4-l3-click-protocol.h.
Referenced by AddInterface(), Receive(), and SetupLoopback().