// 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;

const uint64 METRIC_VERSION_TOMBSTONE = 0xffffffffffffffff;

table PeerDescription {
    1: vector<string> services;
};

struct LinkLabel {
    NodeId from;
    NodeId to;
    uint64 local_id;
    uint64 version;
};

table LinkMetrics {
    1: LinkLabel label;
    2: uint64 bw_link;
    3: uint64 bw_used;
    4: uint64 rtt;
    5: uint32 mss;
};

struct NodeLabel {
    NodeId id;
    uint64 version;
};

table NodeMetrics {
    1: NodeLabel label;
    2: PeerDescription description;
    3: uint64 forwarding_time;
};

table RoutingTableUpdate {
    1: vector<NodeMetrics> nodes;
    2: vector<LinkMetrics> links;
};
