IPIP: Fix coverity error.
[vpp.git] / src / vpp-api / vom / l3_binding.hpp
index 2166b44..0177e56 100644 (file)
 #ifndef __VOM_L3_BINDING_H__
 #define __VOM_L3_BINDING_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 <vapi/ip.api.vapi.hpp>
-
 namespace VOM {
 /**
  * A representation of L3 configuration on an interface
@@ -34,6 +30,11 @@ namespace VOM {
 class l3_binding : public object_base
 {
 public:
+  /**
+   * The key type for l3_bindings
+   */
+  typedef std::pair<interface::key_t, route::prefix_t> key_t;
+
   /**
    * Construct a new object matching the desried state
    */
@@ -50,153 +51,58 @@ public:
   ~l3_binding();
 
   /**
-   * Return the 'singular instance' of the L3-Config that matches this
-   * object
+   * Comparison operator
    */
-  std::shared_ptr<l3_binding> singular() const;
+  bool operator==(const l3_binding& l) const;
 
   /**
-   * convert to string format for debug purposes
+   * Get the object's key
    */
-  std::string to_string() const;
+  const key_t key() const;
 
   /**
-   * Return the prefix associated with this L3config
+   * The iterator type
    */
-  const route::prefix_t& prefix() const;
+  typedef singular_db<key_t, l3_binding>::const_iterator const_iterator_t;
+
+  static const_iterator_t cbegin();
+  static const_iterator_t cend();
 
   /**
-   * Dump all l3_bindings into the stream provided
+   * Return the 'singular instance' of the L3-Config that matches this
+   * object
    */
-  static void dump(std::ostream& os);
+  std::shared_ptr<l3_binding> singular() const;
 
   /**
-   * The key type for l3_bindings
+   * convert to string format for debug purposes
    */
-  typedef std::pair<interface::key_type, route::prefix_t> key_type_t;
+  std::string to_string() const;
 
   /**
-   * Find an singular instance in the DB for the interface passed
+   * Return the prefix associated with this L3 binding
    */
-  static std::deque<std::shared_ptr<l3_binding>> find(const interface& i);
+  const route::prefix_t& prefix() const;
 
   /**
-   * A functor class that binds the L3 config to the interface
+   * Return the interface associated with this L3 binding
    */
-  class bind_cmd
-    : public rpc_cmd<HW::item<bool>, rc_t, vapi::Sw_interface_add_del_address>
-  {
-  public:
-    /**
-     * Constructor
-     */
-    bind_cmd(HW::item<bool>& item,
-             const handle_t& itf,
-             const route::prefix_t& pfx);
-
-    /**
-     * 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 interface to bind to
-     */
-    const handle_t& m_itf;
-
-    /**
-     * The prefix to bind
-     */
-    const route::prefix_t& m_pfx;
-  };
+  const interface& itf() const;
 
   /**
-   * A cmd class that Unbinds L3 Config from an interface
+   * Dump all l3_bindings into the stream provided
    */
-  class unbind_cmd
-    : public rpc_cmd<HW::item<bool>, rc_t, vapi::Sw_interface_add_del_address>
-  {
-  public:
-    /**
-     * Constructor
-     */
-    unbind_cmd(HW::item<bool>& item,
-               const handle_t& itf,
-               const route::prefix_t& pfx);
-
-    /**
-     * 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 interface to unbind fomr
-     */
-    const handle_t& m_itf;
-
-    /**
-     * The prefix to unbind
-     */
-    const route::prefix_t& m_pfx;
-  };
+  static void dump(std::ostream& os);
 
   /**
-   * A cmd class that Dumps all the IPv4 L3 configs
+   * Find all bindings in the DB for the interface passed
    */
-  class dump_v4_cmd : public dump_cmd<vapi::Ip_address_dump>
-  {
-  public:
-    /**
-     * Constructor
-     */
-    dump_v4_cmd(const handle_t& itf);
-    dump_v4_cmd(const dump_v4_cmd& d);
-
-    /**
-     * 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_v4_cmd& i) const;
-
-  private:
-    /**
-     * HW reutrn code
-     */
-    HW::item<bool> item;
+  static std::deque<std::shared_ptr<l3_binding>> find(const interface& i);
 
-    /**
-     * The interface to get the addresses for
-     */
-    const handle_t& m_itf;
-  };
+  /**
+   * Find a binding from its key
+   */
+  static std::shared_ptr<l3_binding> find(const key_t& k);
 
 private:
   /**
@@ -252,7 +158,7 @@ private:
   /**
      e* It's the singular_db class that calls replay()
   */
-  friend class singular_db<key_type_t, l3_binding>;
+  friend class singular_db<key_t, l3_binding>;
 
   /**
    * Sweep/reap the object if still stale
@@ -264,6 +170,8 @@ private:
    */
   void replay(void);
 
+  friend class interface;
+
   /**
    * A reference counting pointer the interface that this L3 layer
    * represents. By holding the reference here, we can guarantee that
@@ -274,7 +182,7 @@ private:
   /**
    * The prefix for this L3 configuration
    */
-  const route::prefix_t& m_pfx;
+  const route::prefix_t m_pfx;
 
   /**
    * HW configuration for the binding. The bool representing the
@@ -286,13 +194,13 @@ private:
    * A map of all L3 configs keyed against a combination of the interface
    * and subnet's keys.
    */
-  static singular_db<key_type_t, l3_binding> m_db;
+  static singular_db<key_t, l3_binding> m_db;
 };
 
 /**
  * Ostream output for the key
  */
-std::ostream& operator<<(std::ostream& os, const l3_binding::key_type_t& key);
+std::ostream& operator<<(std::ostream& os, const l3_binding::key_t& key);
 };
 
 /*