![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: routeMap.h,v $ $Revision: 1.19 $ $State: Exp $ 00007 *******************************************************************************/ 00010 00011 #ifndef DtRouteMap_H_ 00012 #define DtRouteMap_H_ 00013 00014 #include <vlutil/vlUtil.h> 00015 #include <vlutil/vlString.h> 00016 #include <vlutil/vlFilename.h> 00017 #include <vlutil/vlInetAddr.h> 00018 #include <mtl/mtl.h> 00019 #include <vlutil/vlPrint.h> 00020 #include <mtl/lispEnv.h> 00021 #include <map> 00022 #include <vector> 00023 #include <rtiUtil.h> 00024 #include "rtiMsConfig.h" 00025 00026 class DtRIDParameters; 00027 class MAKRti::DtMtlEnvironment; 00028 class DtRtiForwarderGroup; 00029 struct DtForwarderNodeInfo; 00030 00031 typedef enum DtForwarderGroupInterconnectMethod_enum 00032 { 00033 DtFwderGroupInterconnectManual, 00034 DtFwderGroupInterconnectSinglePortal, 00035 DtFwderGroupInterconnectLoadBalance 00036 00037 } DtForwarderGroupInterconnectMethod; 00038 00039 const int DtUseDefaultForwarderPort = 0; 00040 00041 class DT_DLL_FORWARDER DtRouteMap 00042 { 00043 protected: 00044 DtRouteMap( const DtRIDParameters* params, 00045 const MAKRti::DtInetAddr& additionalForwarder ); 00046 00047 public: 00048 00051 virtual void rebuildRoutes(); 00052 00054 virtual bool isConfiguredViaRoutesFile() const; 00055 00056 // Indicate if no routes have been added 00057 virtual bool isEmpty() const; 00058 00059 typedef std::vector< DtInetAddrAndPort > DtAddressPortList; 00060 typedef std::vector<MAKRti::DtInetAddr> DtAddressList; 00061 typedef std::vector< MAKRti::DtString > DtNodeList; 00062 typedef std::set< MAKRti::DtInetAddr > DtInterfaceAddrSet; 00063 typedef std::vector< DtRtiForwarderGroup* > DtForwarderGroupList; 00064 00065 virtual ~DtRouteMap(); 00066 00068 virtual DtNodeList nodeNames() const; 00069 virtual DtAddressPortList nodeAddresses() const; 00070 00071 virtual unsigned long nodeIdByAddress( const DtInetAddrAndPort& address ) const; 00072 virtual unsigned long nodeIdByName( const MAKRti::DtString& name ) const; 00073 00074 // set local nodeId. Node Id is either statically calculated 00075 // when configured via Routes file, or communicated by the 00076 // first server forwarder (additionalForwardertoConnectTo) in dynamic configurations. 00077 virtual void setLocalNodeId(unsigned long newId ); 00078 virtual unsigned long localNodeId() const; 00079 00081 unsigned long lowestNodeId() const; 00082 00084 virtual unsigned long consumeNextAvailableNodeId(); 00085 00086 virtual MAKRti::DtString nodeNameByAddress( const DtInetAddrAndPort& address ) const; 00087 virtual MAKRti::DtString nodeHostNameByAddres( const DtInetAddrAndPort& address ) const; 00088 virtual DtInetAddrAndPort nodeAddress( const MAKRti::DtString& name ) const; 00089 00090 // Return our node name. 00091 virtual const MAKRti::DtString& localNodeName() const; 00092 00094 virtual DtForwarderGroupList forwarderGroups() const; 00095 00097 virtual DtRtiForwarderGroup* localGroup() const; 00098 00100 virtual void setForwarderPort( unsigned int port ); 00101 virtual unsigned int forwarderPort() const; 00102 00104 virtual inline void setForwarderInterfaceAddr( const MAKRti::DtInetAddr& addr ); 00105 virtual inline const MAKRti::DtInetAddr& forwarderInterfaceAddr() const; 00106 00108 virtual DtAddressPortList adjacencyList( const DtInetAddrAndPort& node ) const; 00109 virtual DtAddressPortList adjacencyList( const MAKRti::DtString& node ) const; 00110 00113 virtual void destinationList( DtAddressPortList& destinations, 00114 const DtInetAddrAndPort& srcNode, 00115 const DtInetAddrAndPort& linkNode ) const; 00116 virtual void destinationList( DtAddressPortList& destinations, 00117 const MAKRti::DtString& srcNode, 00118 const MAKRti::DtString& linkNode ) const; 00119 00122 virtual void allLinkDestinations( DtAddressPortList& destinations, 00123 const DtInetAddrAndPort& node ) const; 00124 virtual void allLinkDestinations( DtAddressPortList& destinations, 00125 const MAKRti::DtString& node ) const; 00126 00130 virtual void foreignPortalDestinations( DtAddressPortList& destinations, 00131 const DtInetAddrAndPort& node ) const; 00132 virtual void foreignPortalDestinations( DtAddressPortList& destinations, 00133 const MAKRti::DtString& node ) const; 00134 00142 virtual void foreignGroupConnections( DtAddressPortList& foreignNodes, 00143 const DtInetAddrAndPort& node ) const; 00144 virtual void foreignGroupConnections( DtAddressPortList& foreignNodes, 00145 const MAKRti::DtString& node ) const; 00146 00149 virtual void localGroupDestinations( DtAddressPortList& destinations, 00150 const DtInetAddrAndPort& node ) const; 00151 virtual void localGroupDestinations( DtAddressPortList& destinations, 00152 const MAKRti::DtString& node ) const; 00153 00155 virtual const DtInterfaceAddrSet& getInterfaceAddrs() const; 00156 00161 virtual bool addForwarder( const MAKRti::DtString& forwarderName, 00162 const MAKRti::DtInetAddr& forwarderAddr, int port ); 00163 00168 virtual bool addLocalForwarder( const MAKRti::DtString& forwarderName, 00169 const MAKRti::DtInetAddr& forwarderAddr, int port ); 00170 00173 virtual bool removeForwarder(const DtInetAddrAndPort& addr); 00174 00177 virtual bool addForwarderConnection( const MAKRti::DtString& forwarderNameA, 00178 const MAKRti::DtString& forwarderNameB ); 00179 00183 virtual bool addForeignPortalConnection( const MAKRti::DtString& forwarder ); 00184 00188 virtual bool addForeignForwarderConnection( const MAKRti::DtString& forwarder ); 00189 00193 virtual bool addLocalGroupConnection( const MAKRti::DtString& peerForwarder ); 00194 00199 virtual bool addForwarderRoute( const MAKRti::DtString& linkForwarderName, 00200 const MAKRti::DtString& forwarderNameA, 00201 const MAKRti::DtString& forwarderNameB ); 00202 00205 virtual bool addInterfaceAddr( const MAKRti::DtInetAddr& interfaceAddr ); 00206 00208 virtual DtRtiForwarderGroup* addForwarderGroup( const MAKRti::DtString& groupName ); 00209 00211 virtual bool addForwarderToGroup( const MAKRti::DtString& groupName, 00212 const MAKRti::DtString& forwarderName, 00213 const MAKRti::DtString& url, int isPortal); 00214 00217 virtual bool enableDistributedUdpForwarding( const MAKRti::DtString& forwarder ); 00218 00221 virtual bool isMulticastMonitoringAllowed() const; 00222 00225 virtual bool enableCompression( const MAKRti::DtString& forwarder, int level ); 00226 00229 virtual bool enableBundling( const MAKRti::DtString& forwarder, int bundleSize ); 00230 00233 virtual int compressionLevel( const DtInetAddrAndPort& forwarder ); 00234 00237 virtual int bundleSize( const DtInetAddrAndPort& forwarder ); 00238 00241 virtual bool isLocalGroupMember( const DtInetAddrAndPort& forwarder ) const; 00242 00245 virtual DtInetAddrAndPort locatePortal( const DtInetAddrAndPort& targetNode ) const; 00246 virtual DtInetAddrAndPort locatePortal( const MAKRti::DtString& targetGroupName ) const; 00247 00250 virtual DtInetAddrAndPort nextForwarderOnRoute( const DtInetAddrAndPort& targetNode ) const; 00251 virtual DtInetAddrAndPort nextForwarderOnRoute( const MAKRti::DtString& targetGroupName ) const; 00252 00259 virtual bool forwardRtiexecMsgs() const; 00260 00262 virtual void concatAddressList( DtAddressPortList& final, const DtAddressPortList& src ) const; 00263 00265 virtual void print() const; 00266 00269 virtual void knownForwarderNodes(std::set<DtForwarderNodeInfo>& otherNodes) const; 00270 00272 virtual void addKnownForwarder(const MAKRti::DtInetAddr& addr, unsigned long nodeId, 00273 const MAKRti::DtString& fwName, const MAKRti::DtString& hostname, 00274 const std::set<DtForwarderNodeInfo>& peers ); 00275 00277 virtual bool updateForwarder(const MAKRti::DtInetAddr& fwAddr, unsigned long fwNodeId, 00278 const MAKRti::DtString& fwName, const MAKRti::DtString& fwHostName, 00279 const std::set<DtForwarderNodeInfo>& peers ); 00280 00282 virtual void updateForwarderNodeId(const MAKRti::DtInetAddr& fwAddr, unsigned long fwNodeId); 00283 00284 00289 virtual void addAddressAlias(const MAKRti::DtInetAddr& knownAddr, 00290 const MAKRti::DtInetAddr& aliasAddr); 00291 00294 inline const MAKRti::DtInetAddr& addressAlias(const MAKRti::DtInetAddr& knownAddr) const; 00295 00296 public: 00298 typedef DtBoost::shared_ptr<DtRouteMap> (*DtRouteMapCreatorFcn)( 00299 const DtRIDParameters*, const MAKRti::DtInetAddr& ); 00300 00302 static DtBoost::shared_ptr<DtRouteMap> create( const DtRIDParameters* params, 00303 const MAKRti::DtInetAddr& fwAddrToConnectTo ); 00304 00308 static void setCreatorFunction( DtRouteMapCreatorFcn creator ); 00309 00310 protected: 00311 00314 virtual void registerRoutesFileParams(); 00315 00318 virtual void setupDefaultRoutes(); 00319 virtual void setupSinglePortalRoutes(); 00320 virtual void setupLoadBalanceRoutes(); 00321 00323 virtual void openRoutesFile(); 00324 00327 virtual void initializeInterfaceList(); 00328 00331 virtual DtForwarderGroupInterconnectMethod setGroupInterconnectMethod( MAKRti::DtString methodString ); 00332 00334 DtRouteMap(); 00335 DtRouteMap( const DtRouteMap& orig ); 00336 00337 virtual void setupNodeName(); 00338 DtRouteMap& operator=( const DtRouteMap& orig ); 00339 00342 virtual void setupDestinationsMap(); 00343 00344 protected: 00345 00346 const DtRIDParameters* myParams; 00347 MAKRti::DtFilename myRoutesFileName; 00348 MAKRti::DtMtlEnvironment* myEnv; 00349 MAKRti::DtString myNodeName; 00350 MAKRti::DtInetAddr myRoutesFileNodeAddress; 00351 unsigned long myNodeId; 00352 mutable unsigned long myLowestNodeId; 00353 unsigned long myNextAvailableNodeId; 00354 mutable bool myLowestNodeIdIsDirty; 00355 bool myNodeIdIsSet; 00356 bool myIsConfiguredViaRoutesFile; 00357 00359 int myDistributedForwarderPort; 00360 00362 MAKRti::DtInetAddr myForwarderInterfaceAddr; 00363 00364 DtForwarderGroupInterconnectMethod myGroupInterconnectMethod; 00365 00371 DtNodeList myMulticastEnabledForwarderList; 00372 00373 typedef std::map< DtInetAddrAndPort, MAKRti::DtString > DtConnectionAddrToNameMap; 00374 typedef std::map< MAKRti::DtString, DtInetAddrAndPort > DtConnectionNameToAddrMap; 00375 typedef std::pair< std::vector< MAKRti::DtString >, DtAddressPortList > DtConnectionList; 00376 typedef std::map< DtInetAddrAndPort, DtConnectionList > DtAddrToConnectionListMap; 00377 typedef std::multimap< DtInetAddrAndPort, DtInetAddrAndPort > DtSrcToDestinationsMap; 00378 typedef std::map< DtInetAddrAndPort, DtInetAddrAndPort > DtDestinationToLinkMap; 00379 typedef std::map< MAKRti::DtInetAddr, MAKRti::DtInetAddr > DtInetAddrAliasMap; 00380 typedef std::map< DtInetAddrAndPort, DtSrcToDestinationsMap > DtRoutingTable; 00381 typedef std::map< MAKRti::DtString, DtRtiForwarderGroup* > DtGroupNameTable; 00382 typedef std::map< DtInetAddrAndPort, DtRtiForwarderGroup* > DtForwarderGroupConnectionTable; 00383 typedef std::map< MAKRti::DtString, int > DtForwarderCompressionMap; 00384 typedef std::map< MAKRti::DtString, int > DtForwarderBundlingMap; 00385 00386 00387 std::set<DtForwarderNodeInfo> myKnownForwarderNodes; 00388 00389 DtConnectionNameToAddrMap myNameToAddrMap; 00390 DtConnectionAddrToNameMap myAddrToNameMap; 00391 DtAddrToConnectionListMap myConnectionsByAddr; 00392 DtAddrToConnectionListMap myForeignPortalConnections; 00393 DtAddrToConnectionListMap myForeignGroupConnections; 00394 DtAddrToConnectionListMap myLocalGroupConnections; 00395 DtRoutingTable myRoutesByLinkAddrMap; 00396 DtDestinationToLinkMap myLinksByDestinationMap; 00397 DtInterfaceAddrSet myNicAddrs; 00398 00399 DtRtiForwarderGroup* myLocalForwarderGroup; 00400 DtForwarderGroupList myForwarderGroups; 00401 DtGroupNameTable myGroupNameTable; 00402 DtForwarderGroupConnectionTable myConnectionToGroupMap; 00403 00406 DtInetAddrAliasMap myInetAddrAliases; 00407 00409 DtForwarderCompressionMap myCompressedForwarders; 00410 00412 DtForwarderBundlingMap myBundledForwarders; 00413 00414 protected: 00415 00416 00417 static DtRouteMapCreatorFcn theCreator; 00418 00419 00420 }; 00421 00422 inline void DtRouteMap::setForwarderInterfaceAddr( const MAKRti::DtInetAddr& addr ) 00423 { 00424 myForwarderInterfaceAddr = addr; 00425 } 00426 00427 inline const MAKRti::DtInetAddr& DtRouteMap::forwarderInterfaceAddr() const 00428 { 00429 return myForwarderInterfaceAddr; 00430 } 00431 00432 inline const MAKRti::DtInetAddr& DtRouteMap::addressAlias(const MAKRti::DtInetAddr& addr) const 00433 { 00434 DtInetAddrAliasMap::const_iterator iter = myInetAddrAliases.find(addr); 00435 if(iter == myInetAddrAliases.end()) 00436 { 00437 return MAKRti::DtInetAddr::inaddrAny(); 00438 } 00439 else 00440 { 00441 return iter->second; 00442 } 00443 } 00444 00445 00446 00447 #endif //! DtRouteMap_H_ 00448 00449