[libvirt] [PATCH v2 2/5] remote: Implement the remote protocol for virDomainGetFSInfo

Tomoki Sekiyama tomoki.sekiyama at hds.com
Thu Nov 20 23:53:03 UTC 2014


On 11/20/14, 14:12 , "Eric Blake" <eblake at redhat.com> wrote:

>On 11/17/2014 04:26 PM, Tomoki Sekiyama wrote:
>> Add daemon and driver code to (de-)serialize virDomainFSInfo.
>> 
>> Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama at hds.com>
>> ---
>>  daemon/remote.c              |  117
>>++++++++++++++++++++++++++++++++++++++++++
>>  src/remote/remote_driver.c   |   92 +++++++++++++++++++++++++++++++++
>>  src/remote/remote_protocol.x |   32 +++++++++++
>>  src/remote_protocol-structs  |   21 ++++++++
>>  src/rpc/gendispatch.pl       |    1
>>  5 files changed, 262 insertions(+), 1 deletion(-)
>> 
>> diff --git a/daemon/remote.c b/daemon/remote.c
>> index 1d7082e..9b89fd0 100644
>> --- a/daemon/remote.c
>> +++ b/daemon/remote.c
>> @@ -6336,6 +6336,123 @@ remoteDispatchNodeAllocPages(virNetServerPtr
>>server ATTRIBUTE_UNUSED,
>>  }
>>  
>>  
>> +static int
>> +remoteDispatchDomainGetFSInfo(virNetServerPtr server ATTRIBUTE_UNUSED,
>> +                              virNetServerClientPtr client,
>> +                              virNetMessagePtr msg ATTRIBUTE_UNUSED,
>> +                              virNetMessageErrorPtr rerr,
>> +                              remote_domain_get_fsinfo_args *args,
>> +                              remote_domain_get_fsinfo_ret *ret)
>
>Are we sure we have to write this by hand? [1]
>
>
>> @@ -8171,6 +8262,7 @@ static virHypervisorDriver hypervisor_driver = {
>>      .connectGetDomainCapabilities =
>>remoteConnectGetDomainCapabilities, /* 1.2.7 */
>>      .connectGetAllDomainStats = remoteConnectGetAllDomainStats, /*
>>1.2.8 */
>>      .nodeAllocPages = remoteNodeAllocPages, /* 1.2.9 */
>> +    .domainGetFSInfo = remoteDomainGetFSInfo, /* 1.2.10 */
>
>1.2.10 is wrong; the next release is 1.2.11.
>
>>  };
>>  
>>  static virNetworkDriver network_driver = {
>> diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
>> index ebf4530..10c8068 100644
>> --- a/src/remote/remote_protocol.x
>> +++ b/src/remote/remote_protocol.x
>> @@ -250,6 +250,12 @@ const REMOTE_CONNECT_GET_ALL_DOMAIN_STATS_MAX =
>>4096;
>>  /* Upper limit of message size for tunable event. */
>>  const REMOTE_DOMAIN_EVENT_TUNABLE_MAX = 2048;
>>  
>> +/* Upper limit on number of mountpoints in fsinfo */
>> +const REMOTE_DOMAIN_FSINFO_MAX = 256;
>> +
>> +/* Upper limit on number of disks per mountpoint in fsinfo */
>> +const REMOTE_DOMAIN_FSINFO_DISKS_MAX = 256;
>> +
>>  /* UUID.  VIR_UUID_BUFLEN definition comes from libvirt.h */
>>  typedef opaque remote_uuid[VIR_UUID_BUFLEN];
>>  
>> @@ -3111,6 +3117,24 @@ struct remote_connect_get_all_domain_stats_args {
>>  struct remote_connect_get_all_domain_stats_ret {
>>      remote_domain_stats_record retStats<REMOTE_DOMAIN_LIST_MAX>;
>>  };
>> +
>> +struct remote_domain_fsinfo {
>> +    remote_nonnull_string mountpoint;
>> +    remote_nonnull_string name;
>> +    remote_nonnull_string type;
>> +    remote_nonnull_string dev_aliases<REMOTE_DOMAIN_FSINFO_DISKS_MAX>;
>>/* (const char **) */
>
>Can any of these values ever be NULL because the guest didn't provide
>them?  If so, you want remote_string instead of remote_nonnull_string.
>It wasn't obvious to me in the 1/5 documentation whether values are
>guaranteed to be non-NULL.

These are always filled. If guest agent doesn¹t pass these values,
the qemu driver will return an error.

>> +
>> +    /**
>> +     * @generate: none
>> +     * @acl: domain:read
>> +     */
>> +    REMOTE_PROC_DOMAIN_GET_FSINFO = 348
>
>[1] Did you try any other values of @generate to see if things get
>transferred correctly without writing it by hand?  Then again, looking
>at the structure you are transferring, it consists of mallocing an array
>of structures which themselves malloc an array of names, so I guess you
>are right that you have to manage it by hand (the generator probably
>doesn't do that).

Right, I¹ve tried code generation, but it couldn¹t handle dynamically
allocated arrays in an array...





More information about the libvir-list mailing list