chomp $line;
if ($line =~ m/^(search|domain)\s+(\S+)\s*/) {
$res->{search} = $2;
- } elsif ($line =~ m/^nameserver\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s*/) {
+ } elsif ($line =~ m/^\s*nameserver\s+($PVE::Tools::IPRE)\s*/) {
$nscount++;
if ($nscount <= 3) {
$res->{"dns$nscount"} = $1;
}
} elsif ($id eq 'bridge_fd') {
$d->{$id} = $value;
+ } elsif ($id eq 'bridge_vlan_aware') {
+ $d->{$id} = 1;
} elsif ($id eq 'bond_miimon') {
$d->{$id} = $value;
} elsif ($id eq 'bond_xmit_hash_policy') {
$ifaces->{$1}->{exists} = 0;
$d->{exists} = 0;
}
+ } elsif ($iface =~ m/^(\S+)\.\d+$/) {
+ $d->{type} = 'vlan';
+ if (defined ($ifaces->{$1})) {
+ $d->{exists} = $ifaces->{$1}->{exists};
+ } else {
+ $ifaces->{$1}->{exists} = 0;
+ $d->{exists} = 0;
+ }
} elsif ($iface =~ m/^eth\d+$/) {
if (!$d->{ovs_type}) {
$d->{type} = 'eth';
$v = defined($d->{bridge_fd}) ? $d->{bridge_fd} : 0;
$raw .= "\tbridge_fd $v\n";
$done->{bridge_fd} = 1;
+
+ if( defined($d->{bridge_vlan_aware})) {
+ $raw .= "\tbridge_vlan_aware yes\n";
+ }
+ $done->{bridge_vlan_aware} = 1;
} elsif ($d->{type} eq 'bond') {
my $n = $ifaces->{$p};
die "OVS bridge '$iface' - unable to find port '$p'\n"
if !$n;
+ $n->{autostart} = 0;
if ($n->{type} eq 'eth') {
$n->{type} = 'OVSPort';
$n->{ovs_bridge} = $iface;
}
}
+ # Remove autostart from linux bridge ports
+ foreach my $iface (keys %$ifaces) {
+ my $d = $ifaces->{$iface};
+ if ($d->{type} eq 'bridge' && $d->{bridge_ports}) {
+ foreach my $p (split (/\s+/, $d->{bridge_ports})) {
+ my $n = $ifaces->{$p};
+ die "bridge '$iface' - unable to find port '$p'\n"
+ if !$n;
+ $n->{autostart} = 0;
+ }
+ }
+ }
+
# check OVS bond ports
foreach my $iface (keys %$ifaces) {
my $d = $ifaces->{$iface};
my $lookup_type_prio = sub {
my $iface = shift;
- my $alias = 0;
- if ($iface =~ m/^(\S+):\d+$/) {
+ my $child = 0;
+ if ($iface =~ m/^(\S+)(\.|:)\d+$/) {
$iface = $1;
- $alias = 1;
+ $child = 1;
}
my $pri;
if ($iface eq 'lo') {
$pri = $if_type_hash->{loopback};
} elsif ($iface =~ m/^eth\d+$/) {
- $pri = $if_type_hash->{eth} + $alias;
+ $pri = $if_type_hash->{eth} + $child;
} elsif ($iface =~ m/^bond\d+$/) {
- $pri = $if_type_hash->{bond} + $alias;
+ $pri = $if_type_hash->{bond} + $child;
} elsif ($iface =~ m/^vmbr\d+$/) {
- $pri = $if_type_hash->{bridge} + $alias;
+ $pri = $if_type_hash->{bridge} + $child;
}
- return $pri || ($if_type_hash->{unknown} + $alias);
+ return $pri || ($if_type_hash->{unknown} + $child);
};
foreach my $iface (sort {