blob: 59985abc0d00eacf3e0d8c0062430278a5636876 [file] [log] [blame]
// 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;
/// 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 {
};