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

using fuchsia.net;

/// Control frame sent over a link.
union LinkControlFrame {
    1: uint64 ack;
    2: LinkControlMessage message;
};

/// Control message sent over a link.
struct LinkControlMessage {
    uint64 seq;
    LinkControlPayload payload;
};

/// Control message payload.
union LinkControlPayload {
    /// Initial message.
    1: LinkIntroduction introduction;
    /// Configure some routes.
    /// Since the complete routing table might be longer than can fit in one frame, it may take
    /// multiple set_route messages to update a routing table. is_end will be set on the last frame
    /// of a given update round to signify that the update is done.
    2: SetRoute set_route;
};

/// Partial send of new routes.
struct SetRoute {
    /// Is this the last SetRoute frame in an update?
    bool is_end;
    /// Routes to add to the route map being sent.
    vector<Route>:MAX routes;
};

/// Update route visibility via a node.
struct Route {
    /// Target node id that can be routed to via this peer.
    NodeId destination;
    /// Metrics associated with this route.
    RouteMetrics route_metrics;
};

/// Metrics that may be used to determine the optimimum route for a packet.
table RouteMetrics {
    /// Intermediate proposed path to the destination (used for loop prevention).
    1: vector<NodeId>:MAX intermediate_hops;
    /// Round trip time to the destination and back (in microseconds).
    2: uint64 round_trip_time_us;
};

/// Introduction data for a link - basic configuration stuff will go here.
table LinkIntroduction {
    /// For IP based link protocols: the address of the receiver of this introduction, as observed
    /// by the sender.
    1: fuchsia.net.SocketAddress you_are;
};
