MAK RTIspy API Documentation for HLA 1516
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
routeMap.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2005 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 /*******************************************************************************
6 ** $RCSfile: routeMap.h,v $ $Revision: 1.19 $ $State: Exp $
7 *******************************************************************************/
10 
11 #ifndef DtRouteMap_H_
12 #define DtRouteMap_H_
13 
14 #include <vlutil/vlUtil.h>
15 #include <vlutil/vlString.h>
16 #include <vlutil/vlFilename.h>
17 #include <vlutil/vlInetAddr.h>
18 #include <mtl/mtl.h>
19 #include <vlutil/vlPrint.h>
20 #include <mtl/mtlEnvironment.h>
21 #include <map>
22 #include <vector>
23 #include <rtiUtil.h>
24 #include "rtiMsConfig.h"
25 
26 class DtRIDParameters;
27 class MAKRti::DtMtlEnvironment;
29 struct DtForwarderNodeInfo;
30 
32 {
36 
38 
40 
42 {
43 protected:
44  DtRouteMap( const DtRIDParameters* params,
45  const MAKRti::DtInetAddr& additionalForwarder );
46 
47 public:
48 
51  virtual void rebuildRoutes();
52 
54  virtual bool isConfiguredViaRoutesFile() const;
55 
56  // Indicate if no routes have been added
57  virtual bool isEmpty() const;
58 
59  typedef std::vector< DtInetAddrAndPort > DtAddressPortList;
60  typedef std::vector<MAKRti::DtInetAddr> DtAddressList;
61  typedef std::vector< MAKRti::DtString > DtNodeList;
62  typedef std::set< MAKRti::DtInetAddr > DtInterfaceAddrSet;
63  typedef std::vector< DtRtiForwarderGroup* > DtForwarderGroupList;
64 
65  virtual ~DtRouteMap();
66 
68  virtual DtNodeList nodeNames() const;
69  virtual DtAddressPortList nodeAddresses() const;
70 
71  virtual unsigned long nodeIdByAddress( const DtInetAddrAndPort& address ) const;
72  virtual unsigned long nodeIdByName( const MAKRti::DtString& name ) const;
73 
74  // set local nodeId. Node Id is either statically calculated
75  // when configured via Routes file, or communicated by the
76  // first server forwarder (additionalForwardertoConnectTo) in dynamic configurations.
77  virtual void setLocalNodeId(unsigned long newId );
78  virtual unsigned long localNodeId() const;
79 
81  unsigned long lowestNodeId() const;
82 
84  virtual unsigned long consumeNextAvailableNodeId();
85 
86  virtual MAKRti::DtString nodeNameByAddress( const DtInetAddrAndPort& address ) const;
87  virtual MAKRti::DtString nodeHostNameByAddres( const DtInetAddrAndPort& address ) const;
88  virtual DtInetAddrAndPort nodeAddress( const MAKRti::DtString& name ) const;
89 
90  // Return our node name.
91  virtual const MAKRti::DtString& localNodeName() const;
92 
94  virtual DtForwarderGroupList forwarderGroups() const;
95 
97  virtual DtRtiForwarderGroup* localGroup() const;
98 
100  virtual void setForwarderPort( unsigned int port );
101  virtual unsigned int forwarderPort() const;
102 
104  virtual inline void setForwarderInterfaceAddr( const MAKRti::DtInetAddr& addr );
105  virtual inline const MAKRti::DtInetAddr& forwarderInterfaceAddr() const;
106 
108  virtual DtAddressPortList adjacencyList( const DtInetAddrAndPort& node ) const;
109  virtual DtAddressPortList adjacencyList( const MAKRti::DtString& node ) const;
110 
113  virtual void destinationList( DtAddressPortList& destinations,
114  const DtInetAddrAndPort& srcNode,
115  const DtInetAddrAndPort& linkNode ) const;
116  virtual void destinationList( DtAddressPortList& destinations,
117  const MAKRti::DtString& srcNode,
118  const MAKRti::DtString& linkNode ) const;
119 
122  virtual void allLinkDestinations( DtAddressPortList& destinations,
123  const DtInetAddrAndPort& node ) const;
124  virtual void allLinkDestinations( DtAddressPortList& destinations,
125  const MAKRti::DtString& node ) const;
126 
130  virtual void foreignPortalDestinations( DtAddressPortList& destinations,
131  const DtInetAddrAndPort& node ) const;
132  virtual void foreignPortalDestinations( DtAddressPortList& destinations,
133  const MAKRti::DtString& node ) const;
134 
142  virtual void foreignGroupConnections( DtAddressPortList& foreignNodes,
143  const DtInetAddrAndPort& node ) const;
144  virtual void foreignGroupConnections( DtAddressPortList& foreignNodes,
145  const MAKRti::DtString& node ) const;
146 
149  virtual void localGroupDestinations( DtAddressPortList& destinations,
150  const DtInetAddrAndPort& node ) const;
151  virtual void localGroupDestinations( DtAddressPortList& destinations,
152  const MAKRti::DtString& node ) const;
153 
155  virtual const DtInterfaceAddrSet& getInterfaceAddrs() const;
156 
161  virtual bool addForwarder( const MAKRti::DtString& forwarderName,
162  const MAKRti::DtInetAddr& forwarderAddr, int port );
163 
168  virtual bool addLocalForwarder( const MAKRti::DtString& forwarderName,
169  const MAKRti::DtInetAddr& forwarderAddr, int port );
170 
173  virtual bool removeForwarder(const DtInetAddrAndPort& addr);
174 
177  virtual bool addForwarderConnection( const MAKRti::DtString& forwarderNameA,
178  const MAKRti::DtString& forwarderNameB );
179 
183  virtual bool addForeignPortalConnection( const MAKRti::DtString& forwarder );
184 
188  virtual bool addForeignForwarderConnection( const MAKRti::DtString& forwarder );
189 
193  virtual bool addLocalGroupConnection( const MAKRti::DtString& peerForwarder );
194 
199  virtual bool addForwarderRoute( const MAKRti::DtString& linkForwarderName,
200  const MAKRti::DtString& forwarderNameA,
201  const MAKRti::DtString& forwarderNameB );
202 
205  virtual bool addInterfaceAddr( const MAKRti::DtInetAddr& interfaceAddr );
206 
208  virtual DtRtiForwarderGroup* addForwarderGroup( const MAKRti::DtString& groupName );
209 
211  virtual bool addForwarderToGroup( const MAKRti::DtString& groupName,
212  const MAKRti::DtString& forwarderName,
213  const MAKRti::DtString& url, int isPortal);
214 
217  virtual bool enableDistributedUdpForwarding( const MAKRti::DtString& forwarder );
218 
221  virtual bool isMulticastMonitoringAllowed() const;
222 
225  virtual bool enableCompression( const MAKRti::DtString& forwarder, int level );
226 
229  virtual bool enableBundling( const MAKRti::DtString& forwarder, int bundleSize );
230 
233  virtual int compressionLevel( const DtInetAddrAndPort& forwarder );
234 
237  virtual int bundleSize( const DtInetAddrAndPort& forwarder );
238 
241  virtual bool isLocalGroupMember( const DtInetAddrAndPort& forwarder ) const;
242 
245  virtual DtInetAddrAndPort locatePortal( const DtInetAddrAndPort& targetNode ) const;
246  virtual DtInetAddrAndPort locatePortal( const MAKRti::DtString& targetGroupName ) const;
247 
250  virtual DtInetAddrAndPort nextForwarderOnRoute( const DtInetAddrAndPort& targetNode ) const;
251  virtual DtInetAddrAndPort nextForwarderOnRoute( const MAKRti::DtString& targetGroupName ) const;
252 
259  virtual bool forwardRtiexecMsgs() const;
260 
262  virtual void concatAddressList( DtAddressPortList& final, const DtAddressPortList& src ) const;
263 
265  virtual void print() const;
266 
269  virtual void knownForwarderNodes(std::set<DtForwarderNodeInfo>& otherNodes) const;
270 
272  virtual void addKnownForwarder(const MAKRti::DtInetAddr& addr, unsigned long nodeId,
273  const MAKRti::DtString& fwName, const MAKRti::DtString& hostname,
274  const std::set<DtForwarderNodeInfo>& peers );
275 
277  virtual bool updateForwarder(const MAKRti::DtInetAddr& fwAddr, unsigned long fwNodeId,
278  const MAKRti::DtString& fwName, const MAKRti::DtString& fwHostName,
279  const std::set<DtForwarderNodeInfo>& peers );
280 
282  virtual void updateForwarderNodeId(const MAKRti::DtInetAddr& fwAddr, unsigned long fwNodeId);
283 
284 
289  virtual void addAddressAlias(const MAKRti::DtInetAddr& knownAddr,
290  const MAKRti::DtInetAddr& aliasAddr);
291 
294  inline const MAKRti::DtInetAddr& addressAlias(const MAKRti::DtInetAddr& knownAddr) const;
295 
296 public:
298  typedef DtBoost::shared_ptr<DtRouteMap> (*DtRouteMapCreatorFcn)(
299  const DtRIDParameters*, const MAKRti::DtInetAddr& );
300 
302  static DtBoost::shared_ptr<DtRouteMap> create( const DtRIDParameters* params,
303  const MAKRti::DtInetAddr& fwAddrToConnectTo );
304 
308  static void setCreatorFunction( DtRouteMapCreatorFcn creator );
309 
310 protected:
311 
314  virtual void registerRoutesFileParams();
315 
318  virtual void setupDefaultRoutes();
319  virtual void setupSinglePortalRoutes();
320  virtual void setupLoadBalanceRoutes();
321 
323  virtual void openRoutesFile();
324 
327  virtual void initializeInterfaceList();
328 
331  virtual DtForwarderGroupInterconnectMethod setGroupInterconnectMethod( MAKRti::DtString methodString );
332 
334  DtRouteMap();
335  DtRouteMap( const DtRouteMap& orig );
336 
337  virtual void setupNodeName();
338  DtRouteMap& operator=( const DtRouteMap& orig );
339 
342  virtual void setupDestinationsMap();
343 
344 protected:
345 
347  MAKRti::DtFilename myRoutesFileName;
348  MAKRti::DtMtlEnvironment* myEnv;
349  MAKRti::DtString myNodeName;
350  MAKRti::DtInetAddr myRoutesFileNodeAddress;
351  unsigned long myNodeId;
352  mutable unsigned long myLowestNodeId;
353  unsigned long myNextAvailableNodeId;
354  mutable bool myLowestNodeIdIsDirty;
357 
360 
362  MAKRti::DtInetAddr myForwarderInterfaceAddr;
363 
365 
372 
373  typedef std::map< DtInetAddrAndPort, MAKRti::DtString > DtConnectionAddrToNameMap;
374  typedef std::map< MAKRti::DtString, DtInetAddrAndPort > DtConnectionNameToAddrMap;
375  typedef std::pair< std::vector< MAKRti::DtString >, DtAddressPortList > DtConnectionList;
376  typedef std::map< DtInetAddrAndPort, DtConnectionList > DtAddrToConnectionListMap;
377  typedef std::multimap< DtInetAddrAndPort, DtInetAddrAndPort > DtSrcToDestinationsMap;
378  typedef std::map< DtInetAddrAndPort, DtInetAddrAndPort > DtDestinationToLinkMap;
379  typedef std::map< MAKRti::DtInetAddr, MAKRti::DtInetAddr > DtInetAddrAliasMap;
380  typedef std::map< DtInetAddrAndPort, DtSrcToDestinationsMap > DtRoutingTable;
381  typedef std::map< MAKRti::DtString, DtRtiForwarderGroup* > DtGroupNameTable;
382  typedef std::map< DtInetAddrAndPort, DtRtiForwarderGroup* > DtForwarderGroupConnectionTable;
383  typedef std::map< MAKRti::DtString, int > DtForwarderCompressionMap;
384  typedef std::map< MAKRti::DtString, int > DtForwarderBundlingMap;
385 
386 
387  std::set<DtForwarderNodeInfo> myKnownForwarderNodes;
388 
398 
403 
407 
410 
413 
414 protected:
415 
416 
417  static DtRouteMapCreatorFcn theCreator;
418 
419 
420 };
421 
422 inline void DtRouteMap::setForwarderInterfaceAddr( const MAKRti::DtInetAddr& addr )
423 {
425 }
426 
427 inline const MAKRti::DtInetAddr& DtRouteMap::forwarderInterfaceAddr() const
428 {
430 }
431 
432 inline const MAKRti::DtInetAddr& DtRouteMap::addressAlias(const MAKRti::DtInetAddr& addr) const
433 {
434  DtInetAddrAliasMap::const_iterator iter = myInetAddrAliases.find(addr);
435  if(iter == myInetAddrAliases.end())
436  {
437  return MAKRti::DtInetAddr::inaddrAny();
438  }
439  else
440  {
441  return iter->second;
442  }
443 }
444 
445 
446 
447 #endif
448 
449 

Document ID: Generated on Mon Mar 21 09:41:37 EDT 2016 from SVN revision 163228
Copyright © 2005-2015 VT MÄK Inc. All Rights Reserved (www.mak.com)