X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvpp-api%2Fvom%2Finterface.hpp;fp=src%2Fvpp-api%2Fvom%2Finterface.hpp;h=6fdd1e1eb62f591243cc9410c286c3e39c5a4010;hb=9ef1c0adbf9399c55deeede3cf629dd4e8c20304;hp=8863bc94868c37d715839b194d7987460ff6bc98;hpb=addb55b9e0533c5f720b1cc1bdeeb4bbd0e6bf2a;p=vpp.git diff --git a/src/vpp-api/vom/interface.hpp b/src/vpp-api/vom/interface.hpp index 8863bc94868..6fdd1e1eb62 100644 --- a/src/vpp-api/vom/interface.hpp +++ b/src/vpp-api/vom/interface.hpp @@ -16,9 +16,7 @@ #ifndef __VOM_INTERFACE_H__ #define __VOM_INTERFACE_H__ -#include "vom/dump_cmd.hpp" #include "vom/enum_base.hpp" -#include "vom/event_cmd.hpp" #include "vom/hw.hpp" #include "vom/inspect.hpp" #include "vom/object_base.hpp" @@ -28,14 +26,15 @@ #include "vom/rpc_cmd.hpp" #include "vom/singular_db.hpp" -#include -#include -#include -#include -#include -#include - namespace VOM { +/** + * Forward declaration of the stats and events command + */ +namespace interface_cmds { +class stats_cmd; +class events_cmd; +}; + /** * A representation of an interface in VPP */ @@ -260,6 +259,11 @@ public: interface::add(m_name, this->item()); } + /** + * add the created interface to the DB + */ + void insert_interface() { interface::add(m_name, this->item()); } + virtual vapi_error_e operator()(MSG& reply) { int sw_if_index = reply.get_response().get_payload().sw_if_index; @@ -288,75 +292,6 @@ public: const std::string& m_name; }; - /** - * A command class to create Loopback interfaces in VPP - */ - class loopback_create_cmd : public create_cmd - { - public: - /** - * Constructor taking the HW::item to update - * and the name of the interface to create - */ - loopback_create_cmd(HW::item& item, const std::string& name); - ~loopback_create_cmd() = default; - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - }; - - /** - * A command class to create af_packet interfaces in VPP - */ - class af_packet_create_cmd : public create_cmd - { - public: - /** - * Constructor taking the HW::item to update - * and the name of the interface to create - */ - af_packet_create_cmd(HW::item& item, const std::string& name); - ~af_packet_create_cmd() = default; - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - }; - - /** - * A command class to create TAP interfaces in VPP - */ - class tap_create_cmd : public create_cmd - { - public: - /** - * Constructor taking the HW::item to update - * and the name of the interface to create - */ - tap_create_cmd(HW::item& item, const std::string& name); - ~tap_create_cmd() = default; - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - }; - /** * Base class for intterface Delete commands */ @@ -394,230 +329,18 @@ public: */ void succeeded() {} - protected: /** - * The name of the interface to be created + * add the created interface to the DB */ - const std::string m_name; - }; - - /** - * A command class to delete loopback interfaces in VPP - */ - class loopback_delete_cmd : public delete_cmd - { - public: - /** - * Constructor taking the HW::item to update - */ - loopback_delete_cmd(HW::item& item); + void remove_interface() { interface::remove(this->item()); } + protected: /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - }; - - /** - * A command class to delete af-packet interfaces in VPP - */ - class af_packet_delete_cmd : public delete_cmd - { - public: - /** - * Constructor taking the HW::item to update - * and the name of the interface to delete - */ - af_packet_delete_cmd(HW::item& item, const std::string& name); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - }; - - /** - * A command class to delete TAP interfaces in VPP - */ - class tap_delete_cmd : public delete_cmd - { - public: - /** - * Constructor taking the HW::item to update - */ - tap_delete_cmd(HW::item& item); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - }; - - /** - * A command class to delete TAP interfaces in VPP - */ - class set_tag - : public rpc_cmd, rc_t, vapi::Sw_interface_tag_add_del> - { - public: - /** - * Constructor taking the HW::item to update - */ - set_tag(HW::item& item, const std::string& name); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const set_tag& i) const; - - private: - /** - * The tag to add + * The name of the interface to be created */ const std::string m_name; }; - /** - * A cmd class that changes the admin state - */ - class state_change_cmd : public rpc_cmd, - rc_t, - vapi::Sw_interface_set_flags> - { - public: - /** - * Constructor taking the HW::item to update - * and the name handle of the interface whose state is to change - */ - state_change_cmd(HW::item& s, const HW::item& h); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const state_change_cmd& i) const; - - private: - /** - * the handle of the interface to update - */ - const HW::item& m_hdl; - }; - - /** - * A command class that binds an interface to an L3 table - */ - class set_table_cmd : public rpc_cmd, - rc_t, - vapi::Sw_interface_set_table> - { - public: - /** - * Constructor taking the HW::item to update - * and the name handle of the interface whose table is to change - */ - set_table_cmd(HW::item& item, - const l3_proto_t& proto, - const HW::item& h); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const set_table_cmd& i) const; - - private: - /** - * the handle of the interface to update - */ - const HW::item& m_hdl; - - /** - * The L3 protocol of the table - */ - l3_proto_t m_proto; - }; - - /** - * A command class that binds an interface to an L3 table - */ - class set_mac_cmd : public rpc_cmd, - rc_t, - vapi::Sw_interface_set_mac_address> - { - public: - /** - * Constructor taking the HW::item to update - * and the handle of the interface - */ - set_mac_cmd(HW::item& item, const HW::item& h); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const set_mac_cmd& i) const; - - private: - /** - * the handle of the interface to update - */ - const HW::item& m_hdl; - }; - - /** - * Forward declaration of the Event command - */ - class events_cmd; - /** * A class that listens to interface Events */ @@ -633,7 +356,7 @@ public: * Virtual function called on the listener when the command has data * ready to process */ - virtual void handle_interface_event(events_cmd* cmd) = 0; + virtual void handle_interface_event(interface_cmds::events_cmd* cmd) = 0; /** * Return the HW::item representing the status @@ -647,55 +370,6 @@ public: HW::item m_status; }; - /** - * A command class represents our desire to recieve interface events - */ - class events_cmd - : public event_cmd - { - public: - /** - * Constructor taking the listner to notify - */ - events_cmd(event_listener& el); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - - /** - * Retires the command - unsubscribe from the events. - */ - void retire(connection& con); - - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const events_cmd& i) const; - - /** - * Called when it's time to poke the listeners - */ - void notify(); - - private: - /** - * The listeners to notify when data/events arrive - */ - event_listener& m_listener; - }; - - /** - * Forward declaration of the stat command - */ - class stats_cmd; - /** * A class that listens to interface Stats */ @@ -711,7 +385,7 @@ public: * Virtual function called on the listener when the command has data * ready to process */ - virtual void handle_interface_stat(stats_cmd* cmd) = 0; + virtual void handle_interface_stat(interface_cmds::stats_cmd* cmd) = 0; /** * Return the HW::item representing the status @@ -725,78 +399,6 @@ public: HW::item m_status; }; - /** - * A command class represents our desire to recieve interface stats - */ - class stats_cmd : public event_cmd - { - public: - /** - * Constructor taking the listner to notify - */ - stats_cmd(stat_listener& el, const std::vector& interfaces); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - - /** - * Retires the command - unsubscribe from the stats. - */ - void retire(connection& con); - - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const stats_cmd& i) const; - - /** - * Called when it's time to poke the listeners - */ - void notify(); - - private: - /** - * The listeners to notify when data/stats arrive - */ - stat_listener& m_listener; - - std::vector m_swifindex; - }; - - /** - * A cmd class that Dumps all the Vpp interfaces - */ - class dump_cmd : public VOM::dump_cmd - { - public: - /** - * Default Constructor - */ - dump_cmd(); - - /** - * Issue the command to VPP/HW - */ - rc_t issue(connection& con); - /** - * convert to string format for debug purposes - */ - std::string to_string() const; - - /** - * Comparison operator - only used for UT - */ - bool operator==(const dump_cmd& i) const; - }; - /** * The the singular instance of the interface in the object_base-Model */ @@ -819,12 +421,6 @@ public: */ static void dump(std::ostream& os); - /** - * Factory method to construct a new interface from the VPP record - */ - static std::unique_ptr new_interface( - const vapi_payload_sw_interface_details& vd); - protected: /** * Construct an interface object with a handle and a HW address @@ -834,6 +430,7 @@ protected: const std::string& name, type_t type, admin_state_t state); + friend class interface_factory; /** * The SW interface handle VPP has asigned to the interface