diff options
| author | Michael Biebl <biebl@debian.org> | 2025-11-17 17:43:34 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2025-11-17 17:43:34 +0100 |
| commit | 01609e485803fa250413385ae209660fb7b30a2e (patch) | |
| tree | 0992589c495fcaaea35f4a0452362326a4dbc3ba /src/core/devices/ovs | |
| parent | bc5f10851bffd6af1c2855635be7a28b6dba3195 (diff) | |
New upstream version 1.54.2 upstream/1.54.2
Diffstat (limited to 'src/core/devices/ovs')
| -rw-r--r-- | src/core/devices/ovs/nm-ovsdb.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/core/devices/ovs/nm-ovsdb.c b/src/core/devices/ovs/nm-ovsdb.c index 164bfd35..1c9484c4 100644 --- a/src/core/devices/ovs/nm-ovsdb.c +++ b/src/core/devices/ovs/nm-ovsdb.c @@ -1460,40 +1460,42 @@ _delete_interface(NMOvsdb *self, json_t *params, const char *ifname) json_array_append_new(new_interfaces, json_pack("[s,s]", "uuid", interface_uuid)); } - if (num_nm_interfaces == 0) { - /* The port no longer has any NM interface. Don't add it to "new_ports" and set - * ports_changed=TRUE, so that it will be deleted. */ + if (interfaces_changed && num_nm_interfaces == 0) { + /* We are deleting the last nm-interface of this port. Don't add it to "new_ports" + * and set ports_changed=TRUE, so that it will be deleted. */ ports_changed = TRUE; } else { + /* Keep this port: it's still alive, or it's unrelated to the deleted interface */ + json_array_append_new(new_ports, json_pack("[s,s]", "uuid", port_uuid)); + if (ovs_port->connection_uuid) + num_nm_ports++; + if (interfaces_changed) { - /* An interface needs to be deleted from this port */ + /* This port is still alive, but an interface needs to be deleted from it */ _expect_port_interfaces(params, ovs_port->name, interfaces); _set_port_interfaces(params, ovs_port->name, new_interfaces); } - /* The port is still alive */ - json_array_append_new(new_ports, json_pack("[s,s]", "uuid", port_uuid)); - if (ovs_port->connection_uuid) - num_nm_ports++; } } - if (num_nm_ports == 0) { - /* The bridge no longer has any NM port. Don't add it to "new_bridges" and set - * bridges_changed=TRUE, so that it will be deleted. */ + if (ports_changed && num_nm_ports == 0) { + /* We are deleting the last nm-port of this bridge. Don't add it to "new_bridges" + * and set bridges_changed=TRUE, so that it will be deleted. */ bridges_changed = TRUE; } else { + /* Keep this bridge: it's still alive, or it's unrelated to the deleted interface */ + json_array_append_new(new_bridges, json_pack("[s,s]", "uuid", ovs_bridge->bridge_uuid)); + if (ports_changed) { - /* A port needs to be deleted from this bridge */ + /* This bridge is still alive, but a port needs to be deleted from it */ _expect_bridge_ports(params, ovs_bridge->name, ports); _set_bridge_ports(params, ovs_bridge->name, new_ports); } - /* The bridge is still alive */ - json_array_append_new(new_bridges, json_pack("[s,s]", "uuid", ovs_bridge->bridge_uuid)); } } if (bridges_changed) { - /* A port needs to be deleted from this bridge */ + /* A bridge needs to be deleted */ _expect_ovs_bridges(params, priv->db_uuid, bridges); _set_ovs_bridges(params, priv->db_uuid, new_bridges); } |