22 #ifndef IPV4_L3_CLICK_PROTOCOL_H
23 #define IPV4_L3_CLICK_PROTOCOL_H
26 #include "ns3/net-device.h"
27 #include "ns3/packet.h"
28 #include "ns3/ipv4-routing-protocol.h"
29 #include "ns3/traced-callback.h"
30 #include "ns3/ipv4-interface.h"
40 class Ipv4RoutingTableEntry;
44 class Ipv4RawSocketImpl;
46 class Icmpv4L4Protocol;
70 static const uint16_t PROT_NUMBER;
92 void SetDefaultTtl (uint8_t ttl);
175 void SetupLoopback (
void);
206 bool RemoveAddress (uint32_t interfaceIndex, uint32_t addressIndex);
211 void SetMetric (uint32_t i, uint16_t metric);
213 uint16_t
GetMtu (uint32_t i)
const;
214 bool IsUp (uint32_t i)
const;
215 void SetUp (uint32_t i);
219 void SetPromisc (uint32_t i);
233 uint16_t payloadSize,
242 typedef std::vector<Ptr<Ipv4Interface> > Ipv4InterfaceList;
246 typedef std::map<Ptr<const NetDevice>, uint32_t > Ipv4InterfaceReverseContainer;
247 typedef std::list<Ptr<Ipv4RawSocketImpl> > SocketList;
251 typedef std::pair<int, int32_t> L4ListKey_t;
255 typedef std::map<L4ListKey_t, Ptr<IpL4Protocol> > L4List_t;
260 L4List_t m_protocols;
261 Ipv4InterfaceList m_interfaces;
262 Ipv4InterfaceReverseContainer m_reverseInterfacesContainer;
263 uint8_t m_defaultTtl;
264 uint16_t m_identification;
275 SocketList m_sockets;
277 std::vector<bool> m_promiscDeviceList;
a polymophic address class
Ipv4 addresses are stored in host order in this class.
Access to the IPv4 forwarding table, interfaces, and configuration.
virtual int32_t GetInterfaceForAddress(Ipv4Address address) const =0
Return the interface number of the interface that has been assigned the specified IP address.
virtual void SetIpForward(bool forward)=0
Set or unset the IP forwarding state.
virtual Ptr< Socket > CreateRawSocket(void)=0
Creates a raw socket.
virtual void DeleteRawSocket(Ptr< Socket > socket)=0
Deletes a particular raw socket.
virtual bool IsForwarding(uint32_t interface) const =0
virtual void SetMetric(uint32_t interface, uint16_t metric)=0
virtual void SetRoutingProtocol(Ptr< Ipv4RoutingProtocol > routingProtocol)=0
Register a new routing protocol to be used by this Ipv4 stack.
static TypeId GetTypeId(void)
Get the type ID.
virtual void SetWeakEsModel(bool model)=0
Set or unset the Weak Es Model.
virtual bool GetWeakEsModel(void) const =0
Get the Weak Es Model status.
virtual Ptr< NetDevice > GetNetDevice(uint32_t interface)=0
virtual void Insert(Ptr< IpL4Protocol > protocol)=0
virtual uint32_t GetNAddresses(uint32_t interface) const =0
virtual void Remove(Ptr< IpL4Protocol > protocol)=0
virtual uint16_t GetMtu(uint32_t interface) const =0
virtual Ipv4InterfaceAddress GetAddress(uint32_t interface, uint32_t addressIndex) const =0
Because addresses can be removed, the addressIndex is not guaranteed to be static across calls to thi...
virtual Ptr< Ipv4RoutingProtocol > GetRoutingProtocol(void) const =0
Get the routing protocol to be used by this Ipv4 stack.
virtual uint32_t AddInterface(Ptr< NetDevice > device)=0
virtual void SendWithHeader(Ptr< Packet > packet, Ipv4Header ipHeader, Ptr< Ipv4Route > route)=0
virtual void SetUp(uint32_t interface)=0
virtual Ipv4Address SelectSourceAddress(Ptr< const NetDevice > device, Ipv4Address dst, Ipv4InterfaceAddress::InterfaceAddressScope_e scope)=0
Return the first primary source address with scope less than or equal to the requested scope,...
virtual void Send(Ptr< Packet > packet, Ipv4Address source, Ipv4Address destination, uint8_t protocol, Ptr< Ipv4Route > route)=0
virtual bool IsDestinationAddress(Ipv4Address address, uint32_t iif) const =0
Determine whether address and interface corresponding to received packet can be accepted for local de...
virtual int32_t GetInterfaceForDevice(Ptr< const NetDevice > device) const =0
virtual int32_t GetInterfaceForPrefix(Ipv4Address address, Ipv4Mask mask) const =0
Return the interface number of first interface found that has an Ipv4 address within the prefix speci...
virtual void SetDown(uint32_t interface)=0
virtual bool GetIpForward(void) const =0
Get the IP forwarding state.
virtual Ipv4Address SourceAddressSelection(uint32_t interface, Ipv4Address dest)=0
Choose the source address to use with destination address.
virtual bool RemoveAddress(uint32_t interface, uint32_t addressIndex)=0
Remove the address at addressIndex on named interface.
virtual Ptr< IpL4Protocol > GetProtocol(int protocolNumber) const =0
virtual uint16_t GetMetric(uint32_t interface) const =0
virtual bool AddAddress(uint32_t interface, Ipv4InterfaceAddress address)=0
virtual uint32_t GetNInterfaces(void) const =0
virtual void SetForwarding(uint32_t interface, bool val)=0
virtual bool IsUp(uint32_t interface) const =0
a class to store IPv4 address information on an interface
InterfaceAddressScope_e
Address scope.
Implement the Ipv4 layer specifically for Click nodes to allow a clean integration of Click.
a class to represent an Ipv4 address mask
PacketType
Packet types are used as they are in Linux.
virtual void DoDispose(void)
Destructor implementation.
virtual void NotifyNewAggregate(void)
Notify all Objects aggregated to this one of a new Object being aggregated.
Forward calls to a chain of Callback.
a unique identifier for an interface.
Every class exported by the ns3 library is enclosed in the ns3 namespace.