]> git.proxmox.com Git - pve-common.git/blobdiff - data/PVE/INotify.pm
correctly copy bridge config
[pve-common.git] / data / PVE / INotify.pm
index 4c08fa8f9c443cb79075dc702ec915c7f9148fda..360551268efe18aaa3a229ef3cdbc348832aea64 100644 (file)
@@ -676,8 +676,9 @@ my $bond_modes = { 'balance-rr' => 0,
 
 my $ovs_bond_modes = {
     'active-backup' => 1,
-    'balance-tcp' => 1, 
     'balance-slb' => 1,
+    'lacp-balance-slb' => 1,
+    'lacp-balance-tcp' => 1, 
 };
 
 #sub get_bond_modes {
@@ -820,6 +821,8 @@ sub read_etc_network_interfaces {
                        $d->{$id} = $value;
                    } elsif ($id eq 'bond_miimon') {
                        $d->{$id} = $value;
+                   } elsif ($id eq 'bond_xmit_hash_policy') {
+                       $d->{$id} = $value;
                    } elsif ($id eq 'bond_mode') {
                        # always use names
                        foreach my $bm (keys %$bond_modes) {
@@ -861,6 +864,18 @@ sub read_etc_network_interfaces {
                $d->{type} = $d->{ovs_type};
                # translate: ovs_options => bond_mode
                $d->{'bond_mode'} = &$extract_ovs_option($d, 'bond_mode');
+               my $lacp = &$extract_ovs_option($d, 'lacp');
+               if ($lacp && $lacp eq 'active') {
+                   if ($d->{'bond_mode'} eq 'balance-slb') {
+                       $d->{'bond_mode'} = 'lacp-balance-slb';
+                   }
+               }
+               # Note: balance-tcp needs lacp
+               if ($d->{'bond_mode'} eq 'balance-tcp') {
+                   $d->{'bond_mode'} = 'lacp-balance-tcp';
+               }
+               my $tag = &$extract_ovs_option($d, 'tag');
+               $d->{ovs_tag} = $tag if defined($tag);
            } else {
                $d->{type} = 'unknown';
            }
@@ -892,6 +907,8 @@ sub read_etc_network_interfaces {
                $d->{type} = 'eth';
            } elsif ($d->{ovs_type} eq 'OVSPort') {
                $d->{type} = $d->{ovs_type};
+               my $tag = &$extract_ovs_option($d, 'tag');
+               $d->{ovs_tag} = $tag if defined($tag);
            } else {
                $d->{type} = 'unknown';
            }
@@ -902,6 +919,8 @@ sub read_etc_network_interfaces {
                $d->{type} = 'unknown';
            } elsif ($d->{ovs_type} eq 'OVSIntPort') {
                $d->{type} = $d->{ovs_type};
+               my $tag = &$extract_ovs_option($d, 'tag');
+               $d->{ovs_tag} = $tag if defined($tag);
            }
        }
 
@@ -965,6 +984,12 @@ sub __interface_to_string {
        $raw .= "\tbond_mode $v\n";
        $done->{'bond_mode'} = 1;
 
+       if ($d->{'bond_mode'} && $d->{'bond_xmit_hash_policy'} &&
+           ($d->{'bond_mode'} eq 'balance-xor' || $d->{'bond_mode'} eq '802.3ad')) {
+           $raw .= "\tbond_xmit_hash_policy $d->{'bond_xmit_hash_policy'}\n";
+       }
+       $done->{'bond_xmit_hash_policy'} = 1;
+
     } elsif ($d->{type} eq 'OVSBridge') {
 
        $raw .= "\tovs_type $d->{type}\n";
@@ -978,6 +1003,11 @@ sub __interface_to_string {
 
        $d->{autostart} = 0; # started by the bridge
 
+       if (defined($d->{ovs_tag})) {
+           &$set_ovs_option($d, tag => $d->{ovs_tag});
+       }
+       $done->{ovs_tag} = 1;
+
        if ($d->{type} eq 'OVSBond') {
 
            $d->{bond_mode} = 'active-backup' if !$d->{bond_mode};
@@ -985,7 +1015,16 @@ sub __interface_to_string {
            $ovs_bond_modes->{$d->{bond_mode}} ||
                die "OVS does not support bond mode '$d->{bond_mode}\n";
 
-           &$set_ovs_option($d, bond_mode => $d->{bond_mode});
+           if ($d->{bond_mode} eq 'lacp-balance-slb') {
+               &$set_ovs_option($d, lacp => 'active');
+               &$set_ovs_option($d, bond_mode => 'balance-slb');
+           } elsif ($d->{bond_mode} eq 'lacp-balance-tcp') {
+               &$set_ovs_option($d, lacp => 'active');
+               &$set_ovs_option($d, bond_mode => 'balance-tcp');
+           } else {
+               &$set_ovs_option($d, lacp => undef);
+               &$set_ovs_option($d, bond_mode => $d->{bond_mode});
+           }
            $done->{bond_mode} = 1;
 
            $raw .= "\tovs_bonds $d->{ovs_bonds}\n" if $d->{ovs_bonds};