35 #ifndef BM_BM_SIM_DEV_MGR_H_
36 #define BM_BM_SIM_DEV_MGR_H_
38 #include <bm/config.h>
45 #include "packet_handler.h"
50 class DevMgrIface :
public PacketDispatcherIface {
55 using PortExtras = std::map<std::string, std::string>;
57 static constexpr
char kPortExtraInPcap[] =
"in_pcap";
58 static constexpr
char kPortExtraOutPcap[] =
"out_pcap";
61 PortInfo(port_t port_num,
const std::string &iface_name,
62 const PortExtras &port_extras = {})
63 : port_num(port_num), iface_name(iface_name), extra(port_extras) { }
65 void set_is_up(
bool status) {
69 void add_extra(
const std::string &key,
const std::string &value) {
70 extra.emplace(key, value);
74 std::string iface_name{};
85 static PortStats make(uint64_t in_packets, uint64_t in_octets,
86 uint64_t out_packets, uint64_t out_octets) {
87 return {in_packets, in_octets, out_packets, out_octets};
91 virtual ~DevMgrIface();
93 ReturnCode port_add(
const std::string &iface_name, port_t port_num,
94 const PortExtras &port_extras);
96 ReturnCode port_remove(port_t port_num);
101 void transmit_fn(port_t port_num,
const char *buffer,
int len) {
102 transmit_fn_(port_num, buffer, len);
108 ReturnCode set_packet_handler(
const PacketHandler &handler,
void *cookie);
110 bool port_is_up(port_t port_num)
const;
112 ReturnCode register_status_cb(
const PortStatus &type,
113 const PortStatusCb &port_cb);
115 std::map<port_t, PortInfo> get_port_info()
const;
117 PortStats get_port_stats(port_t port)
const;
119 PortStats clear_port_stats(port_t port);
122 std::unique_ptr<PortMonitorIface> p_monitor{
nullptr};
125 virtual ReturnCode port_add_(
const std::string &iface_name, port_t port_num,
126 const PortExtras &port_extras) = 0;
128 virtual ReturnCode port_remove_(port_t port_num) = 0;
130 virtual void transmit_fn_(port_t port_num,
const char *buffer,
int len) = 0;
132 virtual void start_() = 0;
134 virtual ReturnCode set_packet_handler_(
const PacketHandler &handler,
137 virtual bool port_is_up_(port_t port_num)
const = 0;
139 virtual std::map<port_t, PortInfo> get_port_info_()
const = 0;
141 virtual PortStats get_port_stats_(port_t port)
const;
142 virtual PortStats clear_port_stats_(port_t port);
150 class DevMgr :
public PacketDispatcherIface {
158 using PortExtras = DevMgrIface::PortExtras;
165 void set_dev_mgr(std::unique_ptr<DevMgrIface> my_pimp);
167 void set_dev_mgr_bmi(
168 device_id_t device_id,
170 std::shared_ptr<TransportIface> notifications_transport =
nullptr);
175 void set_dev_mgr_files(
unsigned wait_time_in_seconds);
180 void set_dev_mgr_packet_in(
181 device_id_t device_id,
const std::string &addr,
182 std::shared_ptr<TransportIface> notifications_transport =
nullptr,
183 bool enforce_ports =
false);
186 ReturnCode port_add(
const std::string &iface_name,
port_t port_num,
187 const PortExtras &port_extras);
189 ReturnCode port_remove(
port_t port_num);
191 bool port_is_up(
port_t port_num)
const;
193 std::map<port_t, DevMgrIface::PortInfo> get_port_info()
const;
195 DevMgrIface::PortStats get_port_stats(
port_t port_num)
const;
196 DevMgrIface::PortStats clear_port_stats(
port_t port_num);
201 ReturnCode set_packet_handler(
const PacketHandler &handler,
void *cookie)
221 std::string sample_packet_data(
const char *buffer,
int len);
223 size_t dump_packet_data{0};
229 std::unique_ptr<DevMgrIface> pimp{
nullptr};
234 #endif // BM_BM_SIM_DEV_MGR_H_