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/vlInetEndpoint.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::DtInetEndpoint& 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  // set local nodeId. Node Id is either statically calculated
72  // when configured via Routes file, or communicated by the
73  // first server forwarder (additionalForwardertoConnectTo) in dynamic configurations.
74  virtual void setLocalNodeId(unsigned long newId );
75  virtual unsigned long localNodeId() const;
76 
78  unsigned long lowestNodeId() const;
79 
81  virtual unsigned long consumeNextAvailableNodeId();
82 
83  virtual MAKRti::DtString nodeNameByAddress( const DtInetAddrAndPort& address ) const;
84  virtual MAKRti::DtString nodeHostNameByAddress( const DtInetAddrAndPort& address ) const;
85  virtual unsigned long nodeIdByAddress( const DtInetAddrAndPort& address ) const;
86  virtual unsigned long nodeIdByName( const MAKRti::DtString& name ) const;
87  virtual DtInetAddrAndPort nodeAddress(const MAKRti::DtString& name) const;
88  virtual std::pair<DtInetAddrAndPort, DtInetAddrAndPort> publicPrivatePairByPublicAddress(const DtInetAddrAndPort& address) 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 
166  virtual bool removeForwarder(const DtInetAddrAndPort& addr);
167 
170  virtual bool addForwarderConnection( const MAKRti::DtString& forwarderNameA,
171  const MAKRti::DtString& forwarderNameB );
172 
176  virtual bool addForeignPortalConnection( const MAKRti::DtString& forwarder );
177 
181  virtual bool addForeignForwarderConnection( const MAKRti::DtString& forwarder );
182 
186  virtual bool addLocalGroupConnection( const MAKRti::DtString& peerForwarder );
187 
192  virtual bool addForwarderRoute( const MAKRti::DtString& linkForwarderName,
193  const MAKRti::DtString& forwarderNameA,
194  const MAKRti::DtString& forwarderNameB );
195 
198  virtual bool addInterfaceAddr( const MAKRti::DtInetAddr& interfaceAddr );
199 
201  virtual DtRtiForwarderGroup* addForwarderGroup( const MAKRti::DtString& groupName );
202 
204  virtual bool addForwarderToGroup( const MAKRti::DtString& groupName,
205  const MAKRti::DtString& forwarderName,
206  const MAKRti::DtString& url, int isPortal);
207 
210  virtual bool enableDistributedUdpForwarding( const MAKRti::DtString& forwarder );
211 
214  virtual bool isMulticastMonitoringAllowed() const;
215 
218  virtual bool enableCompression( const MAKRti::DtString& forwarder, int level );
219 
222  virtual bool enableBundling( const MAKRti::DtString& forwarder, int bundleSize );
223 
226  virtual int compressionLevel( const DtInetAddrAndPort& forwarder );
227 
230  virtual int bundleSize( const DtInetAddrAndPort& forwarder );
231 
234  virtual bool isLocalGroupMember( const DtInetAddrAndPort& forwarder ) const;
235 
238  virtual DtInetAddrAndPort locatePortal( const DtInetAddrAndPort& targetNode ) const;
239  virtual DtInetAddrAndPort locatePortal( const MAKRti::DtString& targetGroupName ) const;
240 
243  virtual DtInetAddrAndPort nextForwarderOnRoute( const DtInetAddrAndPort& targetNode ) const;
244  virtual DtInetAddrAndPort nextForwarderOnRoute( const MAKRti::DtString& targetGroupName ) const;
245 
252  virtual bool forwardRtiexecMsgs() const;
253 
255  virtual void concatAddressList( DtAddressPortList& final, const DtAddressPortList& src ) const;
256 
258  virtual void print() const;
259 
262  virtual void knownForwarderNodes(std::set<DtForwarderNodeInfo>& otherNodes) const;
263 
265  virtual void addKnownForwarder(const DtInetAddrAndPort& fwDestination, unsigned long nodeId,
266  const MAKRti::DtString& fwName, const MAKRti::DtString& hostname,
267  const std::set<DtForwarderNodeInfo>& peers );
268 
270  virtual bool updateForwarder(const DtInetAddrAndPort& fwDestination, unsigned long fwNodeId,
271  const MAKRti::DtString& fwName, const MAKRti::DtString& fwHostName,
272  const std::set<DtForwarderNodeInfo>& peers );
273 
275  virtual void updateForwarderNodeId(const DtInetAddrAndPort& fwDestination, unsigned long fwNodeId);
276 
277 
282  virtual void addAddressAlias(const MAKRti::DtInetAddr& knownAddr,
283  const MAKRti::DtInetAddr& aliasAddr);
284 
287  inline const MAKRti::DtInetAddr& addressAlias(const MAKRti::DtInetAddr& knownAddr) const;
288  inline const MAKRti::DtInetAddr& privateAddress(const MAKRti::DtInetAddr& knownAddr) const;
289 
290  virtual void setRtiexecConnectionId(unsigned long);
291  virtual unsigned long rtiexecConnectionId() const;
292 
293 public:
295  typedef DtBoost::shared_ptr<DtRouteMap> (*DtRouteMapCreatorFcn)(
296  const DtRIDParameters*, const MAKRti::DtInetEndpoint& );
297 
299  static DtBoost::shared_ptr<DtRouteMap> create( const DtRIDParameters* params,
300  const MAKRti::DtInetEndpoint& fwAddrToConnectTo );
301 
305  static void setCreatorFunction( DtRouteMapCreatorFcn creator );
306 
307 protected:
308 
311  virtual void registerRoutesFileParams();
312 
315  virtual void setupDefaultRoutes();
316  virtual void setupSinglePortalRoutes();
317  virtual void setupLoadBalanceRoutes();
318 
320  virtual void openRoutesFile();
321 
324  virtual void initializeInterfaceList();
325 
328  virtual DtForwarderGroupInterconnectMethod setGroupInterconnectMethod( MAKRti::DtString methodString );
329 
331  DtRouteMap();
332  DtRouteMap( const DtRouteMap& orig );
333 
334  virtual void setupNodeName();
335  DtRouteMap& operator=( const DtRouteMap& orig );
336 
339  virtual void setupDestinationsMap();
340 
341 protected:
342 
344  MAKRti::DtFilename myRoutesFileName;
345  MAKRti::DtMtlEnvironment* myEnv;
346  MAKRti::DtString myNodeName;
347  MAKRti::DtInetAddr myRoutesFileNodeAddress;
348  unsigned long myNodeId;
349  mutable unsigned long myLowestNodeId;
350  unsigned long myNextAvailableNodeId;
351  mutable bool myLowestNodeIdIsDirty;
354 
355  unsigned long myRtiExecConnectionId;
356 
359 
361  MAKRti::DtInetAddr myForwarderInterfaceAddr;
362 
364 
371 
372  typedef std::map< DtInetAddrAndPort, MAKRti::DtString > DtConnectionAddrToNameMap;
373  typedef std::map< MAKRti::DtString, DtInetAddrAndPort > DtConnectionNameToAddrMap;
374  typedef std::pair< std::vector< MAKRti::DtString >, DtAddressPortList > DtConnectionList;
375  typedef std::map< DtInetAddrAndPort, DtConnectionList > DtAddrToConnectionListMap;
376  typedef std::multimap< DtInetAddrAndPort, DtInetAddrAndPort > DtSrcToDestinationsMap;
377  typedef std::map< DtInetAddrAndPort, DtInetAddrAndPort > DtDestinationToLinkMap;
378  typedef std::map< MAKRti::DtInetAddr, MAKRti::DtInetAddr > DtInetAddrAliasMap;
379  typedef std::map< DtInetAddrAndPort, DtSrcToDestinationsMap > DtRoutingTable;
380  typedef std::map< MAKRti::DtString, DtRtiForwarderGroup* > DtGroupNameTable;
381  typedef std::map< DtInetAddrAndPort, DtRtiForwarderGroup* > DtForwarderGroupConnectionTable;
382  typedef std::map< MAKRti::DtString, int > DtForwarderCompressionMap;
383  typedef std::map< MAKRti::DtString, int > DtForwarderBundlingMap;
384 
385 
386  std::set<DtForwarderNodeInfo> myKnownForwarderNodes;
387 
397 
402 
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 inline const MAKRti::DtInetAddr& DtRouteMap::privateAddress(const MAKRti::DtInetAddr& addr) const
445 {
446  DtInetAddrAliasMap::const_iterator iter = myInetPrivateByKnownAddr.find(addr);
447  if (iter == myInetPrivateByKnownAddr.end())
448  {
449  return addr;
450  }
451  else
452  {
453  return iter->second;
454  }
455 }
456 
457 
458 #endif
459 
460 
int myDistributedForwarderPort
Port used for forwarder-to-forwarder connections.
Definition: routeMap.h:358
DtConnectionAddrToNameMap myAddrToNameMap
Definition: routeMap.h:389
std::pair< MAKRti::DtInetAddr, int > DtInetAddrAndPort
Definition: rtiUtil.h:147
std::vector< DtRtiForwarderGroup * > DtForwarderGroupList
Definition: routeMap.h:63
MAKRti::DtMtlEnvironment * myEnv
Definition: routeMap.h:345
DtConnectionNameToAddrMap myNameToAddrMap
Definition: routeMap.h:388
= 1
Definition: routeMap.h:35
const int DtUseDefaultForwarderPort
Definition: routeMap.h:39
MAKRti::DtFilename myRoutesFileName
Definition: routeMap.h:344
DtAddrToConnectionListMap myForeignPortalConnections
Definition: routeMap.h:391
const DtRIDParameters * myParams
Definition: routeMap.h:343
MAKRti::DtInetAddr myForwarderInterfaceAddr
The interface used for forwarder-to-forwarder connections.
Definition: routeMap.h:361
MAKRti::DtInetAddr myRoutesFileNodeAddress
Definition: routeMap.h:347
DtForwarderGroupList myForwarderGroups
the one I&#39;m in
Definition: routeMap.h:399
std::vector< MAKRti::DtString > DtNodeList
Definition: routeMap.h:61
This class manages the RTI&#39;s start-up configuration using both MTL variables and functions.
Definition: RIDparams.h:87
std::map< DtInetAddrAndPort, DtSrcToDestinationsMap > DtRoutingTable
Definition: routeMap.h:379
std::map< MAKRti::DtInetAddr, MAKRti::DtInetAddr > DtInetAddrAliasMap
Definition: routeMap.h:378
MAKRti::DtString myNodeName
Definition: routeMap.h:346
std::multimap< DtInetAddrAndPort, DtInetAddrAndPort > DtSrcToDestinationsMap
Definition: routeMap.h:376
unsigned long myRtiExecConnectionId
Definition: routeMap.h:355
bool myNodeIdIsSet
Definition: routeMap.h:352
std::map< DtInetAddrAndPort, DtInetAddrAndPort > DtDestinationToLinkMap
Definition: routeMap.h:377
std::map< DtInetAddrAndPort, MAKRti::DtString > DtConnectionAddrToNameMap
Definition: routeMap.h:372
unsigned long myLowestNodeId
Definition: routeMap.h:349
DtDestinationToLinkMap myLinksByDestinationMap
Definition: routeMap.h:395
unsigned long myNodeId
Definition: routeMap.h:348
bool myLowestNodeIdIsDirty
Definition: routeMap.h:351
const MAKRti::DtInetAddr & addressAlias(const MAKRti::DtInetAddr &knownAddr) const
Looks up the alias for a given address.
Definition: routeMap.h:432
static DtRouteMapCreatorFcn theCreator
Definition: routeMap.h:417
DtAddrToConnectionListMap myLocalGroupConnections
Definition: routeMap.h:393
unsigned long myNextAvailableNodeId
Definition: routeMap.h:350
DtInetAddrAliasMap myInetAddrAliases
Some forwarders can be known by multiple addresses.
Definition: routeMap.h:405
std::map< MAKRti::DtString, DtRtiForwarderGroup * > DtGroupNameTable
Definition: routeMap.h:380
Definition: forwarderNodeInfoMsg.h:28
std::vector< MAKRti::DtInetAddr > DtAddressList
Definition: routeMap.h:60
std::pair< std::vector< MAKRti::DtString >, DtAddressPortList > DtConnectionList
Definition: routeMap.h:374
Definition: routeMap.h:41
virtual void setForwarderInterfaceAddr(const MAKRti::DtInetAddr &addr)
Get/Set the forwarder interface address (generally set via the routes file)
Definition: routeMap.h:422
DtForwarderGroupInterconnectMethod myGroupInterconnectMethod
Definition: routeMap.h:363
DtAddrToConnectionListMap myForeignGroupConnections
Definition: routeMap.h:392
DtForwarderBundlingMap myBundledForwarders
Set of forwarders to which we should have bundling enabled.
Definition: routeMap.h:412
std::set< DtForwarderNodeInfo > myKnownForwarderNodes
Definition: routeMap.h:386
Definition: routeMap.h:33
virtual const MAKRti::DtInetAddr & forwarderInterfaceAddr() const
Definition: routeMap.h:427
DtForwarderGroupConnectionTable myConnectionToGroupMap
Definition: routeMap.h:401
std::map< MAKRti::DtString, int > DtForwarderBundlingMap
Definition: routeMap.h:383
DtGroupNameTable myGroupNameTable
all groups
Definition: routeMap.h:400
bool myIsConfiguredViaRoutesFile
Definition: routeMap.h:353
enum DtForwarderGroupInterconnectMethod_enum DtForwarderGroupInterconnectMethod
DtAddrToConnectionListMap myConnectionsByAddr
Definition: routeMap.h:390
DtForwarderGroupInterconnectMethod_enum
Definition: routeMap.h:31
Definition: forwarderGroup.h:23
std::map< MAKRti::DtString, DtInetAddrAndPort > DtConnectionNameToAddrMap
Definition: routeMap.h:373
DtRtiForwarderGroup * myLocalForwarderGroup
Definition: routeMap.h:398
DtForwarderCompressionMap myCompressedForwarders
Set of forwarders to which we should have compression enabled.
Definition: routeMap.h:409
const MAKRti::DtInetAddr & privateAddress(const MAKRti::DtInetAddr &knownAddr) const
Definition: routeMap.h:444
std::set< MAKRti::DtInetAddr > DtInterfaceAddrSet
Definition: routeMap.h:62
= 0
Definition: routeMap.h:34
std::map< DtInetAddrAndPort, DtConnectionList > DtAddrToConnectionListMap
Definition: routeMap.h:375
#define DT_DLL_FORWARDER
Definition: rtiMsConfig.h:124
DtInterfaceAddrSet myNicAddrs
Definition: routeMap.h:396
DtInetAddrAliasMap myInetPrivateByKnownAddr
Definition: routeMap.h:406
DtNodeList myMulticastEnabledForwarderList
List of forwarders allowed to act as Distributed UDP Forwarders, meaning they are allowed to listen t...
Definition: routeMap.h:370
std::map< MAKRti::DtString, int > DtForwarderCompressionMap
Definition: routeMap.h:382
std::vector< DtInetAddrAndPort > DtAddressPortList
Definition: routeMap.h:59
std::map< DtInetAddrAndPort, DtRtiForwarderGroup * > DtForwarderGroupConnectionTable
Definition: routeMap.h:381
DtRoutingTable myRoutesByLinkAddrMap
Definition: routeMap.h:394

Document ID: Generated on Thu May 11 15:55:32 EDT 2023 from SVN revision 254743
Copyright © 2005-2020 MAK Technologies Inc. All Rights Reserved (www.mak.com)