]> git.proxmox.com Git - pve-network.git/blobdiff - PVE/Network/SDN/FaucetPlugin.pm
rename plugins with controllers
[pve-network.git] / PVE / Network / SDN / FaucetPlugin.pm
index fe75efba8cf0a68d34b7b5ddbc2f931e1613128c..9422ee70415466faf6ef57195464dbcbb28a1f5b 100644 (file)
@@ -2,14 +2,9 @@ package PVE::Network::SDN::FaucetPlugin;
 
 use strict;
 use warnings;
-use PVE::Network::SDN::Plugin;
-use PVE::Tools;
-use PVE::INotify;
-use PVE::JSONSchema qw(get_standard_option);
-use CPAN::Meta::YAML;
-use Encode;
+use PVE::Network::SDN::VlanPlugin;
 
-use base('PVE::Network::SDN::Plugin');
+use base('PVE::Network::SDN::VlanPlugin');
 
 sub type {
     return 'faucet';
@@ -17,97 +12,65 @@ sub type {
 
 sub plugindata {
     return {
-        role => 'controller',
+       role => 'transport',
     };
 }
 
 sub properties {
     return {
+        'dp-id' => {
+            type => 'integer',
+            description => 'Faucet dataplane id',
+        },
     };
 }
 
-# Plugin implementation
-sub generate_controller_config {
-    my ($class, $plugin_config, $router, $id, $uplinks, $config) = @_;
+sub options {
 
+    return {
+       'dp-id' => { optional => 0 },
+       'uplink-id' => { optional => 0 },
+        'controller' => { optional => 0 },
+        'vlan-allowed' => { optional => 1 },
+    };
 }
 
-sub generate_controller_transport_config {
-    my ($class, $plugin_config, $router, $id, $uplinks, $config) = @_;
+# Plugin implementation
+sub generate_sdn_config {
+    my ($class, $plugin_config, $zoneid, $vnetid, $vnet, $uplinks, $config) = @_;
 
+    my $mtu = $vnet->{mtu};
+    my $uplink = $plugin_config->{'uplink-id'};
     my $dpid = $plugin_config->{'dp-id'};
-    my $dphex = printf("%x",$dpid);
-
-    my $transport_config = {
-                               dp_id => $dphex,
-                               hardware => "Open vSwitch",
-                          };
-
-    $config->{faucet}->{dps}->{$id} = $transport_config;
-
-}
-
-
-sub generate_controller_vnet_config {
-    my ($class, $plugin_config, $controller, $transportid, $vnetid, $config) = @_;
-
-    my $mac = $plugin_config->{mac};
-    my $ipv4 = $plugin_config->{ipv4};
-    my $ipv6 = $plugin_config->{ipv6};
-    my $tag = $plugin_config->{tag};
-    my $alias = $plugin_config->{alias};
+    my $dphex = printf("%x",$dpid);  #fixme :should be 16characters hex
 
-    my @ips = ();
-    push @ips, $ipv4 if $ipv4;
-    push @ips, $ipv6 if $ipv6;
+    my $iface = $uplinks->{$uplink}->{name};
+    $iface = "uplink${uplink}" if !$iface;
 
-    my $vlan_config = { vid => $tag };
+    #tagged interface
+    my @iface_config = ();
+    push @iface_config, "ovs_type OVSPort";
+    push @iface_config, "ovs_bridge $zoneid";
+    push @iface_config, "ovs_mtu $mtu" if $mtu;
+    push(@{$config->{$iface}}, @iface_config) if !$config->{$iface};
 
-    $vlan_config->{description} = $alias if $alias;
-    $vlan_config->{faucet_mac} = $mac if $mac;
-    $vlan_config->{faucet_vips} = \@ips if scalar @ips > 0;
+    #vnet bridge
+    @iface_config = ();
+    push @iface_config, "ovs_port $iface";
+    push @iface_config, "ovs_type OVSBridge";
+    push @iface_config, "ovs_mtu $mtu" if $mtu;
 
-    $config->{faucet}->{vlans}->{$vnetid} = $vlan_config;
-
-    push(@{$config->{faucet}->{routers}->{$transportid}->{vlans}} , $vnetid);
-
-}
+    push @iface_config, "ovs_extra set bridge $zoneid other-config:datapath-id=$dphex";
+    push @iface_config, "ovs_extra set bridge $zoneid other-config:disable-in-band=true";
+    push @iface_config, "ovs_extra set bridge $zoneid fail_mode=secure";
+    push @iface_config, "ovs_extra set-controller $vnetid tcp:127.0.0.1:6653";
 
-sub on_delete_hook {
-    my ($class, $routerid, $sdn_cfg) = @_;
+    push(@{$config->{$zoneid}}, @iface_config) if !$config->{$zoneid};
 
+    return $config;
 }
 
-sub on_update_hook {
-    my ($class, $routerid, $sdn_cfg) = @_;
-
-}
-
-sub write_controller_config {
-    my ($class, $plugin_config, $config) = @_;
-
-    my $rawconfig = encode('UTF-8', CPAN::Meta::YAML::Dump($config->{faucet}));
-
-    return if !$rawconfig;
-    return if !-d "/etc/faucet";
-
-    my $frr_config_file = "/etc/faucet/faucet.yaml";
-
-    my $writefh = IO::File->new($frr_config_file,">");
-    print $writefh $rawconfig;
-    $writefh->close();
-}
-
-sub reload_controller {
-    my ($class) = @_;
-
-    my $conf_file = "/etc/faucet/faucet.yaml";
-    my $bin_path = "/usr/bin/faucet";
-
-    if (-e $conf_file && -e $bin_path) {
-        PVE::Tools::run_command(['systemctl', 'reload', 'faucet']);
-    }
-}
 
 1;
 
+