Skip to content

Commit 9f5ad70

Browse files
committed
vm: update only network QDB entries on netvm change
Calling create_qdb_entries() on netvm change fires domain-qdb-create which rewrites all QubesDB entries including /keyboard-layout, resetting any custom layout set by the user in the AppVM. Add update_qdb_netvm_entries() in QubesVM that writes only the network-related QubesDB entries (IP, gateway, netmask, DNS, MAC). Use it in create_qdb_entries() to avoid code duplication, and call it from on_property_set_netvm() instead of create_qdb_entries(). Update tests to mock update_qdb_netvm_entries() instead of create_qdb_entries() where netvm changes are tested. Fixes QubesOS/qubes-issues#9892 Signed-off-by: Nancy <9d.24.nancy.sangani@gmail.com>
1 parent b0120e8 commit 9f5ad70

2 files changed

Lines changed: 25 additions & 43 deletions

File tree

qubes/tests/vm/mix/net.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def test_145_netvm_change(self):
129129
patch("qubes.vm.qubesvm.QubesVM.is_running", lambda x: True),
130130
patch("qubes.vm.mix.net.NetVMMixin.attach_network") as mock_attach,
131131
patch("qubes.vm.mix.net.NetVMMixin.detach_network") as mock_detach,
132-
patch("qubes.vm.qubesvm.QubesVM.create_qdb_entries"),
132+
patch("qubes.vm.qubesvm.QubesVM.update_qdb_netvm_entries"),
133133
):
134134

135135
with self.subTest("setting netvm to none"):
@@ -167,7 +167,7 @@ def test_146_netvm_defer(self):
167167
patch("qubes.vm.qubesvm.QubesVM.is_paused", lambda x: True),
168168
patch("qubes.vm.mix.net.NetVMMixin.attach_network") as mock_attach,
169169
patch("qubes.vm.mix.net.NetVMMixin.detach_network") as mock_detach,
170-
patch("qubes.vm.qubesvm.QubesVM.create_qdb_entries"),
170+
patch("qubes.vm.qubesvm.QubesVM.update_qdb_netvm_entries"),
171171
patch("qubes.vm.qubesvm.QubesVM.run_service_for_stdio"),
172172
):
173173

qubes/vm/qubesvm.py

Lines changed: 23 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2812,25 +2812,7 @@ def create_qdb_entries(self):
28122812
for i, addr in zip(("primary", "secondary"), self.dns):
28132813
self.untrusted_qdb.write("/qubes-netvm-{}-dns".format(i), addr)
28142814

2815-
if self.netvm is not None:
2816-
self.untrusted_qdb.write("/qubes-mac", str(self.mac))
2817-
self.untrusted_qdb.write("/qubes-ip", str(self.visible_ip))
2818-
self.untrusted_qdb.write(
2819-
"/qubes-netmask", str(self.visible_netmask)
2820-
)
2821-
self.untrusted_qdb.write(
2822-
"/qubes-gateway", str(self.visible_gateway)
2823-
)
2824-
2825-
for i, addr in zip(("primary", "secondary"), self.dns):
2826-
self.untrusted_qdb.write("/qubes-{}-dns".format(i), str(addr))
2827-
2828-
if self.visible_ip6: # pylint: disable=using-constant-test
2829-
self.untrusted_qdb.write("/qubes-ip6", str(self.visible_ip6))
2830-
if self.visible_gateway6: # pylint: disable=using-constant-test
2831-
self.untrusted_qdb.write(
2832-
"/qubes-gateway6", str(self.visible_gateway6)
2833-
)
2815+
self.update_qdb_netvm_entries()
28342816

28352817
tzname = qubes.utils.get_timezone()
28362818
if tzname and not self.features.check_with_template(
@@ -2869,33 +2851,33 @@ def update_qdb_netvm_entries(self):
28692851
self.untrusted_qdb.write("/qubes-ip", str(self.visible_ip))
28702852
self.untrusted_qdb.write(
28712853
"/qubes-netmask", str(self.visible_netmask)
2872-
)
2854+
)
28732855
self.untrusted_qdb.write(
28742856
"/qubes-gateway", str(self.visible_gateway)
2875-
)
2857+
)
28762858
for i, addr in zip(("primary", "secondary"), self.dns):
28772859
self.untrusted_qdb.write(
28782860
"/qubes-{}-dns".format(i), str(addr)
2879-
)
2880-
if self.visible_ip6:
2881-
self.untrusted_qdb.write("/qubes-ip6", str(self.visible_ip6))
2882-
if self.visible_gateway6:
2883-
self.untrusted_qdb.write(
2884-
"/qubes-gateway6", str(self.visible_gateway6)
2885-
)
2886-
else:
2887-
# netvm set to None — remove network entries
2888-
for key in (
2889-
"/qubes-mac",
2890-
"/qubes-ip",
2891-
"/qubes-netmask",
2892-
"/qubes-gateway",
2893-
"/qubes-primary-dns",
2894-
"/qubes-secondary-dns",
2895-
"/qubes-ip6",
2896-
"/qubes-gateway6",
2897-
):
2898-
self.untrusted_qdb.rm(key)
2861+
)
2862+
if self.visible_ip6:
2863+
self.untrusted_qdb.write("/qubes-ip6", str(self.visible_ip6))
2864+
if self.visible_gateway6:
2865+
self.untrusted_qdb.write(
2866+
"/qubes-gateway6", str(self.visible_gateway6)
2867+
)
2868+
else:
2869+
# netvm set to None — remove network entries
2870+
for key in (
2871+
"/qubes-mac",
2872+
"/qubes-ip",
2873+
"/qubes-netmask",
2874+
"/qubes-gateway",
2875+
"/qubes-primary-dns",
2876+
"/qubes-secondary-dns",
2877+
"/qubes-ip6",
2878+
"/qubes-gateway6",
2879+
):
2880+
self.untrusted_qdb.rm(key)
28992881

29002882
# TODO async; update this in constructor
29012883
def _update_libvirt_domain(self):

0 commit comments

Comments
 (0)