An Overlay-based
Virtual Network Substrate
SpoVNet

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

Last change on this file since 6919 was 6919, checked in by mies, 14 years ago

Fixed tons of warnings when using CXXFLAGS="-Wall"!

File size: 5.9 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( BaseOverlay& _baseoverlay, const NodeID& _nodeid,
77                OverlayStructureEvents* _eventsReceiver, OverlayParameterSet _parameters
78        );
79
80        /**
81         * Destrcuts the overlay.
82         */
83        virtual ~OverlayInterface();
84
85        /**
86         * Creates the overlay.
87         */
88        virtual void createOverlay() = 0;
89
90        /**
91         * Destroys the overlay.
92         */
93        virtual void deleteOverlay() = 0;
94
95        /**
96         * Joins the overlay. Starts integration and stabilization of the overlay
97         * Node.
98         *
99         * @param bootstrap The bootstrap end-point descriptor or the default
100         *    end-point, if this node is the initiator
101         */
102        virtual void joinOverlay(
103                const EndpointDescriptor& bootstrap = EndpointDescriptor::UNSPECIFIED()) = 0;
104
105        /**
106         * Leaves the overlay gracefully.
107         */
108        virtual void leaveOverlay() = 0;
109
110        /**
111         * Resolves a overlay neighbor.
112         *
113         * @param node The node to resolve
114         * @return Endpoint descriptor of local neighbor or UNSPECIFIED
115         */
116        virtual const EndpointDescriptor& resolveNode(const NodeID& node) = 0;
117
118
119        /**
120         * Returns true if this is the closest node to the given node
121         * identifier.
122         *
123         * @param node The node identifier to compare with
124         * @return True if this is the closest node to the given node identifier
125         */
126        virtual bool isClosestNodeTo( const NodeID& node ) = 0;
127
128        /**
129         * Returns the nodes known to this overlay.
130         *
131         * Usually this are the direct neighbors in the overlay structure.
132         * For instance, Chord would return his predecessor, successor and finger
133         * nodes. On the other hand OneHop would likely return all participating
134         * nodes in the overlay.
135         *
136         * @return The list of all known nodes
137         */
138        virtual NodeList getKnownNodes(bool deep = true) const = 0;
139
140        /**
141         * Returns the link id of the next hop a route message would take.
142         *
143         * @param id The destination node id
144         * @return The link id of the next hop
145         */
146        virtual const LinkID& getNextLinkId( const NodeID& id ) const = 0;
147
148        //--- functions from CommunicationListener that we _can_ use as overlay ---
149
150        /// @see CommunicationListener
151        virtual void onLinkUp(const LinkID& lnk, const NodeID& remote);
152
153        /// @see CommunicationListener
154        virtual void onLinkDown(const LinkID& lnk, const NodeID& remote);
155
156        /// @see CommunicationListener
157        virtual void onLinkChanged(const LinkID& lnk, const NodeID& remote);
158
159        /// @see CommunicationListener
160        virtual void onLinkFail(const LinkID& lnk, const NodeID& remote);
161
162        /// @see CommunicationListener
163        virtual void onLinkQoSChanged(const LinkID& lnk, const NodeID& remote,
164                        const LinkProperties& prop);
165
166        /// @see CommunicationListener
167        virtual bool onLinkRequest(const NodeID& remote, const DataMessage& msg);
168
169        /// @see CommunicationListener
170        virtual void onMessage(const DataMessage& msg, const NodeID& remote,
171                        const LinkID& lnk = LinkID::UNSPECIFIED);
172
173        const OverlayParameterSet& getParameters() const;
174
175        virtual std::string debugInformation() const;
176
177protected:
178        /// Reference to an active base overlay
179        BaseOverlay& baseoverlay;
180
181        /// The node identifier to use with this overlay
182        const NodeID& nodeid;
183
184        /// The listener used to inform about overlay structure changes
185        OverlayStructureEvents* eventsReceiver;
186
187        /// The parameters of the overlay structure
188        OverlayParameterSet parameters;
189
190        /// The service identifer of this overlay
191        static ServiceID OVERLAY_SERVICE_ID;
192};
193
194}} // namespace ariba, overlay
195
196#endif // __OVERLAY_INTERFACE_H
Note: See TracBrowser for help on using the repository browser.