# map address and netmask to cidr
if ($d->{address}) {
- if ($d->{netmask} && $d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
- $d->{cidr} = $d->{address} . "/" . $d->{netmask};
- } elsif ($d->{netmask} &&
- (my $cidr = PVE::JSONSchema::get_netmask_bits($d->{netmask}))) { # e.g. netmask 255.255.255.0
- $d->{cidr} = $d->{address} . "/" . $cidr;
- } elsif ($d->{address} =~ m!^(.*)/(\d+)$!) {
- $d->{cidr} = $d->{address};
- $d->{address} = $1;
- $d->{netmask} = $2;
- } else {
- $d->{cidr} = $d->{address};
+ if ($d->{netmask}) {
+ if ($d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
+ $d->{address} = $d->{address} . "/" . $d->{netmask};
+ } elsif (my $mask = PVE::JSONSchema::get_netmask_bits($d->{netmask})) {
+ $d->{address} = $d->{address} . "/" . $mask;
+ }
}
+ # for api compatibility
+ $d->{cidr} = $d->{address};
}
# map address6 and netmask6 to cidr6
if ($d->{address6}) {
+ $d->{address6} .= "/" . $d->{netmask6} if $d->{address6} !~ m!^(.*)/(\d+)$! && $d->{netmask6};
+ # for api compatibility
$d->{cidr6} = $d->{address6};
- if ($d->{netmask6}) {
- $d->{cidr6} .= "/" . $d->{netmask6};
- } elsif ($d->{address6} =~ m!^(.*)/(\d+)$!) {
- $d->{address6} = $1;
- $d->{netmask6} = $2;
- }
}
$d->{method} = 'manual' if !$d->{method};
my $raw = '';
$raw .= "iface $iface $family " . $d->{"method$suffix"} . "\n";
- $raw .= "\taddress " . $d->{"address$suffix"} . "\n" if $d->{"address$suffix"};
- $raw .= "\tnetmask " . $d->{"netmask$suffix"} . "\n" if $d->{"netmask$suffix"};
- $raw .= "\tgateway " . $d->{"gateway$suffix"} . "\n" if $d->{"gateway$suffix"};
- $raw .= "\tbroadcast " . $d->{"broadcast$suffix"} . "\n" if $d->{"broadcast$suffix"};
+ $raw .= "\taddress " . $d->{"address$suffix"} . "\n" if $d->{"address$suffix"};
+ $raw .= "\tgateway " . $d->{"gateway$suffix"} . "\n" if $d->{"gateway$suffix"};
my $done = { type => 1, priority => 1, method => 1, active => 1, exists => 1,
comments => 1, autostart => 1, options => 1,
$done->{ovs_type} = 1;
if (my $bridge = $d->{ovs_bridge}) {
- $raw = "allow-$bridge $iface\n$raw";
+ if ($ifupdown2) {
+ $raw = "auto $iface\n$raw";
+ } else {
+ $raw = "allow-$bridge $iface\n$raw";
+ }
+
$raw .= "\tovs_bridge $bridge\n";
$done->{ovs_bridge} = 1;
}
sub write_etc_network_interfaces {
my ($filename, $fh, $config) = @_;
- my $ifupdown2 = -e '/usr/share/ifupdown2';
+ my $ifupdown2 = -e '/usr/share/ifupdown2/ifupdown2';
my $raw = __write_etc_network_interfaces($config, $ifupdown2);
PVE::Tools::safe_print($filename, $fh, encode('UTF-8', $raw));
}
$printed->{$iface} = 1;
if ($d->{autostart}) {
- if ($d->{type} eq 'OVSBridge') {
+ if ($d->{type} eq 'OVSBridge' && !$ifupdown2) {
# cannot use 'auto' for OVS, would add race with systemd ifup@.service
$raw .= "allow-ovs $iface\n";
} else {