* Forward declaration of the stats and events command
*/
namespace interface_cmds {
-class stats_enable_cmd;
class events_cmd;
};
+class stat_reader;
/**
* A representation of an interface in VPP
oper_state_t(int v, const std::string& s);
};
+ /**
+ * stats_t:
+ */
+ struct stats_t
+ {
+ counter_t m_rx;
+ counter_t m_tx;
+ counter_t m_rx_unicast;
+ counter_t m_tx_unicast;
+ counter_t m_rx_multicast;
+ counter_t m_tx_multicast;
+ counter_t m_rx_broadcast;
+ counter_t m_tx_broadcast;
+ counter_t m_drop;
+ };
+
/**
* Construct a new object matching the desried state
*/
*/
const l2_address_t& l2_address() const;
+ /**
+ * Return the admin state
+ */
+ const admin_state_t& admin_state() const;
+
/**
* Set the admin state of the interface
+ *
+ * N.B. All set function change only the attibute of the object on whcih
+ * they act, they do not make changes in VPP
*/
void set(const admin_state_t& state);
*/
void set(const std::string& tag);
+ /**
+ * Get the interface stats
+ */
+ const stats_t& get_stats(void) const;
+
/**
* Comparison operator - only used for UT
*/
*/
stat_listener();
+ virtual ~stat_listener() = default;
+
/**
* Virtual function called on the listener when the command has data
* ready to process
*/
- virtual void handle_interface_stat(
- interface_cmds::stats_enable_cmd* cmd) = 0;
+ virtual void handle_interface_stat(const interface&) = 0;
/**
* Return the HW::item representing the status
/**
* Enable stats for this interface
*/
- void enable_stats(stat_listener& el,
+ void enable_stats(stat_listener* el,
const stats_type_t& st = stats_type_t::NORMAL);
+ /**
+ * Disable stats for this interface
+ */
+ void disable_stats();
+
/**
* Enable the reception of events of all interfaces
*/
void set(const handle_t& handle);
friend class interface_factory;
friend class pipe;
-
/**
* The SW interface handle VPP has asigned to the interface
*/
static event_handler m_evh;
+ /**
+ * friend with stat_reader
+ */
+ friend stat_reader;
+
+ /**
+ * publish stats
+ */
+ void publish_stats();
+
+ /**
+ * Set the interface stat
+ */
+ void set(const counter_t& count, const std::string& stat_type);
+
/**
* enable the interface stats in the singular instance
*/
- void enable_stats_i(stat_listener& el, const stats_type_t& st);
+ void enable_stats_i(stat_listener* el, const stats_type_t& st);
+
+ /**
+ * disable the interface stats in the singular instance
+ */
+ void disable_stats_i();
/**
* Commit the acculmulated changes into VPP. i.e. to a 'HW" write.
*/
std::shared_ptr<route_domain> m_rd;
- /**
- * shared pointer to the stats object for this interface.
- */
- std::shared_ptr<interface_cmds::stats_enable_cmd> m_stats;
-
/**
* The state of the interface
*/
*/
HW::item<stats_type_t> m_stats_type;
+ /**
+ * Interface stats
+ */
+ stats_t m_stats;
+
+ /**
+ * reference to stat listener
+ */
+ stat_listener* m_listener;
+
/**
* Operational state of the interface
*/
static std::shared_ptr<interface_cmds::events_cmd> m_events_cmd;
};
+
+/**
+ * stream insertion operator for interface stats
+ */
+std::ostream& operator<<(std::ostream& os, const interface::stats_t& stats);
};
/*
* fd.io coding-style-patch-verification: ON