1 package PVE
::QemuServer
::Machine
;
6 use PVE
::QemuServer
::Helpers
;
7 use PVE
::QemuServer
::Monitor
;
9 sub machine_type_is_q35
{
12 return $conf->{machine
} && ($conf->{machine
} =~ m/q35/) ?
1 : 0;
15 # this only works if VM is running
16 sub get_current_qemu_machine
{
19 my $res = PVE
::QemuServer
::Monitor
::mon_cmd
($vmid, 'query-machines');
21 my ($current, $default);
22 foreach my $e (@$res) {
23 $default = $e->{name
} if $e->{'is-default'};
24 $current = $e->{name
} if $e->{'is-current'};
27 # fallback to the default machine if current is not supported by qemu
28 return $current || $default || 'pc';
32 my ($machine_type) = @_;
34 if ($machine_type && $machine_type =~ m/^((?:pc(-i440fx|-q35)?|virt)-(\d+)\.(\d+))/) {
42 my ($machine_type, $version_major, $version_minor) = @_;
44 return PVE
::QemuServer
::Helpers
::min_version
(
45 extract_version
($machine_type), $version_major, $version_minor);
48 # dies if a) VM not running or not exisiting b) Version query failed
49 # So, any defined return value is valid, any invalid state can be caught by eval
50 sub runs_at_least_qemu_version
{
51 my ($vmid, $major, $minor, $extra) = @_;
53 my $v = PVE
::QemuServer
::Monitor
::mon_cmd
($vmid, 'query-version');
54 die "could not query currently running version for VM $vmid\n" if !defined($v);
57 return version_cmp
($v->{major
}, $major, $v->{minor
}, $minor, $v->{micro
}, $extra) >= 0;
60 sub qemu_machine_pxe
{
61 my ($vmid, $conf) = @_;
63 my $machine = get_current_qemu_machine
($vmid);
65 if ($conf->{machine
} && $conf->{machine
} =~ m/\.pxe$/) {