foreach my $iface (keys %$ifaces) {
my $d = $ifaces->{$iface};
+ $d->{type} = 'unknown';
if ($iface =~ m/^bond\d+$/) {
if (!$d->{ovs_type}) {
$d->{type} = 'bond';
}
my $tag = &$extract_ovs_option($d, 'tag');
$d->{ovs_tag} = $tag if defined($tag);
- } else {
- $d->{type} = 'unknown';
}
} elsif ($iface =~ m/^vmbr\d+$/) {
if (!$d->{ovs_type}) {
}
} elsif ($d->{ovs_type} eq 'OVSBridge') {
$d->{type} = $d->{ovs_type};
- } else {
- $d->{type} = 'unknown';
}
} elsif ($iface =~ m/^(\S+):\d+$/) {
$d->{type} = 'alias';
$d->{type} = $d->{ovs_type};
my $tag = &$extract_ovs_option($d, 'tag');
$d->{ovs_tag} = $tag if defined($tag);
- } else {
- $d->{type} = 'unknown';
}
} elsif ($iface =~ m/^lo$/) {
$d->{type} = 'loopback';
} else {
if ($d->{'vxlan-id'}) {
$d->{type} = 'vxlan';
- } elsif (!$d->{ovs_type}) {
- $d->{type} = 'unknown';
} elsif ($d->{ovs_type} eq 'OVSIntPort') {
$d->{type} = $d->{ovs_type};
my $tag = &$extract_ovs_option($d, 'tag');
# map address and netmask to cidr
if ($d->{address}) {
- if ($d->{netmask} && $d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
- $d->{address} = $d->{address} . "/" . $d->{netmask};
- } elsif ($d->{netmask} &&
- (my $cidr = PVE::JSONSchema::get_netmask_bits($d->{netmask}))) { # e.g. netmask 255.255.255.0
- $d->{address} = $d->{address} . "/" . $cidr;
+ 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}
+ # 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}
+ # for api compatibility
+ $d->{cidr6} = $d->{address6};
}
$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 .= "\tgateway " . $d->{"gateway$suffix"} . "\n" if $d->{"gateway$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 {