From d2301ab125949d6ec3b5986fa9159bc112912982 Mon Sep 17 00:00:00 2001 From: Rafal Wojtczuk Date: Mon, 1 Aug 2011 15:06:01 +0200 Subject: [PATCH] qvm-prefs: allow on the fly netvm switch (#302) When changing netvm of a running vm, detach/attach eth0. Some functionality of qubes_core_netvm thus is duplicated in setup_ip. REQUIRES http://git.qubes-os.org/?p=rafal/xen.git;a=commit;h=42c72e6173586a807f8f153391e2e57352d362b1 --- common/setup_ip | 10 ++++++++++ dom0/qvm-tools/qvm-prefs | 19 ++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/common/setup_ip b/common/setup_ip index 61f197cf..79f389a7 100755 --- a/common/setup_ip +++ b/common/setup_ip @@ -10,4 +10,14 @@ if [ x$ip != x ]; then /sbin/route add default dev $INTERFACE echo "nameserver $gateway" > /etc/resolv.conf echo "nameserver $secondary_dns" >> /etc/resolv.conf + network=$(/usr/bin/xenstore-read qubes_netvm_network 2>/dev/null) + if [ "x$network" != "x" ]; then + gateway=$(/usr/bin/xenstore-read qubes_netvm_gateway) + netmask=$(/usr/bin/xenstore-read qubes_netvm_netmask) + secondary_dns=$(/usr/bin/xenstore-read qubes_netvm_secondary_dns) + echo "NS1=$gateway" > /var/run/qubes/qubes_ns + echo "NS2=$secondary_dns" >> /var/run/qubes/qubes_ns + /usr/lib/qubes/qubes_setup_dnat_to_ns + fi + fi diff --git a/dom0/qvm-tools/qvm-prefs b/dom0/qvm-tools/qvm-prefs index 51ebe251..3527ad7f 100755 --- a/dom0/qvm-tools/qvm-prefs +++ b/dom0/qvm-tools/qvm-prefs @@ -119,7 +119,24 @@ def set_netvm(vms, vm, args): vm.uses_default_netvm = False vm.netvm_vm = netvm_vm - + if not vm.is_running(): + return + if not vm.netvm_vm.is_running(): + subprocess.check_call(["qvm-start", vm.netvm_vm.name]) + subprocess.check_call(["xl", "network-detach", vm.name, "0"]) + domain_path="/local/domain/"+str(vm.get_xid()) + subprocess.check_call(["xenstore-write", + domain_path+"/qubes_ip", + vm.ip]) + subprocess.check_call(["xenstore-write", + domain_path+"/qubes_gateway", + vm.netvm_vm.gateway]) + subprocess.check_call(["xenstore-write", + domain_path+"/qubes_secondary_dns", + vm.netvm_vm.secondary_dns]) + subprocess.check_call(["xl", "network-attach", vm.name, "ip="+vm.ip, + "backend="+vm.netvm_vm.name, + "script=/etc/xen/scripts/vif-route-qubes"]) def set_updateable(vms, vm, args): if vm.is_updateable():