mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-29 17:40:46 +00:00
openvz: always generate host_mac and host_ifname
Network does not work without.
This commit is contained in:
parent
3736f16ba4
commit
c205545329
@ -445,20 +445,38 @@ sub read_global_vz_config {
|
|||||||
};
|
};
|
||||||
|
|
||||||
sub parse_netif {
|
sub parse_netif {
|
||||||
my ($data) = @_;
|
my ($data, $vmid) = @_;
|
||||||
|
|
||||||
my $res = {};
|
my $res = {};
|
||||||
return $res if !$data;
|
return $res if !$data;
|
||||||
|
|
||||||
|
my $host_ifnames = {};
|
||||||
|
|
||||||
|
my $find_next_hostif_name = sub {
|
||||||
|
for (my $i = 0; $i < 100; $i++) {
|
||||||
|
my $name = "veth${vmid}.$i";
|
||||||
|
if (!$host_ifnames->{$name}) {
|
||||||
|
$host_ifnames->{$name} = 1;
|
||||||
|
return $name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
die "unable to find free host_ifname"; # should not happen
|
||||||
|
};
|
||||||
|
|
||||||
foreach my $iface (split (/;/, $data)) {
|
foreach my $iface (split (/;/, $data)) {
|
||||||
my $d = {};
|
my $d = {};
|
||||||
foreach my $pv (split (/,/, $iface)) {
|
foreach my $pv (split (/,/, $iface)) {
|
||||||
if ($pv =~ m/^(ifname|mac|bridge|host_ifname|host_mac)=(.+)$/) {
|
if ($pv =~ m/^(ifname|mac|bridge|host_ifname|host_mac)=(.+)$/) {
|
||||||
$d->{$1} = $2;
|
$d->{$1} = $2;
|
||||||
|
if ($1 eq 'host_ifname') {
|
||||||
|
$host_ifnames->{$2} = $1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($d->{ifname}) {
|
if ($d->{ifname}) {
|
||||||
$d->{mac} = PVE::Tools::random_ether_addr() if !$d->{mac};
|
$d->{mac} = PVE::Tools::random_ether_addr() if !$d->{mac};
|
||||||
|
$d->{host_mac} = PVE::Tools::random_ether_addr() if !$d->{host_mac};
|
||||||
$d->{raw} = print_netif($d);
|
$d->{raw} = print_netif($d);
|
||||||
$res->{$d->{ifname}} = $d;
|
$res->{$d->{ifname}} = $d;
|
||||||
} else {
|
} else {
|
||||||
@ -466,6 +484,13 @@ sub parse_netif {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach my $iface (keys %$res) {
|
||||||
|
my $d = $res->{$iface};
|
||||||
|
if ($vmid && !$d->{host_ifname}) {
|
||||||
|
$d->{host_ifname} = &$find_next_hostif_name($iface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -817,7 +842,7 @@ sub create_config_line {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub update_ovz_config {
|
sub update_ovz_config {
|
||||||
my ($veconf, $param) = @_;
|
my ($vmid, $veconf, $param) = @_;
|
||||||
|
|
||||||
my $changes = [];
|
my $changes = [];
|
||||||
|
|
||||||
@ -993,9 +1018,9 @@ sub update_ovz_config {
|
|||||||
if (defined($param->{netif})) {
|
if (defined($param->{netif})) {
|
||||||
my $ifaces = {};
|
my $ifaces = {};
|
||||||
if (defined ($veconf->{netif}) && $veconf->{netif}->{value}) {
|
if (defined ($veconf->{netif}) && $veconf->{netif}->{value}) {
|
||||||
$ifaces = parse_netif($veconf->{netif}->{value});
|
$ifaces = parse_netif($veconf->{netif}->{value}, $vmid);
|
||||||
}
|
}
|
||||||
my $newif = parse_netif($param->{netif});
|
my $newif = parse_netif($param->{netif}, $vmid);
|
||||||
|
|
||||||
foreach my $ifname (sort keys %$ifaces) {
|
foreach my $ifname (sort keys %$ifaces) {
|
||||||
if (!$newif->{$ifname}) {
|
if (!$newif->{$ifname}) {
|
||||||
|
Loading…
Reference in New Issue
Block a user