| // 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.virtualization; | 
 |  | 
 | type EnvironmentInfo = struct { | 
 |     /// A globally unique identifier for this environment. | 
 |     id uint32; | 
 |  | 
 |     /// The string provided to `Manager.Create`. | 
 |     label string; | 
 |  | 
 |     /// List of guests running in this environment. | 
 |     instances vector<InstanceInfo>; | 
 | }; | 
 |  | 
 | type InstanceInfo = struct { | 
 |     /// Context ID to use to address this guest for vsocket communications. This | 
 |     /// can also be used to uniquely identify a guest within an environment. | 
 |     cid uint32; | 
 |  | 
 |     /// The `label` string originally provided in the `LaunchInfo` structure | 
 |     /// or, if it was the null, the `url` | 
 |     label string; | 
 | }; | 
 |  | 
 | @discoverable | 
 | protocol Manager { | 
 |     /// Create a new environment in which guests can be launched. | 
 |     /// | 
 |     /// The `label` is a string that is used for diagnostic purposes, such as | 
 |     /// naming resources and dumping debug info. | 
 |     Create(resource struct { | 
 |         label string:optional; | 
 |         env server_end:Realm; | 
 |     }); | 
 |  | 
 |     /// Query for existing guest environments. | 
 |     /// | 
 |     /// This is intended for diagnostic purposes only. | 
 |     List() -> (struct { | 
 |         env_infos vector<EnvironmentInfo>; | 
 |     }); | 
 |  | 
 |     /// Connect to a currently running guest environment identified by `id`. The | 
 |     /// `id` can be found via a call to `List`. | 
 |     /// | 
 |     /// This is intended for diagnostic purposes only. | 
 |     Connect(resource struct { | 
 |         id uint32; | 
 |         env server_end:Realm; | 
 |     }); | 
 | }; |