net/frr: Add BGP neighbor timers and graceful restart (#2112)

This commit is contained in:
Michael
2020-12-05 09:13:40 +01:00
committed by GitHub
parent c5d74cb577
commit 7e71ab69de
6 changed files with 65 additions and 2 deletions
+2
View File
@@ -20,6 +20,8 @@ Plugin Changelog
* Add description fields to BGP tabs
* Add BGP community-lists
* Add option for BGP graceful restart
* Allow to set BGP neighbor timers
1.17
@@ -48,6 +48,9 @@ class BgpController extends ApiMutableModelControllerBase
"updatesource",
"nexthopself",
"multihop",
"keepalive",
"holddown",
"connecttimer",
"defaultoriginate",
"linkedPrefixlistIn",
"linkedPrefixlistOut",
@@ -18,6 +18,13 @@
<advanced>true</advanced>
<help>In some cases it might be clearer to set a fixed router-id.</help>
</field>
<field>
<id>bgp.graceful</id>
<label>Graceful Restart</label>
<type>checkbox</type>
<advanced>true</advanced>
<help>BGP graceful restart functionality as defined in RFC-4724 defines the mechanisms that allows BGP speaker to continue to forward data packets along known routes while the routing protocol information is being restored.</help>
</field>
<field>
<id>bgp.networks</id>
<label>Network</label>
@@ -38,7 +38,28 @@
<label>Multi-Hop</label>
<type>checkbox</type>
</field>
<field>
<field>
<id>neighbor.keepalive</id>
<label>Keepalive</label>
<type>text</type>
<advanced>true</advanced>
<help>Keepalive timer to check if the neighbor is still up. Default when unset is 60 seconds.</help>
</field>
<field>
<id>neighbor.holddown</id>
<label>Hold Down Time</label>
<type>text</type>
<advanced>true</advanced>
<help>The time in seconds when a neighbor is considered dead. This is usually 3 times the keeplive timer and when unset 180 seconds.</help>
</field>
<field>
<id>neighbor.connecttimer</id>
<label>Connect Timer</label>
<type>text</type>
<advanced>true</advanced>
<help>The time in seconds how fast a neighbor tries to reconnect.</help>
</field>
<field>
<id>neighbor.defaultoriginate</id>
<label>Send Defaultroute</label>
<type>checkbox</type>
@@ -1,7 +1,7 @@
<model>
<mount>//OPNsense/quagga/bgp</mount>
<description>BGP Routing configuration</description>
<version>1.0.4</version>
<version>1.0.5</version>
<items>
<enabled type="BooleanField">
<default>0</default>
@@ -17,6 +17,10 @@
<Required>N</Required>
<mask>/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/</mask>
</routerid>
<graceful type="BooleanField">
<default>0</default>
<Required>Y</Required>
</graceful>
<networks type="CSVListField">
<default></default>
<Required>N</Required>
@@ -70,6 +74,21 @@
<default>0</default>
<Required>N</Required>
</multihop>
<keepalive type="IntegerField">
<Required>N</Required>
<MinimumValue>1</MinimumValue>
<MaximumValue>1000</MaximumValue>
</keepalive>
<holddown type="IntegerField">
<Required>N</Required>
<MinimumValue>3</MinimumValue>
<MaximumValue>3000</MaximumValue>
</holddown>
<connecttimer type="IntegerField">
<Required>N</Required>
<MinimumValue>1</MinimumValue>
<MaximumValue>65000</MaximumValue>
</connecttimer>
<defaultoriginate type="BooleanField">
<default>0</default>
<Required>N</Required>
@@ -15,6 +15,9 @@ log syslog {{ OPNsense.quagga.general.sysloglevel }}
{% if helpers.exists('OPNsense.quagga.bgp.asnumber') and OPNsense.quagga.bgp.asnumber != '' %}
router bgp {{ OPNsense.quagga.bgp.asnumber }}
no bgp ebgp-requires-policy
{% if helpers.exists('OPNsense.quagga.bgp.graceful') and OPNsense.quagga.bgp.graceful == '1' %}
bgp graceful-restart
{% endif %}
{% if helpers.exists('OPNsense.quagga.bgp.routerid') and OPNsense.quagga.bgp.routerid != '' %}
bgp router-id {{ OPNsense.quagga.bgp.routerid }}
{% endif %}
@@ -28,6 +31,14 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }}
{% if 'multihop' in neighbor and neighbor.multihop == '1' %}
neighbor {{ neighbor.address }} ebgp-multihop
{% endif %}
{% if 'keepalive' in neighbor and neighbor.keepalive != '' %}
{% if 'holddown' in neighbor and neighbor.holddown != '' %}
neighbor {{ neighbor.address }} timers {{ neighbor.keepalive }} {{ neighbor.holddown }}
{% endif %}
{% endif %}
{% if 'connecttimer' in neighbor and neighbor.connecttimer != '' %}
neighbor {{ neighbor.address }} timers connect {{ neighbor.connecttimer }}
{% endif %}
{% endif %}
{% endfor %}
{% endif %}