blob: ad8b96e9433f3b2f1905eb897d653acd11e1abb1 [file] [log] [blame]
// Copyright 2022 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.lowpan.experimental;
using fuchsia.lowpan;
using zx;
/// Protocol for connecting to [`LegacyJoining`] on a LoWPAN
/// interface.
@discoverable
closed protocol LegacyJoiningConnector {
/// Connects to the [`LegacyJoining`] protocol on the
/// named LoWPAN interface.
///
/// The name of the interface can be learned by calling
/// [`fuchsia.lowpan/Lookup.GetDevices`].
///
/// If there is an error in processing this request
/// the given channel is closed and an epitaph code used
/// to describe the reason for the failure:
///
/// * `ZX_ERR_INVALID_ARGUMENT`: The given interface name
/// was not formatted correctly or otherwise invalid.
/// * `ZX_ERR_NOT_FOUND`: No interface was found with the
/// given name.
/// * `ZX_ERR_NOT_SUPPORTED`: The interface exists but
/// does not support this protocol.
strict Connect(resource struct {
name fuchsia.lowpan.InterfaceName;
server_end server_end:LegacyJoining;
});
};
/// Protocol for supporting non-standard in-band commissioning protocols.
/// Only one instance of this protocol may be valid at a time: after the
/// first request all subsequent requests for this protocol will fail until
/// the first instance is closed.
closed protocol LegacyJoining {
/// Makes the interface joinable for Thread devices that need to use a
/// non-standard in-band commissioning protocol. It is not used for
/// standard Thread commissioning.
///
/// When this call returns, the interface has been made joinable if
/// requested.
///
/// Subsequent calls to this method will override previous calls.
/// To force the interface to no longer be joinable immediately, call
/// this method with a duration of zero seconds and a port of zero (port
/// is ignored in this case).
///
/// This method must only be called when the interface is online
/// (Specifically, either attaching, attached, or isolated). If the
/// interface is in any other state, the channel will be closed with
/// `ZX_ERR_BAD_STATE`.
///
/// `duration` specifies a minimum time the interface should be made
/// joinable, relative to the time the call is received. It may be rounded
/// up to the nearest second.
///
/// `port` specifies the local port that TCP or UDP commissioning traffic
/// will be directed to.
strict MakeJoinable(struct {
duration zx.Duration;
port uint16;
}) -> ();
};