+ $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";
+ $done->{ovs_type} = 1;
+
+ $raw .= "\tovs_ports $d->{ovs_ports}\n" if $d->{ovs_ports};
+ $done->{ovs_ports} = 1;
+
+ } elsif ($d->{type} eq 'OVSPort' || $d->{type} eq 'OVSIntPort' ||
+ $d->{type} eq 'OVSBond') {
+
+ $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};
+
+ $ovs_bond_modes->{$d->{bond_mode}} ||
+ die "OVS does not support bond mode '$d->{bond_mode}\n";
+
+ 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};
+ $done->{ovs_bonds} = 1;
+ }
+
+ if ($d->{ovs_bridge}) {
+ $raw = "allow-$d->{ovs_bridge} $iface\n$raw";
+ }
+
+ $raw .= "\tovs_type $d->{type}\n";
+ $done->{ovs_type} = 1;
+
+ if ($d->{ovs_bridge}) {
+ $raw .= "\tovs_bridge $d->{ovs_bridge}\n";
+ $done->{ovs_bridge} = 1;
+ }
+ # fixme: use Data::Dumper; print Dumper($d);
+ }
+
+ # print other settings
+ foreach my $k (keys %$d) {
+ next if $done->{$k};
+ next if !$d->{$k};
+ $raw .= "\t$k $d->{$k}\n";