diff --git a/proto/bootz.proto b/proto/bootz.proto index 1d243c31..595f5cc4 100644 --- a/proto/bootz.proto +++ b/proto/bootz.proto @@ -304,10 +304,40 @@ message BootConfig { // Proprietary key-value parameters that are required as part of boot // configuration (e.g., feature flags, or vendor-specific hardware knobs). google.protobuf.Struct metadata = 1; + + // Fields to store the configuration that is expected of a device at boot + // time. In all cases, the configuration used on the system is computed based + // on the union of vendor_config + oc_config + dynamic_vendor_config + + // dynamic_oc_config. The union should be performed according to the same + // rules as `union_replace` in gNMI. + // + // Note, the dynamic_* fields MUST only be considered in the context of a + // `BootstrapDataResponse` and are NOT valid when a `BootConfig` is updated + // after device bootstrapping/initialisation -- for example, through + // `gnoi.bootconfig.SetBootConfig`. In the case that these fields are + // populated in the `SetBootConfig` RPC, an error with the code + // `InvalidArgument` MUST be returned. + // + // vendor_config and oc_config specify boot configuration that is considered + // immutable per the specification described in github.com/openconfig/bootz. + // // Native format vendor configuration. bytes vendor_config = 2; // JSON rendered OC configuration. bytes oc_config = 3; + + // dynamic_vendor_config and dynamic_oc_config specify boot configuration + // that is required at boot time, but can be overwritten by dynamic + // configuration such as that applied by a gnmi.Set RPC call. + // + // As per the above comment dynamic_vendor_config and dynamic_oc_config + // are ONLY valid in the context of `BootstrapDataResponse`. + // + // Native format vendor configuration. + bytes dynamic_vendor_config = 5; + // JSON rendered OC configuration. + bytes dynamic_oc_config = 6; + // Bootloader key-value parameters that are required as part of boot // configuration. google.protobuf.Struct bootloader_config = 4;