25 #include "endian_conversion.h"
28 #include "rofl/common/ciosrv.h"
29 #include "rofl/common/croflexception.h"
30 #include "rofl/common/csocket.h"
31 #include "rofl/common/thread_helper.h"
32 #include "rofl/common/logging.h"
33 #include "rofl/common/crofdpt.h"
34 #include "rofl/common/crofctl.h"
35 #include "rofl/common/openflow/openflow.h"
36 #include "rofl/common/openflow/cofhelloelemversionbitmap.h"
37 #include "rofl/common/crandom.h"
145 while (not dpt_sockets.empty()) {
146 unsigned int sockid = dpt_sockets.begin()->first;
161 enum rofl::csocket::socket_type_t socket_type,
163 if (dpt_sockets.find(sockid) != dpt_sockets.end()) {
164 delete dpt_sockets[sockid];
165 dpt_sockets.erase(sockid);
167 dpt_sockets[sockid] = csocket::csocket_factory(socket_type,
this);
168 dpt_sockets[sockid]->listen(params);
169 return *(dpt_sockets[sockid]);
183 enum rofl::csocket::socket_type_t socket_type,
185 if (dpt_sockets.find(sockid) == dpt_sockets.end()) {
186 dpt_sockets[sockid] = csocket::csocket_factory(socket_type,
this);
187 dpt_sockets[sockid]->listen(params);
189 return *(dpt_sockets[sockid]);
200 unsigned int sockid)
const {
201 if (dpt_sockets.find(sockid) == dpt_sockets.end()) {
204 return *(dpt_sockets.at(sockid));
214 unsigned int sockid) {
215 if (dpt_sockets.find(sockid) == dpt_sockets.end()) {
218 delete dpt_sockets[sockid];
219 dpt_sockets.erase(sockid);
229 unsigned int sockid) {
230 return (not (dpt_sockets.find(sockid) == dpt_sockets.end()));
248 while (not ctl_sockets.empty()) {
249 unsigned int sockid = ctl_sockets.begin()->first;
264 enum rofl::csocket::socket_type_t socket_type,
266 if (ctl_sockets.find(sockid) != ctl_sockets.end()) {
267 delete ctl_sockets[sockid];
268 ctl_sockets.erase(sockid);
270 ctl_sockets[sockid] = csocket::csocket_factory(socket_type,
this);
271 ctl_sockets[sockid]->listen(params);
272 return *(ctl_sockets[sockid]);
286 enum rofl::csocket::socket_type_t socket_type,
288 if (ctl_sockets.find(sockid) == ctl_sockets.end()) {
289 ctl_sockets[sockid] = csocket::csocket_factory(socket_type,
this);
290 ctl_sockets[sockid]->listen(params);
292 return *(ctl_sockets[sockid]);
303 unsigned int sockid)
const {
304 if (ctl_sockets.find(sockid) == ctl_sockets.end()) {
307 return *(ctl_sockets.at(sockid));
317 unsigned int sockid) {
318 if (ctl_sockets.find(sockid) == ctl_sockets.end()) {
321 delete ctl_sockets[sockid];
322 ctl_sockets.erase(sockid);
332 unsigned int sockid) {
333 return (not (ctl_sockets.find(sockid) == ctl_sockets.end()));
367 for (std::map<rofl::cdptid, crofdpt*>::iterator
368 it = rofdpts.begin(); it != rofdpts.end(); ++it) {
397 bool remove_on_channel_close =
false,
399 if (rofdpts.find(dptid) != rofdpts.end()) {
400 delete rofdpts[dptid];
401 rofdpts.erase(dptid);
403 rofdpts[dptid] =
new crofdpt(
this, dptid, remove_on_channel_close, versionbitmap, dpid);
404 return *(rofdpts[dptid]);
427 bool remove_on_channel_close =
false,
429 if (rofdpts.find(dptid) == rofdpts.end()) {
430 rofdpts[dptid] =
new crofdpt(
this, dptid, remove_on_channel_close, versionbitmap, dpid);
432 return *(rofdpts[dptid]);
448 if (rofdpts.find(dptid) == rofdpts.end()) {
451 return *(rofdpts[dptid]);
467 if (rofdpts.find(dptid) == rofdpts.end()) {
470 return *(rofdpts.at(dptid));
481 if (rofdpts.find(dptid) == rofdpts.end()) {
484 delete rofdpts[dptid];
485 rofdpts.erase(dptid);
497 return (not (rofdpts.find(dptid) == rofdpts.end()));
531 for (std::map<rofl::cctlid, crofctl*>::iterator
532 it = rofctls.begin(); it != rofctls.end(); ++it) {
560 bool remove_on_channel_close =
false) {
561 if (rofctls.find(ctlid) != rofctls.end()) {
562 delete rofctls[ctlid];
563 rofctls.erase(ctlid);
565 rofctls[ctlid] =
new crofctl(
this, ctlid, remove_on_channel_close, versionbitmap);
566 return *(rofctls[ctlid]);
588 bool remove_on_channel_close =
false) {
589 if (rofctls.find(ctlid) == rofctls.end()) {
590 rofctls[ctlid] =
new crofctl(
this, ctlid, remove_on_channel_close, versionbitmap);
592 return *(rofctls[ctlid]);
608 if (rofctls.find(ctlid) == rofctls.end()) {
611 return *(rofctls[ctlid]);
627 if (rofctls.find(ctlid) == rofctls.end()) {
630 return *(rofctls.at(ctlid));
641 if (rofctls.find(ctlid) == rofctls.end()) {
644 delete rofctls[ctlid];
645 rofctls.erase(ctlid);
657 return (not (rofctls.find(ctlid) == rofctls.end()));
675 uint8_t ofp_version);
682 uint8_t ofp_version);
689 uint8_t ofp_version);
697 const enum openflow::ofp_flow_mod_command& cmd);
704 {
return versionbitmap; };
711 {
return versionbitmap; };
718 {
return versionbitmap.get_highest_ofp_version(); };
725 uint8_t ofp_version)
const
726 {
return versionbitmap.has_ofp_version(ofp_version); };
751 rofl::logging::info <<
"[rofl-common][crofbase] "
752 <<
"dptid: " << dpt.
get_dptid().str() <<
" "
753 <<
"control channel established " << std::endl;
770 rofl::logging::info <<
"[rofl-common][crofbase] "
771 <<
"dptid: " << dpt.
get_dptid().str() <<
" "
772 <<
"control channel terminated " << std::endl;
785 rofl::logging::info <<
"[rofl-common][crofbase] "
786 <<
"dptid: " << dpt.
get_dptid().str() <<
" "
787 <<
"control connection established, "
788 <<
"auxid: " << auxid.str() << std::endl;
801 rofl::logging::info <<
"[rofl-common][crofbase] "
802 <<
"dptid: " << dpt.
get_dptid().str() <<
" "
803 <<
"control connection terminated, "
804 <<
"auxid: " << auxid.str() << std::endl;
821 rofl::logging::info <<
"[rofl-common][crofbase] connection refused, "
822 <<
"dptid: " << dpt.
get_dptid().str() <<
" auxid: " << auxid.str() << std::endl;
839 rofl::logging::info <<
"[rofl-common][crofbase] connection failed, "
840 <<
"dptid: " << dpt.
get_dptid().str() <<
" auxid: " << auxid.str() << std::endl;
863 rofl::logging::info <<
"[rofl-common][crofbase] connection is writable, "
864 <<
"dptid: " << dpt.
get_dptid().str() <<
" auxid: " << auxid.str() << std::endl;
890 rofl::logging::info <<
"[rofl-common][crofbase] "
891 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" "
892 <<
"control channel established " << std::endl;
909 rofl::logging::info <<
"[rofl-common][crofbase] "
910 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" "
911 <<
"control channel terminated " << std::endl;
924 rofl::logging::info <<
"[rofl-common][crofbase] "
925 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" "
926 <<
"control connection established, "
927 <<
"auxid: " << auxid.str() << std::endl;
940 rofl::logging::info <<
"[rofl-common][crofbase] "
941 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" "
942 <<
"control connection terminated, "
943 <<
"auxid: " << auxid.str() << std::endl;
960 rofl::logging::info <<
"[rofl-common][crofbase] connection refused, "
961 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" auxid: " << auxid.str() << std::endl;
978 rofl::logging::info <<
"[rofl-common][crofbase] connection failed, "
979 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" auxid: " << auxid.str() << std::endl;
1002 rofl::logging::info <<
"[rofl-common][crofbase] connection is writable, "
1003 <<
"ctlid: " << ctl.
get_ctlid().str() <<
" auxid: " << auxid.str() << std::endl;
2288 uint32_t duration_sec,
2289 uint32_t duration_nsec,
2290 uint16_t idle_timeout,
2291 uint16_t hard_timeout,
2292 uint64_t packet_count,
2293 uint64_t byte_count);
2312 friend std::ostream&
2313 operator<< (std::ostream& os,
crofbase const& rofbase) {
2314 os <<
"<crofbase >" << std::endl;
2315 for (std::map<cctlid, crofctl*>::const_iterator
2316 it = rofbase.rofctls.begin(); it != rofbase.rofctls.end(); ++it) {
2320 for (std::map<cdptid, crofdpt*>::const_iterator
2321 it = rofbase.rofdpts.begin(); it != rofbase.rofdpts.end(); ++it) {
2334 uint64_t rcvd_generation_id);
2339 handle_connect_refused(
2343 handle_connect_failed(
2349 uint8_t ofp_version);
2370 {
return transactions.get_async_xid(); };
2375 uint8_t msg_type = 0,
2376 uint16_t msg_sub_type = 0)
2377 {
return transactions.add_ta(cclock(5, 0), msg_type, msg_sub_type); };
2383 { transactions.drop_ta(xid); };
2388 ta_expired(ctransactions& tas, ctransaction& ta)
2404 handle_accept_refused(
2414 handle_connect_refused(
2419 handle_connect_failed(
2439 enum crofbase_event_t {
2441 EVENT_CTL_DETACHED = 1,
2442 EVENT_DPT_DETACHED = 2,
2445 enum crofbase_timer_t {
2447 TIMER_RUN_ENGINE = 1,
2454 csocket& socket)
const {
2455 for (std::map<unsigned int, csocket*>::const_iterator
2456 it = dpt_sockets.begin(); it != dpt_sockets.end(); ++it) {
2457 if (it->second == &socket) {
2466 csocket& socket)
const {
2467 for (std::map<unsigned int, csocket*>::const_iterator
2468 it = ctl_sockets.begin(); it != ctl_sockets.end(); ++it) {
2469 if (it->second == &socket) {
2479 for (std::map<unsigned int, csocket*>::const_iterator
2480 it = dpt_sockets.begin(); it != dpt_sockets.end(); ++it) {
2481 if (it->second == &socket) {
2490 for (std::map<unsigned int, csocket*>::const_iterator
2491 it = ctl_sockets.begin(); it != ctl_sockets.end(); ++it) {
2492 if (it->second == &socket) {
2499 handle_chan_established(
2505 handle_chan_terminated(
2508 if (dpt.remove_on_channel_termination()) {
2509 dpts_detached.insert(dpt.get_dptid());
2510 push_on_eventqueue(EVENT_DPT_DETACHED);
2517 handle_chan_established(
2523 handle_chan_terminated(
2526 if (ctl.remove_on_channel_termination()) {
2527 ctls_detached.insert(ctl.get_ctlid());
2528 push_on_eventqueue(EVENT_CTL_DETACHED);
2537 void* data = (
void*)0) {
2539 case TIMER_RUN_ENGINE: {
2540 work_on_eventqueue();
2550 enum crofbase_event_t event = EVENT_NONE) {
2551 if (EVENT_NONE != event) {
2552 eventqueue.push_back(event);
2558 work_on_eventqueue() {
2559 while (not eventqueue.empty()) {
2560 crofbase_event_t
event = eventqueue.front();
2561 eventqueue.pop_front();
2563 case EVENT_CTL_DETACHED: {
2564 event_ctls_detached();
2566 case EVENT_DPT_DETACHED: {
2567 event_dpts_detached();
2577 event_ctls_detached() {
2578 for (std::set<rofl::cctlid>::iterator
2579 it = ctls_detached.begin(); it != ctls_detached.end(); ++it) {
2581 rofl::logging::info <<
"[rofl-common][crofbase] "
2582 <<
"dropping crofctl instance, ctlid:" << it->str() << std::endl;
2585 ctls_detached.clear();
2589 event_dpts_detached() {
2590 for (std::set<rofl::cdptid>::iterator
2591 it = dpts_detached.begin(); it != dpts_detached.end(); ++it) {
2593 rofl::logging::info <<
"[rofl-common][crofbase] "
2594 <<
"dropping crofdpt instance, dptid:" << it->str() << std::endl;
2597 dpts_detached.clear();
2603 static std::set<crofbase*> rofbases;
2606 std::map<cctlid, crofctl*> rofctls;
2608 std::map<cdptid, crofdpt*> rofdpts;
2610 std::map<unsigned int, csocket*>
2613 std::map<unsigned int, csocket*>
2619 ctransactions transactions;
2621 bool generation_is_defined;
2623 uint64_t cached_generation_id;
2625 std::list<enum crofbase_event_t>
2628 std::set<rofl::cdptid> dpts_detached;
2630 std::set<rofl::cctlid> ctls_detached;
Definition: cofmsg_barrier.h:125
virtual void handle_port_status(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_status &msg)
OpenFlow Port-Status-Reply message received.
Definition: crofbase.h:1611
rofl::csocket & set_ctl_listening(unsigned int sockid, enum rofl::csocket::socket_type_t socket_type, const rofl::cparams ¶ms)
Returns a reference to the listening csocket object specified by identifier sockid.
Definition: crofbase.h:284
virtual void handle_table_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_table_stats_request &msg)
OpenFlow Table-Stats-Request message received.
Definition: crofbase.h:1833
bool has_ctl(const rofl::cctlid &ctlid) const
Checks for existence of rofl::crofctl instance with given identifier.
Definition: crofbase.h:655
Definition: cofmsg_meter_stats.h:146
Definition: cofmsg_config.h:115
rofl::crofctl & add_ctl(const rofl::cctlid &ctlid, const rofl::openflow::cofhello_elem_versionbitmap &versionbitmap, bool remove_on_channel_close=false)
Creates new rofl::crofctl instance for given identifier.
Definition: crofbase.h:557
virtual void handle_barrier_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Barrier-Reply message.
Definition: crofbase.h:1584
bool has_dpt_listening(unsigned int sockid)
Checks for existence of a listening socket identified by sockid.
Definition: crofbase.h:228
virtual void handle_group_desc_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_desc_stats_reply &msg)
OpenFlow Group-Desc-Stats-Reply message received.
Definition: crofbase.h:1322
Definition: cofmsg_role.h:131
virtual void handle_get_async_config_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_get_async_config_reply &msg)
OpenFlow Get-Async-Config-Reply message received.
Definition: crofbase.h:1726
virtual void handle_conn_terminated(rofl::crofdpt &dpt, const rofl::cauxid &auxid)
Called when a control connection (main or auxiliary) has been terminated by the peer entity...
Definition: crofbase.h:798
Definition: cofmsg_group_mod.h:21
virtual void handle_port_desc_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_desc_stats_request &msg)
OpenFlow Port-Desc-Stats-Request message received.
Definition: crofbase.h:2001
rofl::cctlid get_idle_ctlid() const
Returns the next idle identifier for a new rofl::crofctl instance.
Definition: crofbase.h:518
Definition: cofmsg_queue_get_config.h:22
virtual void handle_table_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_table_mod &msg)
OpenFlow Table-Mod message received.
Definition: crofbase.h:2085
virtual void handle_port_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_stats_reply &msg)
OpenFlow Port-Stats-Reply message received.
Definition: crofbase.h:1177
virtual void handle_error_message(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_error &msg)
OpenFlow Error message received.
Definition: crofbase.h:1654
void drop_dpt(rofl::cdptid dptid)
Deletes a rofl::crofdpt instance given by identifier.
Definition: crofbase.h:479
Environment expected by a rofl::crofctl instance.
Definition: crofctl.h:77
Definition: cofmsg_flow_stats.h:164
const rofl::cdptid & get_dptid() const
Returns rofl-common's internal rofl::cdptid identifier for this instance.
Definition: crofdpt.h:1092
void send_packet_in_message(const rofl::cauxid &auxid, uint32_t buffer_id, uint16_t total_len, uint8_t reason, uint8_t table_id, uint64_t cookie, uint16_t in_port, rofl::openflow::cofmatch &match, uint8_t *data, size_t datalen)
Sends OpenFlow Packet-In message to controller entity.
Definition: crofbase.cc:287
virtual void handle_features_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Features-Reply message.
Definition: crofbase.h:1046
Definition: cofmsg_table_mod.h:19
Definition: cofmsg_experimenter.h:19
Definition: cofmsg_port_stats.h:156
void send_flow_removed_message(const rofl::cauxid &auxid, rofl::openflow::cofmatch &match, uint64_t cookie, uint16_t priority, uint8_t reason, uint8_t table_id, uint32_t duration_sec, uint32_t duration_nsec, uint16_t idle_timeout, uint16_t hard_timeout, uint64_t packet_count, uint64_t byte_count)
Sends OpenFlow Flow-Removed message to controller entity.
Definition: crofbase.cc:375
virtual void handle_desc_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_desc_stats_reply &msg)
OpenFlow Desc-Stats-Reply message received.
Definition: crofbase.h:1119
virtual void handle_group_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_stats_reply &msg)
OpenFlow Group-Stats-Reply message received.
Definition: crofbase.h:1293
virtual void handle_group_features_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_features_stats_reply &msg)
OpenFlow Group-Features-Stats-Reply message received.
Definition: crofbase.h:1351
virtual void handle_role_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_role_reply &msg)
OpenFlow Role-Reply message received.
Definition: crofbase.h:1697
Definition: cofmsg_stats.h:264
Definition: cofmsg_meter_mod.h:20
virtual void handle_table_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Table-Stats-Reply message.
Definition: crofbase.h:1164
virtual void handle_flow_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_flow_mod &msg)
OpenFlow Flow-Mod message received.
Definition: crofbase.h:2057
virtual void handle_get_async_config_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_get_async_config_request &msg)
OpenFlow Get-Async-Config-Request message received.
Definition: crofbase.h:2183
A single socket.
Definition: csocket.h:182
Definition: crofbase.h:56
Definition: cofhelloelemversionbitmap.h:22
Definition: cofmsg_port_desc_stats.h:22
rofl-common's internal remote datapath handle.
Definition: cdptid.h:24
virtual void handle_flow_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Flow-Stats-Reply message.
Definition: crofbase.h:1222
virtual void handle_experimenter_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_experimenter_stats_request &msg)
OpenFlow Experimenter-Stats-Request message received.
Definition: crofbase.h:2015
void drop_dpt_listening(unsigned int sockid)
Removes a listening socket identified by sockid.
Definition: crofbase.h:213
virtual void handle_dpt_open(rofl::crofdpt &dpt)
Called after establishing the associated OpenFlow control channel.
Definition: crofbase.h:749
virtual void handle_packet_in(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_packet_in &msg)
OpenFlow Packet-In message received.
Definition: crofbase.h:1554
virtual void handle_role_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_role_request &msg)
OpenFlow Role-Request message received.
Definition: crofbase.h:2169
Definition: cofmsg_desc_stats.h:121
static uint32_t get_ofp_no_buffer(uint8_t ofp_version)
Returns OpenFlow's NO_BUFFER constant for various OpenFlow versions.
Definition: crofbase.cc:201
virtual void handle_flow_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_flow_stats_request &msg)
OpenFlow Flow-Stats-Request message received.
Definition: crofbase.h:1861
virtual void handle_conn_established(rofl::crofctl &ctl, const rofl::cauxid &auxid)
Called when a control connection (main or auxiliary) has been established.
Definition: crofbase.h:921
Definition: crofbase.h:47
virtual void handle_set_config(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_set_config &msg)
OpenFlow Set-Config message received.
Definition: crofbase.h:2127
Definition: crofbase.h:58
virtual void handle_experimenter_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Experimenter message.
Definition: crofbase.h:1684
rofl::cdptid get_idle_dptid() const
Returns the next idle identifier for a new rofl::crofdpt instance.
Definition: crofbase.h:354
virtual void handle_meter_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_stats_reply &msg)
OpenFlow Meter-Stats-Reply message received.
Definition: crofbase.h:1380
virtual void handle_conn_refused(rofl::crofdpt &dpt, const rofl::cauxid &auxid)
Called when an attempt to establish a control connection has been refused.
Definition: crofbase.h:818
static uint32_t get_ofp_controller_port(uint8_t ofp_version)
Returns OpenFlow's OFPP_CONTROLLER constant for various OpenFlow versions.
Definition: crofbase.cc:215
Definition: crofbase.h:45
Definition: cofmsg_async_config.h:20
virtual void handle_conn_established(rofl::crofdpt &dpt, const rofl::cauxid &auxid)
Called when a control connection (main or auxiliary) has been established.
Definition: crofbase.h:782
static uint8_t get_ofp_command(uint8_t ofp_version, const enum openflow::ofp_flow_mod_command &cmd)
Returns OpenFlow's OFPFC constants for various OpenFlow versions.
Definition: crofbase.cc:243
virtual void handle_role_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Role-Reply message.
Definition: crofbase.h:1713
Definition: cofmsg_desc_stats.h:21
virtual void handle_dpt_close(rofl::crofdpt &dpt)
Called after termination of associated OpenFlow control channel.
Definition: crofbase.h:768
Definition: cofmsg_meter_features_stats.h:23
virtual void handle_conn_failed(rofl::crofdpt &dpt, const rofl::cauxid &auxid)
Called when an attempt to establish a control connection has been failed.
Definition: crofbase.h:836
virtual void handle_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_stats_reply &msg)
OpenFlow Stats-Reply message received.
Definition: crofbase.h:1088
Definition: cofmsg_port_mod.h:20
virtual void handle_ctl_close(rofl::crofctl &ctl)
Called after termination of associated OpenFlow control channel.
Definition: crofbase.h:907
Definition: cofmsg_error.h:21
void drop_ctls()
Deletes all existing rofl::crofctl instances.
Definition: crofbase.h:530
virtual void handle_get_config_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_get_config_reply &msg)
OpenFlow Get-Config-Reply message received.
Definition: crofbase.h:1059
virtual void handle_experimenter_message(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_experimenter &msg)
OpenFlow Experimenter message received.
Definition: crofbase.h:2141
crofbase(const rofl::openflow::cofhello_elem_versionbitmap &versionbitmap=rofl::openflow::cofhello_elem_versionbitmap())
crofbase constructor
Definition: crofbase.cc:13
virtual void handle_group_desc_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Group-Desc-Stats-Reply message.
Definition: crofbase.h:1338
virtual void handle_port_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_mod &msg)
OpenFlow Port-Mod message received.
Definition: crofbase.h:2099
virtual void handle_experimenter_message(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_experimenter &msg)
OpenFlow Experimenter message received.
Definition: crofbase.h:1668
rofl::openflow::cofhello_elem_versionbitmap & set_versionbitmap()
Returns reference to OpenFlow version bitmap used for incoming connections.
Definition: crofbase.h:703
Definition: cofmsg_packet_in.h:21
virtual void handle_experimenter_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Experimenter-Stats-Reply message.
Definition: crofbase.h:1541
virtual void handle_get_config_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Get-Config-Reply message.
Definition: crofbase.h:1075
Definition: cofmsg_table_features_stats.h:22
virtual void handle_desc_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Desc-Stats-Reply message.
Definition: crofbase.h:1135
rofl::crofdpt & add_dpt(const rofl::cdptid &dptid, const rofl::openflow::cofhello_elem_versionbitmap &versionbitmap, bool remove_on_channel_close=false, const rofl::cdpid &dpid=rofl::cdpid(0))
Creates new rofl::crofdpt instance for given identifier.
Definition: crofbase.h:394
rofl::crofctl & set_ctl(const rofl::cctlid &ctlid, const rofl::openflow::cofhello_elem_versionbitmap &versionbitmap, bool remove_on_channel_close=false)
Returns existing or creates new rofl::crofctl instance for given identifier.
Definition: crofbase.h:585
Definition: cofmsg_stats.h:187
virtual void handle_meter_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Meter-Stats-Reply message.
Definition: crofbase.h:1396
virtual void handle_get_async_config_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Get-Async-Config-Reply message.
Definition: crofbase.h:1742
Definition: cofmsg_table_features_stats.h:161
virtual void handle_meter_features_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_features_stats_reply &msg)
OpenFlow Meter-Features-Stats-Reply message received.
Definition: crofbase.h:1438
Definition: crofbase.h:57
Definition: cofmsg_queue_stats.h:144
Definition: cofmsg_group_desc_stats.h:22
Definition: cofmatch.h:35
Definition: cofmsg_group_stats.h:152
virtual void handle_port_desc_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_desc_stats_reply &msg)
OpenFlow Port-Desc-Stats-Reply message received.
Definition: crofbase.h:1496
virtual void handle_queue_get_config_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Table-Stats-Reply message.
Definition: crofbase.h:1641
Definition: cofmsg_port_desc_stats.h:123
bool has_ctl_listening(unsigned int sockid)
Checks for existence of a listening socket identified by sockid.
Definition: crofbase.h:331
rofl::csocket & add_ctl_listening(unsigned int sockid, enum rofl::csocket::socket_type_t socket_type, const rofl::cparams ¶ms)
Creates a new listening rofl::csocket instance for accepting incoming OpenFlow connections.
Definition: crofbase.h:262
Definition: cofmsg_group_features_stats.h:120
Definition: cofmsg_port_status.h:20
virtual void handle_meter_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_mod &msg)
OpenFlow Meter-Mod message received.
Definition: crofbase.h:2211
virtual void handle_barrier_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_barrier_reply &msg)
OpenFlow Barrier-Reply message received.
Definition: crofbase.h:1568
virtual void handle_conn_refused(rofl::crofctl &ctl, const rofl::cauxid &auxid)
Called when an attempt to establish a control connection has been refused.
Definition: crofbase.h:957
void drop_ctl_listening(unsigned int sockid)
Removes a listening socket identified by sockid.
Definition: crofbase.h:316
virtual void handle_port_desc_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Port-Desc-Stats-Reply message.
Definition: crofbase.h:1512
Definition: cofmsg_aggr_stats.h:147
Definition: cofmsg_barrier.h:19
Definition: crofbase.h:50
Definition: crofbase.h:43
Definition: cofmsg_table_stats.h:23
virtual void handle_set_async_config(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_set_async_config &msg)
OpenFlow Set-Async-Config message received.
Definition: crofbase.h:2197
virtual void handle_desc_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_desc_stats_request &msg)
OpenFlow Desc-Stats-Request message received.
Definition: crofbase.h:1819
Environment expected by a rofl::crofconn instance.
Definition: crofconn.h:40
Definition: cofmsg_meter_config_stats.h:23
Definition: cofmsg_async_config.h:115
Definition: cofmsg_queue_get_config.h:152
virtual void handle_group_desc_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_desc_stats_request &msg)
OpenFlow Group-Desc-Stats-Request message received.
Definition: crofbase.h:1917
rofl::csocket & set_dpt_listening(unsigned int sockid, enum rofl::csocket::socket_type_t socket_type, const rofl::cparams ¶ms)
Returns a reference to the listening csocket object specified by identifier sockid.
Definition: crofbase.h:181
Definition: cofmsg_config.h:19
const rofl::ctimerid & register_timer(int opaque, const rofl::ctimespec ×pec)
Installs a new timer to fire in t seconds.
Definition: ciosrv.h:698
virtual void handle_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid, uint8_t stats_type)
Timer expired while waiting for OpenFlow Stats-Reply message.
Definition: crofbase.h:1105
Definition: cofmsg_port_stats.h:23
static rofl::crofctl & get_ctl(const rofl::cctlid &ctlid)
Returns reference to rofl::crofctl instance identified by rofl-common's internal identifier.
Definition: crofctl.cc:17
Definition: crofbase.h:51
virtual void handle_port_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_stats_request &msg)
OpenFlow Port-Stats-Request message received.
Definition: crofbase.h:1847
static uint32_t get_ofp_flood_port(uint8_t ofp_version)
Returns OpenFlow's OFPP_FLOOD constant for various OpenFlow versions.
Definition: crofbase.cc:229
virtual void handle_aggregate_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Aggregate-Stats-Reply message.
Definition: crofbase.h:1251
Definition: cofmsg_group_features_stats.h:20
Definition: cofmsg_packet_out.h:21
const rofl::crofctl & get_ctl(const rofl::cctlid &ctlid) const
Returns const reference to existing rofl::crofctl instance.
Definition: crofbase.h:625
virtual void handle_conn_failed(rofl::crofctl &ctl, const rofl::cauxid &auxid)
Called when an attempt to establish a control connection has been failed.
Definition: crofbase.h:975
virtual void handle_group_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_mod &msg)
OpenFlow Group-Mod message received.
Definition: crofbase.h:2071
rofl::crofctl & set_ctl(const rofl::cctlid &ctlid)
Returns reference to existing rofl::crofctl instance.
Definition: crofbase.h:606
Definition: cofmsg_role.h:20
virtual void handle_experimenter_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_experimenter_stats_reply &msg)
OpenFlow Experimenter-Stats-Reply message received.
Definition: crofbase.h:1525
virtual void handle_packet_out(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_packet_out &msg)
OpenFlow Packet-Out message received.
Definition: crofbase.h:2029
Definition: cofmsg_features.h:118
virtual void handle_conn_writable(rofl::crofctl &ctl, const rofl::cauxid &auxid)
Called when a congestion situation on the control connection has been solved.
Definition: crofbase.h:999
rofl::crofdpt & set_dpt(const rofl::cdptid &dptid, const rofl::openflow::cofhello_elem_versionbitmap &versionbitmap, bool remove_on_channel_close=false, const rofl::cdpid &dpid=rofl::cdpid(0))
Returns existing or creates new rofl::crofdpt instance for given identifier.
Definition: crofbase.h:424
virtual void handle_queue_get_config_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_queue_get_config_reply &msg)
OpenFlow Queue-Get-Config-Reply message received.
Definition: crofbase.h:1625
Definition: cofmsg_aggr_stats.h:20
uint8_t get_highest_supported_ofp_version() const
Returns highest OpenFlow version supported for incoming connections.
Definition: crofbase.h:717
Definition: cofmsg_queue_stats.h:23
An abstract interface defining the consumer side of a csocket.
Definition: csocket.h:58
void drop_ctl(rofl::cctlid ctlid)
Deletes a rofl::crofctl instance given by identifier.
Definition: crofbase.h:639
virtual void handle_meter_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_stats_request &msg)
OpenFlow Meter-Stats-Request message received.
Definition: crofbase.h:1945
virtual ~crofbase()
crofbase destructor
Definition: crofbase.cc:25
virtual void handle_meter_config_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_config_stats_reply &msg)
OpenFlow Meter-Config-Stats-Reply message received.
Definition: crofbase.h:1409
const rofl::csocket & get_dpt_listening(unsigned int sockid) const
Returns a const reference to the listening csocket object specified by identifier sockid...
Definition: crofbase.h:199
virtual void handle_aggregate_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_aggr_stats_reply &msg)
OpenFlow Aggregate-Stats-Reply message received.
Definition: crofbase.h:1235
Definition: cofmsg_flow_mod.h:20
Definition: cofmsg_flow_stats.h:29
rofl-common's internal remote controller handle.
Definition: cctlid.h:24
Definition: crofbase.h:44
const rofl::cctlid & get_ctlid() const
Returns rofl-common's internal rofl::cctlid identifier for this instance.
Definition: crofctl.h:794
void drop_dpts()
Deletes all existing rofl::crofdpt instances.
Definition: crofbase.h:366
virtual void handle_queue_get_config_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_queue_get_config_request &msg)
OpenFlow Queue-Get-Config-Request message received.
Definition: crofbase.h:2113
bool is_ofp_version_supported(uint8_t ofp_version) const
Returns true, when the given OpenFlow version is supported by this crofbase instance.
Definition: crofbase.h:724
virtual void handle_flow_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_flow_stats_reply &msg)
OpenFlow Flow-Stats-Reply message received.
Definition: crofbase.h:1206
virtual void handle_queue_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_queue_stats_request &msg)
OpenFlow Queue-Stats-Request message received.
Definition: crofbase.h:1889
Definition: crofbase.h:49
virtual void handle_table_features_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_table_features_stats_request &msg)
OpenFlow Table-Features-Stats-Request message received.
Definition: crofbase.h:1987
virtual void handle_port_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Port-Stats-Reply message.
Definition: crofbase.h:1193
Definition: cofmsg_meter_features_stats.h:88
virtual void handle_queue_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Queue-Stats-Reply message.
Definition: crofbase.h:1280
virtual void handle_group_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Group-Stats-Reply message.
Definition: crofbase.h:1309
const rofl::crofdpt & get_dpt(const rofl::cdptid &dptid) const
Returns const reference to existing rofl::crofdpt instance.
Definition: crofbase.h:465
Base class for IO services.
Definition: ciosrv.h:491
virtual void handle_table_features_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_table_features_stats_reply &msg)
OpenFlow Table-Features-Stats-Reply message received.
Definition: crofbase.h:1467
virtual void handle_meter_config_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Meter-Config-Stats-Reply message.
Definition: crofbase.h:1425
virtual void handle_meter_features_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Meter-Features-Stats-Reply message.
Definition: crofbase.h:1454
Definition: cofmsg_group_desc_stats.h:123
Time specification used by class rofl::ctimer object.
Definition: ctimespec.h:25
virtual void handle_features_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_features_request &msg)
OpenFlow Features-Request message received.
Definition: crofbase.h:1777
Definition: cofmsg_table_stats.h:132
virtual void handle_error_message(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_error &msg)
OpenFlow error message received.
Definition: crofbase.h:2155
virtual void handle_flow_removed(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_flow_removed &msg)
OpenFlow Flow-Removed message received.
Definition: crofbase.h:1597
Definition: ctransactions.h:27
Definition: cofmsg_group_stats.h:21
Definition: cofmsg_features.h:22
Class representing a remote datapath element.
Definition: crofdpt.h:973
Definition: cofmsg_meter_stats.h:23
Definition: cofmsg_flow_removed.h:20
Definition: crofbase.h:53
virtual void handle_aggregate_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_aggr_stats_request &msg)
OpenFlow Aggregate-Stats-Request message received.
Definition: crofbase.h:1875
virtual void handle_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_stats_request &msg)
OpenFlow Stats-Request message received.
Definition: crofbase.h:1805
virtual void handle_ctl_open(rofl::crofctl &ctl)
Called after establishing the associated OpenFlow control channel.
Definition: crofbase.h:888
Definition: crofbase.h:52
virtual void handle_group_features_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Group-Features-Stats-Reply message.
Definition: crofbase.h:1367
Definition: crofbase.h:54
Definition: cofmsg_meter_config_stats.h:147
Definition: cofmsg_async_config.h:226
virtual void handle_queue_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_queue_stats_reply &msg)
OpenFlow Queue-Stats-Reply message received.
Definition: crofbase.h:1264
virtual void handle_group_features_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_features_stats_request &msg)
OpenFlow Group-Features-Stats-Request message received.
Definition: crofbase.h:1931
const rofl::openflow::cofhello_elem_versionbitmap & get_versionbitmap() const
Returns const reference to OpenFlow version bitmap used for incoming connections. ...
Definition: crofbase.h:710
virtual void handle_conn_writable(rofl::crofdpt &dpt, const rofl::cauxid &auxid)
Called when a congestion situation on the control connection has been solved.
Definition: crofbase.h:860
virtual void handle_get_config_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_get_config_request &msg)
OpenFlow Get-Config-Request message received.
Definition: crofbase.h:1791
Environment expected by a rofl::crofdpt instance.
Definition: crofdpt.h:75
virtual void handle_conn_terminated(rofl::crofctl &ctl, const rofl::cauxid &auxid)
Called when a control connection (main or auxiliary) has been terminated by the peer entity...
Definition: crofbase.h:937
virtual void handle_table_stats_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_table_stats_reply &msg)
OpenFlow Table-Stats-Reply message received.
Definition: crofbase.h:1148
virtual void handle_table_features_stats_reply_timeout(rofl::crofdpt &dpt, uint32_t xid)
Timer expired while waiting for OpenFlow Table-Features-Stats-Reply message.
Definition: crofbase.h:1483
void close_ctl_listening()
Closes all listening csocket instances.
Definition: crofbase.h:247
Definition: cofmsg_experimenter_stats.h:21
virtual void handle_barrier_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_barrier_request &msg)
OpenFlow Barrier-Request message received.
Definition: crofbase.h:2043
virtual void handle_group_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_stats_request &msg)
OpenFlow Group-Stats-Request message received.
Definition: crofbase.h:1903
virtual void handle_meter_config_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_config_stats_request &msg)
OpenFlow Meter-Config-Stats-Request message received.
Definition: crofbase.h:1959
Definition: cofmsg_config.h:332
rofl::csocket & add_dpt_listening(unsigned int sockid, enum rofl::csocket::socket_type_t socket_type, const rofl::cparams ¶ms)
Creates a new listening rofl::csocket instance for accepting incoming OpenFlow connections.
Definition: crofbase.h:159
static rofl::crofdpt & get_dpt(const rofl::cdptid &dptid)
Returns reference to rofl::crofdpt instance identified by rofl-common's internal identifier.
Definition: crofdpt.cc:17
void close_dpt_listening()
Closes all listening csocket instances.
Definition: crofbase.h:144
Base class for revised OpenFlow library.
Definition: crofbase.h:100
void send_port_status_message(const rofl::cauxid &auxid, uint8_t reason, const rofl::openflow::cofport &port)
Sends OpenFlow Port-Status message to controller entity.
Definition: crofbase.cc:467
Definition: crofbase.h:48
bool has_dpt(const rofl::cdptid &dptid) const
Checks for existence of rofl::crofdpt instance with given identifier.
Definition: crofbase.h:495
virtual void handle_meter_features_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_features_stats_request &msg)
OpenFlow Meter-Features-Stats-Request message received.
Definition: crofbase.h:1973
const rofl::csocket & get_ctl_listening(unsigned int sockid) const
Returns a const reference to the listening csocket object specified by identifier sockid...
Definition: crofbase.h:302
virtual void handle_features_reply(rofl::crofdpt &dpt, const rofl::cauxid &auxid, rofl::openflow::cofmsg_features_reply &msg)
OpenFlow Features-Reply message received.
Definition: crofbase.h:1030
Definition: crofbase.h:46
Definition: croflexception.h:27
Definition: cofmsg_experimenter_stats.h:184
Class representing a remote controller entity.
Definition: crofctl.h:715
Definition: crofbase.h:55
rofl::crofdpt & set_dpt(const rofl::cdptid &dptid)
Returns reference to existing rofl::crofdpt instance.
Definition: crofbase.h:446