Hash2Pub/Hash2Pub/FediChord.asn1

103 lines
2.5 KiB
Plaintext
Raw Normal View History

FediChordProtocol DEFINITIONS AUTOMATIC TAGS ::= BEGIN
NodeID ::= INTEGER (0..115792089237316195423570985008687907853269984665640564039457584007913129639935)
Domain ::= VisibleString
Action ::= ENUMERATED {queryID, join, leave, stabilise, ping}
Request ::= SEQUENCE {
action Action,
requestID INTEGER,
senderID NodeID,
parts INTEGER, -- number of message parts
part INTEGER, -- part number of this message
actionPayload CHOICE {
queryIDSendPayload QueryIDSendPayload,
joinSendPayload JoinSendPayload,
leaveSendPayload LeaveSendPayload,
2020-04-30 13:37:46 +02:00
stabiliseSendPayload StabiliseSendPayload,
pingSendPayload PingSendPayload
}
}
-- idea: different message layouts as a way of distinguishing between
-- request and response instead of explicit flag
Response ::= SEQUENCE {
responseTo INTEGER,
senderID NodeID,
parts INTEGER,
part INTEGER,
action Action,
actionPayload CHOICE {
queryIDReceivePayload QueryIDReceivePayload,
joinReceivePayload JoinReceivePayload,
leaveReceivePayload LeaveReceivePayload,
2020-04-30 13:37:46 +02:00
stabiliseReceivePayload StabiliseReceivePayload,
pingReceivePayload PingReceivePayload
}
}
NodeState ::= SEQUENCE {
nid NodeID,
domain Domain,
ipAddr OCTET STRING (SIZE(16)),
dhtPort INTEGER,
apPort INTEGER,
vServer INTEGER
}
CacheEntry ::= SEQUENCE {
node NodeState,
-- use POSIX time stamp, as DATE-TIME isn't supported by the Haskell lib
timestamp INTEGER
}
NodeCache ::= SEQUENCE OF CacheEntry
JoinSendPayload ::= NodeState
JoinReceivePayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID,
cache NodeCache
}
QueryIDSendPayload ::= SEQUENCE {
targetID NodeID,
lBestNodes INTEGER
}
QueryResult ::= ENUMERATED { found, forward }
QueryIDReceivePayload ::= SEQUENCE {
result QueryResult,
nodeData NodeCache OPTIONAL -- empty if `found`
}
StabiliseSendPayload ::= NodeState
StabiliseReceivePayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID
-- ToDo: transfer of handled key data, if newly responsible for it
}
LeaveSendPayload ::= SEQUENCE {
successors SEQUENCE OF NodeID,
predecessors SEQUENCE OF NodeID
-- ToDo: transfer of own data to newly responsible node
}
LeaveReceivePayload ::= NULL -- just a confirmation
2020-04-30 13:37:46 +02:00
PingSendPayload ::= NULL -- do not include a node/ vserver ID, so that
-- the node has to respond with all active ones
-- learning all active vserver IDs handled by the server at once
PingReceivePayload ::= SEQUENCE OF NodeState
END