This controller is responsible for installing the forwarding rules on the switches. More...
#include "tunnel-controller.h"
Public Member Functions | |
TunnelController () | |
Default constructor. More... | |
~TunnelController () override | |
Dummy destructor, see DoDispose. More... | |
void | SaveArpEntry (Ipv4Address ipAddr, Mac48Address macAddr) |
Save the pair IP / MAC address in ARP table. More... | |
void | SaveTunnelEndpoint (uint64_t dpId, uint32_t portNo, Ipv4Address ipAddr) |
Save the pair datapath ID + port no / IP address in tunnel endpoint table. More... | |
![]() | |
OFSwitch13Controller () | |
Default constructor. More... | |
~OFSwitch13Controller () override | |
Dummy destructor, see DoDispose. More... | |
void | DoDispose () override |
Destructor implementation. More... | |
int | DpctlExecute (uint64_t dpId, const std::string textCmd) |
Execute a dpctl command to interact with the remote switch. More... | |
![]() | |
Application () | |
~Application () override | |
Ptr< Node > | GetNode () const |
void | SetNode (Ptr< Node > node) |
void | SetStartTime (Time start) |
Specify application start time. More... | |
void | SetStopTime (Time stop) |
Specify application stop time. More... | |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
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 () |
Register this type. More... | |
![]() | |
static void | DpctlSendAndPrint (struct vconn *vconn, struct ofl_msg_header *msg) |
Overriding BOFUSS dpctl_send_and_print and dpctl_transact_and_print weak functions from utilities/dpctl.c. More... | |
static TypeId | GetTypeId () |
Register this type. More... | |
![]() | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
![]() | |
static TypeId | GetTypeId () |
Register this type. More... | |
![]() | |
static TypeId | GetTypeId () |
Get the type ID. More... | |
Protected Member Functions | |
void | DoDispose () override |
Destructor implementation. More... | |
ofl_err | HandlePacketIn (struct ofl_msg_packet_in *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) override |
Handle a packet in message sent by the switch to this controller. More... | |
void | HandshakeSuccessful (Ptr< const RemoteSwitch > swtch) override |
Function invoked after a successfully handshake procedure between this controller and a remote switch. More... | |
![]() | |
uint32_t | GetNextXid () |
Ptr< const RemoteSwitch > | GetRemoteSwitch (uint64_t dpId) const |
Get the remote switch for this OpenFlow datapath ID. More... | |
void | SendBarrierRequest (Ptr< const RemoteSwitch > swtch) |
Send a barrier request message to switch, and wait for a non-blocking reply. More... | |
void | SendEchoRequest (Ptr< const RemoteSwitch > swtch, size_t payloadSize=0) |
Send an echo request message to switch, and wait for a non-blocking reply. More... | |
int | SendToSwitch (Ptr< const RemoteSwitch > swtch, struct ofl_msg_header *msg, uint32_t xid=0) |
Send a OFLib message to a registered switch. More... | |
void | StartApplication () override |
Application specific startup code. More... | |
void | StopApplication () override |
Application specific shutdown code. More... | |
ofl_err | HandleEchoRequest (struct ofl_msg_echo *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
ofl_err | HandleEchoReply (struct ofl_msg_echo *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
ofl_err | HandleBarrierReply (struct ofl_msg_header *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
ofl_err | HandleHello (struct ofl_msg_header *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
ofl_err | HandleFeaturesReply (struct ofl_msg_features_reply *msg, Ptr< RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleError (struct ofl_msg_error *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleGetConfigReply (struct ofl_msg_get_config_reply *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleFlowRemoved (struct ofl_msg_flow_removed *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandlePortStatus (struct ofl_msg_port_status *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleAsyncReply (struct ofl_msg_async_config *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleMultipartReply (struct ofl_msg_multipart_reply_header *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleRoleReply (struct ofl_msg_role_request *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
virtual ofl_err | HandleQueueGetConfigReply (struct ofl_msg_queue_get_config_reply *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Called when an OpenFlow message is received from a switch. More... | |
![]() | |
void | DoInitialize () override |
Initialize() implementation. More... | |
![]() | |
Object (const Object &o) | |
Copy an Object. More... | |
virtual void | NotifyNewAggregate () |
Notify all Objects aggregated to this one of a new Object being aggregated. More... | |
![]() | |
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::map< DpPortPair_t, Ipv4Address > | DpPortIpMap_t |
Map saving <DpPortPair_t / IPv4 address> More... | |
typedef std::pair< uint64_t, uint32_t > | DpPortPair_t |
A pair identifying OpenFlow datapath id and port number. More... | |
typedef std::map< Ipv4Address, Mac48Address > | IpMacMap_t |
Map saving <IPv4 address / MAC address> More... | |
Private Member Functions | |
Ptr< Packet > | CreateArpReply (Mac48Address srcMac, Ipv4Address srcIp, Mac48Address dstMac, Ipv4Address dstIp) |
Create a Packet with an ARP reply, encapsulated inside of an Ethernet frame (with header and trailer. More... | |
Ipv4Address | ExtractIpv4Address (uint32_t oxm_of, struct ofl_match *match) |
Extract an IPv4 address from packet match. More... | |
Mac48Address | GetArpEntry (Ipv4Address ip) |
Perform ARP resolution. More... | |
Ipv4Address | GetTunnelEndpoint (uint64_t dpId, uint32_t portNo) |
Perform tunnel endpoint resolution. More... | |
ofl_err | HandleArpPacketIn (struct ofl_msg_packet_in *msg, Ptr< const RemoteSwitch > swtch, uint32_t xid) |
Handle packet-in messages sent from switch with ARP message. More... | |
Private Attributes | |
IpMacMap_t | m_arpTable |
ARP resolution table. More... | |
DpPortIpMap_t | m_endpointTable |
Tunnel endpoint resolution table. More... | |
Additional Inherited Members | |
![]() | |
typedef void(* | DelayAddressCallback) (const Time &delay, const Address &from) |
Common callback signature for packet delay and address. More... | |
typedef void(* | StateTransitionCallback) (const std::string &oldState, const std::string &newState) |
Common signature used by callbacks to application's state transition trace source. More... | |
![]() | |
Ptr< Node > | m_node |
The node that this application is installed on. More... | |
EventId | m_startEvent |
The event that will fire at m_startTime to start the application. More... | |
Time | m_startTime |
The simulation time that the application will start. More... | |
EventId | m_stopEvent |
The event that will fire at m_stopTime to end the application. More... | |
Time | m_stopTime |
The simulation time that the application will end. More... | |
![]() | |
static TypeId | GetObjectIid () |
Ensure the TypeId for ObjectBase gets fully configured to anchor the inheritance tree properly. More... | |
This controller is responsible for installing the forwarding rules on the switches.
For packets entering the switches coming from the hosts, the controller sets the tunnel id and send packets to the logical port, where they will be encapsulated withing GTP-U/UDP/IP protocols. For packets entering the switches coming from the logical port, the controller forwards the packets to the host.
Definition at line 41 of file tunnel-controller.h.
|
private |
Map saving <DpPortPair_t / IPv4 address>
Definition at line 140 of file tunnel-controller.h.
|
private |
A pair identifying OpenFlow datapath id and port number.
Definition at line 137 of file tunnel-controller.h.
|
private |
Map saving <IPv4 address / MAC address>
Definition at line 143 of file tunnel-controller.h.
ns3::TunnelController::TunnelController | ( | ) |
Default constructor.
Definition at line 30 of file tunnel-controller.cc.
References NS_LOG_FUNCTION.
|
override |
Dummy destructor, see DoDispose.
Definition at line 35 of file tunnel-controller.cc.
References NS_LOG_FUNCTION.
|
private |
Create a Packet with an ARP reply, encapsulated inside of an Ethernet frame (with header and trailer.
srcMac | Source MAC address. |
srcIp | Source IP address. |
dstMac | Destination MAC address. |
dstIp | Destination IP address. |
Definition at line 332 of file tunnel-controller.cc.
References ns3::Packet::AddAtEnd(), ns3::Packet::AddHeader(), ns3::Packet::AddTrailer(), ns3::EthernetTrailer::CalcFcs(), ns3::Node::ChecksumEnabled(), ns3::EthernetTrailer::EnableFcs(), ns3::Packet::GetSize(), NS_LOG_FUNCTION, ns3::ArpL3Protocol::PROT_NUMBER, ns3::EthernetHeader::SetDestination(), ns3::EthernetHeader::SetLengthType(), ns3::ArpHeader::SetReply(), and ns3::EthernetHeader::SetSource().
Referenced by HandleArpPacketIn().
|
overrideprotectedvirtual |
Destructor implementation.
Reimplemented from ns3::Application.
Definition at line 84 of file tunnel-controller.cc.
References ns3::OFSwitch13Controller::DoDispose(), m_arpTable, m_endpointTable, and NS_LOG_FUNCTION.
|
private |
Extract an IPv4 address from packet match.
oxm_of | The OXM_IF_* IPv4 field. |
match | The ofl_match structure pointer. |
Definition at line 312 of file tunnel-controller.cc.
References NS_ABORT_MSG.
Referenced by HandleArpPacketIn(), and HandlePacketIn().
|
private |
Perform ARP resolution.
ip | The Ipv4Address to search. |
Definition at line 203 of file tunnel-controller.cc.
References m_arpTable, NS_ABORT_MSG, NS_LOG_FUNCTION, and NS_LOG_INFO.
Referenced by HandleArpPacketIn(), and HandlePacketIn().
|
private |
Perform tunnel endpoint resolution.
dpId | The datapath ID. |
portNo | The port number. |
Definition at line 218 of file tunnel-controller.cc.
References m_endpointTable, NS_ABORT_MSG, NS_LOG_FUNCTION, and NS_LOG_INFO.
Referenced by HandlePacketIn().
|
static |
Register this type.
Definition at line 41 of file tunnel-controller.cc.
References ns3::TypeId::SetParent().
|
private |
Handle packet-in messages sent from switch with ARP message.
msg | The packet-in message. |
swtch | The switch information. |
xid | Transaction id. |
Definition at line 234 of file tunnel-controller.cc.
References check-style-clang-format::action, ns3::ArpHeader::ARP_TYPE_REQUEST, ns3::Packet::CopyData(), ns3::Mac48Address::CopyFrom(), CreateArpReply(), ExtractIpv4Address(), GetArpEntry(), ns3::Packet::GetSize(), NS_LOG_ERROR, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_WARN, and ns3::OFSwitch13Controller::SendToSwitch().
Referenced by HandlePacketIn().
|
overrideprotectedvirtual |
Handle a packet in message sent by the switch to this controller.
msg | The OpenFlow received message. |
swtch | The remote switch metadata. |
xid | The transaction id from the request message. |
Reimplemented from ns3::OFSwitch13Controller.
Definition at line 111 of file tunnel-controller.cc.
References second::cmd, ns3::OFSwitch13Controller::DpctlExecute(), ExtractIpv4Address(), ns3::Ipv4Address::Get(), GetArpEntry(), GetTunnelEndpoint(), HandleArpPacketIn(), NS_LOG_ERROR, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_WARN, and ns3::ArpL3Protocol::PROT_NUMBER.
|
overrideprotectedvirtual |
Function invoked after a successfully handshake procedure between this controller and a remote switch.
Derived classes can override this function to implement any relevant logic, as sending initial configuration messages to the switch.
swtch | The remote switch. |
Reimplemented from ns3::OFSwitch13Controller.
Definition at line 94 of file tunnel-controller.cc.
References ns3::OFSwitch13Controller::DpctlExecute(), and NS_LOG_FUNCTION.
void ns3::TunnelController::SaveArpEntry | ( | Ipv4Address | ipAddr, |
Mac48Address | macAddr | ||
) |
Save the pair IP / MAC address in ARP table.
ipAddr | The IPv4 address. |
macAddr | The MAC address. |
Definition at line 51 of file tunnel-controller.cc.
References m_arpTable, NS_ABORT_MSG, NS_LOG_FUNCTION, and NS_LOG_INFO.
void ns3::TunnelController::SaveTunnelEndpoint | ( | uint64_t | dpId, |
uint32_t | portNo, | ||
Ipv4Address | ipAddr | ||
) |
Save the pair datapath ID + port no / IP address in tunnel endpoint table.
dpId | The datapath ID. |
portNo | The port number. |
ipAddr | The IPv4 address of tunnel endpoint. |
Definition at line 67 of file tunnel-controller.cc.
References m_endpointTable, NS_ABORT_MSG, NS_LOG_FUNCTION, and NS_LOG_INFO.
|
private |
ARP resolution table.
Definition at line 145 of file tunnel-controller.h.
Referenced by DoDispose(), GetArpEntry(), and SaveArpEntry().
|
private |
Tunnel endpoint resolution table.
Definition at line 146 of file tunnel-controller.h.
Referenced by DoDispose(), GetTunnelEndpoint(), and SaveTunnelEndpoint().