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: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/interface/interface_backend_netcf.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/interface/interface_backend_netcf.c b/src/interface/interface_backend_netcf.c index 2e681ec..c525ca9 100644 --- a/src/interface/interface_backend_netcf.c +++ b/src/interface/interface_backend_netcf.c @@ -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; -- 1.8.5.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list