Revised OpenFlow Library  v0.6.0dev
 All Classes Files Functions Variables Friends Groups Pages
crofctl.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 
5 #ifndef CROFCTL_H
6 #define CROFCTL_H 1
7 
8 #include <map>
9 #include <string>
10 #include <bitset>
11 
12 #include "openflow/openflow.h"
13 #include "croflexception.h"
14 #include "cmemory.h"
15 #include "rofl/common/cctlid.h"
16 #include "rofl/common/csocket.h"
17 #include "rofl/common/crofchan.h"
18 #include "openflow/messages/cofmsg.h"
19 #include "rofl/common/openflow/cofport.h"
20 #include "rofl/common/openflow/cofports.h"
21 #include "rofl/common/openflow/coftables.h"
22 #include "rofl/common/openflow/cofasyncconfig.h"
23 #include "rofl/common/openflow/cofrole.h"
24 #include "rofl/common/openflow/cofdescstats.h"
25 #include "rofl/common/openflow/cofaggrstats.h"
26 #include "rofl/common/openflow/cofgroupfeaturesstats.h"
27 #include "rofl/common/openflow/cofpacketqueues.h"
28 #include "rofl/common/openflow/cofflowstatsarray.h"
29 #include "rofl/common/openflow/coftablestatsarray.h"
30 #include "rofl/common/openflow/cofportstatsarray.h"
31 #include "rofl/common/openflow/cofqueuestatsarray.h"
32 #include "rofl/common/openflow/cofgroupstatsarray.h"
33 #include "rofl/common/openflow/cofgroupdescstatsarray.h"
34 #include "rofl/common/openflow/cofmeterstatsarray.h"
35 #include "rofl/common/openflow/cofmeterconfigarray.h"
36 #include "rofl/common/openflow/cofmeterfeatures.h"
37 #include "rofl/common/cauxid.h"
38 
39 #include "rofl/common/ciosrv.h"
40 #include "rofl/common/thread_helper.h"
41 #include "rofl/common/logging.h"
42 #include "rofl/common/openflow/cofmatch.h"
43 #include "rofl/common/openflow/cofhelloelemversionbitmap.h"
44 #include "rofl/common/ctransactions.h"
45 
46 
47 namespace rofl {
48 
49 class eRofCtlBase : public RoflException {
50 public:
51  eRofCtlBase(const std::string& __arg) : RoflException(__arg) {};
52 };
53 class eRofCtlNotFound : public eRofCtlBase {
54 public:
55  eRofCtlNotFound(const std::string& __arg) : eRofCtlBase(__arg) {};
56 };
57 
58 class crofctl;
59 
77 class crofctl_env {
78  friend class crofctl;
79  static std::set<crofctl_env*> rofctl_envs;
80 public:
81 
86  { crofctl_env::rofctl_envs.insert(this); };
87 
91  virtual
93  { crofctl_env::rofctl_envs.erase(this); };
94 
95 protected:
96 
113  virtual void
115  rofl::crofctl& ctl)
116  {};
117 
129  virtual void
131  rofl::crofctl& ctl)
132  {};
133 
140  virtual void
142  rofl::crofctl& ctl,
143  const rofl::cauxid& auxid)
144  {};
145 
152  virtual void
154  rofl::crofctl& ctl,
155  const rofl::cauxid& auxid)
156  {};
157 
168  virtual void
170  rofl::crofctl& ctl,
171  const rofl::cauxid& auxid)
172  {};
173 
184  virtual void
186  rofl::crofctl& ctl,
187  const rofl::cauxid& auxid)
188  {};
189 
206  virtual void
208  rofl::crofctl& ctl,
209  const rofl::cauxid& auxid)
210  {};
211 
219  virtual void
221  rofl::crofctl& ctl, uint32_t role, uint64_t rcvd_generation_id)
222  {};
223 
224 protected:
225 
251  virtual void
253  rofl::crofctl& ctl,
254  const rofl::cauxid& auxid,
256  {};
257 
265  virtual void
267  rofl::crofctl& ctl,
268  const rofl::cauxid& auxid,
270  {};
271 
279  void
281  rofl::crofctl& ctl,
282  const rofl::cauxid& auxid,
284  {};
285 
293  virtual void
295  rofl::crofctl& ctl,
296  const rofl::cauxid& auxid,
298  {};
299 
307  virtual void
309  rofl::crofctl& ctl,
310  const rofl::cauxid& auxid,
312  {};
313 
321  virtual void
323  rofl::crofctl& ctl,
324  const rofl::cauxid& auxid,
326  {};
327 
335  virtual void
337  rofl::crofctl& ctl,
338  const rofl::cauxid& auxid,
340  {};
341 
349  virtual void
351  rofl::crofctl& ctl,
352  const rofl::cauxid& auxid,
354  {};
355 
363  virtual void
365  rofl::crofctl& ctl,
366  const rofl::cauxid& auxid,
368  {};
369 
377  virtual void
379  rofl::crofctl& ctl,
380  const rofl::cauxid& auxid,
382  {};
383 
391  virtual void
393  rofl::crofctl& ctl,
394  const rofl::cauxid& auxid,
396  {};
397 
405  virtual void
407  rofl::crofctl& ctl,
408  const rofl::cauxid& auxid,
410  {};
411 
419  virtual void
421  rofl::crofctl& ctl,
422  const rofl::cauxid& auxid,
424  {};
425 
433  virtual void
435  rofl::crofctl& ctl,
436  const rofl::cauxid& auxid,
438  {};
439 
447  virtual void
449  rofl::crofctl& ctl,
450  const rofl::cauxid& auxid,
452  {};
453 
461  virtual void
463  rofl::crofctl& ctl,
464  const rofl::cauxid& auxid,
466  {};
467 
475  virtual void
477  rofl::crofctl& ctl,
478  const rofl::cauxid& auxid,
480  {};
481 
489  virtual void
491  rofl::crofctl& ctl,
492  const rofl::cauxid& auxid,
494  {};
495 
503  virtual void
505  rofl::crofctl& ctl,
506  const rofl::cauxid& auxid,
508  {};
509 
517  virtual void
519  rofl::crofctl& ctl,
520  const rofl::cauxid& auxid,
522  {};
523 
531  virtual void
533  rofl::crofctl& ctl,
534  const rofl::cauxid& auxid,
536  {};
537 
545  virtual void
547  rofl::crofctl& ctl,
548  const rofl::cauxid& auxid,
550  {};
551 
559  virtual void
561  rofl::crofctl& ctl,
562  const rofl::cauxid& auxid,
564  {};
565 
573  virtual void
575  rofl::crofctl& ctl,
576  const rofl::cauxid& auxid,
578  {};
579 
587  virtual void
589  rofl::crofctl& ctl,
590  const rofl::cauxid& auxid,
592  {};
593 
601  virtual void
603  rofl::crofctl& ctl,
604  const rofl::cauxid& auxid,
606  {};
607 
615  virtual void
617  rofl::crofctl& ctl,
618  const rofl::cauxid& auxid,
620  {};
621 
629  virtual void
631  rofl::crofctl& ctl,
632  const rofl::cauxid& auxid,
634  {};
635 
643  virtual void
645  rofl::crofctl& ctl,
646  const rofl::cauxid& auxid,
648  {};
649 
657  virtual void
659  rofl::crofctl& ctl,
660  const rofl::cauxid& auxid,
662  {};
663 
671  virtual void
673  rofl::crofctl& ctl,
674  const rofl::cauxid& auxid,
676  {};
677 
685  virtual void
687  rofl::crofctl& ctl,
688  const rofl::cauxid& auxid,
690  {};
691 
693 };
694 
695 
696 
715 class crofctl :
716  public rofl::crofchan_env,
718  public ciosrv
719 {
720  enum crofctl_timer_t {
721  TIMER_RUN_ENGINE = 0,
722  };
723 
724  enum crofctl_event_t {
725  EVENT_NONE = 0,
726  EVENT_CHAN_TERMINATED = 1,
727  EVENT_CONN_TERMINATED = 2,
728  EVENT_CONN_REFUSED = 3,
729  EVENT_CONN_FAILED = 4,
730  };
731 
732  enum crofctl_flag_t {
733  FLAG_ENGINE_IS_RUNNING = (1 << 0),
734  };
735 
736 public:
737 
745  static rofl::crofctl&
746  get_ctl(
747  const rofl::cctlid& ctlid);
748 
758  crofctl_env* env,
759  const cctlid& ctlid,
760  bool remove_on_channel_close,
761  const rofl::openflow::cofhello_elem_versionbitmap& versionbitmap) :
762  env(env),
763  ctlid(ctlid),
764  rofchan(this, versionbitmap),
765  transactions(this),
766  remove_on_channel_close(remove_on_channel_close),
767  async_config_role_default_template(rofl::openflow13::OFP_VERSION),
768  async_config(rofl::openflow13::OFP_VERSION) {
769  rofl::logging::debug << "[rofl-common][crofctl] "
770  << "instance created, ctlid: " << ctlid.str() << std::endl;
771  init_async_config_role_default_template();
773  crofctl::rofctls[ctlid] = this;
774  };
775 
781  virtual
783  rofl::logging::debug << "[rofl-common][crofctl] "
784  << "instance destroyed, ctlid: " << ctlid.str() << std::endl;
785  crofctl::rofctls.erase(ctlid);
786  };
787 
793  const rofl::cctlid&
794  get_ctlid() const
795  { return ctlid; };
796 
797 public:
798 
817  std::list<rofl::cauxid>
819  { return rofchan.get_conn_index(); };
820 
836  void
838  const rofl::cauxid& auxid,
839  enum rofl::csocket::socket_type_t socket_type,
840  const rofl::cparams& socket_params)
841  { rofchan.add_conn(auxid, socket_type, socket_params); };
842 
851  void
853  const rofl::cauxid& auxid)
854  { rofchan.drop_conn(auxid); };
855 
865  void
867  crofconn* conn) {
868  if (NULL == conn) {
869  return;
870  }
871  rofchan.add_conn(conn->get_aux_id(), conn);
872  };
873 
876 public:
877 
887  bool
889  { return rofchan.is_established(); };
890 
896  uint8_t
898  { return rofchan.get_version(); };
906  { return rofchan.get_versionbitmap(); };
907 
911  bool
913  { return remove_on_channel_close; };
914 
921  get_peer_addr(const rofl::cauxid& auxid) const
922  { return rofchan.get_conn(auxid).get_rofsocket().get_socket().get_raddr(); };
923 
926 public:
927 
939  { return role; };
940 
945  get_role() const
946  { return role; };
947 
951  bool
952  is_slave() const;
953 
959  { return async_config; };
960 
966  { return async_config; };
967 
973  { return async_config_role_default_template; };
974 
977 public:
978 
1003  void
1005  const rofl::cauxid& auxid,
1006  uint32_t xid,
1007  uint64_t dpid,
1008  uint32_t n_buffers,
1009  uint8_t n_tables,
1010  uint32_t capabilities,
1011  uint8_t of13_auxiliary_id = 0,
1012  uint32_t of10_actions_bitmap = 0,
1014 
1022  void
1024  const rofl::cauxid& auxid,
1025  uint32_t xid,
1026  uint16_t flags,
1027  uint16_t miss_send_len);
1028 
1038  void
1040  const rofl::cauxid& auxid,
1041  uint32_t xid,
1042  uint16_t stats_type,
1043  uint16_t stats_flags,
1044  uint8_t *body = NULL,
1045  size_t bodylen = 0);
1046 
1054  void
1056  const rofl::cauxid& auxid,
1057  uint32_t xid,
1058  const rofl::openflow::cofdesc_stats_reply& desc_stats,
1059  uint16_t stats_flags = 0);
1060 
1068  void
1070  const rofl::cauxid& auxid,
1071  uint32_t xid,
1072  const rofl::openflow::cofflowstatsarray& flow_stats,
1073  uint16_t stats_flags = 0);
1074 
1082  void
1084  const rofl::cauxid& auxid,
1085  uint32_t xid,
1086  const rofl::openflow::cofaggr_stats_reply& aggr_stats,
1087  uint16_t stats_flags = 0);
1088 
1096  void
1098  const rofl::cauxid& auxid,
1099  uint32_t xid,
1100  const rofl::openflow::coftablestatsarray& tablestatsarray,
1101  uint16_t stats_flags = 0);
1102 
1110  void
1112  const rofl::cauxid& auxid,
1113  uint32_t xid,
1114  const rofl::openflow::cofportstatsarray& portstatsarray,
1115  uint16_t stats_flags = 0);
1116 
1124  void
1126  const rofl::cauxid& auxid,
1127  uint32_t xid,
1128  const rofl::openflow::cofqueuestatsarray& queuestatsarray,
1129  uint16_t stats_flags = 0);
1130 
1138  void
1140  const rofl::cauxid& auxid,
1141  uint32_t xid,
1142  const rofl::openflow::cofgroupstatsarray& groupstatsarray,
1143  uint16_t stats_flags = 0);
1144 
1152  void
1154  const rofl::cauxid& auxid,
1155  uint32_t xid,
1156  const rofl::openflow::cofgroupdescstatsarray& groupdescs,
1157  uint16_t stats_flags = 0);
1158 
1166  void
1168  const rofl::cauxid& auxid,
1169  uint32_t xid,
1170  const rofl::openflow::cofgroup_features_stats_reply& group_features_stats,
1171  uint16_t stats_flags = 0);
1172 
1180  void
1182  const rofl::cauxid& auxid,
1183  uint32_t xid,
1184  const rofl::openflow::coftables& tables,
1185  uint16_t stats_flags = 0);
1186 
1194  void
1196  const rofl::cauxid& auxid,
1197  uint32_t xid,
1198  const rofl::openflow::cofports& ports,
1199  uint16_t stats_flags = 0);
1200 
1212  void
1214  const rofl::cauxid& auxid,
1215  uint32_t xid,
1216  uint32_t exp_id,
1217  uint32_t exp_type,
1218  const cmemory& body,
1219  uint16_t stats_flags = 0);
1220 
1229  void
1231  const rofl::cauxid& auxid,
1232  uint32_t xid,
1233  const rofl::openflow::cofmeterstatsarray& meter_stats_array,
1234  uint16_t stats_flags = 0);
1235 
1244  void
1246  const rofl::cauxid& auxid,
1247  uint32_t xid,
1248  const rofl::openflow::cofmeterconfigarray& meter_config_array,
1249  uint16_t stats_flags = 0);
1250 
1259  void
1261  const rofl::cauxid& auxid,
1262  uint32_t xid,
1263  const rofl::openflow::cofmeter_features& meter_features,
1264  uint16_t stats_flags = 0);
1265 
1279  void
1281  const rofl::cauxid& auxid,
1282  uint32_t buffer_id,
1283  uint16_t total_len,
1284  uint8_t reason,
1285  uint8_t table_id,
1286  uint64_t cookie,
1287  uint16_t in_port, // for OF1.0
1288  const rofl::openflow::cofmatch& match,
1289  uint8_t *data,
1290  size_t datalen);
1291 
1297  void
1299  const rofl::cauxid& auxid,
1300  uint32_t xid);
1301 
1311  void
1313  const rofl::cauxid& auxid,
1314  uint32_t xid,
1315  uint16_t type,
1316  uint16_t code,
1317  uint8_t* data = NULL,
1318  size_t datalen = 0);
1319 
1330  void
1332  const rofl::cauxid& auxid,
1333  uint32_t xid,
1334  uint32_t experimenter_id,
1335  uint32_t exp_type,
1336  uint8_t *body = NULL,
1337  size_t bodylen = 0);
1338 
1354  void
1356  const rofl::cauxid& auxid,
1357  const rofl::openflow::cofmatch& match,
1358  uint64_t cookie,
1359  uint16_t priority,
1360  uint8_t reason,
1361  uint8_t table_id,
1362  uint32_t duration_sec,
1363  uint32_t duration_nsec,
1364  uint16_t idle_timeout,
1365  uint16_t hard_timeout,
1366  uint64_t packet_count,
1367  uint64_t byte_count);
1368 
1375  void
1377  const rofl::cauxid& auxid,
1378  uint8_t reason,
1379  const rofl::openflow::cofport& port);
1380 
1387  void
1389  const rofl::cauxid& auxid,
1390  uint32_t xid,
1391  uint32_t portno,
1392  const rofl::openflow::cofpacket_queues& queues);
1393 
1394 
1402  void
1404  const rofl::cauxid& auxid,
1405  uint32_t xid,
1406  const rofl::openflow::cofrole& role);
1407 
1413  void
1415  const rofl::cauxid& auxid,
1416  uint32_t xid,
1417  const rofl::openflow::cofasync_config& async_config);
1418 
1422 public:
1423 
1424  friend std::ostream&
1425  operator<< (std::ostream& os, const crofctl& ctl) {
1426  os << indent(0) << "<crofctl ";
1427  os << "ctlid:0x" << ctl.ctlid.str() << " ";
1428  os << ">" << std::endl;
1429  rofl::indent i(2);
1430  os << ctl.rofchan;
1431  return os;
1432  };
1433 
1434  std::string
1435  str() const {
1436  std::stringstream ss;
1437  ss << "ctlid: " << get_ctlid().get_ctlid_s() << " ";
1438  return ss.str();
1439  };
1440 
1441 private:
1442 
1443  virtual void
1444  handle_conn_established(
1445  crofchan& chan,
1446  const rofl::cauxid& auxid) {
1447  rofl::logging::info << "[rofl-common][crofctl] ctlid:0x" << ctlid.str()
1448  << " control connection established, auxid: " << auxid.str() << std::endl;
1449  call_env().handle_conn_established(*this, auxid);
1450 
1451  if (auxid == rofl::cauxid(0)) {
1452  rofl::logging::info << "[rofl-common][crofctl] ctlid:0x" << ctlid.str()
1453  << " OFP control channel established, " << chan.str() << std::endl;
1454 
1455  call_env().handle_chan_established(*this); // main connection
1456  }
1457  };
1458 
1459  virtual void
1460  handle_conn_terminated(
1461  crofchan& chan,
1462  const rofl::cauxid& auxid) {
1463  rofl::logging::info << "[rofl-common][crofctl] ctlid:0x" << ctlid.str()
1464  << " control connection terminated, auxid: " << auxid.str() << std::endl;
1465  rofl::RwLock rwlock(conns_terminated_rwlock, rofl::RwLock::RWLOCK_WRITE);
1466  conns_terminated.push_back(auxid);
1467  push_on_eventqueue(EVENT_CONN_TERMINATED);
1468 
1469  if (auxid == rofl::cauxid(0)) {
1470  rofl::logging::info << "[rofl-common][crofctl] ctlid:0x" << ctlid.str()
1471  << " OFP control channel terminated, " << chan.str() << std::endl;
1472  transactions.clear();
1473  push_on_eventqueue(EVENT_CHAN_TERMINATED);
1474  }
1475  };
1476 
1477  virtual void
1478  handle_conn_refused(
1479  crofchan& chan,
1480  const rofl::cauxid& auxid) {
1481  rofl::RwLock rwlock(conns_refused_rwlock, rofl::RwLock::RWLOCK_WRITE);
1482  conns_refused.push_back(auxid);
1483  push_on_eventqueue(EVENT_CONN_REFUSED);
1484  };
1485 
1486  virtual void
1487  handle_conn_failed(
1488  crofchan& chan,
1489  const rofl::cauxid& auxid) {
1490  rofl::RwLock rwlock(conns_failed_rwlock, rofl::RwLock::RWLOCK_WRITE);
1491  conns_failed.push_back(auxid);
1492  push_on_eventqueue(EVENT_CONN_FAILED);
1493  };
1494 
1495  virtual void
1496  handle_write(
1497  rofl::crofchan& chan,
1498  const rofl::cauxid& auxid)
1499  { call_env().handle_conn_writable(*this, auxid); };
1500 
1501  virtual void
1502  recv_message(
1503  rofl::crofchan& chan,
1504  const rofl::cauxid& aux_id,
1505  rofl::openflow::cofmsg *msg);
1506 
1507  virtual uint32_t
1508  get_async_xid(
1509  rofl::crofchan& chan)
1510  { return transactions.get_async_xid(); };
1511 
1512  virtual uint32_t
1513  get_sync_xid(
1514  rofl::crofchan& chan,
1515  uint8_t msg_type = 0,
1516  uint16_t msg_sub_type = 0)
1517  { return transactions.add_ta(cclock(/*secs=*/5), msg_type, msg_sub_type); };
1518 
1519  virtual void
1520  release_sync_xid(
1521  rofl::crofchan& chan,
1522  uint32_t xid)
1523  { transactions.drop_ta(xid); };
1524 
1525  virtual void
1526  ta_expired(
1527  rofl::ctransactions& tas,
1528  rofl::ctransaction& ta)
1529  {};
1530 
1531 public:
1532 
1537  cctlid ctlid;
1538  public:
1539  crofctl_find_by_ctlid(const cctlid& ctlid) : ctlid(ctlid) {};
1540  bool operator() (const crofctl* rofctl) {
1541  return (rofctl->get_ctlid() == ctlid);
1542  };
1543  };
1544 
1545 private:
1546 
1547  virtual void
1548  handle_timeout(
1549  int opaque, void *data = (void*)0);
1550 
1551  crofctl_env&
1552  call_env() {
1553  if (crofctl_env::rofctl_envs.find(env) == crofctl_env::rofctl_envs.end()) {
1554  throw eRofCtlNotFound("rofl::crofctl::call_env() environment not found");
1555  }
1556  return *env;
1557  };
1558 
1559  void
1560  init_async_config_role_default_template();
1561 
1562  void
1563  check_role();
1564 
1565  void
1566  push_on_eventqueue(
1567  enum crofctl_event_t event = EVENT_NONE) {
1568  if (EVENT_NONE != event) {
1569  events.push_back(event);
1570  }
1571  if (not flags.test(FLAG_ENGINE_IS_RUNNING)) {
1572  register_timer(TIMER_RUN_ENGINE, rofl::ctimespec(0));
1573  }
1574  };
1575 
1576  void
1577  work_on_eventqueue();
1578 
1579  void
1580  event_chan_terminated();
1581 
1582  void
1583  event_conn_established();
1584 
1585  void
1586  event_conn_terminated();
1587 
1588  void
1589  event_conn_refused();
1590 
1591  void
1592  event_conn_failed();
1593 
1594 private:
1595 
1596  void
1597  experimenter_rcvd(
1598  const rofl::cauxid& auxid,
1600 
1601  void
1602  error_rcvd(
1603  const rofl::cauxid& auxid,
1605 
1606  void
1607  features_request_rcvd(
1608  const rofl::cauxid& auxid,
1610 
1611  void
1612  get_config_request_rcvd(
1613  const rofl::cauxid& auxid,
1615 
1616  void
1617  set_config_rcvd(
1618  const rofl::cauxid& auxid,
1620 
1621  void
1622  packet_out_rcvd(
1623  const rofl::cauxid& auxid,
1625 
1626  void
1627  flow_mod_rcvd(
1628  const rofl::cauxid& auxid,
1630 
1631  void
1632  group_mod_rcvd(
1633  const rofl::cauxid& auxid,
1635 
1636  void
1637  port_mod_rcvd(
1638  const rofl::cauxid& auxid,
1640 
1641  void
1642  table_mod_rcvd(
1643  const rofl::cauxid& auxid,
1645 
1646  void
1647  meter_mod_rcvd(
1648  const rofl::cauxid& auxid,
1650 
1651  void
1652  stats_request_rcvd(
1653  const rofl::cauxid& auxid,
1655 
1656  void
1657  desc_stats_request_rcvd(
1658  const rofl::cauxid& auxid,
1660 
1661  void
1662  table_stats_request_rcvd(
1663  const rofl::cauxid& auxid,
1665 
1666  void
1667  port_stats_request_rcvd(
1668  const rofl::cauxid& auxid,
1670 
1671  void
1672  flow_stats_request_rcvd(
1673  const rofl::cauxid& auxid,
1675 
1676  void
1677  aggregate_stats_request_rcvd(
1678  const rofl::cauxid& auxid,
1680 
1681  void
1682  queue_stats_request_rcvd(
1683  const rofl::cauxid& auxid,
1685 
1686  void
1687  group_stats_request_rcvd(
1688  const rofl::cauxid& auxid,
1690 
1691  void
1692  group_desc_stats_request_rcvd(
1693  const rofl::cauxid& auxid,
1695 
1696  void
1697  group_features_stats_request_rcvd(
1698  const rofl::cauxid& auxid,
1700 
1701  void
1702  meter_stats_request_rcvd(
1703  const rofl::cauxid& auxid,
1705 
1706  void
1707  meter_config_stats_request_rcvd(
1708  const rofl::cauxid& auxid,
1710 
1711  void
1712  meter_features_stats_request_rcvd(
1713  const rofl::cauxid& auxid,
1715 
1716  void
1717  table_features_stats_request_rcvd(
1718  const rofl::cauxid& auxid,
1720 
1721  void
1722  port_desc_stats_request_rcvd(
1723  const rofl::cauxid& auxid,
1725 
1726  void
1727  experimenter_stats_request_rcvd(
1728  const rofl::cauxid& auxid,
1730 
1731  void
1732  role_request_rcvd(
1733  const rofl::cauxid& auxid,
1735 
1736  void
1737  barrier_request_rcvd(
1738  const rofl::cauxid& auxid,
1740 
1741  void
1742  queue_get_config_request_rcvd(
1743  const rofl::cauxid& auxid,
1745 
1746  void
1747  get_async_config_request_rcvd(
1748  const rofl::cauxid& auxid,
1750 
1751  void
1752  set_async_config_rcvd(
1753  const rofl::cauxid& auxid,
1755 
1756 private:
1757 
1758  static std::map<rofl::cctlid, rofl::crofctl*> rofctls;
1759 
1760  // environment
1761  rofl::crofctl_env* env;
1762  // handle for this crofctl instance
1763  rofl::cctlid ctlid;
1764  // OFP control channel
1765  rofl::crofchan rofchan;
1766  // pending OFP transactions
1767  rofl::ctransactions transactions;
1768 
1769  bool remove_on_channel_close;
1770  rofl::openflow::cofasync_config async_config_role_default_template;
1771  rofl::openflow::cofasync_config async_config;
1773 
1774  std::deque<enum crofctl_event_t> events;
1775 
1776  PthreadRwLock conns_terminated_rwlock;
1777  std::list<rofl::cauxid> conns_terminated;
1778  PthreadRwLock conns_refused_rwlock;
1779  std::list<rofl::cauxid> conns_refused;
1780  PthreadRwLock conns_failed_rwlock;
1781  std::list<rofl::cauxid> conns_failed;
1782 
1783  std::bitset<32> flags;
1784 };
1785 
1786 }; // end of namespace
1787 
1788 #endif
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: crofctl.h:420
Definition: cauxid.h:30
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: crofctl.h:434
void handle_stats_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_stats_request &msg)
OpenFlow Stats-Request message received.
Definition: crofctl.h:280
cauxid const & get_aux_id() const
Return auxialiary_id.
Definition: crofconn.h:334
void send_meter_features_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofmeter_features &meter_features, uint16_t stats_flags=0)
Sends OpenFlow Meter-Features-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1393
const rofl::openflow::cofasync_config & get_async_config() const
Returns a const reference to the current asynchronous event configuration of this controller entity...
Definition: crofctl.h:965
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: crofctl.h:588
virtual void handle_chan_terminated(rofl::crofctl &ctl)
Called after termination of associated OpenFlow control channel.
Definition: crofctl.h:130
Definition: cparams.h:20
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: crofctl.h:392
Definition: crofctl.h:53
Definition: cofmsg_group_mod.h:21
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: crofctl.h:294
Definition: cofmsg_queue_get_config.h:22
Definition: crofctl.h:49
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, const rofl::openflow::cofmatch &match, uint8_t *data, size_t datalen)
Sends OpenFlow Packet-In message to attached controller entity.
Definition: crofctl.cc:1427
Definition: cofmeterconfigarray.h:19
Environment expected by a rofl::crofctl instance.
Definition: crofctl.h:77
void send_table_features_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::coftables &tables, uint16_t stats_flags=0)
Sends OpenFlow Table-Features-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1219
Definition: cofmsg_table_mod.h:19
Definition: cofmsg_experimenter.h:19
Definition: cofmeterfeatures.h:22
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: crofctl.h:672
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: crofctl.h:462
Definition: cofmsg_meter_mod.h:20
virtual void handle_port_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_port_mod &msg)
OpenFlow Port-Mod message received.
Definition: crofctl.h:574
Definition: cofhelloelemversionbitmap.h:22
Definition: cofmsg_port_desc_stats.h:22
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: crofctl.h:266
const rofl::openflow::cofasync_config & get_async_config_role_default_template() const
Returns a const reference to the default asynchronous event configuration for controller entities def...
Definition: crofctl.h:972
virtual void handle_meter_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_meter_mod &msg)
OpenFlow Meter-Mod message received.
Definition: crofctl.h:686
rofl::openflow::cofrole & set_role()
Returns a reference to the current role object of this controller entity.
Definition: crofctl.h:938
void send_queue_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofqueuestatsarray &queuestatsarray, uint16_t stats_flags=0)
Sends OpenFlow Queue-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1083
Definition: caddress.h:30
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: crofctl.h:322
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: crofctl.h:185
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: crofctl.h:658
virtual void handle_experimenter_message(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_experimenter &msg)
OpenFlow Experimenter message received.
Definition: crofctl.h:616
Definition: cofflowstatsarray.h:19
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: crofctl.h:378
Definition: cofdescstats.h:18
void send_table_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::coftablestatsarray &tablestatsarray, uint16_t stats_flags=0)
Sends OpenFlow Table-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1015
Definition: cofmsg_async_config.h:20
virtual void handle_chan_established(rofl::crofctl &ctl)
Called after establishing the associated OpenFlow control channel.
Definition: crofctl.h:114
void send_get_async_config_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofasync_config &async_config)
Sends OpenFlow Get-Async-Config-Reply message to attached controller entity.
Definition: crofctl.cc:1730
Definition: cofmsg_desc_stats.h:21
Definition: cofmsg_meter_features_stats.h:23
void send_error_message(const rofl::cauxid &auxid, uint32_t xid, uint16_t type, uint16_t code, uint8_t *data=NULL, size_t datalen=0)
Sends OpenFlow Error message to attached controller entity.
Definition: crofctl.cc:1536
rofl::openflow::cofasync_config & set_async_config()
Returns a reference to the current asynchronous event configuration of this controller entity...
Definition: crofctl.h:958
Definition: cofmsg_port_mod.h:20
Definition: cofmsg_error.h:21
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: crofctl.h:207
void send_group_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofgroupstatsarray &groupstatsarray, uint16_t stats_flags=0)
Sends OpenFlow Group-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1117
Environment expected by a rofl::crofchan instance.
Definition: crofchan.h:40
virtual void handle_table_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_table_mod &msg)
OpenFlow Table-Mod message received.
Definition: crofctl.h:560
virtual void handle_error_message(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_error &msg)
OpenFlow error message received.
Definition: crofctl.h:630
Definition: cofmsg_table_features_stats.h:22
Definition: cofmsg_stats.h:187
std::list< rofl::cauxid > get_conn_index() const
Returns a list of connection identifiers of all existing control connections.
Definition: crofctl.h:818
virtual ~crofctl()
crofctl destructor
Definition: crofctl.h:782
Definition: cofasyncconfig.h:24
void send_experimenter_stats_reply(const rofl::cauxid &auxid, uint32_t xid, uint32_t exp_id, uint32_t exp_type, const cmemory &body, uint16_t stats_flags=0)
Sends OpenFlow Experimenter-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1287
Definition: cofmsg_group_desc_stats.h:22
A single OpenFlow control connection.
Definition: crofconn.h:145
Definition: cofmatch.h:35
bool remove_on_channel_termination() const
Returns true, when this instance should be destroyed when its crofchan has closed.
Definition: crofctl.h:912
virtual void handle_features_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_features_request &msg)
OpenFlow Features-Request message received.
Definition: crofctl.h:252
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: crofctl.h:336
Definition: cofgroupfeaturesstats.h:21
Definition: cofgroupdescstatsarray.h:20
Definition: cofmsg_stats.h:19
Definition: cofmsg_barrier.h:19
Definition: cofmsg_table_stats.h:23
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: crofctl.h:308
virtual void handle_role_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_role_request &msg)
OpenFlow Role-Request message received.
Definition: crofctl.h:644
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: crofctl.h:364
Definition: cofmsg_meter_config_stats.h:23
void send_role_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofrole &role)
Sends OpenFlow Role-Reply message to attached controller entity.
Definition: crofctl.cc:1504
void send_port_desc_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofports &ports, uint16_t stats_flags=0)
Sends OpenFlow Port-Desc-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1253
Definition: cofportstatsarray.h:19
Definition: ctransaction.h:17
bool is_slave() const
Returns true, when the control entity is in role -slave-.
Definition: crofctl.cc:125
Definition: cofmsg_config.h:19
const rofl::ctimerid & register_timer(int opaque, const rofl::ctimespec &timespec)
Installs a new timer to fire in t seconds.
Definition: ciosrv.h:698
Definition: cofgroupstatsarray.h:19
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
virtual void handle_barrier_request(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_barrier_request &msg)
OpenFlow Barrier-Request message received.
Definition: crofctl.h:518
Definition: cofmeterstatsarray.h:19
crofctl_env()
rofl::crofctl_env constructor
Definition: crofctl.h:85
Definition: cofmsg_group_features_stats.h:20
Definition: coftablestatsarray.h:19
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: crofctl.h:490
Definition: cofmsg_packet_out.h:21
Definition: cofports.h:22
bool is_established() const
Returns true, when the control handshake (HELLO) has been completed.
Definition: crofctl.h:888
Definition: cofrole.h:23
Definition: thread_helper.h:88
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: crofctl.h:406
void send_port_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofportstatsarray &portstatsarray, uint16_t stats_flags=0)
Sends OpenFlow Port-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1049
const rofl::openflow::cofhello_elem_versionbitmap & get_versions_available() const
Returns the defined OpenFlow version bitmap for this instance.
Definition: crofctl.h:905
Definition: cofqueuestatsarray.h:19
Definition: coftables.h:27
virtual void role_request_rcvd(rofl::crofctl &ctl, uint32_t role, uint64_t rcvd_generation_id)
called once a cofctl instance has received a role request
Definition: crofctl.h:220
Definition: cofmsg_role.h:20
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
void send_port_status_message(const rofl::cauxid &auxid, uint8_t reason, const rofl::openflow::cofport &port)
Sends OpenFlow Port-Status message to attached controller entity.
Definition: crofctl.cc:1663
Definition: cofmsg_aggr_stats.h:20
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: crofctl.h:476
void send_meter_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofmeterstatsarray &meter_stats_array, uint16_t stats_flags=0)
Sends OpenFlow Meter-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1325
Definition: cofmsg_queue_stats.h:23
void send_queue_get_config_reply(const rofl::cauxid &auxid, uint32_t xid, uint32_t portno, const rofl::openflow::cofpacket_queues &queues)
Sends OpenFlow Queue-Get-Config-Reply message to attached controller entity.
Definition: crofctl.cc:1696
void send_experimenter_message(const rofl::cauxid &auxid, uint32_t xid, uint32_t experimenter_id, uint32_t exp_type, uint8_t *body=NULL, size_t bodylen=0)
Sends OpenFlow Experimenter message to attached controller entity.
Definition: crofctl.cc:1573
void send_group_features_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofgroup_features_stats_reply &group_features_stats, uint16_t stats_flags=0)
Sends OpenFlow Group-Features-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1185
Definition: cofmsg_flow_mod.h:20
Definition: cofmsg_flow_stats.h:29
rofl-common's internal remote controller handle.
Definition: cctlid.h:24
const rofl::cctlid & get_ctlid() const
Returns rofl-common's internal rofl::cctlid identifier for this instance.
Definition: crofctl.h:794
void send_features_reply(const rofl::cauxid &auxid, uint32_t xid, uint64_t dpid, uint32_t n_buffers, uint8_t n_tables, uint32_t capabilities, uint8_t of13_auxiliary_id=0, uint32_t of10_actions_bitmap=0, const rofl::openflow::cofports &ports=rofl::openflow::cofports())
Sends OpenFlow Features-Reply message to attached controller entity.
Definition: crofctl.cc:797
virtual ~crofctl_env()
rofl::crofctl_env destructor
Definition: crofctl.h:92
Definition: crofctl.h:1536
void send_get_config_reply(const rofl::cauxid &auxid, uint32_t xid, uint16_t flags, uint16_t miss_send_len)
Sends OpenFlow Get-Config-Reply message to attached controller entity.
Definition: crofctl.cc:841
void send_barrier_reply(const rofl::cauxid &auxid, uint32_t xid)
Sends OpenFlow Barrier-Reply message to attached controller entity.
Definition: crofctl.cc:1474
void send_aggr_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofaggr_stats_reply &aggr_stats, uint16_t stats_flags=0)
Sends OpenFlow Aggregate-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:981
void connect(const rofl::cauxid &auxid, enum rofl::csocket::socket_type_t socket_type, const rofl::cparams &socket_params)
Establishes a new control connection to a remote controller entity with the given control connection ...
Definition: crofctl.h:837
void send_flow_removed_message(const rofl::cauxid &auxid, const 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 attached controller entity.
Definition: crofctl.cc:1612
crofctl(crofctl_env *env, const cctlid &ctlid, bool remove_on_channel_close, const rofl::openflow::cofhello_elem_versionbitmap &versionbitmap)
crofctl constructor
Definition: crofctl.h:757
Base class for IO services.
Definition: ciosrv.h:491
Definition: logging.h:76
virtual void handle_flow_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_flow_mod &msg)
OpenFlow Flow-Mod message received.
Definition: crofctl.h:532
void disconnect(const rofl::cauxid &auxid)
Terminates an existing control connection with given identifier.
Definition: crofctl.h:852
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: crofctl.h:153
const rofl::openflow::cofrole & get_role() const
Returns a const reference to the current role object of this controller entity.
Definition: crofctl.h:945
void send_stats_reply(const rofl::cauxid &auxid, uint32_t xid, uint16_t stats_type, uint16_t stats_flags, uint8_t *body=NULL, size_t bodylen=0)
Sends OpenFlow Stats-Reply message to attached controller entity.
Definition: crofctl.cc:875
Time specification used by class rofl::ctimer object.
Definition: ctimespec.h:25
Definition: cofport.h:52
uint8_t get_version_negotiated() const
Returns the OpenFlow protocol version used for this control connection.
Definition: crofctl.h:897
Definition: ctransactions.h:27
Definition: cofmsg_group_stats.h:21
Definition: cofmsg_features.h:22
Definition: cofmsg_meter_stats.h:23
virtual void handle_conn_established(rofl::crofctl &ctl, const rofl::cauxid &auxid)
Called when a control connection (main or auxiliary) has been established.
Definition: crofctl.h:141
virtual void handle_packet_out(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_packet_out &msg)
OpenFlow Packet-Out message received.
Definition: crofctl.h:504
void send_desc_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofdesc_stats_reply &desc_stats, uint16_t stats_flags=0)
Sends OpenFlow Desc-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:912
Definition: cofaggrstats.h:251
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: crofctl.h:448
virtual void handle_group_mod(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_group_mod &msg)
OpenFlow Group-Mod message received.
Definition: crofctl.h:546
void send_flow_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofflowstatsarray &flow_stats, uint16_t stats_flags=0)
Sends OpenFlow Flow-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:946
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: crofctl.h:169
Definition: cofmsg_async_config.h:226
void add_connection(crofconn *conn)
Add an existing rofl::crofconn instance created on heap to this object.
Definition: crofctl.h:866
void send_meter_config_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofmeterconfigarray &meter_config_array, uint16_t stats_flags=0)
Sends OpenFlow Meter-Config-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1359
Definition: cofmsg_experimenter_stats.h:21
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: crofctl.h:350
rofl::caddress get_peer_addr(const rofl::cauxid &auxid) const
Returns caddress of connected remote entity for given connection identifier.
Definition: crofctl.h:921
void send_group_desc_stats_reply(const rofl::cauxid &auxid, uint32_t xid, const rofl::openflow::cofgroupdescstatsarray &groupdescs, uint16_t stats_flags=0)
Sends OpenFlow Group-Desc-Stats-Reply message to attached controller entity.
Definition: crofctl.cc:1151
An OpenFlow control channel grouping multiple control connections.
Definition: crofchan.h:154
Definition: cofmsg_config.h:332
crofconn & add_conn(const cauxid &aux_id, enum rofl::csocket::socket_type_t socket_type, cparams const &socket_params)
Add a new connection while creating a new crofconn instance and do a socket connect.
Definition: crofchan.cc:69
virtual void handle_set_config(rofl::crofctl &ctl, const rofl::cauxid &auxid, rofl::openflow::cofmsg_set_config &msg)
OpenFlow Set-Config message received.
Definition: crofctl.h:602
Definition: cofpacketqueues.h:19
Definition: ctransactions.h:35
Definition: croflexception.h:27
Class representing a remote controller entity.
Definition: crofctl.h:715
Definition: cofmsg.h:62