[Libvir] PATCH: Fix remote driver to handle network API for local non-QEMU

Richard W.M. Jones rjones at redhat.com
Wed Jul 4 08:19:07 UTC 2007


Daniel Veillard wrote:
> On Fri, Jun 29, 2007 at 03:08:47PM +0100, Daniel P. Berrange wrote:
>> On Wed, Jun 27, 2007 at 07:04:00PM +0100, Daniel P. Berrange wrote:
>>> The remote_internal.c code is basically a no-op in its remoteNetworkOpen
>>> method. This means the remote driver will only handle the networking
>>> APIs, if it is also handling the main domain APIs. This works fine if
>>> connecting to a remote URI, or if using QEMU URIs, but it does not work
>>> if using the test or Xen drivers.
>>>
>>> To make this work the remoteNetworkOpen method needs to open a connection
>>> to the remote daemon IIF the remoteOpen method did not already open one.
>>>
>>> So the attached patch adds the neccessary logic in remoteNetworkOpen. It
>>> also adds code to remoteNetworkClose to make it shutdown& free the connection
>>> IIF it was opened by the remoteNetworkOpen method. This is what the extra
>>> 'networkOnly' field in the 'struct private_data' is used to check.
>>>
>>> Second, all of the implementations of virNetwork* APIs in the remote_internal.c
>>> driver must use the  'struct private_data *' from networkPrivateData field
>>> in virConnectPtr, not the 'privateData' field. This is because the 'privateData'
>>> field is probably storing data related to the Xen or Test drivers.
>>>
>>> Third, this also fixes the qemu_driver.c which incorrectly used the 
>>> privateData field insteadof the networkPrivateData field for 2 of the
>>> networking APIs, and finally makes sure the qemu_driver.c also acccepts
>>> the use of qemu:///session APIs for root user.
>> A new version of the patch which has all of the above plus:
>>
>>  * Fixed the getType function in the qemu driver to return 'QEMU' instead
>>    of 'qemu', since the former is what we used to provide.
>>
>>  * Adds in auto-start of the libvirtd if using  qemu:///session of
>>    test://* (needed for networking) urls as non-root
>>
>>  qemu_driver.c     |    9 -
>>  remote_internal.c |  382 +++++++++++++++++++++++++++++++++++++++++++-----------
>>  2 files changed, 312 insertions(+), 79 deletions(-)
> [...]
> [...]
>> @@ -60,6 +64,7 @@ struct private_data {
>>      char *type;                 /* Cached return from remoteType. */
>>      int counter;                /* Generates serial numbers for RPC. */
>>      char *uri;                  /* Original (remote) URI. */
>> +    int networkOnly;            /* Only used for network API */
>>  };
> 
> small suggestion:
> mabye the field name could be made more generic and would be reusable
> for more flags.
> 
>> @@ -72,6 +77,16 @@ struct private_data {
>>      }                                                                   \
>>      assert (priv->magic == MAGIC)
>>  
>> +#define GET_NETWORK_PRIVATE(conn,retcode)                                       \
>> +    struct private_data *priv = (struct private_data *) (conn)->networkPrivateData; \
>> +    assert (priv);                                                      \
>> +    if (priv->magic == DEAD) {                                          \
>> +        error (conn, VIR_ERR_INVALID_ARG,                               \
>> +               "tried to use a closed or uninitialised handle");        \
>> +        return (retcode);                                               \
>> +    }                                                                   \
>> +    assert (priv->magic == MAGIC)
>> +
>>  static int call (virConnectPtr conn, struct private_data *priv, int in_open, int proc_nr, xdrproc_t args_filter, char *args, xdrproc_t ret_filter, char *ret);
> 
>   Hum .... asserts .... Can't we make a normal test/error/exit handling
> so that errors there can be chanelled the same way as any other ?

These errors indicate memory corruption - in other words, game over - 
the process must stop.

Rich.

-- 
Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom.  Registered in
England and Wales under Company Registration No. 03798903
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20070704/f7c9e49e/attachment-0001.bin>


More information about the libvir-list mailing list