Msg File src/overlay/pastry/PastryMessage.msg

Name Description
PastryMsgType (enum) (no description)
PastryStateMsgType (enum) (no description)
PastryMessage (packet)

Base message for all messages used by Pastry

PastryJoinMessage (packet)

Message used to join a pastry overlay

PastryStateMessage (packet)

Message used to send a PastryState

PastryFindNodeExtData (packet)

Message used to find a Pastry node

PastryNewLeafsMessage (packet)

Message used to inform about new PastryLeafs

PastrySendState (packet) (no description)
PastryLeafsetMessage (packet) (no description)
PastryRoutingRowRequestMessage (packet) (no description)
PastryRoutingRowMessage (packet) (no description)
PastryRequestMessage (packet)

Message used to request PastryState or a Leafset

Source code:

//
// Copyright (C) 2006 Institut fuer Telematik, Universitaet Karlsruhe (TH)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//

//
// @author Felix Palmen
//

cplusplus {{
#include <IPvXAddress.h>
#include <NodeHandle.h>
#include <OverlayKey.h>
#include <CommonMessages_m.h>

// constants for message length in bit
static const int PASTRYTYPE_L = 8;
static const int PASTRYSTATETYPE_L = 8;
static const int PASTRYREQUESTTYPE_L = 0;
static const int LASTHOPFLAG_L = 8;
static const int TIMESTAMP_L = 32;
static const int PASTRYFINDNODEEXTDATA_L = NODEHANDLE_L + HOPCOUNT_L;

#define PASTRY_L(msg) (BASEOVERLAY_L(msg) + PASTRYTYPE_L)
#define PASTRYJOIN_L(msg) (PASTRY_L(msg) + TRANSPORTADDRESS_L + HOPCOUNT_L)
#define PASTRYREQ_L(msg) (PASTRY_L(msg) + TRANSPORTADDRESS_L + PASTRYREQUESTTYPE_L)
#define PASTRYSTATE_L(msg) (PASTRY_L(msg) + TRANSPORTADDRESS_L \
        + NODEHANDLE_L * \
        (msg->getRoutingTableArraySize() + msg->getLeafSetArraySize() \
        + msg->getNeighborhoodSetArraySize()) + ARRAYSIZE_L + HOPCOUNT_L + \
        LASTHOPFLAG_L + TIMESTAMP_L)
#define PASTRYNEWLEAFS_L(msg) (msg->getLeafsArraySize() * NODEHANDLE_L + \
        ARRAYSIZE_L)
#define PASTRYLEAFSET_L(msg) (PASTRY_L(msg) + TRANSPORTADDRESS_L \
        + NODEHANDLE_L * msg->getLeafSetArraySize() + ARRAYSIZE_L)
#define PASTRYRTREQ_L(msg) (PASTRY_L(msg) + TRANSPORTADDRESS_L)
#define PASTRYRTABLE_L(msg) (PASTRY_L(msg) + TRANSPORTADDRESS_L \
        + NODEHANDLE_L * msg->getRoutingTableArraySize() + ARRAYSIZE_L)
}}


class noncobject IPvXAddress;
class noncobject TransportAddress;
class noncobject NodeHandle;
class noncobject OverlayKey;

class BaseOverlayMessage;
class BaseCallMessage;
class BaseResponseMessage;
class BaseAppDataMessage;


enum PastryMsgType
{
    PASTRY_MSG_STD = 0;
    PASTRY_MSG_JOIN = 1;
    PASTRY_MSG_STATE = 2;
    PASTRY_MSG_REQ = 3;
    PASTRY_MSG_LEAFSET = 4;	
    PASTRY_MSG_ROWREQ = 5;
    PASTRY_MSG_RROW = 6;
    PASTRY_MSG_LEAFSET_PULL = 7;
    PASTRY_REQ_REPAIR = 8;
    PASTRY_REQ_STATE = 9;
    PASTRY_REQ_LEAFSET = 10;
}

enum PastryStateMsgType
{
    PASTRY_STATE_STD = 0;
    PASTRY_STATE_JOIN = 1;
    PASTRY_STATE_MINJOIN = 2;
    PASTRY_STATE_UPDATE = 3;
    PASTRY_STATE_REPAIR = 4;
    PASTRY_STATE_JOINUPDATE = 5;
}


//
// Base message for all messages used by Pastry
//
packet PastryMessage extends BaseOverlayMessage
{
        int pastryMsgType = PASTRY_MSG_STD;    // the PastryMsgType
}

//
// Message used to join a pastry overlay
//
packet PastryJoinMessage extends PastryMessage
{
        TransportAddress sendStateTo = TransportAddress::UNSPECIFIED_NODE;    // TransportAddress of the node that wants to join
}


//
// Message used to send a PastryState
//
packet PastryStateMessage extends PastryMessage
{
        int pastryStateMsgType = PASTRY_STATE_STD;    // the type of the PastryStateMessage
        NodeHandle sender = NodeHandle::UNSPECIFIED_NODE;    // NodeHandle of the node sending this message
        NodeHandle routingTable[];    // the routingTable of the sender
        NodeHandle leafSet[];    // the leafSet of the sender
        NodeHandle neighborhoodSet[];    // the neighborhoodSet of the sender
        int joinHopCount = 0;    // counts the hops this message takes
        bool lastHop = false;    // is this node the destination node?
        simtime_t timestamp;    // simTime when sending this message
}

//
// Message used to find a Pastry node
//
packet PastryFindNodeExtData
{
        TransportAddress sendStateTo = TransportAddress::UNSPECIFIED_NODE;    // the sender of this message
        int joinHopCount = 0;    // counts the hops this message takes
}

//
// Message used to inform about new PastryLeafs
//
packet PastryNewLeafsMessage
{
        NodeHandle leafs[];    // the new PastryLeafs
}


packet PastrySendState
{
        TransportAddress dest = TransportAddress::UNSPECIFIED_NODE;
}

packet PastryLeafsetMessage extends PastryMessage
{
        NodeHandle sender = NodeHandle::UNSPECIFIED_NODE;
        TransportAddress sendStateTo = TransportAddress::UNSPECIFIED_NODE;
        NodeHandle leafSet[];
        simtime_t timestamp = 0;
}

packet PastryRoutingRowRequestMessage extends PastryMessage
{
        TransportAddress sendStateTo = TransportAddress::UNSPECIFIED_NODE;
        int row;

}
packet PastryRoutingRowMessage extends PastryMessage
{
        NodeHandle sender = NodeHandle::UNSPECIFIED_NODE;
        NodeHandle routingTable[];
        int row;
        simtime_t timestamp = 0;
}

//
// Message used to request PastryState or a Leafset
//
packet PastryRequestMessage extends PastryMessage
{
        TransportAddress sendStateTo = TransportAddress::UNSPECIFIED_NODE;    // TransportAddress of the node that requests the state
        int pastryReqType = PASTRY_MSG_STD;    // the PastryMsgType
}