On Tue, Aug 29, 2023 at 01:31:37PM +0800, Chenyi Qiang wrote:
>
>
> On 8/22/2023 4:24 PM, Daniel P. Berrangé wrote:
> > On Tue, Aug 22, 2023 at 08:52:30AM +0200, Markus Armbruster wrote:
> >> Xiaoyao Li <[email protected]> writes:
> >>
> >>> From: Isaku Yamahata <[email protected]>
> >>>
> >>> For GetQuote, delegate a request to Quote Generation Service. Add
> >>> property
> >>> of address of quote generation server and On request, connect to the
> >>> server, read request buffer from shared guest memory, send the request
> >>> buffer to the server and store the response into shared guest memory and
> >>> notify TD guest by interrupt.
> >>>
> >>> "quote-generation-service" is a property to specify Quote Generation
> >>> Service(QGS) in qemu socket address format. The examples of the supported
> >>> format are "vsock:2:1234", "unix:/run/qgs", "localhost:1234".
> >>>
> >>> command line example:
> >>> qemu-system-x86_64 \
> >>> -object 'tdx-guest,id=tdx0,quote-generation-service=localhost:1234' \
> >>> -machine confidential-guest-support=tdx0
> >>>
> >>> Signed-off-by: Isaku Yamahata <[email protected]>
> >>> Signed-off-by: Xiaoyao Li <[email protected]>
> >>> ---
> >>> qapi/qom.json | 5 +-
> >>> target/i386/kvm/tdx.c | 380 ++++++++++++++++++++++++++++++++++++++++++
> >>> target/i386/kvm/tdx.h | 7 +
> >>> 3 files changed, 391 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/qapi/qom.json b/qapi/qom.json
> >>> index 87c1d440f331..37139949d761 100644
> >>> --- a/qapi/qom.json
> >>> +++ b/qapi/qom.json
> >>> @@ -879,13 +879,16 @@
> >>> #
> >>> # @mrownerconfig: MROWNERCONFIG SHA384 hex string of 48 * 2 length
> >>> (default: 0)
> >>> #
> >>> +# @quote-generation-service: socket address for Quote Generation
> >>> Service(QGS)
> >>> +#
> >>> # Since: 8.2
> >>> ##
> >>> { 'struct': 'TdxGuestProperties',
> >>> 'data': { '*sept-ve-disable': 'bool',
> >>> '*mrconfigid': 'str',
> >>> '*mrowner': 'str',
> >>> - '*mrownerconfig': 'str' } }
> >>> + '*mrownerconfig': 'str',
> >>> + '*quote-generation-service': 'str' } }
> >>
> >> Why not type SocketAddress?
> >
> > Yes, the code uses SocketAddress internally when it eventually
> > calls qio_channel_socket_connect_async(), so we should directly
> > use SocketAddress in the QAPI from the start.
>
> Any benefit to directly use SocketAddress?
We don't want whatever code consumes the configuration to
do a second level of parsing to convert the 'str' value
into the 'SocketAddress' object it actually needs.
QEMU has a long history of having a second round of ad-hoc
parsing of configuration and we've found it to be a serious
maintenence burden. Thus we strive to have everything
represented in QAPI using the desired final type, and avoid
the second round of parsing.
> "quote-generation-service" here is optional, it seems not trivial to add
> and parse the SocketAddress type in QEMU command. After I change 'str'
> to 'SocketAddress' and specify the command like "-object
> tdx-guest,type=vsock,cid=2,port=1234...", it will report "invalid
> parameter cid".
The -object parameter supports JSON syntax for this reason
-object '{"qom-type":"tdx-guest","quote-generation-service":{"type":
"vsock", "cid":"2","port":"1234"}}'
libvirt will always use the JSON syntax for -object with a new enough
QEMU.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|