[pve-devel] [PATCH 3/3] add qemu_netdevadd, qemu_netdevdel and add them in hotplug code

Derumier Alexandre aderumier at odiso.com
Sat Jan 28 11:02:29 CET 2012


Signed-off-by: Derumier Alexandre <aderumier at odiso.com>
---
 PVE/QemuServer.pm |   42 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 41 insertions(+), 1 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index b106f9f..4d9033a 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -2302,7 +2302,7 @@ sub vm_devices_list {
 
 sub vm_deviceplug {
     my ($storecfg, $conf, $vmid, $deviceid, $device) = @_;
-    return 1 if !check_running($vmid) || !$conf->{hotplug} || $conf->{$deviceid};
+    return 1 if !check_running($vmid) || !$conf->{hotplug};
 
     if ($deviceid =~ m/^(virtio)(\d+)$/) {
         return undef if !qemu_driveadd($storecfg, $vmid, $device);
@@ -2331,6 +2331,16 @@ sub vm_deviceplug {
         }
     }
 
+    if ($deviceid =~ m/^(net)(\d+)$/) {
+        return undef if !qemu_netdevadd($vmid, $conf, $device, $deviceid);
+        my $netdevicefull = print_netdevice_full($vmid, $conf, $device, $deviceid);
+        qemu_deviceadd($vmid, $netdevicefull);
+        if(!qemu_deviceaddverify($vmid, $deviceid)) {
+           qemu_netdevdel($vmid, $deviceid);
+           return undef;
+        }
+    }
+
     return 1;
 }
 
@@ -2356,6 +2366,12 @@ sub vm_deviceunplug {
         return undef if !qemu_drivedel($vmid, $deviceid);
     }
 
+    if ($deviceid =~ m/^(net)(\d+)$/) {
+        return undef if !qemu_netdevdel($vmid, $deviceid);
+        qemu_devicedel($vmid, $deviceid);
+        return undef if !qemu_devicedelverify($vmid, $deviceid);
+    }
+
     return 1;
 }
 
@@ -2449,6 +2465,30 @@ sub qemu_findorcreatelsi {
     return 1;
 }
 
+sub qemu_netdevadd {
+    my ($vmid, $conf, $device, $deviceid) = @_;
+
+    my $netdev = print_netdev_full($vmid, $conf, $device, $deviceid);
+    my $ret = vm_monitor_command($vmid, "netdev_add $netdev");
+    $ret =~ s/^\s+//;
+
+    #if the command succeeds, no output is sent. So any non-empty string shows an error 
+    return 1 if $ret eq "";
+    syslog("err", "adding netdev failed: $ret");
+    return undef;
+}
+
+sub qemu_netdevdel {
+    my ($vmid, $deviceid) = @_;
+
+    my $ret = vm_monitor_command($vmid, "netdev_del $deviceid");
+    $ret =~ s/^\s+//;
+    #if the command succeeds, no output is sent. So any non-empty string shows an error 
+    return 1 if $ret eq "";
+    syslog("err", "deleting netdev failed: $ret");
+    return undef;
+}
+
 sub vm_start {
     my ($storecfg, $vmid, $statefile, $skiplock) = @_;
 
-- 
1.7.2.5




More information about the pve-devel mailing list