diff --git a/src/lxc/network.c b/src/lxc/network.c index 85b25961e..1e96c3a68 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -2232,6 +2232,7 @@ static int lxc_delete_network_unpriv_exec(const char *lxcpath, char *lxcname, } if (child == 0) { + char *hostveth; int ret; close(pipefd[0]); @@ -2245,7 +2246,11 @@ static int lxc_delete_network_unpriv_exec(const char *lxcpath, char *lxcname, exit(EXIT_FAILURE); } - if (netdev->priv.veth_attr.veth1[0] == '\0') { + if (netdev->priv.veth_attr.pair[0] != '\0') + hostveth = netdev->priv.veth_attr.pair; + else + hostveth = netdev->priv.veth_attr.veth1; + if (hostveth[0] == '\0') { SYSERROR("Host side veth device name is missing"); exit(EXIT_FAILURE); } @@ -2257,10 +2262,10 @@ static int lxc_delete_network_unpriv_exec(const char *lxcpath, char *lxcname, } INFO("Execing lxc-user-nic delete %s %s %s veth %s %s", lxcpath, - lxcname, netns_path, netdev->link, netdev->priv.veth_attr.veth1); + lxcname, netns_path, netdev->link, hostveth); execlp(LXC_USERNIC_PATH, LXC_USERNIC_PATH, "delete", lxcpath, - lxcname, netns_path, "veth", netdev->link, - netdev->priv.veth_attr.veth1, (char *)NULL); + lxcname, netns_path, "veth", netdev->link, hostveth, + (char *)NULL); SYSERROR("Failed to exec lxc-user-nic."); exit(EXIT_FAILURE); } @@ -2355,14 +2360,20 @@ bool lxc_delete_network_unpriv(struct lxc_handler *handler) if (!is_ovs_bridge(netdev->link)) continue; + if (netdev->priv.veth_attr.pair[0] != '\0') + hostveth = netdev->priv.veth_attr.pair; + else + hostveth = netdev->priv.veth_attr.veth1; + if (hostveth[0] == '\0') + continue; + ret = lxc_delete_network_unpriv_exec(handler->lxcpath, handler->name, netdev, netns_path); if (ret < 0) { deleted_all = false; WARN("Failed to remove port \"%s\" from openvswitch " - "bridge \"%s\"", - netdev->priv.veth_attr.veth1, netdev->link); + "bridge \"%s\"", hostveth, netdev->link); continue; } INFO("Removed interface \"%s\" from \"%s\"", hostveth,