MAK RTIspy API Documentation for HLA Evolved
routeMap.h
Go to the documentation of this file.
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 

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)