MAK RTIspy API Documentation for HLA 1.3
 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 

Document ID: Generated on Fri Sep 27 00:57:56 EDT 2019 from SVN revision 201708
Copyright © 2005-2018 VT MÄK Inc. All Rights Reserved (www.mak.com)