24 #ifndef BM_BM_SIM_PORT_MONITOR_H_
25 #define BM_BM_SIM_PORT_MONITOR_H_
30 #include "device_id.h"
43 enum class PortStatus { PORT_ADDED, PORT_REMOVED, PORT_UP, PORT_DOWN };
49 using PortStatusFn = std::function<bool(
port_t port_num)>;
54 s_device_id_t switch_id;
55 unsigned int num_statuses;
57 } __attribute__((packed));
62 } __attribute__((packed));
65 notify_(port_num, evt);
69 register_cb_(evt, cb);
72 void start(
const PortStatusFn &fn) {
80 virtual ~PortMonitorIface() { }
83 static std::unique_ptr<PortMonitorIface> make_dummy();
85 static std::unique_ptr<PortMonitorIface> make_passive(
86 device_id_t device_id,
87 std::shared_ptr<TransportIface> notifications_writer =
nullptr);
90 static std::unique_ptr<PortMonitorIface> make_active(
91 device_id_t device_id,
92 std::shared_ptr<TransportIface> notifications_writer =
nullptr);
99 virtual void start_(
const PortStatusFn &fn) = 0;
101 virtual void stop_() = 0;
106 #endif // BM_BM_SIM_PORT_MONITOR_H_