my $vlanprotocol = $plugin_config->{'vlan-protocol'};
my $ctag = $vnet->{tag};
my $alias = $vnet->{alias};
+ die "can't find bridge $bridge" if !-d "/sys/class/net/$bridge";
my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
- my $is_ovs = 1 if !-d "/sys/class/net/$bridge/brif";
+ my $is_ovs = !-d "/sys/class/net/$bridge/brif";
my @iface_config = ();
my $vnet_bridge_ports = "";
@iface_config = ();
push @iface_config, "ovs_type OVSIntPort";
push @iface_config, "ovs_bridge $bridge";
+ push @iface_config, "ovs_mtu $mtu" if $mtu;
push @iface_config, "ovs_options vlan_mode=dot1q-tunnel tag=$stag other_config:qinq-ethtype=$vlanprotocol";
push(@{$config->{$svlan_iface}}, @iface_config) if !$config->{$svlan_iface};
+ #redefine main ovs bridge, ifupdown2 will merge ovs_ports
+ @iface_config = ();
+ push @iface_config, "ovs_ports $svlan_iface";
+ push(@{$config->{$bridge}}, @iface_config);
#zone vlan aware bridge
@iface_config = ();
}
sub status {
- my ($class, $plugin_config, $zone, $id, $vnet, $err_config, $status, $vnet_status, $zone_status) = @_;
+ my ($class, $plugin_config, $zone, $vnetid, $vnet, $status) = @_;
my $bridge = $plugin_config->{bridge};
- $vnet_status->{$id}->{zone} = $zone;
- $zone_status->{$zone}->{status} = 'available' if !defined($zone_status->{$zone}->{status});
-
- if($err_config) {
- $vnet_status->{$id}->{status} = 'pending';
- $vnet_status->{$id}->{statusmsg} = $err_config;
- $zone_status->{$zone}->{status} = 'pending';
- } elsif ($status->{$bridge}->{status} && $status->{$bridge}->{status} eq 'pass') {
- $vnet_status->{$id}->{status} = 'available';
+ my $err_msg = [];
+
+ if (!-d "/sys/class/net/$bridge") {
+ push @$err_msg, "missing $bridge";
+ return $err_msg;
+ }
+
+ my $vlan_aware = PVE::Tools::file_read_firstline("/sys/class/net/$bridge/bridge/vlan_filtering");
+ my $is_ovs = !-d "/sys/class/net/$bridge/brif";
+
+ my $tag = $vnet->{tag};
+ my $vnet_uplink = "ln_".$vnetid;
+ my $vnet_uplinkpeer = "pr_".$vnetid;
+
+ # ifaces to check
+ my $ifaces = [ $vnetid, $bridge ];
+ if($is_ovs) {
+ my $svlan_iface = "sv_".$zone;
+ my $zonebridge = "z_$zone";
+ push @$ifaces, $svlan_iface;
+ push @$ifaces, $zonebridge;
+ } elsif ($vlan_aware) {
+ my $zonebridge = "z_$zone";
+ push @$ifaces, $zonebridge;
} else {
- $vnet_status->{$id}->{status} = 'error';
- $vnet_status->{$id}->{statusmsg} = 'missing bridge';
- $zone_status->{$zone}->{status} = 'error';
+ my $svlan_iface = "sv_$vnetid";
+ my $cvlan_iface = "cv_$vnetid";
+ push @$ifaces, $svlan_iface;
+ push @$ifaces, $cvlan_iface;
+ }
+
+ foreach my $iface (@{$ifaces}) {
+ if (!$status->{$iface}->{status}) {
+ push @$err_msg, "missing $iface";
+ } elsif ($status->{$iface}->{status} ne 'pass') {
+ push @$err_msg, "error $iface";
+ }
}
+ return $err_msg;
}
1;