An Overlay-based
Virtual Network Substrate
SpoVNet

Changeset 5481


Ignore:
Timestamp:
Jul 30, 2009, 1:06:58 PM (15 years ago)
Author:
mies
Message:
 
Location:
source/ariba
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • source/ariba/overlay/BaseOverlay.cpp

    r5464 r5481  
    114114
    115115/// find a proper relay node
    116 const NodeID BaseOverlay::findRelayNode( const NodeID& id ) {
     116const NodeID BaseOverlay::findRelayNode( const NodeID id ) {
    117117        LinkDescriptor* rld = NULL;
    118118        NodeID relayNode = NodeID::UNSPECIFIED;
     
    133133                else relayNode = rld->remoteNode;
    134134        }
    135         logging_force( "Potential relay node " << relayNode.toString() );
     135
     136        // if first relay is unknown choose a arbitrary direct node as relay
     137        if ( relayNode.isUnspecified() ) {
     138                for (size_t i=0; i<links.size(); i++)
     139                        if (links[i]->up &&
     140                                links[i]->communicationUp &&
     141                                !links[i]->relay &&
     142                                links[i]->keepAliveMissed <= 1 &&
     143                                links[i]->service == OverlayInterface::OVERLAY_SERVICE_ID) {
     144                                relayNode = links[i]->remoteNode;
     145                                break;
     146                        }
     147        }
     148
    136149        // do not return myself or use the node as relay node
    137150        if (relayNode == nodeId)
     
    189202}
    190203
     204/// routes a message over the overlay or directly sends it when a link is open
     205seqnum_t BaseOverlay::sendOverlay( Message* message, const NodeID& nodeid ) {
     206        for (size_t i=0; i<links.size(); i++)
     207                if ( links[i]->up &&
     208                links[i]->communicationUp &&
     209                !links[i]->relay &&
     210                links[i]->keepAliveMissed <= 1 &&
     211                links[i]->remoteNode == nodeid &&
     212                links[i]->service == OverlayInterface::OVERLAY_SERVICE_ID) {
     213                        return sendMessage( message, links[i] );
     214                        break;
     215                }
     216        overlayInterface->routeMessage(nodeid, message);
     217        return 0;
     218}
     219
    191220/// creates a link descriptor, apply relay semantics if possible
    192221LinkDescriptor* BaseOverlay::createLinkDescriptor(
    193         const NodeID& remoteNode, const ServiceID& service, const LinkID& link_id ) {
     222        const NodeID remoteNode, const ServiceID service, const LinkID link_id ) {
    194223
    195224        // find listener
     
    13211350                                        if (relayMsg->getRelayNode() == nodeId || relayMsg->getRelayNode().isUnspecified()) {
    13221351                                                logging_info("Routing relay message to " << relayMsg->getDestNode().toString() );
    1323                                                 overlayInterface->routeMessage(relayMsg->getDestNode(), &_overMsg );
     1352                                                sendOverlay( &_overMsg, relayMsg->getDestNode() );
    13241353                                        } else {
    13251354                                                logging_info("Routing relay message to " << relayMsg->getRelayNode().toString() );
    1326                                                 overlayInterface->routeMessage(relayMsg->getRelayNode(), &_overMsg );
     1355                                                sendOverlay( &_overMsg, relayMsg->getRelayNode() );
    13271356                                        }
    13281357                                        return true;
     
    13541383
    13551384                                                /// this must be handled by using relay link!
    1356                                                 overlayInterface->routeMessage(relayMsg->getDestNode(), &_overMsg );
     1385                                                sendOverlay(&_overMsg, relayMsg->getDestNode());
    13571386                                                return true;
    13581387                                        }
  • source/ariba/overlay/BaseOverlay.h

    r5316 r5481  
    415415
    416416        /// find a proper relay node that is directly connected to this node
    417         const NodeID findRelayNode( const NodeID& id );
     417        const NodeID findRelayNode( const NodeID id );
    418418
    419419        /// forwards a message over relays/overlay/directly using link descriptor
    420420        seqnum_t sendMessage( Message* message, const LinkDescriptor* ld );
    421421
     422        /// routes a message over the overlay or directly sends it when a link is open
     423        seqnum_t sendOverlay( Message* message, const NodeID& nodeid );
     424
    422425        /// creates a link descriptor, applys relay semantics if possible
    423426        LinkDescriptor* createLinkDescriptor(
    424                 const NodeID& remoteNode, const ServiceID& service, const LinkID& link_id );
     427                const NodeID remoteNode, const ServiceID service, const LinkID link_id );
    425428
    426429        // map of a link request map a nonce to a LinkID
  • source/ariba/utility/messages/Message.h

    r3710 r5481  
    209209                        T* payloadMsg = new T();
    210210                        data_deserialize( payloadMsg, payload );
     211                        dropPayload();
    211212                        return payloadMsg;
    212213                }
  • source/ariba/utility/system/StartupWrapper.cpp

    r5479 r5481  
    126126                        log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger("rfcomm"));
    127127                        logger->setLevel(log4cxx::Level::getAll());
    128         }
     128        }*/
    129129         */
    130130
  • source/ariba/utility/transport/rfcomm/rfcomm.cpp

    r5444 r5481  
    354354        // check error
    355355        if (error) {
    356                 logging_error("Failed to receive message payload. Error code: "
    357                         << error.message() );
     356                logging_error("Failed to receive message payload. Error: " << error.message() );
    358357                shutdown(info);
    359358                return;
     
    384383        if (info->sending || !info->up || info->send_buffer.size()==0) return;
    385384
     385        // set sending flag
    386386        info->sending = true;
    387         logging_debug("Sending messages ...");
    388387
    389388        // safely remove data from deque
     
    415414        // handle error
    416415        if (error) {
    417                 logging_error( "Message sent error. Error code: "<< error.message() );
     416                logging_error( "Message sent error. Error: " << error.message() );
    418417                info->sending = false;
    419418                shutdown(info);
Note: See TracChangeset for help on using the changeset viewer.