For DHCP client configuration control the setting of the broadcast flag in the
[vpp.git] / src / vpp-api / vom / dhcp_config.hpp
index 9ce0635..8ea608d 100644 (file)
  * limitations under the License.
  */
 
-#ifndef __VOM_DHCP_INTERFACE_H__
-#define __VOM_DHCP_INTERFACE_H__
+#ifndef __VOM_DHCP_CONFIG_H__
+#define __VOM_DHCP_CONFIG_H__
 
-#include "vom/dump_cmd.hpp"
 #include "vom/hw.hpp"
 #include "vom/inspect.hpp"
 #include "vom/interface.hpp"
 #include "vom/object_base.hpp"
 #include "vom/om.hpp"
-#include "vom/rpc_cmd.hpp"
 #include "vom/singular_db.hpp"
-#include "vom/sub_interface.hpp"
-
-#include <vapi/dhcp.api.vapi.hpp>
 
 namespace VOM {
+namespace dhcp_config_cmds {
+class events_cmd;
+};
 /**
  * A representation of DHCP client configuration on an interface
  */
 class dhcp_config : public object_base
 {
 public:
+  /**
+   * typedef for the DHCP config key type
+   */
+  typedef interface::key_t key_t;
+
   /**
    * Construct a new object matching the desried state
    */
-  dhcp_config(const interface& itf, const std::string& hostname);
+  dhcp_config(const interface& itf,
+              const std::string& hostname,
+              bool set_broadcast_flag = true);
 
   /**
    * Construct a new object matching the desried state
    */
   dhcp_config(const interface& itf,
               const std::string& hostname,
-              const l2_address_t& client_id);
+              const l2_address_t& client_id,
+              bool set_broadcast_flag = true);
 
   /**
    * Copy Constructor
@@ -58,114 +64,38 @@ public:
   ~dhcp_config();
 
   /**
-   * Return the 'singular' of the DHCP config that matches this object
+   * Comparison operator - for UT
    */
-  std::shared_ptr<dhcp_config> singular() const;
+  bool operator==(const dhcp_config& d) const;
 
   /**
-   * convert to string format for debug purposes
+   * Return the object's key
    */
-  std::string to_string() const;
+  const key_t& key() const;
 
   /**
-   * Dump all DHCP configs into the stream provided
+   * Return the 'singular' of the DHCP config that matches this object
    */
-  static void dump(std::ostream& os);
+  std::shared_ptr<dhcp_config> singular() const;
 
   /**
-   * A command class that binds the DHCP config to the interface
+   * convert to string format for debug purposes
    */
-  class bind_cmd
-    : public rpc_cmd<HW::item<bool>, rc_t, vapi::Dhcp_client_config>
-  {
-  public:
-    /**
-     * Constructor
-     */
-    bind_cmd(HW::item<bool>& item,
-             const handle_t& itf,
-             const std::string& hostname,
-             const l2_address_t& client_id);
-
-    /**
-     * 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 bind_cmd& i) const;
-
-  private:
-    /**
-     * Reference to the HW::item of the interface to bind
-     */
-    const handle_t& m_itf;
-
-    /**
-     * The DHCP client's hostname
-     */
-    const std::string m_hostname;
-
-    /**
-     * The DHCP client's ID
-     */
-    const l2_address_t m_client_id;
-  };
+  std::string to_string() const;
 
   /**
-   * A cmd class that Unbinds Dhcp Config from an interface
+   * Dump all DHCP configs into the stream provided
    */
-  class unbind_cmd
-    : public rpc_cmd<HW::item<bool>, rc_t, vapi::Dhcp_client_config>
-  {
-  public:
-    /**
-     * Constructor
-     */
-    unbind_cmd(HW::item<bool>& item,
-               const handle_t& itf,
-               const std::string& hostname);
-
-    /**
-     * 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 unbind_cmd& i) const;
-
-  private:
-    /**
-     * Reference to the HW::item of the interface to unbind
-     */
-    const handle_t& m_itf;
-
-    /**
-     * The DHCP client's hostname
-     */
-    const std::string m_hostname;
-  };
+  static void dump(std::ostream& os);
 
   /**
-   * Forward declartion of the Event Command
+   * Find a DHCP config from its key
    */
-  class events_cmd;
+  static std::shared_ptr<dhcp_config> find(const key_t& k);
 
   /**
  * A class that listens to DHCP Events
  */
+ * A class that listens to DHCP Events
+ */
   class event_listener
   {
   public:
@@ -178,7 +108,7 @@ public:
      * listener's virtual function invoked when a DHCP event is
      * available to read
      */
-    virtual void handle_dhcp_event(events_cmd* cmd) = 0;
+    virtual void handle_dhcp_event(dhcp_config_cmds::events_cmd* cmd) = 0;
 
     /**
      * Return the HW::item associated with this command
@@ -192,50 +122,6 @@ public:
     HW::item<bool> m_status;
   };
 
-  /**
-   * A functor class represents our desire to recieve interface events
-   */
-  class events_cmd
-    : public event_cmd<vapi::Control_ping, vapi::Dhcp_compl_event>
-  {
-  public:
-    /**
-     * Constructor
-     */
-    events_cmd(event_listener& el);
-
-    /**
-     * Issue the command to VPP/HW - subscribe to DHCP events
-     */
-    rc_t issue(connection& con);
-
-    /**
-     * Retire the command - unsubscribe
-     */
-    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 in the VAPI RX thread when data is available.
-     */
-    void notify();
-
-  private:
-    void succeeded() {}
-    /**
-     * The listner of this command
-     */
-    event_listener& m_listener;
-  };
-
 private:
   /**
    * Class definition for listeners to OM events
@@ -290,7 +176,7 @@ private:
   /**
    * It's the singular_db class that calls replay()
    */
-  friend class singular_db<interface::key_type, dhcp_config>;
+  friend class singular_db<key_t, dhcp_config>;
 
   /**
    * Sweep/reap the object if still stale
@@ -319,6 +205,11 @@ private:
    */
   const l2_address_t m_client_id;
 
+  /**
+   * Flag to control the setting the of DHCP discover's broadcast flag
+   */
+  const bool m_set_broadcast_flag;
+
   /**
    * HW configuration for the binding. The bool representing the
    * do/don't bind.
@@ -328,7 +219,7 @@ private:
   /**
    * A map of all Dhcp configs keyed against the interface.
    */
-  static singular_db<interface::key_type, dhcp_config> m_db;
+  static singular_db<key_t, dhcp_config> m_db;
 };
 };