--- src/libvirt.c | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 122 insertions(+), 0 deletions(-) diff --git a/src/libvirt.c b/src/libvirt.c index c8af3e1..53b7a11 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -6421,6 +6421,128 @@ error: } /** + * virDomainInterfaceLinkSetState: + * @dom: pointer to the domain object + * @path: interface identification (MAC Address) + * @state: state of the link to be set (one of virInterfaceLinkStates) + * @flags: bitwise OR of virDomainModificationImpact + * + * This function sets a new link state for the interface. + * This function requires privileged access to the hypervisor. + * + * The path parameter is the name of the network interface. + * + * @flags may include VIR_DOMAIN_AFFECT_LIVE or VIR_DOMAIN_AFFECT_CONFIG. + * Both flags may be set. If VIR_DOMAIN_AFFECT_LIVE is set, the change + * affects a running domain and will fail if domain is not active. + * If VIR_DOMAIN_AFFECT_CONFIG is set, the change affects persistent state, + * and will fail for transient domains. + * If neither flag is specified (that is, @flags is VIR_DOMAIN_AFFECT_CURRENT), + * then an inactive domain modifies persistent setup, while an active domain is + * hypervisor-dependent on whether just live or both live and persistent state + * is changed. + * + * Returns: 0 in case of success or -1 in case of failure. + */ +int +virDomainInterfaceLinkSetState(virDomainPtr dom, const char *path, + unsigned int state, unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(dom, "path=%s, state=%u flags=%X", + path, state, flags); + + virResetLastError(); + + if (!VIR_IS_CONNECTED_DOMAIN (dom)) { + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__); + virDispatchError(NULL); + return -1; + } + if (!path || + !(state == VIR_LINK_STATE_UP || state == VIR_LINK_STATE_DOWN)) { + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__); + goto error; + } + if (dom->conn->flags & VIR_CONNECT_RO) { + virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__); + goto error; + } + + conn = dom->conn; + + if (conn->driver->domainInterfaceLinkSetState) { + if (conn->driver->domainInterfaceLinkSetState (dom, path, state, flags) == -1) + goto error; + + return 0; + } + + virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: + virDispatchError(dom->conn); + return -1; +} + +/** + * virDomainInterfaceLinkGetState: + * @dom: pointer to the domain object + * @path: interface identification (MAC Address) + * @flags: one of virDomainModificationImpact + * + * This function gets link state for the interface. Current state for a running + * domain and persistent state for a inactive domain. + * + * If @flags includes VIR_DOMAIN_AFFECT_LIVE, this will query a + * running domain (which will fail if domain is not active); + * if it includes VIR_DOMAIN_AFFECT_CONFIG, this will query + * the XML description of the domain. It is an error to set + * both flags. If neither flag is set (that is, VIR_DOMAIN_AFFECT_CURRENT), + * then the configuration queried depends on whether the domain + * is currently running. + * + * Returns: One of virInterfaceLinkStates on success or -1 in case of failure. + */ +int +virDomainInterfaceLinkGetState(virDomainPtr dom, const char *path, + unsigned int flags) +{ + virConnectPtr conn; + int ret = -1; + + VIR_DOMAIN_DEBUG(dom, "path=%s, flags=%X", + path, flags); + + virResetLastError(); + + if (!VIR_IS_CONNECTED_DOMAIN (dom)) { + virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__); + virDispatchError(NULL); + return -1; + } + if (!path) { + virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__); + goto error; + } + conn = dom->conn; + + if (conn->driver->domainInterfaceLinkGetState) { + if ((ret=conn->driver->domainInterfaceLinkGetState (dom, path, flags)) == -1) + goto error; + + return ret; + } + + virLibDomainError(VIR_ERR_NO_SUPPORT, __FUNCTION__); + +error: + virDispatchError(dom->conn); + return ret; +} + +/** * virDomainMemoryStats: * @dom: pointer to the domain object * @stats: nr_stats-sized array of stat structures (returned) -- 1.7.6 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list