An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/overlay/modules/OverlayInterface.h @ 5151

Last change on this file since 5151 was 5151, checked in by Christoph Mayer, 14 years ago

begin merge back from relay branch

File size: 6.2 KB
Line 
1// [License]
2// The Ariba-Underlay Copyright
3//
4// Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
5//
6// Institute of Telematics
7// UniversitÀt Karlsruhe (TH)
8// Zirkel 2, 76128 Karlsruhe
9// Germany
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
22// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
25// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32//
33// The views and conclusions contained in the software and documentation
34// are those of the authors and should not be interpreted as representing
35// official policies, either expressed or implied, of the Institute of
36// Telematics.
37// [License]
38
39#ifndef __OVERLAY_INTERFACE_H
40#define __OVERLAY_INTERFACE_H
41
42#include "ariba/CommunicationListener.h"
43#include "ariba/communication/EndpointDescriptor.h"
44#include "ariba/overlay/modules/OverlayStructureEvents.h"
45#include "ariba/utility/types/NodeID.h"
46#include "ariba/utility/types/ServiceID.h"
47#include "ariba/utility/types/OverlayParameterSet.h"
48
49using ariba::CommunicationListener;
50using ariba::communication::EndpointDescriptor;
51using ariba::overlay::OverlayStructureEvents;
52using ariba::utility::NodeID;
53using ariba::utility::ServiceID;
54using ariba::utility::OverlayParameterSet;
55
56namespace ariba {
57namespace overlay {
58
59class BaseOverlay;
60
61/**
62 * This class declares an interface for an structured overlay.
63 */
64class OverlayInterface: public CommunicationListener {
65        friend class BaseOverlay;
66
67public:
68        /**
69         * A node list
70         */
71        typedef vector<NodeID> NodeList;
72
73        /**
74         * Constructs a new overlay.
75         */
76        OverlayInterface(
77                        BaseOverlay& _baseoverlay,
78                        const NodeID& _nodeid,
79                        OverlayStructureEvents* _eventsReceiver,
80                        OverlayParameterSet _parameters
81                        );
82
83        /**
84         * Destrcuts the overlay.
85         */
86        virtual ~OverlayInterface();
87
88        /**
89         * Creates the overlay.
90         */
91        virtual void createOverlay() = 0;
92
93        /**
94         * Destroys the overlay.
95         */
96        virtual void deleteOverlay() = 0;
97
98        /**
99         * Joins the overlay. Starts integration and stabilization of the overlay
100         * Node.
101         *
102         * @param bootstrap The bootstrap end-point descriptor or the default
103         *    end-point, if this node is the initiator
104         */
105        virtual void joinOverlay(const EndpointDescriptor& bootstrap =
106                EndpointDescriptor::UNSPECIFIED ) = 0;
107
108        /**
109         * Leaves the overlay gracefully.
110         */
111        virtual void leaveOverlay() = 0;
112
113        /**
114         * Resolves a overlay neighbor.
115         *
116         * @param node The node to resolve
117         * @return Endpoint descriptor of local neighbor or UNSPECIFIED
118         */
119        virtual const EndpointDescriptor& resolveNode(const NodeID& node) = 0;
120
121        /**
122         * Routes a message to a given node by using overlay routing.
123         *
124         * @param destnode The destination node.
125         * @param msg The message to be routed.
126         */
127        virtual void routeMessage(const NodeID& destnode, Message* msg) = 0;
128
129        /**
130         * Routes a message to a given node by using an existing link.
131         *
132         * TODO: This is a hack. This method allows the BaseOverlay class to
133         * use overlay signaling links to transfer data for relaying
134         *
135         * @param node The destination node.
136         * @param link An established link
137         * @param msg The message to be sent.
138         */
139        virtual void routeMessage(const NodeID& node, const LinkID& link, Message* msg) = 0;
140
141        /**
142         * Returns the nodes known to this overlay.
143         *
144         * Usually this are the direct neighbors in the overlay structure.
145         * For instance, Chord would return his predecessor, successor and finger
146         * nodes. On the other hand OneHop would likely return all participating
147         * nodes in the overlay.
148         *
149         * @return The list of all known nodes
150         */
151        virtual NodeList getKnownNodes() const = 0;
152
153        /**
154         * Returns the link id of the next hop a route message would take.
155         *
156         * @param id The destination node id
157         * @return The link id of the next hop
158         */
159        virtual const LinkID& getNextLinkId( const NodeID& id ) const = 0;
160
161        //--- functions from CommunicationListener that we _can_ use as overlay ---
162
163        /// @see CommunicationListener
164        virtual void onLinkUp(const LinkID& lnk, const NodeID& remote);
165
166        /// @see CommunicationListener
167        virtual void onLinkDown(const LinkID& lnk, const NodeID& remote);
168
169        /// @see CommunicationListener
170        virtual void onLinkChanged(const LinkID& lnk, const NodeID& remote);
171
172        /// @see CommunicationListener
173        virtual void onLinkFail(const LinkID& lnk, const NodeID& remote);
174
175        /// @see CommunicationListener
176        virtual void onLinkQoSChanged(const LinkID& lnk, const NodeID& remote,
177                        const LinkProperties& prop);
178
179        /// @see CommunicationListener
180        virtual bool onLinkRequest(const NodeID& remote, const DataMessage& msg);
181
182        /// @see CommunicationListener
183        virtual void onMessage(const DataMessage& msg, const NodeID& remote,
184                        const LinkID& lnk = LinkID::UNSPECIFIED);
185
186
187        const OverlayParameterSet& getParameters() const;
188
189protected:
190        /// Reference to an active base overlay
191        BaseOverlay& baseoverlay;
192
193        /// The parameters of the overlay structure
194        OverlayParameterSet parameters;
195
196        /// The node identifier to use with this overlay
197        const NodeID& nodeid;
198
199        /// The listener used to inform about overlay structure changes
200        OverlayStructureEvents* eventsReceiver;
201
202        /// The service identifer of this overlay
203        static ServiceID OVERLAY_SERVICE_ID;
204};
205
206}} // namespace ariba, overlay
207
208#endif // __OVERLAY_INTERFACE_H
Note: See TracBrowser for help on using the repository browser.