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
This commit is contained in:
Rafal Wojtczuk 2011-08-01 15:06:01 +02:00
parent f264b76a61
commit d2301ab125
2 changed files with 28 additions and 1 deletions

View File

@ -10,4 +10,14 @@ if [ x$ip != x ]; then
/sbin/route add default dev $INTERFACE /sbin/route add default dev $INTERFACE
echo "nameserver $gateway" > /etc/resolv.conf echo "nameserver $gateway" > /etc/resolv.conf
echo "nameserver $secondary_dns" >> /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 fi

View File

@ -119,7 +119,24 @@ def set_netvm(vms, vm, args):
vm.uses_default_netvm = False vm.uses_default_netvm = False
vm.netvm_vm = netvm_vm 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): def set_updateable(vms, vm, args):
if vm.is_updateable(): if vm.is_updateable():