// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.overnet.protocol;

// WARNING: The overnet protocol is considered frozen and should not be
// modified. Future development will likely occur in a new protocol, such as
// is proposed in RFC-0228

/// Identifies a single overnet stream between two processes on the Overnet
/// mesh.
type StreamId = struct {
    id uint64;
};

/// Address of a node on the overlay network.
type NodeId = struct {
    id uint64;
};

/// Length of a transfer key.
const TRANSFER_KEY_LENGTH uint32 = 16;

/// A transfer key is used when moving a stream endpoint from one node to
/// another. It identifies a single transfer, should be unique (so, made from
/// random bytes), and should be discarded at the end of the transfer.
alias TransferKey = array<uint8, TRANSFER_KEY_LENGTH>;
