pvimg: info: Use the s390-tools JSON meta data

Use the s390-tools JSON meta data for the JSON output of 'pvimg info' to
make the JSON output more stable and to provide an stable API.

Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Signed-off-by: Marc Hartmayer <marc@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Marc Hartmayer
2026-02-12 17:14:38 +01:00
committed by Jan Höppner
parent b5a750c2cc
commit 7c4b029020
5 changed files with 33 additions and 9 deletions

View File

@@ -12,7 +12,7 @@ use pv::{
};
use pvimg::{
error::{Error, OwnExitCode},
uvdata::{KeyExchangeTrait, SeH, SeHdr, UvDataTrait},
uvdata::{EnvelopeSeHdrV1, KeyExchangeTrait, SeH, SeHdr, UvDataTrait},
};
use crate::cli::{InfoArgs, OutputFormatKind, OutputFormatSpec, OutputFormatVariant};
@@ -55,12 +55,13 @@ pub fn info(opt: &InfoArgs) -> Result<OwnExitCode> {
kind: OutputFormatKind::Json,
variant,
} => {
let doc = EnvelopeSeHdrV1::new(se_hdr);
match variant {
OutputFormatVariant::Minify => {
serde_json::to_writer(&mut output, &se_hdr)?;
serde_json::to_writer(&mut output, &doc)?;
}
OutputFormatVariant::Default | OutputFormatVariant::Pretty => {
serde_json::to_writer_pretty(&mut output, &se_hdr)?
serde_json::to_writer_pretty(&mut output, &doc)?;
}
}
// Make sure the output ends with a new line

View File

@@ -37,9 +37,10 @@ pub mod misc {
pub mod uvdata {
pub use crate::pv_utils::{
AeadPlainDataTrait, BuilderTrait, ComponentMetadataV1, ControlFlagTrait, ControlFlagsTrait,
FlagData, KeyExchangeTrait, PcfV1, PlaintextControlFlagsV1, ScfV1, SeH, SeHdr, SeHdrAadV1,
SeHdrBinV1, SeHdrBuilder, SeHdrData, SeHdrDataV1, SeHdrPlain, SeHdrVersion, SeHdrVersioned,
SecretControlFlagsV1, UvDataPlainTrait, UvDataTrait, UvKeyHashesV1,
EnvelopeSeHdrV1, FlagData, KeyExchangeTrait, PcfV1, PlaintextControlFlagsV1, ScfV1, SeH,
SeHdr, SeHdrAadV1, SeHdrBinV1, SeHdrBuilder, SeHdrData, SeHdrDataV1, SeHdrPlain,
SeHdrVersion, SeHdrVersioned, SecretControlFlagsV1, UvDataPlainTrait, UvDataTrait,
UvKeyHashesV1,
};
}

View File

@@ -18,7 +18,7 @@ pub use layout::{Interval, Layout};
pub use misc::{round_up, try_copy_slice_to_array};
pub use psw::{ShortPsw, PSW, PSW_MASK_BA, PSW_MASK_EA};
pub use se_hdr::{
ComponentMetadataV1, ControlFlagTrait, ControlFlagsTrait, FlagData, PcfV1,
ComponentMetadataV1, ControlFlagTrait, ControlFlagsTrait, EnvelopeSeHdrV1, FlagData, PcfV1,
PlaintextControlFlagsV1, ScfV1, SeH, SeHdr, SeHdrAadV1, SeHdrBinV1, SeHdrBuilder, SeHdrData,
SeHdrDataV1, SeHdrPlain, SeHdrVersion, SeHdrVersioned, SecretControlFlagsV1,
};

View File

@@ -9,8 +9,8 @@ mod hdr_v1;
mod keys;
pub use brb::{
ComponentMetadata, ComponentMetadataV1, SeH, SeHdr, SeHdrBinV1, SeHdrData, SeHdrDataV1,
SeHdrPlain, SeHdrVersion, SeHdrVersioned,
ComponentMetadata, ComponentMetadataV1, EnvelopeSeHdrV1, SeH, SeHdr, SeHdrBinV1, SeHdrData,
SeHdrDataV1, SeHdrPlain, SeHdrVersion, SeHdrVersioned,
};
pub use builder::SeHdrBuilder;
pub use flags::{

View File

@@ -16,6 +16,7 @@ use pv::{
static_assert,
};
use serde::{Deserialize, Serialize};
use utils::S390ToolsMetaData;
pub use super::hdr_v1::{SeHdrBinV1, SeHdrDataV1};
use super::{PlaintextControlFlagsV1, SecretControlFlagsV1};
@@ -33,6 +34,27 @@ use crate::{
},
};
#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub struct EnvelopeSeHdrV1 {
pub meta: S390ToolsMetaData,
pub data: SeH,
}
impl EnvelopeSeHdrV1 {
/// Creates a new EnvelopeSeHdrV1 with the given data and default metadata
///
/// # Arguments
///
/// * `data` - The SE header data to wrap
pub fn new(data: SeH) -> Self {
Self {
meta: S390ToolsMetaData::new(1),
data,
}
}
}
#[repr(u32)]
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq, DekuRead, DekuWrite, Serialize, Deserialize)]