提交 5bd7ac02 编写于 作者: M Michal Privoznik

interface: Take interface status into account when starting and destroying

https://bugzilla.redhat.com/show_bug.cgi?id=956994

Currently, it is possible to start an interface that is already running:

 # virsh iface-start eth2
 Interface eth2 started

 # echo $?
 0

 # virsh iface-start eth2
 Interface eth2 started

 # echo $?
 0

 # virsh iface-start eth2
 Interface eth2 started

 # echo $?
 0

Same applies for destroying a dead interface. We should not allow such
state transitions.
Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
上级 50f5468c
......@@ -944,6 +944,7 @@ static int netcfInterfaceCreate(virInterfacePtr ifinfo,
struct netcf_if *iface = NULL;
virInterfaceDefPtr def = NULL;
int ret = -1;
bool active;
virCheckFlags(0, -1);
......@@ -962,6 +963,15 @@ static int netcfInterfaceCreate(virInterfacePtr ifinfo,
if (virInterfaceCreateEnsureACL(ifinfo->conn, def) < 0)
goto cleanup;
if (netcfInterfaceObjIsActive(iface, &active) < 0)
goto cleanup;
if (active) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("interface is already running"));
goto cleanup;
}
ret = ncf_if_up(iface);
if (ret < 0) {
const char *errmsg, *details;
......@@ -987,6 +997,7 @@ static int netcfInterfaceDestroy(virInterfacePtr ifinfo,
struct netcf_if *iface = NULL;
virInterfaceDefPtr def = NULL;
int ret = -1;
bool active;
virCheckFlags(0, -1);
......@@ -1005,6 +1016,15 @@ static int netcfInterfaceDestroy(virInterfacePtr ifinfo,
if (virInterfaceDestroyEnsureACL(ifinfo->conn, def) < 0)
goto cleanup;
if (netcfInterfaceObjIsActive(iface, &active) < 0)
goto cleanup;
if (!active) {
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("interface is not running"));
goto cleanup;
}
ret = ncf_if_down(iface);
if (ret < 0) {
const char *errmsg, *details;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册