TRACE("Renamed interface with index %d to its "
"initial name \"%s\"",
netdev->ifindex, netdev->link);
- continue;
+ goto clear_ifindices;
}
ret = netdev_deconf[netdev->type](handler, netdev);
WARN("Failed to deconfigure network device");
if (netdev->type != LXC_NET_VETH)
- continue;
+ goto clear_ifindices;
if (netdev->link[0] == '\0' || !is_ovs_bridge(netdev->link))
- continue;
+ goto clear_ifindices;
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;
+ goto clear_ifindices;
ret = lxc_delete_network_unpriv_exec(handler->lxcpath,
handler->name, netdev,
if (ret < 0) {
WARN("Failed to remove port \"%s\" from openvswitch "
"bridge \"%s\"", hostveth, netdev->link);
- continue;
+ goto clear_ifindices;
}
INFO("Removed interface \"%s\" from \"%s\"", hostveth,
netdev->link);
+
+clear_ifindices:
+ /* We need to clear any ifindeces we recorded so liblxc won't
+ * have cached stale data which would cause it to fail on reboot
+ * we're we don't re-read the on-disk config file.
+ */
+ netdev->ifindex = 0;
+ if (netdev->type == LXC_NET_PHYS) {
+ netdev->priv.phys_attr.ifindex = 0;
+ } else if (netdev->type == LXC_NET_VETH) {
+ netdev->priv.veth_attr.veth1[0] = '\0';
+ netdev->priv.veth_attr.ifindex = 0;
+ }
}
return true;
"\"%s\" to its initial name \"%s\"",
netdev->ifindex, netdev->name,
netdev->link);
- continue;
+ goto clear_ifindices;
}
ret = netdev_deconf[netdev->type](handler, netdev);
netdev->ifindex);
} else if (ret < 0) {
WARN("Failed to remove interface \"%s\" with "
- continue;
"index %d: %s",
netdev->name[0] != '\0' ? netdev->name : "(null)",
netdev->ifindex, strerror(-ret));
- continue;
+ goto clear_ifindices;
}
INFO("Removed interface \"%s\" with index %d",
netdev->name[0] != '\0' ? netdev->name : "(null)",
netdev->ifindex);
if (netdev->type != LXC_NET_VETH)
- continue;
+ goto clear_ifindices;
/* Explicitly delete host veth device to prevent lingering
* devices. We had issues in LXD around this.
else
hostveth = netdev->priv.veth_attr.veth1;
if (hostveth[0] == '\0')
- continue;
+ goto clear_ifindices;
ret = lxc_netdev_delete_by_name(hostveth);
if (ret < 0) {
WARN("Failed to remove interface \"%s\" from \"%s\": %s",
hostveth, netdev->link, strerror(-ret));
- continue;
+ goto clear_ifindices;
}
INFO("Removed interface \"%s\" from \"%s\"", hostveth, netdev->link);
if (netdev->link[0] == '\0' || !is_ovs_bridge(netdev->link)) {
netdev->priv.veth_attr.veth1[0] = '\0';
- continue;
+ netdev->ifindex = 0;
+ netdev->priv.veth_attr.ifindex = 0;
+ goto clear_ifindices;
}
/* Delete the openvswitch port. */
INFO("Removed port \"%s\" from openvswitch bridge \"%s\"",
hostveth, netdev->link);
- netdev->priv.veth_attr.veth1[0] = '\0';
+clear_ifindices:
+ /* We need to clear any ifindeces we recorded so liblxc won't
+ * have cached stale data which would cause it to fail on reboot
+ * we're we don't re-read the on-disk config file.
+ */
+ netdev->ifindex = 0;
+ if (netdev->type == LXC_NET_PHYS) {
+ netdev->priv.phys_attr.ifindex = 0;
+ } else if (netdev->type == LXC_NET_VETH) {
+ netdev->priv.veth_attr.veth1[0] = '\0';
+ netdev->priv.veth_attr.ifindex = 0;
+ }
}
return true;