An interface for a Controller of OpenFlowSwitchNetDevices. More...
#include "openflow-interface.h"
Public Member Functions | |
~Controller () override | |
Destructor. | |
virtual void | AddSwitch (Ptr< OpenFlowSwitchNetDevice > swtch) |
Adds a switch to the controller. | |
virtual void | ReceiveFromSwitch (Ptr< OpenFlowSwitchNetDevice > swtch, ofpbuf *buffer) |
A switch calls this method to pass a message on to the Controller. | |
void | StartDump (StatsDumpCallback *cb) |
Starts a callback-based, reliable, possibly multi-message reply to a request made by the controller. | |
Public Member Functions inherited from ns3::Object | |
Object () | |
Constructor. | |
~Object () override | |
Destructor. | |
void | AggregateObject (Ptr< Object > other) |
Aggregate two Objects together. | |
void | Dispose () |
Dispose of this Object. | |
AggregateIterator | GetAggregateIterator () const |
Get an iterator to the Objects aggregated to this one. | |
TypeId | GetInstanceTypeId () const override |
Get the most derived TypeId for this Object. | |
template<typename T > | |
Ptr< T > | GetObject () const |
Get a pointer to the requested aggregated Object. | |
template<> | |
Ptr< Object > | GetObject () const |
Specialization of () for objects of type ns3::Object. | |
template<typename T > | |
Ptr< T > | GetObject (TypeId tid) const |
Get a pointer to the requested aggregated Object by TypeId. | |
template<> | |
Ptr< Object > | GetObject (TypeId tid) const |
Specialization of (TypeId tid) for objects of type ns3::Object. | |
void | Initialize () |
Invoke DoInitialize on all Objects aggregated to this one. | |
bool | IsInitialized () const |
Check if the object has been initialized. | |
void | UnidirectionalAggregateObject (Ptr< Object > other) |
Aggregate an Object to another Object. | |
Public Member Functions inherited from ns3::SimpleRefCount< Object, ObjectBase, ObjectDeleter > | |
SimpleRefCount () | |
Default constructor. | |
SimpleRefCount (const SimpleRefCount &o) | |
Copy constructor. | |
uint32_t | GetReferenceCount () const |
Get the reference count of the object. | |
SimpleRefCount & | operator= (const SimpleRefCount &o) |
Assignment operator. | |
void | Ref () const |
Increment the reference count. | |
void | Unref () const |
Decrement the reference count. | |
Public Member Functions inherited from ns3::ObjectBase | |
virtual | ~ObjectBase () |
Virtual destructor. | |
void | GetAttribute (std::string name, AttributeValue &value, bool permissive=false) const |
Get the value of an attribute, raising fatal errors if unsuccessful. | |
bool | GetAttributeFailSafe (std::string name, AttributeValue &value) const |
Get the value of an attribute without raising errors. | |
void | SetAttribute (std::string name, const AttributeValue &value) |
Set a single attribute, raising fatal errors if unsuccessful. | |
bool | SetAttributeFailSafe (std::string name, const AttributeValue &value) |
Set a single attribute without raising errors. | |
bool | TraceConnect (std::string name, std::string context, const CallbackBase &cb) |
Connect a TraceSource to a Callback with a context. | |
bool | TraceConnectWithoutContext (std::string name, const CallbackBase &cb) |
Connect a TraceSource to a Callback without a context. | |
bool | TraceDisconnect (std::string name, std::string context, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected with a context. | |
bool | TraceDisconnectWithoutContext (std::string name, const CallbackBase &cb) |
Disconnect from a TraceSource a Callback previously connected without a context. | |
Static Public Member Functions | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::Object | |
static TypeId | GetTypeId () |
Register this type. | |
Static Public Member Functions inherited from ns3::ObjectBase | |
static TypeId | GetTypeId () |
Get the type ID. | |
Protected Types | |
typedef std::set< Ptr< OpenFlowSwitchNetDevice > > | Switches_t |
OpenFlowSwitchNetDevice container type. | |
Protected Member Functions | |
ofp_flow_mod * | BuildFlow (sw_flow_key key, uint32_t buffer_id, uint16_t command, void *acts, size_t actions_len, int idle_timeout, int hard_timeout) |
Construct flow data from a matching key to build a flow entry for adding, modifying, or deleting a flow. | |
uint8_t | GetPacketType (ofpbuf *buffer) |
Get the packet type on the buffer, which can then be used to determine how to handle the buffer. | |
virtual void | SendToSwitch (Ptr< OpenFlowSwitchNetDevice > swtch, void *msg, size_t length) |
However the controller is implemented, this method is to be used to pass a message on to a switch. | |
Protected Member Functions inherited from ns3::Object | |
Object (const Object &o) | |
Copy an Object. | |
virtual void | DoDispose () |
Destructor implementation. | |
virtual void | DoInitialize () |
Initialize() implementation. | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. | |
Protected Member Functions inherited from ns3::ObjectBase | |
void | ConstructSelf (const AttributeConstructionList &attributes) |
Complete construction of ObjectBase; invoked by derived classes. | |
virtual void | NotifyConstructionCompleted () |
Notifier called once the ObjectBase is fully constructed. | |
Protected Attributes | |
Switches_t | m_switches |
The collection of switches registered to this controller. | |
Additional Inherited Members | |
Related Symbols inherited from ns3::ObjectBase | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. | |
An interface for a Controller of OpenFlowSwitchNetDevices.
Follows the OpenFlow specification for a controller.
Definition at line 388 of file openflow-interface.h.
|
protected |
OpenFlowSwitchNetDevice container type.
Definition at line 481 of file openflow-interface.h.
|
override |
|
virtual |
Adds a switch to the controller.
swtch | The switch to register. |
Definition at line 680 of file openflow-interface.cc.
References m_switches, and NS_LOG_INFO.
|
protected |
Construct flow data from a matching key to build a flow entry for adding, modifying, or deleting a flow.
key | The matching key data; used to create a flow that matches the packet. |
buffer_id | The OpenFlow Buffer ID; used to run the actions on the packet if we add or modify the flow. |
command | Whether to add, modify, or delete this flow. |
acts | List of actions to execute. |
actions_len | Length of the actions buffer. |
idle_timeout | Flow expires if left inactive for this amount of time (specify OFP_FLOW_PERMANENT to disable feature). |
hard_timeout | Flow expires after this amount of time (specify OFP_FLOW_PERMANENT to disable feature). |
Definition at line 705 of file openflow-interface.cc.
Referenced by ns3::ofi::DropController::ReceiveFromSwitch(), and ns3::ofi::LearningController::ReceiveFromSwitch().
|
protected |
Get the packet type on the buffer, which can then be used to determine how to handle the buffer.
buffer | The packet in OpenFlow buffer format. |
Definition at line 747 of file openflow-interface.cc.
Referenced by ns3::ofi::DropController::ReceiveFromSwitch(), and ns3::ofi::LearningController::ReceiveFromSwitch().
|
static |
Register this type.
Definition at line 665 of file openflow-interface.cc.
References ns3::TypeId::SetParent().
|
inlinevirtual |
A switch calls this method to pass a message on to the Controller.
swtch | The switch the message was received from. |
buffer | The message. |
Reimplemented in ns3::ofi::DropController, and ns3::ofi::LearningController.
Definition at line 412 of file openflow-interface.h.
|
protectedvirtual |
However the controller is implemented, this method is to be used to pass a message on to a switch.
swtch | The switch to receive the message. |
msg | The message to send. |
length | The length of the message. |
Definition at line 693 of file openflow-interface.cc.
References m_switches, and NS_LOG_ERROR.
Referenced by ns3::ofi::DropController::ReceiveFromSwitch(), and ns3::ofi::LearningController::ReceiveFromSwitch().
void ns3::ofi::Controller::StartDump | ( | StatsDumpCallback * | cb | ) |
Starts a callback-based, reliable, possibly multi-message reply to a request made by the controller.
If an incoming request needs to have a reliable reply that might require multiple messages, it can use StartDump() to set up a callback that will be called as buffer space for replies.
A stats request made by the controller is processed by the switch, the switch then calls this method to tell the controller to start asking for information. By default (it can be overridden), the controller stops all work to run through the callback. ReceiveFromSwitch must be defined appropriately to handle the status reply messages generated by the switch, or otherwise the status reply messages will be sent and discarded.
cb | The callback data. |
Definition at line 756 of file openflow-interface.cc.
References NS_LOG_WARN, ns3::OpenFlowSwitchNetDevice::StatsDone(), ns3::OpenFlowSwitchNetDevice::StatsDump(), and ns3::ofi::StatsDumpCallback::swtch.
|
protected |
The collection of switches registered to this controller.
Definition at line 482 of file openflow-interface.h.
Referenced by ~Controller(), AddSwitch(), ns3::ofi::DropController::ReceiveFromSwitch(), ns3::ofi::LearningController::ReceiveFromSwitch(), and SendToSwitch().