+++ /dev/null
-/*
- * Copyright (c) 2018 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __VOM_PIPE_H__
-#define __VOM_PIPE_H__
-
-#include "vom/interface.hpp"
-
-namespace VOM {
-/**
- * A Pipe interface.
- * A pipe is composed for 3 'interfaces'.
- * 1) the 'parent' interface - this is used as the 'key' for the pipe
- * 2) the two 'ends' of the pipe - these are used to RX/TX packets
- * form/to. The ends are retreivable using the east()/west() functions.
- * The east and west end are exactly equivalent, they are merely
- * named differently for logical purposes.
- */
-class pipe : public interface
-{
-public:
- typedef std::pair<handle_t, handle_t> handle_pair_t;
-
- /**
- * Construct a new object matching the desried state
- */
- pipe(uint32_t instance, admin_state_t state);
-
- /**
- * Destructor
- */
- ~pipe();
-
- /**
- * Copy Constructor
- */
- pipe(const pipe& o);
-
- /**
- * comparison operator - for UT
- */
- bool operator==(const pipe& s) const;
-
- /**
- * Return the matching 'singular instance' of the sub-interface
- */
- std::shared_ptr<pipe> singular() const;
-
- /**
- * Find a subinterface from its key
- */
- static std::shared_ptr<pipe> find(const key_t& k);
-
- /**
- * The interface that is the east end of the pipe
- */
- std::shared_ptr<interface> east();
-
- /**
- * The interface that is the west end of the pipe.
- * The east and west end are exactly equivalent, they are merely
- * named differently for logical purposes.
- */
- std::shared_ptr<interface> west();
-
- virtual std::string to_string(void) const;
-
- void set_ends(const handle_pair_t& p);
-
-private:
- /**
- * The interface type that forms the ends of the pipe
- */
- class pipe_end : public interface
- {
- public:
- pipe_end(const pipe& p, uint8_t id);
-
- private:
- virtual std::queue<cmd*>& mk_create_cmd(std::queue<cmd*>& cmds);
- virtual std::queue<cmd*>& mk_delete_cmd(std::queue<cmd*>& cmds);
-
- std::shared_ptr<pipe> m_pipe;
- };
-
- /**
-*Class definition for listeners to OM events
-*/
- class event_handler : public OM::listener, public inspect::command_handler
- {
- public:
- event_handler();
- virtual ~event_handler() = default;
-
- /**
- * Handle a populate event
- */
- void handle_populate(const client_db::key_t& key);
-
- /**
- * Handle a replay event
- */
- void handle_replay();
-
- /**
- * Show the object in the Singular DB
- */
- void show(std::ostream& os);
-
- /**
- * Get the sortable Id of the listener
- */
- dependency_t order() const;
- };
- static event_handler m_evh;
-
- /**
- * Return the matching 'instance' of the pipe
- * over-ride from the base class
- */
- std::shared_ptr<interface> singular_i() const;
-
- /**
- * Virtual functions to construct an interface create commands.
- */
- virtual std::queue<cmd*>& mk_create_cmd(std::queue<cmd*>& cmds);
-
- /**
- * Virtual functions to construct an interface delete commands.
- */
- virtual std::queue<cmd*>& mk_delete_cmd(std::queue<cmd*>& cmds);
-
- /**
- * the handles that are set during the create command
- */
- HW::item<handle_pair_t> m_hdl_pair;
-
- /**
- * The ends of the pipe
- */
- std::shared_ptr<interface> m_ends[2];
-
- /**
- * Instance number
- */
- uint32_t m_instance;
-};
-
-}; // namespace VOM
-
-/*
- * fd.io coding-style-patch-verification: ON
- *
- * Local Variables:
- * eval: (c-set-style "mozilla")
- * End:
- */
-
-#endif