summaryrefslogtreecommitdiff
path: root/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
diff options
context:
space:
mode:
authorAlexandre Derumier <aderumier@odiso.com>2023-09-13 13:38:45 +0200
committerFabian Grünbichler <f.gruenbichler@proxmox.com>2023-10-25 12:50:41 +0200
commit9ce18f80bc9deece323a52e02d92e5fe978698f5 (patch)
tree82d2026bec1002352453aceb4ad8b9bee9589ea4 /src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
parentced9392063d1cd2ecd93a2e41f5bf00fe3514665 (diff)
controllers: add isis router plugin
Diffstat (limited to 'src/PVE/Network/SDN/Controllers/EvpnPlugin.pm')
-rw-r--r--src/PVE/Network/SDN/Controllers/EvpnPlugin.pm28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
index f1dd20f..3ac7d7e 100644
--- a/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
+++ b/src/PVE/Network/SDN/Controllers/EvpnPlugin.pm
@@ -53,11 +53,15 @@ sub generate_controller_config {
my $loopback = undef;
my $autortas = undef;
my $bgprouter = find_bgp_controller($local_node, $controller_cfg);
+ my $isisrouter = find_isis_controller($local_node, $controller_cfg);
+
if ($bgprouter) {
$ebgp = 1 if $plugin_config->{'asn'} ne $bgprouter->{asn};
$loopback = $bgprouter->{loopback} if $bgprouter->{loopback};
$asn = $bgprouter->{asn} if $bgprouter->{asn};
$autortas = $plugin_config->{'asn'} if $ebgp;
+ } elsif ($isisrouter) {
+ $loopback = $isisrouter->{loopback} if $isisrouter->{loopback};
}
return if !$asn;
@@ -86,10 +90,8 @@ sub generate_controller_config {
push @controller_config, "neighbor VTEP remote-as $remoteas";
push @controller_config, "neighbor VTEP bfd";
- if($ebgp && $loopback) {
- push @controller_config, "neighbor VTEP ebgp-multihop 10";
- push @controller_config, "neighbor VTEP update-source $loopback";
- }
+ push @controller_config, "neighbor VTEP ebgp-multihop 10" if $ebgp && $loopback;
+ push @controller_config, "neighbor VTEP update-source $loopback" if $loopback;
# VTEP peers
foreach my $address (@peers) {
@@ -136,11 +138,15 @@ sub generate_controller_zone_config {
my $loopback = undef;
my $autortas = undef;
my $bgprouter = find_bgp_controller($local_node, $controller_cfg);
+ my $isisrouter = find_isis_controller($local_node, $controller_cfg);
+
if($bgprouter) {
$ebgp = 1 if $controller->{'asn'} ne $bgprouter->{asn};
$loopback = $bgprouter->{loopback} if $bgprouter->{loopback};
$asn = $bgprouter->{asn} if $bgprouter->{asn};
$autortas = $controller->{'asn'} if $ebgp;
+ } elsif ($isisrouter) {
+ $loopback = $isisrouter->{loopback} if $isisrouter->{loopback};
}
return if !$vrf || !$vrfvxlan || !$asn;
@@ -306,6 +312,20 @@ sub find_bgp_controller {
return $res;
}
+sub find_isis_controller {
+ my ($nodename, $controller_cfg) = @_;
+
+ my $res = undef;
+ foreach my $id (keys %{$controller_cfg->{ids}}) {
+ my $controller = $controller_cfg->{ids}->{$id};
+ next if $controller->{type} ne 'isis';
+ next if $controller->{node} ne $nodename;
+ $res = $controller;
+ last;
+ }
+ return $res;
+}
+
sub generate_frr_recurse{
my ($final_config, $content, $parentkey, $level) = @_;