An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/SideportListener.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.4 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 INSTITUTE OF TELEMATICS 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 SIDEPORTLISTENER_H_
40#define SIDEPORTLISTENER_H_
41
42#include <vector>
43#include <map>
44#include <boost/foreach.hpp>
45#include "Identifiers.h"
46#include "CommunicationListener.h"
47
48using std::map;
49using std::vector;
50
51namespace ariba {
52
53// forward declerations
54class Node;
55class AribaModule;
56namespace overlay {
57        class BaseOverlay;
58}
59
60/**
61 * A sideport class to gather advanced information about nodes, links,
62 * their endpoints and get information about all link activity on a node.
63 *
64 * @author Christoph Mayer <mayer@tm.uka.de>
65 */
66class SideportListener {
67
68        friend class Node;
69        friend class AribaModule;
70        friend class overlay::BaseOverlay;
71
72public:
73
74        /**
75         * A default object of the SideportListener that has empty
76         * event functions and will return invalid information.
77         */
78        static SideportListener DEFAULT;
79
80        /**
81         * Constructor of the SideportListener.
82         */
83        SideportListener();
84
85        /**
86         * Virtual Desctructor for the SideportListener.
87         */
88        virtual ~SideportListener();
89
90        /**
91         * Get a descriptive string that identifies
92         * the remote endpoint for the given link.
93         *
94         *  @param link The link to query endpoint information for.
95         *  @return A descriptive endpoint information.
96         */
97        string getEndpointDescription(
98                        const LinkID& link
99                        ) const;
100
101        /**
102         * Get a descriprive string that identifiers the remote node.
103         *
104         * @param node The node id to query endpoint information.
105         * @return A descriptive endpoint information.
106         */
107        string getEndpointDescription(
108                        const NodeID& node = NodeID::UNSPECIFIED
109                        ) const;
110
111        /**
112         * Get the remote endpoint node id for the given string,
113         * or the local nodeid for an unspecified link.
114         *
115         * @param link The link to get the remote node.
116         * @return The nodeid of the remote end of the link
117         *                      or the local nodeid for an unspecified link.
118         */
119        const NodeID& getNodeID(
120                        const LinkID& link = LinkID::UNSPECIFIED
121                        ) const;
122
123        /**
124         * Get all links that end at the specified node id.
125         * Or all links from the local node when the node id
126         * is set to unspecified.
127         *
128         * @param node The remote node to query all links or unspecified
129         *                      for all local starting links
130         * @return A vector of link ids.
131         */
132        vector<LinkID> getLinkIDs(
133                        const NodeID& node = NodeID::UNSPECIFIED
134                        ) const;
135
136        /**
137         * Is this node acting as a relay for us
138         *
139         * @param node The node in question
140         * @return true, if this node is relaying for us
141         */
142        bool isRelayingNode(const NodeID& node);
143
144        /**
145         * Is this node only reachable for us through a relay?
146         *
147         * @param node The node in question
148         * @return true, if we reach this node only over a relay
149         */
150        bool isRelayedNode(const NodeID& node);
151
152
153        /**
154         * Protocols for some layer, can be combined
155         */
156        enum Protocol {
157                undefined = 0x0,
158                rfcomm = 0x1,
159                ipv4 = 0x2,
160                ipv6 = 0x4,
161                udp = 0x8,
162                tcp = 0x16,
163        };
164
165        /**
166         * Through which protocol is a node reachable.
167         *
168         * @param node The node for which to return protocol reachability
169         * @return Combination of protocols
170         */
171        Protocol getReachabilityProtocol(const NodeID& node);
172
173protected:
174
175        /**
176         * Notification function when a link has gone up.
177         *
178         * @param lnk The corresponding link id.
179         * @param local The local node id.
180         * @param remote The remote node id.
181         * @param spovnet The SpoVNet ID.
182         */
183        virtual void onLinkUp(
184                        const LinkID& lnk,
185                        const NodeID& local,
186                        const NodeID& remote,
187                        const SpoVNetID& spovnet
188                        );
189
190        /**
191         * Notification function when a link has gone down.
192         *
193         * @param lnk The corresponding link id.
194         * @param local The local node id.
195         * @param remote The remote node id.
196         * @param spovnet The SpoVNet ID.
197         */
198        virtual void onLinkDown(
199                        const LinkID& lnk,
200                        const NodeID& local,
201                        const NodeID& remote,
202                        const SpoVNetID& spovnet
203                        );
204
205        /**
206         * Notification function when a link has changed
207         *
208         * @param lnk The corresponding link id.
209         * @param local The local node id.
210         * @param remote The remote node id.
211         * @param spovnet The SpoVNet ID.
212         */
213        virtual void onLinkChanged(
214                        const LinkID& lnk,
215                        const NodeID& local,
216                        const NodeID& remote,
217                        const SpoVNetID& spovnet
218                        );
219
220        /**
221         * Notification function when a link has failed
222         *
223         * @param lnk The corresponding link id.
224         * @param local The local node id.
225         * @param remote The remote node id.
226         * @param spovnet The SpoVNet ID.
227         */
228        virtual void onLinkFail(
229                        const LinkID& lnk,
230                        const NodeID& local,
231                        const NodeID& remote,
232                        const SpoVNetID& spovnet
233                        );
234
235private:
236
237        /**
238         * Configure the sideport with the correct base overlay.
239         *
240         * @param _overlay The BaseOverlay where to attach the sideport.
241         */
242        void configure(
243                        overlay::BaseOverlay* _overlay
244                        );
245
246        /**
247         * The configured BaseOverlay where
248         * the sideport is attached to.
249         */
250        overlay::BaseOverlay* overlay;
251
252};
253
254} // namespace ariba
255
256#endif // SIDEPORTLISTENER_H_
Note: See TracBrowser for help on using the repository browser.