]> git.proxmox.com Git - pve-network.git/blob - PVE/Network/SDN/Controllers/FaucetPlugin.pm
evpn: add exitnodes-local-routing
[pve-network.git] / PVE / Network / SDN / Controllers / FaucetPlugin.pm
1 package PVE::Network::SDN::Controllers::FaucetPlugin;
2
3 use strict;
4 use warnings;
5 use PVE::Network::SDN::Controllers::Plugin;
6 use PVE::Tools;
7 use PVE::INotify;
8 use PVE::JSONSchema qw(get_standard_option);
9 use CPAN::Meta::YAML;
10 use Encode;
11
12 use base('PVE::Network::SDN::Controllers::Plugin');
13
14 sub type {
15 return 'faucet';
16 }
17
18 sub properties {
19 return {
20 };
21 }
22
23 # Plugin implementation
24 sub generate_controller_config {
25 my ($class, $plugin_config, $controller_cfg, $id, $uplinks, $config) = @_;
26
27 }
28
29 sub generate_controller_zone_config {
30 my ($class, $plugin_config, $controller, $controller_cfg, $id, $uplinks, $config) = @_;
31
32 my $dpid = $plugin_config->{'dp-id'};
33 my $dphex = printf("%x",$dpid);
34
35 my $zone_config = {
36 dp_id => $dphex,
37 hardware => "Open vSwitch",
38 };
39
40 $config->{faucet}->{dps}->{$id} = $zone_config;
41
42 }
43
44
45 sub generate_controller_vnet_config {
46 my ($class, $plugin_config, $controller, $zone, $zoneid, $vnetid, $config) = @_;
47
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};
53
54 my @ips = ();
55 push @ips, $ipv4 if $ipv4;
56 push @ips, $ipv6 if $ipv6;
57
58 my $vlan_config = { vid => $tag };
59
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;
63
64 $config->{faucet}->{vlans}->{$vnetid} = $vlan_config;
65
66 push(@{$config->{faucet}->{routers}->{$zoneid}->{vlans}} , $vnetid);
67
68 }
69
70 sub write_controller_config {
71 my ($class, $plugin_config, $config) = @_;
72
73 my $rawconfig = encode('UTF-8', CPAN::Meta::YAML::Dump($config->{faucet}));
74
75 return if !$rawconfig;
76 return if !-d "/etc/faucet";
77
78 my $frr_config_file = "/etc/faucet/faucet.yaml";
79
80 my $writefh = IO::File->new($frr_config_file,">");
81 print $writefh $rawconfig;
82 $writefh->close();
83 }
84
85 sub reload_controller {
86 my ($class) = @_;
87
88 my $conf_file = "/etc/faucet/faucet.yaml";
89 my $bin_path = "/usr/bin/faucet";
90
91 if (-e $conf_file && -e $bin_path) {
92 PVE::Tools::run_command(['systemctl', 'reload', 'faucet']);
93 }
94 }
95
96 1;
97