88#include " inet/networklayer/common/L3AddressResolver.h"
99#include " inet/common/ModuleAccess.h"
1010
11+
12+ simsignal_t AbstractControllerApp::PacketInSignalId = registerSignal(" PacketIn" );
13+ simsignal_t AbstractControllerApp::PacketOutSignalId = registerSignal(" PacketOut" );
14+ simsignal_t AbstractControllerApp::PacketFeatureRequestSignalId = registerSignal(" PacketFeatureRequest" );
15+ simsignal_t AbstractControllerApp::PacketFeatureReplySignalId = registerSignal(" PacketFeatureReply" );
16+ simsignal_t AbstractControllerApp::BootedSignalId = registerSignal(" Booted" );
17+
1118Define_Module (AbstractControllerApp);
1219
1320AbstractControllerApp::AbstractControllerApp ()
@@ -46,21 +53,11 @@ void AbstractControllerApp::initialize(int stage){
4653 // register signals
4754 OperationalBase::initialize (stage);
4855 if (stage == INITSTAGE_LOCAL) {
49- PacketInSignalId =registerSignal (" PacketIn" );
50- PacketOutSignalId =registerSignal (" PacketOut" );
51- PacketFeatureRequestSignalId = registerSignal (" PacketFeatureRequest" );
52- PacketFeatureReplySignalId = registerSignal (" PacketFeatureReply" );
53- BootedSignalId= registerSignal (" Booted" );
5456 getParentModule ()->subscribe (" PacketIn" ,this );
5557 getParentModule ()->subscribe (" PacketOut" ,this );
5658 getParentModule ()->subscribe (" PacketFeatureRequest" ,this );
5759 getParentModule ()->subscribe (" PacketFeatureReply" ,this );
5860 getParentModule ()->subscribe (" Booted" ,this );
59- packetsFlooded=0 ;
60- packetsDropped=0 ;
61- numPacketOut=0 ;
62- numFlowMod=0 ;
63- controller= NULL ;
6461 }
6562 else if (stage == INITSTAGE_APPLICATION_LAYER) {
6663 auto myNode = getContainingNode (this );
@@ -87,11 +84,13 @@ void AbstractControllerApp::receiveSignal(cComponent *src, simsignal_t id, cObje
8784 this ->controller = cntrl;
8885 controller->registerApp (this );
8986 }
90-
9187 }
9288}
9389
9490void AbstractControllerApp::floodPacket (Packet *packet_in_msg){
91+
92+ if (controller == nullptr )
93+ throw cRuntimeError (" Controller module is not initialized" );
9594 auto header_in = packet_in_msg->peekAtFront <OFP_Packet_In>();
9695 EV << " floodPacket" << ' \n ' ;
9796 packetsFlooded++;
@@ -101,6 +100,10 @@ void AbstractControllerApp::floodPacket(Packet *packet_in_msg){
101100}
102101
103102void AbstractControllerApp::dropPacket (Packet *packet_in_msg){
103+
104+ if (controller == nullptr )
105+ throw cRuntimeError (" Controller module is not initialized" );
106+
104107 auto header_in = packet_in_msg->peekAtFront <OFP_Packet_In>();
105108 EV << " dropPacket" << ' \n ' ;
106109 packetsDropped++;
@@ -113,6 +116,9 @@ void AbstractControllerApp::dropPacket(Packet *packet_in_msg){
113116
114117void AbstractControllerApp::sendPacket (Packet *packet_in_msg, uint32_t outport){
115118
119+ if (controller == nullptr )
120+ throw cRuntimeError (" Controller module is not initialized" );
121+
116122 auto header_in = packet_in_msg->peekAtFront <OFP_Packet_In>();
117123
118124 EV << " sendPacket" << ' \n ' ;
@@ -124,6 +130,9 @@ void AbstractControllerApp::sendPacket(Packet *packet_in_msg, uint32_t outport){
124130}
125131
126132void AbstractControllerApp::sendFlowModMessage (ofp_flow_mod_command mod_com, const oxm_basic_match &match, uint32_t outport, TcpSocket * socket, int idleTimeOut =1 , int hardTimeOut=0 ){
133+ if (controller == nullptr )
134+ throw cRuntimeError (" Controller module is not initialized" );
135+
127136 EV << " sendFlowModMessage" << ' \n ' ;
128137 numFlowMod++;
129138 auto msgAux = createFlowMod (mod_com,match,outport,idleTimeOut,hardTimeOut);
0 commit comments