1 package PVE
::Network
::SDN
::Controllers
::FaucetPlugin
;
5 use PVE
::Network
::SDN
::Controllers
::Plugin
;
8 use PVE
::JSONSchema
qw(get_standard_option);
12 use base
('PVE::Network::SDN::Controllers::Plugin');
23 # Plugin implementation
24 sub generate_controller_config
{
25 my ($class, $plugin_config, $router, $id, $uplinks, $config) = @_;
29 sub generate_controller_transport_config
{
30 my ($class, $plugin_config, $router, $id, $uplinks, $config) = @_;
32 my $dpid = $plugin_config->{'dp-id'};
33 my $dphex = printf("%x",$dpid);
35 my $transport_config = {
37 hardware
=> "Open vSwitch",
40 $config->{faucet
}->{dps
}->{$id} = $transport_config;
45 sub generate_controller_vnet_config
{
46 my ($class, $plugin_config, $controller, $transportid, $vnetid, $config) = @_;
48 my $mac = $plugin_config->{mac
};
49 my $ipv4 = $plugin_config->{ipv4
};
50 my $ipv6 = $plugin_config->{ipv6
};
51 my $tag = $plugin_config->{tag
};
52 my $alias = $plugin_config->{alias
};
55 push @ips, $ipv4 if $ipv4;
56 push @ips, $ipv6 if $ipv6;
58 my $vlan_config = { vid
=> $tag };
60 $vlan_config->{description
} = $alias if $alias;
61 $vlan_config->{faucet_mac
} = $mac if $mac;
62 $vlan_config->{faucet_vips
} = \
@ips if scalar @ips > 0;
64 $config->{faucet
}->{vlans
}->{$vnetid} = $vlan_config;
66 push(@{$config->{faucet
}->{routers
}->{$transportid}->{vlans
}} , $vnetid);
71 my ($class, $routerid, $sdn_cfg) = @_;
76 my ($class, $routerid, $sdn_cfg) = @_;
80 sub write_controller_config
{
81 my ($class, $plugin_config, $config) = @_;
83 my $rawconfig = encode
('UTF-8', CPAN
::Meta
::YAML
::Dump
($config->{faucet
}));
85 return if !$rawconfig;
86 return if !-d
"/etc/faucet";
88 my $frr_config_file = "/etc/faucet/faucet.yaml";
90 my $writefh = IO
::File-
>new($frr_config_file,">");
91 print $writefh $rawconfig;
95 sub reload_controller
{
98 my $conf_file = "/etc/faucet/faucet.yaml";
99 my $bin_path = "/usr/bin/faucet";
101 if (-e
$conf_file && -e
$bin_path) {
102 PVE
::Tools
::run_command
(['systemctl', 'reload', 'faucet']);