On 2011年12月28日 17:56, Hu Tao wrote: > * src/libvirt.c: implement the main entry points > --- > src/libvirt.c | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 129 insertions(+), 0 deletions(-) > > diff --git a/src/libvirt.c b/src/libvirt.c > index 574be16..9ff4602 100644 > --- a/src/libvirt.c > +++ b/src/libvirt.c > @@ -7075,6 +7075,135 @@ error: > return -1; > } > > + /** > + * virDomainSetInterfaceParameters: > + * @domain: pointer to domain object > + * @device: the interface name or mac address > + * @params: pointer to interface parameter objects > + * @nparams: number of interface parameter (this value can be the same or > + * less than the number of parameters supported) > + * @flags: bitwise-OR of virDomainModificationImpact > + * > + * Currently this function sets bandwidth parameters of interface. > + * This function may require privileged access to the hypervisor. > + * > + * Returns -1 in case of error, 0 in case of success. > + */ > +int > +virDomainSetInterfaceParameters(virDomainPtr domain, > + const char *device, > + virTypedParameterPtr params, > + int nparams, unsigned int flags) > +{ > + virConnectPtr conn; > + > + VIR_DOMAIN_DEBUG(domain, "device=%s, params=%p, nparams=%d, flags=%x", > + device, params, nparams, flags); > + > + virResetLastError(); > + > + if (!VIR_IS_CONNECTED_DOMAIN(domain)) { > + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__); > + virDispatchError(NULL); > + return -1; > + } > + if (domain->conn->flags& VIR_CONNECT_RO) { > + virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__); > + goto error; > + } > + if ((nparams<= 0) || (params == NULL)) { > + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__); > + goto error; > + } > + if (virTypedParameterValidateSet(domain, params, nparams)< 0) > + return -1; > + > + conn = domain->conn; > + > + if (conn->driver->domainSetInterfaceParameters) { > + int ret; > + ret = conn->driver->domainSetInterfaceParameters(domain, device, params, nparams, flags); > + if (ret< 0) > + goto error; > + return ret; > + } > + > + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__); > + > +error: > + virDispatchError(domain->conn); > + return -1; > +} > + > + /** > + * virDomainGetInterfaceParameters: > + * @domain: pointer to domain object > + * @device: the interface name or mac address > + * @params: pointer to interface parameter objects > + * (return value, allocated by the caller) > + * @nparams: pointer to number of interface parameter > + * @flags: one of virDomainModificationImpact > + * > + * Get all interface parameters. On input, @nparams gives the size of > + * the @params array; on output, @nparams gives how many slots were > + * filled with parameter information, which might be less but will not > + * exceed the input value. > + * > + * As a special case, calling with @params as NULL and @nparams as 0 on > + * input will cause @nparams on output to contain the number of parameters > + * supported by the hypervisor. The caller should then allocate @params > + * array, i.e. (sizeof(@virTypedParameter) * @nparams) bytes and call the > + * API again. > + * Add: * See virDomainGetMemoryParameters() for an equivalent usage example. It's useful for a user who wants to use the API to see that example. > + * This function may require privileged access to the hypervisor. This function > + * expects the caller to allocate the @params. > + * > + * Returns -1 in case of error, 0 in case of success. > + */ > + > +int > +virDomainGetInterfaceParameters(virDomainPtr domain, > + const char *device, > + virTypedParameterPtr params, > + int *nparams, unsigned int flags) > +{ > + virConnectPtr conn; > + > + VIR_DOMAIN_DEBUG(domain, "device=%s, params=%p, nparams=%d, flags=%x", > + device, params, (nparams) ? *nparams : -1, flags); > + > + virResetLastError(); > + > + if (!VIR_IS_CONNECTED_DOMAIN(domain)) { > + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__); > + virDispatchError(NULL); > + return -1; > + } > + if ((nparams == NULL) || (*nparams< 0) || > + (params == NULL&& *nparams != 0)) { > + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__); > + goto error; > + } > + if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn, > + VIR_DRV_FEATURE_TYPED_PARAM_STRING)) > + flags |= VIR_TYPED_PARAM_STRING_OKAY; > + > + conn = domain->conn; > + > + if (conn->driver->domainGetInterfaceParameters) { > + int ret; > + ret = conn->driver->domainGetInterfaceParameters (domain, device, params, nparams, flags); > + if (ret< 0) > + goto error; > + return ret; > + } > + virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__); > + > +error: > + virDispatchError(domain->conn); > + return -1; > +} > + > /** > * virDomainMemoryStats: > * @dom: pointer to the domain object ACK with the comments added. Regards, Osier -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list