* 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
~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:
* 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
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
/**
* 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
*/
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.
/**
* 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;
};
};