>-----Original Message-----
>From: Daniel P. Berrangé <berra...@redhat.com>
>Subject: Re: [PATCH rfcv4 08/13] Add Intel TDX Quote Generation Service(QGS)
>support
>
>On Fri, May 24, 2024 at 02:21:23PM +0800, Zhenzhong Duan wrote:
>> Add element "quoteGenerationService" to tdx launch security type.
>> Currently it contains only one sub-element "SocketAddress".
>>
>> "SocketAddress" is modelized according to QEMU QAPI, supporting
>> inet, unix, vsock and fd type and variant attributes depending
>> on type.
>>
>> XML example:
>>
>>   <launchSecurity type='tdx'>
>>     <policy>0x0</policy>
>>     <mrConfigId>xxx</mrConfigId>
>>     <mrOwner>xxx</mrOwner>
>>     <mrOwnerConfig>xxx</mrOwnerConfig>
>>     <quoteGenerationService>
>>       <SocketAddress type='vsock' cid='xxx' port='xxx'/>
>>     </quoteGenerationService>
>>   </launchSecurity>
>>
>> QEMU command line example:
>>   qemu-system-x86_64 \
>>     -object '{"qom-type":"tdx-guest","id":"lsec0","sept-ve-
>disable":false,"mrconfigid":"xxx","mrowner":"xxx","mrownerconfig":"xxx","quot
>e-generation-socket":{"type":"vsock","cid":"xxx","port":"xxx"}}' \
>>     -machine pc-q35-6.0,confidential-guest-support=lsec0
>>
>> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com>
>> ---
>>  src/conf/domain_conf.c            | 272 +++++++++++++++++++++++++++++-
>>  src/conf/domain_conf.h            |  61 +++++++
>>  src/conf/schemas/domaincommon.rng | 106 ++++++++++++
>>  src/qemu/qemu_command.c           | 106 ++++++++++++
>>  4 files changed, 544 insertions(+), 1 deletion(-)
>
>> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
>> index bb4973fce8..15cdb3e0e6 100644
>> --- a/src/conf/domain_conf.h
>> +++ b/src/conf/domain_conf.h
>> @@ -2852,6 +2852,55 @@ struct _virDomainKeyWrapDef {
>>      virTristateSwitch dea;
>>  };
>>
>> +typedef enum {
>> +    VIR_DOMAIN_SOCKET_ADDRESS_NONE,
>> +    VIR_DOMAIN_SOCKET_ADDRESS_INET,
>> +    VIR_DOMAIN_SOCKET_ADDRESS_UNIX,
>> +    VIR_DOMAIN_SOCKET_ADDRESS_VSOCK,
>> +    VIR_DOMAIN_SOCKET_ADDRESS_FD,
>> +
>> +    VIR_DOMAIN_SOCKET_ADDRESS_LAST
>> +} virDomainSocketAddress;
>> +
>> +typedef struct _InetSocketAddress InetSocketAddress;
>> +typedef struct _UnixSocketAddress UnixSocketAddress;
>> +typedef struct _VsockSocketAddress VsockSocketAddress;
>> +typedef struct _FdSocketAddress FdSocketAddress;
>> +
>> +struct _InetSocketAddress {
>> +    char *host;
>> +    char *port;
>> +    bool has_numeric;
>> +    virTristateBool numeric;
>> +    bool has_to;
>> +    unsigned int to;
>> +    bool has_ipv4;
>> +    virTristateBool ipv4;
>> +    bool has_ipv6;
>> +    virTristateBool ipv6;
>> +    bool has_keep_alive;
>> +    virTristateBool keep_alive;
>> +    bool has_mptcp;
>> +    virTristateBool mptcp;
>> +};
>> +
>> +struct _UnixSocketAddress {
>> +    char *path;
>> +    bool has_abstract;
>> +    virTristateBool abstract;
>> +    bool has_tight;
>> +    virTristateBool tight;
>> +};
>> +
>> +struct _VsockSocketAddress {
>> +    char *cid;
>> +    char *port;
>> +};
>> +
>> +struct _FdSocketAddress {
>> +    char *str;
>> +};
>> +
>>  typedef enum {
>>      VIR_DOMAIN_LAUNCH_SECURITY_NONE,
>>      VIR_DOMAIN_LAUNCH_SECURITY_SEV,
>> @@ -2873,11 +2922,22 @@ struct _virDomainSEVDef {
>>      virTristateBool kernel_hashes;
>>  };
>>
>> +typedef struct SocketAddress {
>> +    virDomainSocketAddress type;
>> +    union {
>> +        InetSocketAddress inet;
>> +        UnixSocketAddress Unix;
>> +        VsockSocketAddress vsock;
>> +        FdSocketAddress fd;
>
>The 'fd' socket type does not make sense to expose
>in libvirt XML. FD passing is something handled
>privately between libvirt & QEMU, not a end user
>choice.

Yes, I can remove ' FdSocketAddress fd'.

>
>Going further I don't think InetSocketAddress
>makes sense to expose, as QGS has no ability
>to listen on IP sockets. It can only do UNIX
>sockets or VSock AFAICT.

Why can't qemu connect to QGS on a remote host?
Even if connect to QGS on localhost, 127.0.0.1 can be used.

> Even vsock looks like
>a remnant of the old way of doing attestation
>before it was integrated into Linux via sysfs
>with the kernel making a call into QEMU.

Not get, qemu does support vsock, see 
https://lore.kernel.org/qemu-devel/20240229063726.610065-50-xiaoyao...@intel.com/

>
>IOW, AFAICT, for QGS all we actually need is
>the ability to set a UNIX socket path in libvirt.
>eg
>
>     <quoteGenerationService path="/var/run/tdx-qgs/qgs.socket"/>

Hmm, then we go back to opaque string, do you change your mind?
See 
https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/message/XCE4F4FCRFIP7IVZCFPB6RDWLEWXXT2G/

>
>and probably libvirt should allow 'path' to be optional
>so an app can just do
>
>     <quoteGenerationService/>
>
>and libvirt would fill in the default path which QGS listens
>on out of the box....

Yes if we have such default QGS path, do we?

Thanks
Zhenzhong

Reply via email to