|
A Discrete-Event Network Simulator
|
API
|
Go to the documentation of this file.
26 #include "ns3/packet.h"
27 #include "ns3/simulator.h"
28 #include "ns3/object-vector.h"
29 #include "ns3/uinteger.h"
31 #include "ns3/assert.h"
32 #include "ns3/global-value.h"
33 #include "ns3/boolean.h"
47 "A global switch to enable all checksums for all protocols",
56 .SetGroupName(
"Network")
57 .AddConstructor<
Node> ()
58 .AddAttribute (
"DeviceList",
"The list of devices associated to this Node.",
61 MakeObjectVectorChecker<NetDevice> ())
62 .AddAttribute (
"ApplicationList",
"The list of applications associated to this Node.",
65 MakeObjectVectorChecker<Application> ())
66 .AddAttribute (
"Id",
"The id (unique integer) of this Node.",
70 MakeUintegerChecker<uint32_t> ())
71 .AddAttribute (
"SystemId",
"The systemId of this node: a unique integer used for parallel simulations.",
75 MakeUintegerChecker<uint32_t> ())
148 " is out of range (only have " <<
m_devices.size () <<
" devices).");
174 " is out of range (only have " <<
m_applications.size () <<
" applications).");
230 uint16_t protocolType,
234 NS_LOG_FUNCTION (
this << &handler << protocolType << device << promiscuous);
266 for (ProtocolHandlerList::iterator i =
m_handlers.begin ();
269 if (i->handler.IsEqual (handler))
290 NS_LOG_FUNCTION (
this << device << packet << protocol << &from << &to << packetType);
306 NS_LOG_FUNCTION (
this << device << packet << protocol << &from << &to << packetType << promiscuous);
308 "make sure the channels in use are correctly updating events context " <<
309 "when transferring events from one node to another.");
312 <<
") Packet UID " << packet->
GetUid ());
315 for (ProtocolHandlerList::iterator i =
m_handlers.begin ();
318 if (i->device == 0 ||
319 (i->device != 0 && i->device == device))
321 if (i->protocol == 0 ||
322 i->protocol == protocol)
324 if (promiscuous == i->promiscuous)
326 i->handler (device, packet, protocol, from, to, packetType);
353 if ((*i).IsEqual (listener))
void Construct(void)
Finish node's construction by setting the correct node ID.
a unique identifier for an interface.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
void GetValue(AttributeValue &value) const
Get the value.
Hold a so-called 'global value'.
Ptr< Application > GetApplication(uint32_t index) const
Retrieve the index-th Application associated to this node.
void Dispose(void)
Dispose of this Object.
#define NS_OBJECT_ENSURE_REGISTERED(type)
Register an Object subclass with the TypeId system.
AttributeValue implementation for Boolean.
void RegisterProtocolHandler(ProtocolHandler handler, uint16_t protocolType, Ptr< NetDevice > device, bool promiscuous=false)
static void ScheduleWithContext(uint32_t context, Time const &delay, FUNC f, Ts &&... args)
Schedule an event with the given context.
void RegisterDeviceAdditionListener(DeviceAdditionListener listener)
Ptr< const AttributeAccessor > MakeObjectVectorAccessor(U T::*memberVariable)
MakeAccessorHelper implementation for ObjectVector.
uint32_t GetId(void) const
virtual Address GetAddress(void) const =0
static Time Now(void)
Return the current simulation virtual time.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
virtual void SetIfIndex(const uint32_t index)=0
@ ATTR_SET
The attribute can be written.
virtual void SetNode(Ptr< Node > node)=0
DeviceAdditionListenerList m_deviceAdditionListeners
Device addition listeners in the node.
Container for a set of ns3::Object pointers.
@ ATTR_GET
The attribute can be read.
virtual void DoDispose(void)
The dispose method.
void UnregisterProtocolHandler(ProtocolHandler handler)
bool ReceiveFromDevice(Ptr< NetDevice > device, Ptr< const Packet >, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType, bool promisc)
Receive a packet from a device.
void SetNode(Ptr< Node > node)
TypeId SetParent(TypeId tid)
Set the parent TypeId.
virtual void SetReceiveCallback(ReceiveCallback cb)=0
ProtocolHandler handler
the protocol handler
static TypeId GetTypeId(void)
Get the type ID.
Ptr< NetDevice > device
the NetDevice
a polymophic address class
A base class which provides memory management and object aggregation.
uint32_t AddApplication(Ptr< Application > application)
Associate an Application to this Node.
Time GetLocalTime(void) const
In the future, ns3 nodes may have clock that returned a local time different from the virtual time Si...
Ptr< NetDevice > GetDevice(uint32_t index) const
Retrieve the index-th NetDevice associated to this node.
ProtocolHandlerList m_handlers
Protocol handlers in the node.
static GlobalValue g_checksumEnabled
static bool ChecksumEnabled(void)
uint32_t GetSystemId(void) const
Ptr< const AttributeChecker > MakeBooleanChecker(void)
Simulation virtual time values and global simulation resolution.
bool PromiscReceiveFromDevice(Ptr< NetDevice > device, Ptr< const Packet > packet, uint16_t protocol, const Address &from, const Address &to, NetDevice::PacketType packetType)
Receive a packet from a device in promiscuous mode.
uint32_t m_id
Node id for this node.
uint32_t AddDevice(Ptr< NetDevice > device)
Associate a NetDevice to this node.
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
virtual void DoInitialize(void)
Initialize() implementation.
std::vector< Ptr< NetDevice > > m_devices
Devices associated to this node.
virtual void DoInitialize(void)
Initialize() implementation.
void NotifyDeviceAdded(Ptr< NetDevice > device)
Notifies all the DeviceAdditionListener about the new device added.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
uint16_t protocol
the protocol number
#define NS_LOG_FUNCTION_NOARGS()
Output the name of the function.
std::string GetName(void) const
Get the name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
uint32_t m_sid
System id for this node.
Time Seconds(double value)
Construct a Time in the indicated unit.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
std::vector< Ptr< Application > > m_applications
Applications associated to this node.
void UnregisterDeviceAdditionListener(DeviceAdditionListener listener)
PacketType
Packet types are used as they are in Linux.
Hold an unsigned integer type.
static uint32_t Add(Ptr< Node > node)
uint32_t GetNDevices(void) const
Ptr< const AttributeAccessor > MakeUintegerAccessor(T1 a1)
Create an AttributeAccessor for a class data member, or a lone class get functor or set method.
uint32_t GetNApplications(void) const
void Initialize(void)
Invoke DoInitialize on all Objects aggregated to this one.
bool NonPromiscReceiveFromDevice(Ptr< NetDevice > device, Ptr< const Packet > packet, uint16_t protocol, const Address &from)
Receive a packet from a device in non-promiscuous mode.
bool promiscuous
true if it is a promiscuous handler
static uint32_t GetContext(void)
Get the current simulation context.
virtual uint32_t GetIfIndex(void) const =0
virtual void DoDispose(void)
Destructor implementation.
virtual void SetPromiscReceiveCallback(PromiscReceiveCallback cb)=0
uint64_t GetUid(void) const
Returns the packet's Uid.