Merge remote-tracking branch 'origin/master' into vnstat-multi-interface

This commit is contained in:
Ben Smithurst 2025-02-02 22:21:00 +00:00
commit 1b7524667b
42 changed files with 574 additions and 668 deletions

View file

@ -1,5 +1,5 @@
Copyright (c) 2023 A. Kulikov <kulikov.a@gmail.com>
Copyright (c) 2015-2024 Ad Schellevis <ad@opnsense.org>
Copyright (c) 2015-2025 Ad Schellevis <ad@opnsense.org>
Copyright (c) 2022 agh1467 <agh1467@protonmail.com>
Copyright (c) 2024 Alex Smith
Copyright (c) 2021 Alexander Noack
@ -24,7 +24,7 @@ Copyright (c) 2016-2019 EURO-LOG AG
Copyright (c) 2017-2020 Fabian Franz
Copyright (c) 2019 Felix Matouschek <felix@matouschek.org>
Copyright (c) 2024 Francisco Dimattia <info@tecnoservicio.com.ar>
Copyright (c) 2014-2024 Franco Fichtner <franco@opnsense.org>
Copyright (c) 2014-2025 Franco Fichtner <franco@opnsense.org>
Copyright (c) 2016-2025 Frank Wall
Copyright (c) 2021 Github-jjw
Copyright (c) 2023 Greg Glockner <greg@glockners.net>

View file

@ -64,7 +64,8 @@ class Netcup(BaseAccount):
syslog.syslog(syslog.LOG_ERR, "Incomplete FQDN offerred %s" % self.settings['hostnames'])
return False
self.hostname, self.domain = self.settings['hostnames'].split('.', 1)
self.domain = self.settings['hostnames'].split('.', self.settings['hostnames'].count('.')-1)[-1]
self.hostname = self.settings['hostnames'].rsplit('.', 2)[0] if self.domain != self.settings['hostnames'] else '@'
if self.settings['password'].count('|') == 1:
self.settings['APIPassword'], self.settings['APIKey'] = self.settings['password'].split('|')

View file

@ -33,7 +33,10 @@ class BfdController extends \OPNsense\Base\IndexController
public function indexAction()
{
$this->view->bfdForm = $this->getForm("bfd");
$this->view->formDialogEditBFDNeighbor = $this->getForm("dialogEditBFDNeighbor");
$this->view->formGridEditBFDNeighbor = $this->getFormGrid("dialogEditBFDNeighbor", null, "BFDChangeMessage");
$this->view->pick('OPNsense/Quagga/bfd');
}
}

View file

@ -33,12 +33,25 @@ class BgpController extends \OPNsense\Base\IndexController
public function indexAction()
{
$this->view->bgpForm = $this->getForm("bgp");
$this->view->formDialogEditBGPNeighbor = $this->getForm("dialogEditBGPNeighbor");
$this->view->formGridEditBGPNeighbor = $this->getFormGrid("dialogEditBGPNeighbor", null, "BGPChangeMessage");
$this->view->formDialogEditBGPASPaths = $this->getForm("dialogEditBGPASPath");
$this->view->formGridEditBGPASPaths = $this->getFormGrid("dialogEditBGPASPath", null, "BGPChangeMessage");
$this->view->formDialogEditBGPPrefixLists = $this->getForm("dialogEditBGPPrefixLists");
$this->view->formGridEditBGPPrefixLists = $this->getFormGrid("dialogEditBGPPrefixLists", null, "BGPChangeMessage");
$this->view->formDialogEditBGPCommunityLists = $this->getForm("dialogEditBGPCommunityLists");
$this->view->formGridEditBGPCommunityLists = $this->getFormGrid("dialogEditBGPCommunityLists", null, "BGPChangeMessage");
$this->view->formDialogEditBGPRouteMaps = $this->getForm("dialogEditBGPRouteMaps");
$this->view->formGridEditBGPRouteMaps = $this->getFormGrid("dialogEditBGPRouteMaps", null, "BGPChangeMessage");
$this->view->formDialogEditBGPPeergroups = $this->getForm("dialogEditBGPPeergroups");
$this->view->formGridEditBGPPeergroups = $this->getFormGrid("dialogEditBGPPeergroups", null, "BGPChangeMessage");
$this->view->pick('OPNsense/Quagga/bgp');
}
}

View file

@ -1,38 +0,0 @@
<?php
/*
Copyright (C) 2017 Fabian Franz
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
namespace OPNsense\Quagga;
class IsisController extends \OPNsense\Base\IndexController
{
public function indexAction()
{
$this->view->generalForm = $this->getForm("isis");
$this->view->pick('OPNsense/Quagga/isis');
}
}

View file

@ -30,10 +30,19 @@ class Ospf6Controller extends \OPNsense\Base\IndexController
public function indexAction()
{
$this->view->ospf6Form = $this->getForm("ospf6");
$this->view->formDialogEditNetwork = $this->getForm("dialogEditOSPF6Network");
$this->view->formGridEditNetwork = $this->getFormGrid("dialogEditOSPF6Network", null, "OSPF6ChangeMessage");
$this->view->formDialogEditInterface = $this->getForm("dialogEditOSPF6Interface");
$this->view->formGridEditInterface = $this->getFormGrid("dialogEditOSPF6Interface", null, "OSPF6ChangeMessage");
$this->view->formDialogEditPrefixLists = $this->getForm("dialogEditOSPF6PrefixLists");
$this->view->formGridEditPrefixLists = $this->getFormGrid("dialogEditOSPF6PrefixLists", null, "OSPF6ChangeMessage");
$this->view->formDialogEditRouteMaps = $this->getForm("dialogEditOSPF6RouteMaps");
$this->view->formGridEditRouteMaps = $this->getFormGrid("dialogEditOSPF6RouteMaps", null, "OSPF6ChangeMessage");
$this->view->pick('OPNsense/Quagga/ospf6');
}
}

View file

@ -33,10 +33,19 @@ class OspfController extends \OPNsense\Base\IndexController
public function indexAction()
{
$this->view->generalForm = $this->getForm("ospf");
$this->view->formDialogEditNetwork = $this->getForm("dialogEditOSPFNetwork");
$this->view->formGridEditNetwork = $this->getFormGrid("dialogEditOSPFNetwork", null, "OSPFChangeMessage");
$this->view->formDialogEditInterface = $this->getForm("dialogEditOSPFInterface");
$this->view->formGridEditInterface = $this->getFormGrid("dialogEditOSPFInterface", null, "OSPFChangeMessage");
$this->view->formDialogEditPrefixLists = $this->getForm("dialogEditOSPFPrefixLists");
$this->view->formGridEditPrefixLists = $this->getFormGrid("dialogEditOSPFPrefixLists", null, "OSPFChangeMessage");
$this->view->formDialogEditRouteMaps = $this->getForm("dialogEditOSPFRouteMaps");
$this->view->formGridEditRouteMaps = $this->getFormGrid("dialogEditOSPFRouteMaps", null, "OSPFChangeMessage");
$this->view->pick('OPNsense/Quagga/ospf');
}
}

View file

@ -36,7 +36,10 @@ class StaticController extends \OPNsense\Base\IndexController
public function indexAction()
{
$this->view->staticForm = $this->getForm("static");
$this->view->formDialogEditSTATICRoute = $this->getForm("dialogEditSTATICRoute");
$this->view->formGridEditSTATICRoute = $this->getFormGrid("dialogEditSTATICRoute", null, "STATICChangeMessage");
$this->view->pick('OPNsense/Quagga/static');
}
}

View file

@ -3,34 +3,34 @@
<id>bgp.enabled</id>
<label>enable</label>
<type>checkbox</type>
<help>This will activate the bgp service.</help>
<help>This will activate the BGP service.</help>
</field>
<field>
<id>bgp.asnumber</id>
<label>BGP AS Number</label>
<type>text</type>
<help>Your AS Number here</help>
<help>Your AS Number here.</help>
</field>
<field>
<id>bgp.distance</id>
<label>BGP AD Distance</label>
<type>text</type>
<advanced>true</advanced>
<help>BGP routes usually have an administrative distance of 20. Here you can adjust these values, e.g. when you want to prefer OSPF learned routes.</help>
<help>Adjust BGP administrative distance, typically set to 20. Useful if you want to prefer OSPF-learned routes.</help>
</field>
<field>
<id>bgp.routerid</id>
<label>Router ID</label>
<type>text</type>
<advanced>true</advanced>
<help>In some cases it might be clearer to set a fixed router-id.</help>
<help>Optional fixed router ID for BGP.</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>
<help>Enable BGP graceful restart as per RFC 4724, allowing packet forwarding during protocol restoration.</help>
</field>
<field>
<id>bgp.networks</id>
@ -38,7 +38,7 @@
<style>tokenize</style>
<type>select_multiple</type>
<allownew>true</allownew>
<help>Defines which networks, which are connected to this router, will be advertised over BGP. To announce all defined networks, Network Import-Check can be disabled in advanced settings if required.</help>
<help>Defines connected networks to be advertised over BGP. Disable Network Import-Check to announce all networks.</help>
</field>
<field>
<id>bgp.networkimportcheck</id>
@ -51,13 +51,12 @@
<id>bgp.logneighborchanges</id>
<label>Log Neighbor Changes</label>
<type>checkbox</type>
<help>This will activate exetended logging of BGP neighbor changes.</help>
<help>Enable extended logging of BGP neighbor changes.</help>
</field>
<field>
<id>bgp.redistribute</id>
<label>Route Redistribution</label>
<type>select_multiple</type>
<help>Select other routing sources, which should be redistributed to the other nodes.</help>
<hint>Type or select a route source.</hint>
<help>Select routing sources to redistribute to other nodes.</help>
</field>
</form>

View file

@ -3,6 +3,11 @@
<id>neighbor.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>neighbor.description</id>
@ -20,9 +25,10 @@
<id>neighbor.multihop</id>
<label>Multihop</label>
<type>checkbox</type>
<help>multihop tells the BFD daemon that we should expect packets with TTL less than 254
(because it will take more than one hop) and to listen on the multihop port (4784).
When using multi-hop mode echo-mode will not work (see RFC 5883 section 3).
</help>
<help>Multihop tells the BFD daemon that we should expect packets with TTL less than 254 (because it will take more than one hop) and to listen on the multihop port (4784). When using multi-hop mode echo-mode will not work (see RFC 5883 section 3).</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
</form>

View file

@ -3,19 +3,23 @@
<id>aspath.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<help>If this AS-Path list should be enabled.</help>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>aspath.description</id>
<label>Description</label>
<type>text</type>
<help>Add an optional description for this AS-Path list.</help>
<help>Optional description for the AS-Path list.</help>
</field>
<field>
<id>aspath.number</id>
<label>Number</label>
<type>text</type>
<help>The ACL rule number (0-4294967294); keep in mind that there are no sequence numbers with AS-Path lists. When you want to add a new line between you have to completely remove the ACL!</help>
<help>The ACL rule number (0-4294967294); keep in mind that there are no sequence numbers with AS-Path lists. When you want to add a new line between you have to completely remove the ACL.</help>
</field>
<field>
<id>aspath.action</id>
@ -27,6 +31,6 @@
<id>aspath.as</id>
<label>AS</label>
<type>text</type>
<help>The AS pattern you want to match, regexp allowed (e.g. .$ or _1$). It's not validated so please be careful!</help>
<help>The AS pattern you want to match, regexp allowed (e.g. .$ or _1$).</help>
</field>
</form>

View file

@ -3,19 +3,23 @@
<id>communitylist.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<help>Enable / Disable</help>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>communitylist.description</id>
<label>Description</label>
<type>text</type>
<help>Add an optional description for this Community-List.</help>
<help>Optional description for the Community-List.</help>
</field>
<field>
<id>communitylist.number</id>
<label>Number</label>
<type>text</type>
<help>Set the number of your Community-List. 1-99 are standard lists while 100-500 are expanded lists.</help>
<help>Community-List number (1-99 for standard, 100-500 for expanded).</help>
</field>
<field>
<id>communitylist.seqnumber</id>
@ -33,6 +37,6 @@
<id>communitylist.community</id>
<label>Community</label>
<type>text</type>
<help>The community you want to match. You can also regex and it is not validated so please be careful.</help>
<help>Community pattern to match, with optional regex.</help>
</field>
</form>

View file

@ -3,176 +3,263 @@
<id>neighbor.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>neighbor.description</id>
<label>Description</label>
<type>text</type>
<help>Set an optional description for this neighbor.</help>
<help>Optional description for the neighbor.</help>
</field>
<field>
<id>neighbor.address</id>
<label>Peer-IP</label>
<type>text</type>
<help>Specify the IP of your neighbor.</help>
<help>Specify the IP address of the BGP neighbor.</help>
</field>
<field>
<id>neighbor.remoteas</id>
<label>Remote AS</label>
<type>text</type>
<help>Neighbor AS.</help>
<help>AS (Autonomous System) number of the neighbor, required for establishing a BGP session.</help>
</field>
<field>
<id>neighbor.password</id>
<label>BGP MD5 Password</label>
<type>text</type>
<advanced>true</advanced>
<help>Set a password for BGP authentication.</help>
<help>Password used for MD5 authentication of BGP connections to enhance security.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.weight</id>
<label>Weight</label>
<type>text</type>
<advanced>true</advanced>
<help>Specify a default weight value for the neighbors routes.</help>
<help>Default weight for routes from this neighbor; higher weight increases path preference within the same AS.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.localip</id>
<label>Local Initiater IP</label>
<type>text</type>
<advanced>true</advanced>
<help>Set the local IP connecting to the neighbor. This is only required for BGP authentication.</help>
<help>Specify the local IP address used to establish connections with the neighbor. Only relevant for MD5 authentication.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.updatesource</id>
<label>Update-Source Interface</label>
<type>dropdown</type>
<help><![CDATA[Physical name of the IPv4 interface facing the peer. Please refer to the <a href="http://docs.frrouting.org/en/stable-7.4/bgp.html#clicmd-[no]neighborPEERupdate-source%3CIFNAME|ADDRESS%3E">FRR documentation</a> for more information.]]></help>
<help>Interface (IPv4) where BGP sessions are sourced from, typically required when using loopback addresses.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.linklocalinterface</id>
<label>IPv6 link-local interface</label>
<type>dropdown</type>
<advanced>true</advanced>
<help><![CDATA[Interface to use for IPv6 link-local neighbours. Please refer to the <a href="http://docs.frrouting.org/en/stable-7.4/bgp.html#clicmd-[no]neighborPEERinterfaceIFNAME">FRR documentation</a> for more information.]]></help>
<help>Interface for IPv6 link-local neighbors, used primarily for link-local IPv6 addressing.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.nexthopself</id>
<label>Next-Hop-Self</label>
<type>checkbox</type>
<help>Sets the local router as the next hop for routes advertised to the neighbor, commonly used in Route Reflector setups.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.nexthopselfall</id>
<label>Next-Hop-Self All</label>
<type>checkbox</type>
<help>Add the parameter "all" after next-hop-self command.</help>
<help>Extends Next-Hop-Self by applying the setting to all addresses, including multiple address families.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.multihop</id>
<label>Multi-Hop</label>
<help>
Specifying ebgp-multihop allows sessions with eBGP neighbors to establish when they are multiple hops away.
When the neighbor is not directly connected and this knob is not enabled, the session will not establish.
</help>
<help>Enables connections to eBGP neighbors across multiple hops; often required for peering over loopback addresses.</help>
<type>checkbox</type>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.multiprotocol</id>
<label>Multi-Protocol</label>
<type>checkbox</type>
<advanced>true</advanced>
<help><![CDATA[Is this neighbour multiprotocol capable per <a href="https://datatracker.ietf.org/doc/html/rfc2283.html">RFC 2283</a>]]></help>
<help>Enables multiprotocol BGP for support of additional address families like IPv6.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.rrclient</id>
<label>Route Reflector Client</label>
<type>checkbox</type>
<help>Marks the neighbor as a client for a route reflector; used to reduce the number of full BGP mesh connections.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.soft_reconfiguration_inbound</id>
<label>Soft reconfiguration inbound</label>
<type>checkbox</type>
<help>This option allows changing policies without clearing the BGP session.</help>
<help>Allows policy changes without resetting the session by storing inbound updates.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.bfd</id>
<label>BFD</label>
<type>checkbox</type>
<help>You can enable BFD support for this neighbor.</help>
<help>Enable Bidirectional Forwarding Detection (BFD) for rapid link failure detection with the neighbor.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</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>
<hint>60</hint>
<help>Sets the interval (default 60 seconds) between keepalive messages to check the neighbors availability.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</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>
<hint>180</hint>
<help>Time (default 180 seconds) before declaring a neighbor down if no keepalive messages are received.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</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>
<help>Interval to attempt reconnecting with a neighbor after a disconnect.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.defaultoriginate</id>
<label>Send Defaultroute</label>
<type>checkbox</type>
<help>Sends a default route to the neighbor, useful in small AS environments where a full routing table is not necessary.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.asoverride</id>
<label>Enable AS-Override</label>
<type>checkbox</type>
<help>Override AS number of the originating router with the local AS number. This command is only allowed for eBGP peers.</help>
<help>Allows replacement of the neighbors AS with the local AS, common in eBGP confederations.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.disable_connected_check</id>
<label>Disable Connected Check</label>
<type>checkbox</type>
<help>Allow peerings between directly connected eBGP peers using loopback addresses.</help>
<help>Allows eBGP connections over loopback addresses by bypassing checks for direct connections.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.attributeunchanged</id>
<label>Attribute Unchanged</label>
<type>dropdown</type>
<advanced>true</advanced>
<help><![CDATA[This specifies attributes to be left unchanged when sending advertisements to a peer. Read more at <a href="https://docs.frrouting.org/en/latest/bgp.html#clicmd-neighbor-PEER-attribute-unchanged-as-path-next-hop-med">FRR documentation</a>.]]></help>
<help>Keeps specified attributes (like MED, AS-Path, etc.) unchanged in updates to the neighbor.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>neighbor.linkedPrefixlistIn</id>
<label>Prefix-List In</label>
<type>dropdown</type>
<help>Prefix-List for inbound direction</help>
<help>Prefix list to filter inbound prefixes from this neighbor.</help>
</field>
<field>
<id>neighbor.linkedPrefixlistOut</id>
<label>Prefix-List Out</label>
<type>dropdown</type>
<help>Prefix-List for outbound direction</help>
<help>Prefix list to filter outbound prefixes sent to this neighbor.</help>
</field>
<field>
<id>neighbor.linkedRoutemapIn</id>
<label>Route-Map In</label>
<type>dropdown</type>
<help>Route-Map for inbound direction</help>
<help>Route-map to apply to routes received from this neighbor.</help>
</field>
<field>
<id>neighbor.linkedRoutemapOut</id>
<label>Route-Map Out</label>
<type>dropdown</type>
<help>Route-Map for outbound direction</help>
<help>Route-map to apply to routes advertised to this neighbor.</help>
</field>
<field>
<id>neighbor.peergroup</id>
<label>Peer Group</label>
<type>dropdown</type>
<help>Peer Group this neighbor belongs to.</help>
<help>Groups neighbors with similar configurations to simplify management.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
</form>

View file

@ -3,57 +3,78 @@
<id>peergroup.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>peergroup.name</id>
<label>Name</label>
<type>text</type>
<help>Specify the name of this peergroup.</help>
<help>Name of the peer group.</help>
</field>
<field>
<id>peergroup.remoteas</id>
<label>Remote AS</label>
<type>text</type>
<help>Remote AS for tthis peergroup.</help>
<help>Remote AS for the peer group.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>peergroup.updatesource</id>
<label>Update-Source Interface</label>
<type>dropdown</type>
<help><![CDATA[Physical name of the IPv4 interface facing the peer. Please refer to the <a href="http://docs.frrouting.org/en/stable-7.4/bgp.html#clicmd-[no]neighborPEERupdate-source%3CIFNAME|ADDRESS%3E">FRR documentation</a> for more information.]]></help>
<help>Physical IPv4 interface facing the peer.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>peergroup.nexthopself</id>
<label>Next-Hop-Self</label>
<type>checkbox</type>
<help>Sets the local router as the next hop for routes advertised to the neighbor, commonly used in Route Reflector setups.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
<field>
<field>
<id>peergroup.defaultoriginate</id>
<label>Send Defaultroute</label>
<type>checkbox</type>
<help>Enable sending of default routes to the peer group.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
</grid_view>
</field>
<field>
<id>peergroup.linkedPrefixlistIn</id>
<label>Prefix-List In</label>
<type>dropdown</type>
<help>Prefix-List for inbound direction.</help>
<help>Prefix list to filter inbound prefixes from this neighbor.</help>
</field>
<field>
<id>peergroup.linkedPrefixlistOut</id>
<label>Prefix-List Out</label>
<type>dropdown</type>
<help>Prefix-List for outbound direction.</help>
<help>Prefix list to filter outbound prefixes sent to this neighbor.</help>
</field>
<field>
<id>peergroup.linkedRoutemapIn</id>
<label>Route-Map In</label>
<type>dropdown</type>
<help>Route-Map for inbound direction.</help>
<help>Route-map to apply to routes received from this neighbor.</help>
</field>
<field>
<id>peergroup.linkedRoutemapOut</id>
<label>Route-Map Out</label>
<type>dropdown</type>
<help>Route-Map for outbound direction.</help>
<help>Route-map to apply to routes advertised to this neighbor.</help>
</field>
</form>

View file

@ -3,7 +3,11 @@
<id>prefixlist.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<help>If this Prefix-List should be enabled.</help>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>prefixlist.description</id>
@ -15,19 +19,22 @@
<id>prefixlist.name</id>
<label>Name</label>
<type>text</type>
<help>The name of your Prefix-List, please choose one near to the result you want to achieve.</help>
<help>Name of the Prefix-List, descriptive of its purpose. If there should be multiple entries for the same prefix list, give them all the same name.</help>
</field>
<field>
<id>prefixlist.version</id>
<label>IP Version</label>
<type>dropdown</type>
<help>Set the IP version to use.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>prefixlist.seqnumber</id>
<label>Number</label>
<label>Sequence Number</label>
<type>text</type>
<help>The ACL sequence number (1-4294967294)</help>
<help>The ACL sequence number (1-4294967294).</help>
</field>
<field>
<id>prefixlist.action</id>
@ -39,6 +46,6 @@
<id>prefixlist.network</id>
<label>Network</label>
<type>text</type>
<help>The network pattern you want to match. You can also add "ge" or "le" additions after the network statement. It's not validated so please be careful!</help>
<help>Specifies a network pattern to match, with optional ge (greater than or equal) and le (less than or equal) attributes to control the prefix length range. For example, a pattern like "192.168.0.0/16 ge 24 le 28" matches any route within the 192.168.0.0/16 block with prefix lengths from /24 to /28.</help>
</field>
</form>

View file

@ -3,19 +3,23 @@
<id>routemap.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<help>Enable / Disable</help>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>routemap.description</id>
<label>Description</label>
<type>text</type>
<help>Add an optional description for this route-map.</help>
<help>Optional description for the route-map.</help>
</field>
<field>
<id>routemap.name</id>
<label>Name</label>
<type>text</type>
<help>Route-map name to match and set your patterns, it will be enabled via the neighbor configuration.</help>
<help>Name of the route-map, used in neighbor configuration.</help>
</field>
<field>
<id>routemap.action</id>
@ -27,7 +31,7 @@
<id>routemap.id</id>
<label>ID</label>
<type>text</type>
<help>Route-map ID between 1 and 65535. Be aware that the sorting will be done under the hood, so when you add an entry between it get's to the right position</help>
<help>Route-map ID (1-65535). Sorting is managed automatically.</help>
</field>
<field>
<id>routemap.match</id>
@ -35,7 +39,7 @@
<type>select_multiple</type>
<style>tokenize</style>
<allownew>true</allownew>
<help>Select the AS-Path List.</help>
<help>Select the AS-Path List. If multiples with the same name exist, selecting one is enough.</help>
</field>
<field>
<id>routemap.match2</id>
@ -43,7 +47,7 @@
<type>select_multiple</type>
<style>tokenize</style>
<allownew>true</allownew>
<help>Select the Prefix List.</help>
<help>Select the Prefix List. If multiples with the same name exist, selecting one is enough.</help>
</field>
<field>
<id>routemap.match3</id>
@ -51,12 +55,12 @@
<type>select_multiple</type>
<style>tokenize</style>
<allownew>true</allownew>
<help>Select the Community List.</help>
<help>Select the Community List. If multiples with the same name exist, selecting one is enough.</help>
</field>
<field>
<id>routemap.set</id>
<label>Set</label>
<type>text</type>
<help>Free text field for your set, please be careful! You can set e.g. "local-preference 300" or "community 1:1" (http://www.nongnu.org/quagga/docs/docs-multi/Route-Map-Set-Command.html#Route-Map-Set-Command)</help>
<help>Free text field for setting attributes, e.g., “local-preference 300” or “community 1:1”.</help>
</field>
</form>

View file

@ -3,6 +3,11 @@
<id>interface.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>interface.interfacename</id>
@ -14,65 +19,104 @@
<id>interface.area</id>
<label>Area</label>
<type>text</type>
<help>Area in wildcard mask style like 0.0.0.0 and no decimal 0</help>
<help>Assigns the network to an OSPF area using an identifier like 0.0.0.0 (Backbone Area). The Backbone Area connects other areas, supporting inter-area communication, while additional areas (e.g., 0.0.0.1, 0.0.0.255) segment the network logically to limit routing updates. Only use Area in Interface tab or in Network tab once.</help>
</field>
<field>
<id>interface.passive</id>
<label>Passive Interface</label>
<type>checkbox</type>
<help>Disables OSPF Hello packets on the interface, preventing neighbor relationships (used for security or optimization).</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.cost</id>
<label>Cost</label>
<type>text</type>
<help>Sets the OSPF metric for path selection; lower costs are preferred paths within the area.</help>
</field>
<field>
<id>interface.cost_demoted</id>
<label>Cost (when demoted)</label>
<type>text</type>
<hint>65535</hint>
<help>Specifies metric cost when interface is in backup mode via CARP, deprioritizing paths dynamically.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.carp_depend_on</id>
<label>Depend on (carp)</label>
<type>dropdown</type>
<help>The carp VHID to depend on, when this virtual address is not in master state,
the interface cost will be set to the demoted cost (specified above).</help>
<help>Links the interface cost to a CARP VHID, adjusting costs based on primary or backup status.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.hellointerval</id>
<label>Hello Interval</label>
<type>text</type>
<help>Sets frequency (in seconds) of Hello packets to maintain OSPF neighbor relationships.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.deadinterval</id>
<label>Dead Interval</label>
<type>text</type>
<help>Defines the timeout period for OSPF neighbors; after this period, the neighbor is marked as down.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.retransmitinterval</id>
<label>Retransmission Interval</label>
<type>text</type>
<help>Time (seconds) to wait before resending Link-State Advertisements (LSAs) if acknowledgment is delayed.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.transmitdelay</id>
<label>Retransmission Delay</label>
<type>text</type>
<help>Configures the hold time before LSAs are resent, accommodating slow or high-latency links.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.priority</id>
<label>Priority</label>
<type>text</type>
<help>Determines the likelihood of becoming a Designated Router; higher values increase priority.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.bfd</id>
<label>BFD</label>
<type>checkbox</type>
<help>You can enable BFD support for this interface. You will also need to configure BFD peers.</help>
<help>Activates Bidirectional Forwarding Detection for rapid link failure detection; peer configuration required.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.networktype</id>
<label>Network Type</label>
<type>dropdown</type>
<help>Defines the OSPF network type, impacting adjacency and LSA flooding methods. "Broadcast Multi-Access": Assumes networks supporting multiple routers with broadcast capability (e.g., Ethernet). "Non-Broadcast Multi-Access (NBMA)"": For networks without broadcast support (e.g., Frame Relay); requires manual neighbor setup. "Point-to-Multipoint": Connects multiple routers over a single interface, treating each as a point-to-point link. "Point-to-Point": Directly connects two routers, simplifying adjacency and LSA transmission.</help>
</field>
</form>

View file

@ -3,39 +3,55 @@
<id>network.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>network.ipaddr</id>
<label>Network Address</label>
<type>text</type>
<help>Specifies the IPv6 network address (e.g., fe80::1234) to include in OSPFv3.</help>
</field>
<field>
<id>network.netmask</id>
<label>Network Mask</label>
<type>text</type>
<help>Defines the network prefix length (e.g., 64) for the specified IPv6 address range.</help>
</field>
<field>
<id>network.area</id>
<label>Area</label>
<type>text</type>
<help>Area in wildcard mask style like 0.0.0.0 and no decimal 0. Only use Area in Interface tab or in Network tab once.</help>
<help>Assigns the network to an OSPF area using an identifier like 0.0.0.0 (Backbone Area). The Backbone Area connects other areas, supporting inter-area communication, while additional areas (e.g., 0.0.0.1, 0.0.0.255) segment the network logically to limit routing updates. Only use Area in Interface tab or in Network tab once.</help>
</field>
<field>
<id>network.arearange</id>
<label>Area Range</label>
<type>text</type>
<help>Here you can summarize a network for this area like fe80:1234::0/64</help>
<help>Summarizes multiple networks in the specified area, consolidating multiple networks into a single summarized route like fe80:1234::/56.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>network.linkedPrefixlistIn</id>
<label>Prefix-List In</label>
<type>dropdown</type>
<help>Prefix-List for inbound direction</help>
<help>Filters inbound route advertisements using a prefix list.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>network.linkedPrefixlistOut</id>
<label>Prefix-List Out</label>
<type>dropdown</type>
<help>Prefix-List for outbound direction</help>
<help>Filters outbound route advertisements using a prefix list.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
</form>

View file

@ -3,17 +3,21 @@
<id>prefixlist.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<help>Enable / Disable</help>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>prefixlist.name</id>
<label>Name</label>
<type>text</type>
<help>The name of your Prefix-List, please choose one near to the result you want to achieve.</help>
<help>The name of your Prefix-List. If there should be multiple entries for the same prefix list, give them all the same name.</help>
</field>
<field>
<id>prefixlist.seqnumber</id>
<label>Number</label>
<label>Sequence Number</label>
<type>text</type>
<help>The ACL sequence number (10-99)</help>
</field>
@ -27,6 +31,6 @@
<id>prefixlist.network</id>
<label>Network</label>
<type>text</type>
<help>The network pattern you want to match. It's not validated so please be careful!</help>
<help>The network pattern you want to match.</help>
</field>
</form>

View file

@ -3,12 +3,17 @@
<id>routemap.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>routemap.name</id>
<label>Name</label>
<type>text</type>
<help>Route-map name to match and set your patterns, it will be enabled via redistribution.</help>
<help>Route-map name for matching and setting patterns, enabled via redistribution.</help>
</field>
<field>
<id>routemap.action</id>
@ -20,7 +25,7 @@
<id>routemap.id</id>
<label>ID</label>
<type>text</type>
<help>Route-map ID between 10 and 99. Be aware that the sorting will be done under the hood, so when you add an entry between it get's to the right position</help>
<help>Route-map ID between 10 and 99. Entries added in order of insertion.</help>
</field>
<field>
<id>routemap.match2</id>
@ -28,11 +33,12 @@
<type>select_multiple</type>
<style>tokenize</style>
<allownew>true</allownew>
<help>Allows for matching based on prefix lists, multiple selections enabled.</help>
</field>
<field>
<id>routemap.set</id>
<label>Set</label>
<type>text</type>
<help>Free text field for your set, please be careful! You can set e.g. "local-preference 300" or "community 1:1" (http://docs.frrouting.org/en/latest/routemap.html#route-map-set-command)</help>
<help>Free text field for your set. You can set e.g. "local-preference 300" or "community 1:1" (http://docs.frrouting.org/en/latest/routemap.html#route-map-set-command)</help>
</field>
</form>

View file

@ -3,86 +3,136 @@
<id>interface.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>interface.interfacename</id>
<label>Interface</label>
<type>dropdown</type>
<help>Select an interface where this settings apply to.</help>
<help>Select an interface where this settings apply.</help>
</field>
<field>
<id>interface.authtype</id>
<label>Authentication Type</label>
<type>dropdown</type>
<help>Defines security method for OSPF exchanges (None, plain, or MD5) to prevent unauthorized updates.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.authkey</id>
<label>Authentication Key</label>
<type>text</type>
<help>Specifies a password or key used for plain or MD5 authentication.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.authkey_id</id>
<label>Authentication Key ID</label>
<advanced>true</advanced>
<type>text</type>
<help>Numeric identifier for MD5 authentication, ensuring correct key selection.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.area</id>
<label>Area</label>
<type>text</type>
<help>Area in wildcard mask style like 0.0.0.0 and no decimal 0. Only use Area in Interface tab or in Network tab once.</help>
<help>Assigns the network to an OSPF area using an identifier like 0.0.0.0 (Backbone Area). The Backbone Area connects other areas, supporting inter-area communication, while additional areas (e.g., 0.0.0.1, 0.0.0.255) segment the network logically to limit routing updates. Only use Area in Interface tab or in Network tab once.</help>
</field>
<field>
<id>interface.cost</id>
<label>Cost</label>
<type>text</type>
<help>Sets the OSPF metric for path selection; lower costs are preferred paths within the area.</help>
</field>
<field>
<id>interface.cost_demoted</id>
<label>Cost (when demoted)</label>
<type>text</type>
<help>Specifies metric cost when interface is in backup mode via CARP, deprioritizing paths dynamically.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.carp_depend_on</id>
<label>Depend on (carp)</label>
<type>dropdown</type>
<help>The carp VHID to depend on, when this virtual address is not in master state,
the interface cost will be set to the demoted cost (specified above).</help>
<help>Links the interface cost to a CARP VHID, adjusting costs based on primary or backup status.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.hellointerval</id>
<label>Hello Interval</label>
<type>text</type>
<help>Sets frequency (in seconds) of Hello packets to maintain OSPF neighbor relationships.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.deadinterval</id>
<label>Dead Interval</label>
<type>text</type>
<help>Defines the timeout period for OSPF neighbors; after this period, the neighbor is marked as down.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.retransmitinterval</id>
<label>Retransmission Interval</label>
<type>text</type>
<help>Time (seconds) to wait before resending Link-State Advertisements (LSAs) if acknowledgment is delayed.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.transmitdelay</id>
<label>Retransmission Delay</label>
<type>text</type>
<help>Configures the hold time before LSAs are resent, accommodating slow or high-latency links.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.priority</id>
<label>Priority</label>
<type>text</type>
<help>Determines the likelihood of becoming a Designated Router; higher values increase priority.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.bfd</id>
<label>BFD</label>
<type>checkbox</type>
<help>You can enable BFD support for this interface. You will also need to configure BFD peers.</help>
<help>Activates Bidirectional Forwarding Detection for rapid link failure detection; peer configuration required.</help>
<grid_view>
<type>boolean</type>
<formatter>boolean</formatter>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>interface.networktype</id>
<label>Network Type</label>
<type>dropdown</type>
<help>Defines the OSPF network type, impacting adjacency and LSA flooding methods. "Broadcast Multi-Access": Assumes networks supporting multiple routers with broadcast capability (e.g., Ethernet). "Non-Broadcast Multi-Access (NBMA)"": For networks without broadcast support (e.g., Frame Relay); requires manual neighbor setup. "Point-to-Multipoint": Connects multiple routers over a single interface, treating each as a point-to-point link. "Point-to-Point": Directly connects two routers, simplifying adjacency and LSA transmission.</help>
</field>
</form>

View file

@ -3,39 +3,55 @@
<id>network.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>network.ipaddr</id>
<label>Network Address</label>
<type>text</type>
<help>Specifies the network address (e.g., 192.168.1.0) to include in OSPF.</help>
</field>
<field>
<id>network.netmask</id>
<label>Network Mask</label>
<type>text</type>
<help>Defines the network mask (e.g., 24) for the specified network.</help>
</field>
<field>
<id>network.area</id>
<label>Area</label>
<type>text</type>
<help>Area in wildcard mask style like 0.0.0.0 and no decimal 0. Only use Area in Interface tab or in Network tab once.</help>
<help>Assigns the network to an OSPF area using an identifier like 0.0.0.0 (Backbone Area). The Backbone Area connects other areas, supporting inter-area communication, while additional areas (e.g., 0.0.0.1, 0.0.0.255) segment the network logically to limit routing updates. Only use Area in Interface tab or in Network tab once.</help>
</field>
<field>
<id>network.arearange</id>
<label>Area Range</label>
<type>text</type>
<help>Here you can summarize a network for this area like 192.168.0.0/23</help>
<help>Summarizes multiple networks in the specified area, consolidating multiple networks into a single summarized route like 192.168.0.0/23</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>network.linkedPrefixlistIn</id>
<label>Prefix-List In</label>
<type>dropdown</type>
<help>Prefix-List for inbound direction</help>
<help>Filters inbound route advertisements using a prefix list.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
<field>
<id>network.linkedPrefixlistOut</id>
<label>Prefix-List Out</label>
<type>dropdown</type>
<help>Prefix-List for outbound direction</help>
<help>Filters outbound route advertisements using a prefix list.</help>
<grid_view>
<visible>false</visible>
</grid_view>
</field>
</form>

View file

@ -3,17 +3,21 @@
<id>prefixlist.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<help>Enable / Disable</help>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>prefixlist.name</id>
<label>Name</label>
<type>text</type>
<help>The name of your Prefix-List, please choose one near to the result you want to achieve.</help>
<help>The name of your Prefix-List. If there should be multiple entries for the same prefix list, give them all the same name.</help>
</field>
<field>
<id>prefixlist.seqnumber</id>
<label>Number</label>
<label>Sequence Number</label>
<type>text</type>
<help>The ACL sequence number (10-99)</help>
</field>
@ -27,6 +31,6 @@
<id>prefixlist.network</id>
<label>Network</label>
<type>text</type>
<help>The network pattern you want to match. It's not validated so please be careful!</help>
<help>The network pattern you want to match.</help>
</field>
</form>

View file

@ -3,12 +3,17 @@
<id>routemap.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>routemap.name</id>
<label>Name</label>
<type>text</type>
<help>Route-map name to match and set your patterns, it will be enabled via redistribution.</help>
<help>Route-map name for matching and setting patterns, enabled via redistribution.</help>
</field>
<field>
<id>routemap.action</id>
@ -20,7 +25,7 @@
<id>routemap.id</id>
<label>ID</label>
<type>text</type>
<help>Route-map ID between 10 and 99. Be aware that the sorting will be done under the hood, so when you add an entry between it get's to the right position</help>
<help>Route-map ID between 10 and 99. Entries added in order of insertion.</help>
</field>
<field>
<id>routemap.match2</id>
@ -28,11 +33,12 @@
<type>select_multiple</type>
<style>tokenize</style>
<allownew>true</allownew>
<help>Allows for matching based on prefix lists, multiple selections enabled.</help>
</field>
<field>
<id>routemap.set</id>
<label>Set</label>
<type>text</type>
<help>Free text field for your set, please be careful! You can set e.g. "local-preference 300" or "community 1:1" (http://docs.frrouting.org/en/latest/routemap.html#route-map-set-command)</help>
<help>Free text field for your set. You can set e.g. "local-preference 300" or "community 1:1" (http://docs.frrouting.org/en/latest/routemap.html#route-map-set-command)</help>
</field>
</form>

View file

@ -3,6 +3,11 @@
<id>route.enabled</id>
<label>Enabled</label>
<type>checkbox</type>
<grid_view>
<width>6em</width>
<type>boolean</type>
<formatter>rowtoggle</formatter>
</grid_view>
</field>
<field>
<id>route.network</id>
@ -12,7 +17,7 @@
</field>
<field>
<id>route.gateway</id>
<label>Gateway (optional)</label>
<label>Gateway</label>
<type>text</type>
<help>Optional gateway IP address for this route.</help>
</field>

View file

@ -3,20 +3,20 @@
<id>general.enabled</id>
<label>Enable</label>
<type>checkbox</type>
<help>This will activate the routing service.</help>
<help>This will activate the routing service. Without enabling it globally, none of the individual services will run.</help>
</field>
<field>
<id>general.profile</id>
<label>Profile</label>
<type>dropdown</type>
<advanced>true</advanced>
<help><![CDATA[Control FRR's default profile. "traditional" is the default, "datacenter" is more aggressive. Please refer to the <a href="http://docs.frrouting.org/en/latest/basic.html#profiles">FRR documentation</a> for more information.]]></help>
<help>Control FRRs default profile: traditional reflects defaults adhering mostly to IETF standards or common practices in wide-area internet routing. datacenter reflects a single administrative domain with intradomain links using aggressive timers.</help>
</field>
<field>
<id>general.enablecarp</id>
<label>Enable CARP Failover</label>
<type>checkbox</type>
<help>This will activate the routing service only on the master device.</help>
<help>This will activate the routing service only on the master device. The backup device will stop the service completely.</help>
</field>
<field>
<id>general.enablesnmp</id>
@ -28,7 +28,7 @@
<id>general.enablesyslog</id>
<label>Enable logging</label>
<type>checkbox</type>
<help>Syslog is a service which is made to collect log messages from different software and maybe to a central logging server. Check this box if you have such a setup.</help>
<help>Sends logs to the OPNsense integrated syslog-ng service.</help>
</field>
<field>
<id>general.sysloglevel</id>
@ -40,8 +40,6 @@
<id>general.fwrules</id>
<label>Firewall rules</label>
<type>checkbox</type>
<help>Enable automatically created firewall rules, when additional policies are needed, disable this and define
your own custom policies in the Firewall section.
</help>
<help>Enable automatically created firewall rules, when additional policies are needed, disable this and define your own custom policies in the Firewall section.</help>
</field>
</form>

View file

@ -1,8 +0,0 @@
<form>
<field>
<id>routing.isis.general.Enabled</id>
<label>enable</label>
<type>checkbox</type>
<help>This will activate the isis service.</help>
</field>
</form>

View file

@ -3,17 +3,13 @@
<id>ospf.enabled</id>
<label>Enable</label>
<type>checkbox</type>
<help>This will activate the OSPF service if routing protocols are enabled in "General".</help>
<help>This will activate the OSPF service.</help>
</field>
<field>
<id>ospf.carp_demote</id>
<label>CARP demote</label>
<type>checkbox</type>
<help>
Register CARP status monitor, when no neighbors are found, consider this node less attractive.
This feature needs syslog enabled using "Debugging" logging to catch all relevant status events.
This option is not compatible with "Enable CARP Failover".
</help>
<id>ospf.carp_demote</id>
<label>CARP demote</label>
<type>checkbox</type>
<help>Register CARP status monitor. When no neighbors are found, consider this node less attractive. Requires syslog enabled with “Debugging” logging. Incompatible with “Enable CARP Failover”.</help>
</field>
<field>
<id>ospf.routerid</id>
@ -27,32 +23,31 @@
<label>Reference Cost</label>
<type>text</type>
<advanced>true</advanced>
<help>Here you can adjust the reference cost in Mbps for path calculation. Mostly needed when you bundle interfaces to higher bandwidth.</help>
<help>Adjust the reference cost in Mbps for path calculation, useful when bundling interfaces for higher bandwidth.</help>
</field>
<field>
<id>ospf.passiveinterfaces</id>
<label>Passive Interfaces</label>
<type>select_multiple</type>
<help><![CDATA[Select the interfaces, where no OSPF packets should be sent to.]]></help>
<hint>Type or select interface.</hint>
<help>Select the interfaces where no OSPF packets should be sent.</help>
</field>
<field>
<id>ospf.redistribute</id>
<label>Route Redistribution</label>
<type>select_multiple</type>
<help><![CDATA[Select other routing sources, which should be redistributed to the other nodes.]]></help>
<hint>Type or select a route source.</hint>
<help>Select other routing sources to redistribute to other nodes.</help>
</field>
<field>
<id>ospf.redistributemap</id>
<label>Redistribution Map</label>
<type>dropdown</type>
<help>Route Map to set for Redistribution.</help>
<help>Route Map to set for Redistribution, can be used to send a specific network as advertisement when it is defined in a Prefix List attached to a Route Map.</help>
</field>
<field>
<id>ospf.logadjacencychanges</id>
<label>Log Adjacency Changes</label>
<type>checkbox</type>
<help>If it should be logged when the topology of the area changes.</help>
</field>
<field>
<id>ospf.originate</id>
@ -64,12 +59,12 @@
<id>ospf.originatealways</id>
<label>Always Advertise Default Gateway</label>
<type>checkbox</type>
<help>This will send the information that we have a default gateway, regardless of if it is available.</help>
<help>Always sends default gateway information, regardless of availability.</help>
</field>
<field>
<id>ospf.originatemetric</id>
<label>Advertise Default Gateway Metric</label>
<type>text</type>
<help>This let you manipulate the metric when advertising default gateway.</help>
<help>Allows manipulation of the metric when advertising the default gateway.</help>
</field>
</form>

View file

@ -3,36 +3,31 @@
<id>ospf6.enabled</id>
<label>Enable</label>
<type>checkbox</type>
<help>This will activate the OSPFv3 service if routing protocols are enabled in "General".</help>
<help>This will activate the OSPF service.</help>
</field>
<field>
<id>ospf6.carp_demote</id>
<label>CARP demote</label>
<type>checkbox</type>
<help>
Register CARP status monitor, when no neighbors are found, consider this node less attractive.
This feature needs syslog enabled using "Debugging" logging to catch all relevant status events.
This option is not compatible with "Enable CARP Failover".
</help>
<id>ospf6.carp_demote</id>
<label>CARP demote</label>
<type>checkbox</type>
<help>Register CARP status monitor. When no neighbors are found, consider this node less attractive. Requires syslog enabled with “Debugging” logging. Incompatible with “Enable CARP Failover”.</help>
</field>
<field>
<id>ospf6.redistribute</id>
<label>Route Redistribution</label>
<type>select_multiple</type>
<help><![CDATA[Select other routing sources, which should be redistributed to the other nodes.]]></help>
<hint>Type or select a route source.</hint>
<help>Select other routing sources to redistribute to other nodes.</help>
</field>
<field>
<id>ospf6.redistributemap</id>
<label>Redistribution Map</label>
<type>dropdown</type>
<help>Route Map to set for Redistribution.</help>
<help>Route Map to set for Redistribution, can be used to send a specific network as advertisement when it is defined in a Prefix List attached to a Route Map.</help>
</field>
<field>
<id>ospf6.routerid</id>
<label>Router ID</label>
<type>text</type>
<help>Router ID as IPv4 Address</help>
<help>Router ID as an IPv4 Address to uniquely identify the router.</help>
</field>
<field>
<id>ospf6.originate</id>
@ -44,14 +39,14 @@
<id>ospf6.originatealways</id>
<label>Always Advertise Default Gateway</label>
<type>checkbox</type>
<help>This will send the information that we have a default gateway, regardless of if it is available.</help>
<help>Always sends default gateway information, regardless of availability.</help>
<style>ospf6_originate</style>
</field>
<field>
<id>ospf6.originatemetric</id>
<label>Advertise Default Gateway Metric</label>
<type>text</type>
<help>This let you manipulate the metric when advertising default gateway.</help>
<help>Allows manipulation of the metric when advertising the default gateway.</help>
<style>ospf6_originate</style>
</field>
</form>

View file

@ -3,7 +3,7 @@
<id>rip.enabled</id>
<label>enable</label>
<type>checkbox</type>
<help>This will activate the RIP service if the support of routing protocols is enabled in "General".</help>
<help>This will activate the RIP service.</help>
</field>
<field>
<id>rip.version</id>
@ -15,15 +15,13 @@
<id>rip.passiveinterfaces</id>
<label>Passive Interfaces</label>
<type>select_multiple</type>
<help><![CDATA[Select the interfaces, where no RIP packets should be sent to.]]></help>
<hint>Type or select interface.</hint>
<help>Select the interfaces, where no RIP packets should be sent to, (e.g., WAN interface).</help>
</field>
<field>
<id>rip.redistribute</id>
<label>Route Redistribution</label>
<type>select_multiple</type>
<help><![CDATA[Select other routing sources, which should be redistributed to the other nodes.]]></help>
<hint>Type or select a route source.</hint>
<help>Select other routing sources, which should be redistributed to the other nodes. A good choice is Connected Routes to automatically redistribute all locally attached routes to other routers with RIP. Otherwise use the Networks option to manually insert networks to distribute.</help>
</field>
<field>
<id>rip.networks</id>
@ -37,6 +35,6 @@
<id>rip.defaultmetric</id>
<label>Default Metric</label>
<type>text</type>
<help>Set the default metric to a value between 1 and 16.</help>
<help>Set the default metric to a value between 1 and 16. Routes with lower metrics will be preferred, while higher metrics indicate less preferred or distant paths.</help>
</field>
</form>

View file

@ -3,6 +3,6 @@
<id>staticd.enabled</id>
<label>Enable</label>
<type>checkbox</type>
<help>This will activate the staticd service if the support of routing protocols is enabled in "General".</help>
<help>This will activate the staticd service.</help>
</field>
</form>

View file

@ -4,7 +4,6 @@
<RIP VisibleName="RIP" cssClass="fa fa-expand fa-fw" url="/ui/quagga/rip/index" order="10" />
<OSPF VisibleName="OSPF" cssClass="fa fa-map fa-fw" url="/ui/quagga/ospf/index" order="20" />
<OSPFv3 VisibleName="OSPFv3" cssClass="fa fa-map fa-fw" url="/ui/quagga/ospf6/index" order="25" />
<!--<ISIS VisibleName="IS-IS" cssClass="fa fa-bolt fa-fw" url="/ui/quagga/isis/index" order="30" />-->
<BGP VisibleName="BGP" cssClass="fa fa-globe fa-fw" url="/ui/quagga/bgp/index" order="40" />
<BFD VisibleName="BFD" cssClass="fa fa-exchange fa-fw" url="/ui/quagga/bfd/index" order="50" />
<STATIC VisibleName="STATIC" cssClass="fa fa-expand fa-fw" url="/ui/quagga/static/index" order="60" />

View file

@ -36,7 +36,7 @@ POSSIBILITY OF SUCH DAMAGE.
updateServiceControlUI('quagga');
});
$("#grid-neighbors").UIBootgrid({
$("#{{formGridEditBFDNeighbor['table_id']}}").UIBootgrid({
'search':'/api/quagga/bfd/searchNeighbor',
'get':'/api/quagga/bfd/getNeighbor/',
'set':'/api/quagga/bfd/setNeighbor/',
@ -65,32 +65,13 @@ POSSIBILITY OF SUCH DAMAGE.
</ul>
<div class="tab-content content-box tab-content">
<!-- Tab: General -->
<div id="general" class="tab-pane fade in active">
{{ partial("layout_partials/base_form",['fields':bfdForm,'id':'frm_bfd_settings'])}}
</div>
<!-- Tab: Neighbors -->
<div id="neighbors" class="tab-pane fade in">
<table id="grid-neighbors" class="table table-responsive" data-editDialog="DialogEditBFDNeighbor">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="description" data-type="string" data-visible="true">{{ lang._('Description') }}</th>
<th data-column-id="address" data-type="string" data-visible="true">{{ lang._('Neighbor Address') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBFDNeighbor)}}
</div>
</div>
@ -107,6 +88,9 @@ POSSIBILITY OF SUCH DAMAGE.
<br/><br/>
</div>
</div>
<div id="BFDChangeMessage" class="alert alert-info" style="display: none" role="alert">
{{ lang._('After changing settings, please remember to apply them.') }}
</div>
</section>
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBFDNeighbor,'id':'DialogEditBFDNeighbor','label':lang._('Edit Neighbor')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBFDNeighbor,'id':formGridEditBFDNeighbor['edit_dialog_id'],'label':lang._('Edit Neighbor')])}}

View file

@ -47,7 +47,7 @@ POSSIBILITY OF SUCH DAMAGE.
}
});
$("#grid-neighbors").UIBootgrid({
$("#{{formGridEditBGPNeighbor['table_id']}}").UIBootgrid({
'search':'/api/quagga/bgp/searchNeighbor',
'get':'/api/quagga/bgp/getNeighbor/',
'set':'/api/quagga/bgp/setNeighbor/',
@ -55,7 +55,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/bgp/delNeighbor/',
'toggle':'/api/quagga/bgp/toggleNeighbor/'
});
$("#grid-aspaths").UIBootgrid({
$("#{{formGridEditBGPASPaths['table_id']}}").UIBootgrid({
'search':'/api/quagga/bgp/searchAspath',
'get':'/api/quagga/bgp/getAspath/',
'set':'/api/quagga/bgp/setAspath/',
@ -63,7 +63,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/bgp/delAspath/',
'toggle':'/api/quagga/bgp/toggleAspath/'
});
$("#grid-prefixlists").UIBootgrid({
$("#{{formGridEditBGPPrefixLists['table_id']}}").UIBootgrid({
'search':'/api/quagga/bgp/searchPrefixlist',
'get':'/api/quagga/bgp/getPrefixlist/',
'set':'/api/quagga/bgp/setPrefixlist/',
@ -71,7 +71,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/bgp/delPrefixlist/',
'toggle':'/api/quagga/bgp/togglePrefixlist/'
});
$("#grid-communitylists").UIBootgrid({
$("#{{formGridEditBGPCommunityLists['table_id']}}").UIBootgrid({
'search':'/api/quagga/bgp/searchCommunitylist',
'get':'/api/quagga/bgp/getCommunitylist/',
'set':'/api/quagga/bgp/setCommunitylist/',
@ -79,7 +79,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/bgp/delCommunitylist/',
'toggle':'/api/quagga/bgp/toggleCommunitylist/'
});
$("#grid-routemaps").UIBootgrid({
$("#{{formGridEditBGPRouteMaps['table_id']}}").UIBootgrid({
'search':'/api/quagga/bgp/searchRoutemap',
'get':'/api/quagga/bgp/getRoutemap/',
'set':'/api/quagga/bgp/setRoutemap/',
@ -87,7 +87,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/bgp/delRoutemap/',
'toggle':'/api/quagga/bgp/toggleRoutemap/'
});
$("#grid-peergroups").UIBootgrid({
$("#{{formGridEditBGPPeergroups['table_id']}}").UIBootgrid({
'search':'/api/quagga/bgp/searchPeergroup',
'get':'/api/quagga/bgp/getPeergroup/',
'set':'/api/quagga/bgp/setPeergroup/',
@ -109,178 +109,33 @@ POSSIBILITY OF SUCH DAMAGE.
<li><a data-toggle="tab" href="#peergroups">{{ lang._('Peer Groups') }}</a></li>
</ul>
<div class="tab-content content-box tab-content">
<!-- Tab: General -->
<div id="general" class="tab-pane fade in active">
<div class="content-box" style="padding-bottom: 1.5em;">
{{ partial("layout_partials/base_form",['fields':bgpForm,'id':'frm_bgp_settings'])}}
</div>
{{ partial("layout_partials/base_form",['fields':bgpForm,'id':'frm_bgp_settings'])}}
</div>
<!-- Tab: Neighbors -->
<div id="neighbors" class="tab-pane fade in">
<table id="grid-neighbors" class="table table-responsive" data-editDialog="DialogEditBGPNeighbor">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="address" data-type="string">{{ lang._('Neighbor Address') }}</th>
<th data-column-id="remoteas" data-type="string">{{ lang._('Remote AS') }}</th>
<th data-column-id="linkedPrefixlistIn" data-type="string">{{ lang._('Prefix List inbound') }}</th>
<th data-column-id="linkedPrefixlistOut" data-type="string">{{ lang._('Prefix List outbound') }}</th>
<th data-column-id="linkedRoutemapIn" data-type="string">{{ lang._('Route Map inbound') }}</th>
<th data-column-id="linkedRoutemapOut" data-type="string">{{ lang._('Route Map outbound') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBGPNeighbor)}}
</div>
<!-- Tab: AS Paths -->
<div id="aspaths" class="tab-pane fade in">
<table id="grid-aspaths" class="table table-responsive" data-editDialog="DialogEditBGPASPaths">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle" data-sortable="false">{{ lang._('Enabled') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="number" data-type="string" data-sortable="true">{{ lang._('Number') }}</th>
<th data-column-id="action" data-type="string" data-sortable="false">{{ lang._('Action') }}</th>
<th data-column-id="as" data-type="string" data-sortable="false">{{ lang._('AS Number') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBGPASPaths)}}
</div>
<!-- Tab: Prefix Lists -->
<div id="prefixlists" class="tab-pane fade in">
<table id="grid-prefixlists" class="table table-responsive" data-editDialog="DialogEditBGPPrefixLists">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle" data-sortable="false">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string" data-sortable="true">{{ lang._('Name') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="seqnumber" data-type="string" data-sortable="true">{{ lang._('Sequence Number') }}</th>
<th data-column-id="action" data-type="string" data-sortable="false">{{ lang._('Action') }}</th>
<th data-column-id="network" data-type="string" data-sortable="false">{{ lang._('Network') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBGPPrefixLists)}}
</div>
<!-- Tab: Community Lists -->
<div id="communitylists" class="tab-pane fade in">
<table id="grid-communitylists" class="table table-responsive" data-editDialog="DialogEditBGPCommunityLists">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle" data-sortable="false">{{ lang._('Enabled') }}</th>
<th data-column-id="number" data-type="string" data-sortable="true">{{ lang._('Number') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="seqnumber" data-type="string" data-sortable="true">{{ lang._('Secquence Number') }}</th>
<th data-column-id="action" data-type="string" data-sortable="false">{{ lang._('Action') }}</th>
<th data-column-id="community" data-type="string" data-sortable="false">{{ lang._('Community') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBGPCommunityLists)}}
</div>
<!-- Tab: Route Maps -->
<div id="routemaps" class="tab-pane fade in">
<table id="grid-routemaps" class="table table-responsive" data-editDialog="DialogEditBGPRouteMaps">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string">{{ lang._('Name') }}</th>
<th data-column-id="description" data-type="string">{{ lang._('Description') }}</th>
<th data-column-id="action" data-type="string">{{ lang._('Action') }}</th>
<th data-column-id="id" data-type="string">{{ lang._('ID') }}</th>
<th data-column-id="match" data-type="string">{{ lang._('AS Path List') }}</th>
<th data-column-id="match2" data-type="string">{{ lang._('Prefix List') }}</th>
<th data-column-id="match3" data-type="string">{{ lang._('Community List') }}</th>
<th data-column-id="set" data-type="string">{{ lang._('Set') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBGPRouteMaps)}}
</div>
<!-- Tab: Peer Groups -->
<div id="peergroups" class="tab-pane fade in">
<table id="grid-peergroups" class="table table-responsive" data-editDialog="DialogEditBGPPeergroups">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string">{{ lang._('Name') }}</th>
<th data-column-id="nexthopself" data-type="string" data-formatter="boolean">{{ lang._('Next Hop Self') }}</th>
<th data-column-id="defaultoriginate" data-type="string" data-formatter="boolean">{{ lang._('Default Originate') }}</th>
<th data-column-id="linkedPrefixlistIn" data-type="string">{{ lang._('Prefix List inbound') }}</th>
<th data-column-id="linkedPrefixlistOut" data-type="string">{{ lang._('Prefix List outbound') }}</th>
<th data-column-id="linkedRoutemapIn" data-type="string">{{ lang._('Route Map inbound') }}</th>
<th data-column-id="linkedRoutemapOut" data-type="string">{{ lang._('Route Map outbound') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditBGPPeergroups)}}
</div>
</div>
@ -297,11 +152,14 @@ POSSIBILITY OF SUCH DAMAGE.
<br/><br/>
</div>
</div>
<div id="BGPChangeMessage" class="alert alert-info" style="display: none" role="alert">
{{ lang._('After changing settings, please remember to apply them.') }}
</div>
</section>
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPNeighbor,'id':'DialogEditBGPNeighbor','label':lang._('Edit Neighbor')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPASPaths,'id':'DialogEditBGPASPaths','label':lang._('Edit AS Paths')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPPrefixLists,'id':'DialogEditBGPPrefixLists','label':lang._('Edit Prefix Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPCommunityLists,'id':'DialogEditBGPCommunityLists','label':lang._('Edit Community Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPRouteMaps,'id':'DialogEditBGPRouteMaps','label':lang._('Edit Route Maps')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPPeergroups,'id':'DialogEditBGPPeergroups','label':lang._('Edit Peer Groups')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPNeighbor,'id':formGridEditBGPNeighbor['edit_dialog_id'],'label':lang._('Edit Neighbor')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPASPaths,'id':formGridEditBGPASPaths['edit_dialog_id'],'label':lang._('Edit AS Paths')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPPrefixLists,'id':formGridEditBGPPrefixLists['edit_dialog_id'],'label':lang._('Edit Prefix Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPCommunityLists,'id':formGridEditBGPCommunityLists['edit_dialog_id'],'label':lang._('Edit Community Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPRouteMaps,'id':formGridEditBGPRouteMaps['edit_dialog_id'],'label':lang._('Edit Route Maps')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditBGPPeergroups,'id':formGridEditBGPPeergroups['edit_dialog_id'],'label':lang._('Edit Peer Groups')])}}

View file

@ -51,7 +51,7 @@ POSSIBILITY OF SUCH DAMAGE.
}
});
$("#grid-networks").UIBootgrid({
$("#{{formGridEditNetwork['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospfsettings/searchNetwork',
'get':'/api/quagga/ospfsettings/getNetwork/',
'set':'/api/quagga/ospfsettings/setNetwork/',
@ -59,7 +59,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/ospfsettings/delNetwork/',
'toggle':'/api/quagga/ospfsettings/toggleNetwork/'
});
$("#grid-interfaces").UIBootgrid({
$("#{{formGridEditInterface['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospfsettings/searchInterface',
'get':'/api/quagga/ospfsettings/getInterface/',
'set':'/api/quagga/ospfsettings/setInterface/',
@ -67,7 +67,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/ospfsettings/delInterface/',
'toggle':'/api/quagga/ospfsettings/toggleInterface/'
});
$("#grid-prefixlists").UIBootgrid({
$("#{{formGridEditPrefixLists['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospfsettings/searchPrefixlist',
'get':'/api/quagga/ospfsettings/getPrefixlist/',
'set':'/api/quagga/ospfsettings/setPrefixlist/',
@ -75,7 +75,7 @@ POSSIBILITY OF SUCH DAMAGE.
'del':'/api/quagga/ospfsettings/delPrefixlist/',
'toggle':'/api/quagga/ospfsettings/togglePrefixlist/'
});
$("#grid-routemaps").UIBootgrid({
$("#{{formGridEditRouteMaps['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospfsettings/searchRoutemap',
'get':'/api/quagga/ospfsettings/getRoutemap/',
'set':'/api/quagga/ospfsettings/setRoutemap/',
@ -101,110 +101,19 @@ POSSIBILITY OF SUCH DAMAGE.
</div>
<!-- Tab: Networks -->
<div id="networks" class="tab-pane fade in">
<table id="grid-networks" class="table table-responsive" data-editDialog="DialogEditNetwork">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="ipaddr" data-type="string" data-visible="true">{{ lang._('Network Address') }}</th>
<th data-column-id="netmask" data-type="string" data-visible="true">{{ lang._('Mask') }}</th>
<th data-column-id="area" data-type="string" data-visible="true">{{ lang._('Area') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditNetwork)}}
</div>
<!-- Tab: Interfaces -->
<div id="interfaces" class="tab-pane fade in">
<table id="grid-interfaces" class="table table-responsive" data-editDialog="DialogEditInterface">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="interfacename" data-type="string" data-visible="true">{{ lang._('Interface Name') }}</th>
<th data-column-id="networktype" data-type="string" data-visible="true">{{ lang._('Network Type') }}</th>
<th data-column-id="authtype" data-type="string" data-visible="true">{{ lang._('Authentication Type') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditInterface)}}
</div>
<!-- Tab: Prefixlists -->
<div id="prefixlists" class="tab-pane fade in">
<table id="grid-prefixlists" class="table table-responsive" data-editDialog="DialogEditPrefixLists">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle" data-sortable="false">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string" data-visible="true" data-sortable="true">{{ lang._('Name') }}</th>
<th data-column-id="seqnumber" data-type="string" data-visible="true" data-sortable="true">{{ lang._('Sequence Number') }}</th>
<th data-column-id="action" data-type="string" data-visible="true" data-sortable="false">{{ lang._('Action') }}</th>
<th data-column-id="network" data-type="string" data-visible="true" data-sortable="false">{{ lang._('Network') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditPrefixLists)}}
</div>
<!-- Tab: Routemaps -->
<div id="routemaps" class="tab-pane fade in">
<table id="grid-routemaps" class="table table-responsive" data-editDialog="DialogEditRouteMaps">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string" data-visible="true">{{ lang._('Name') }}</th>
<th data-column-id="action" data-type="string" data-visible="true">{{ lang._('Action') }}</th>
<th data-column-id="id" data-type="string" data-visible="true">{{ lang._('ID') }}</th>
<th data-column-id="match2" data-type="string" data-visible="true">{{ lang._('Prefix List') }}</th>
<th data-column-id="set" data-type="string" data-visible="true">{{ lang._('Set') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditRouteMaps)}}
</div>
</div>
@ -220,9 +129,12 @@ POSSIBILITY OF SUCH DAMAGE.
></button>
</div>
</div>
<div id="OSPFChangeMessage" class="alert alert-info" style="display: none" role="alert">
{{ lang._('After changing settings, please remember to apply them.') }}
</div>
</section>
{{ partial("layout_partials/base_dialog",['fields':formDialogEditNetwork,'id':'DialogEditNetwork','label':lang._('Edit Network')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditInterface,'id':'DialogEditInterface','label':lang._('Edit Interface')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditPrefixLists,'id':'DialogEditPrefixLists','label':lang._('Edit Prefix Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditRouteMaps,'id':'DialogEditRouteMaps','label':lang._('Edit Route Maps')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditNetwork,'id':formGridEditNetwork['edit_dialog_id'],'label':lang._('Edit Network')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditInterface,'id':formGridEditInterface['edit_dialog_id'],'label':lang._('Edit Interface')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditPrefixLists,'id':formGridEditPrefixLists['edit_dialog_id'],'label':lang._('Edit Prefix Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditRouteMaps,'id':formGridEditRouteMaps['edit_dialog_id'],'label':lang._('Edit Route Maps')])}}

View file

@ -46,7 +46,7 @@
}
});
$("#grid-networks").UIBootgrid({
$("#{{formGridEditNetwork['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospf6settings/searchNetwork',
'get':'/api/quagga/ospf6settings/getNetwork/',
'set':'/api/quagga/ospf6settings/setNetwork/',
@ -54,7 +54,7 @@
'del':'/api/quagga/ospf6settings/delNetwork/',
'toggle':'/api/quagga/ospf6settings/toggleNetwork/'
});
$("#grid-interfaces").UIBootgrid({
$("#{{formGridEditInterface['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospf6settings/searchInterface',
'get':'/api/quagga/ospf6settings/getInterface/',
'set':'/api/quagga/ospf6settings/setInterface/',
@ -62,7 +62,7 @@
'del':'/api/quagga/ospf6settings/delInterface/',
'toggle':'/api/quagga/ospf6settings/toggleInterface/'
});
$("#grid-prefixlists").UIBootgrid({
$("#{{formGridEditPrefixLists['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospf6settings/searchPrefixlist',
'get':'/api/quagga/ospf6settings/getPrefixlist/',
'set':'/api/quagga/ospf6settings/setPrefixlist/',
@ -70,7 +70,7 @@
'del':'/api/quagga/ospf6settings/delPrefixlist/',
'toggle':'/api/quagga/ospf6settings/togglePrefixlist/'
});
$("#grid-routemaps").UIBootgrid({
$("#{{formGridEditRouteMaps['table_id']}}").UIBootgrid({
'search':'/api/quagga/ospf6settings/searchRoutemap',
'get':'/api/quagga/ospf6settings/getRoutemap/',
'set':'/api/quagga/ospf6settings/setRoutemap/',
@ -101,122 +101,25 @@
<li><a data-toggle="tab" href="#routemaps">{{ lang._('Route Maps') }}</a></li>
</ul>
<div class="tab-content content-box tab-content">
<!-- Tab: General -->
<div id="general" class="tab-pane fade in active">
<div class="content-box" style="padding-bottom: 1.5em;">
{{ partial("layout_partials/base_form",['fields':ospf6Form,'id':'frm_ospf6_settings'])}}
</div>
{{ partial("layout_partials/base_form",['fields':ospf6Form,'id':'frm_ospf6_settings'])}}
</div>
<!-- Tab: Networks -->
<div id="networks" class="tab-pane fade in">
<table id="grid-networks" class="table table-responsive" data-editDialog="DialogEditNetwork">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="ipaddr" data-type="string" data-visible="true">{{ lang._('Network Address') }}</th>
<th data-column-id="netmask" data-type="string" data-visible="true">{{ lang._('Mask') }}</th>
<th data-column-id="area" data-type="string" data-visible="true">{{ lang._('Area') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditNetwork)}}
</div>
<!-- Tab: Interfaces -->
<div id="interfaces" class="tab-pane fade in">
<table id="grid-interfaces" class="table table-responsive" data-editDialog="DialogEditInterface">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="interfacename" data-type="string" data-visible="true">{{ lang._('Interface Name') }}</th>
<th data-column-id="area" data-type="string" data-visible="true">{{ lang._('Area') }}</th>
<th data-column-id="networktype" data-type="string" data-visible="true">{{ lang._('Network Type') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditInterface)}}
</div>
<!-- Tab: Prefix Lists -->
<!-- Tab: Prefixlists -->
<div id="prefixlists" class="tab-pane fade in">
<table id="grid-prefixlists" class="table table-responsive" data-editDialog="DialogEditPrefixLists">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle" data-sortable="false">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string" data-visible="true" data-sortable="true">{{ lang._('Name') }}</th>
<th data-column-id="seqnumber" data-type="string" data-visible="true" data-sortable="true">{{ lang._('Sequence Number') }}</th>
<th data-column-id="action" data-type="string" data-visible="true" data-sortable="false">{{ lang._('Action') }}</th>
<th data-column-id="network" data-type="string" data-visible="true" data-sortable="false">{{ lang._('Network') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditPrefixLists)}}
</div>
<!-- Tab: Route Maps -->
<!-- Tab: Routemaps -->
<div id="routemaps" class="tab-pane fade in">
<table id="grid-routemaps" class="table table-responsive" data-editDialog="DialogEditRouteMaps">
<thead>
<tr>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="name" data-type="string" data-visible="true">{{ lang._('Name') }}</th>
<th data-column-id="action" data-type="string" data-visible="true">{{ lang._('Action') }}</th>
<th data-column-id="id" data-type="string" data-visible="true">{{ lang._('ID') }}</th>
<th data-column-id="match2" data-type="string" data-visible="true">{{ lang._('Prefix List') }}</th>
<th data-column-id="set" data-type="string" data-visible="true">{{ lang._('Set') }}</th>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="commands" data-formatter="commands" data-sortable="false">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditRouteMaps)}}
</div>
</div>
@ -232,10 +135,12 @@
></button>
</div>
</div>
<div id="OSPF6ChangeMessage" class="alert alert-info" style="display: none" role="alert">
{{ lang._('After changing settings, please remember to apply them.') }}
</div>
</section>
{{ partial("layout_partials/base_dialog",['fields':formDialogEditNetwork,'id':'DialogEditNetwork','label':lang._('Edit Network')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditInterface,'id':'DialogEditInterface','label':lang._('Edit Interface')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditPrefixLists,'id':'DialogEditPrefixLists','label':lang._('Edit Prefix Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditRouteMaps,'id':'DialogEditRouteMaps','label':lang._('Edit Route Maps')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditNetwork,'id':formGridEditNetwork['edit_dialog_id'],'label':lang._('Edit Network')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditInterface,'id':formGridEditInterface['edit_dialog_id'],'label':lang._('Edit Interface')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditPrefixLists,'id':formGridEditPrefixLists['edit_dialog_id'],'label':lang._('Edit Prefix Lists')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditRouteMaps,'id':formGridEditRouteMaps['edit_dialog_id'],'label':lang._('Edit Route Maps')])}}

View file

@ -26,24 +26,23 @@
#}
<script>
$( document ).ready(function() {
let data_get_map = {'frm_static_settings':"/api/quagga/static/get"};
mapDataToFormUI(data_get_map).done(function(data){
formatTokenizersUI();
$('.selectpicker').selectpicker('refresh');
updateServiceControlUI('quagga');
});
$( document ).ready(function() {
mapDataToFormUI({'frm_static_settings': "/api/quagga/static/get"}).done(function(data){
formatTokenizersUI();
$('.selectpicker').selectpicker('refresh');
updateServiceControlUI('quagga');
});
$("#grid-iproutes").UIBootgrid({
'search':'/api/quagga/static/searchRoute',
'get':'/api/quagga/static/getRoute/',
'set':'/api/quagga/static/setRoute/',
'add':'/api/quagga/static/addRoute/',
'del':'/api/quagga/static/delRoute/',
'toggle':'/api/quagga/static/toggleRoute/'
});
$("#{{formGridEditSTATICRoute['table_id']}}").UIBootgrid({
'search':'/api/quagga/static/searchRoute',
'get':'/api/quagga/static/getRoute/',
'set':'/api/quagga/static/setRoute/',
'add':'/api/quagga/static/addRoute/',
'del':'/api/quagga/static/delRoute/',
'toggle':'/api/quagga/static/toggleRoute/'
});
$("#reconfigureAct").SimpleActionButton({
$("#reconfigureAct").SimpleActionButton({
onPreAction: function() {
const dfObj = new $.Deferred();
saveFormToEndpoint("/api/quagga/static/set", 'frm_static_settings', function () { dfObj.resolve(); }, true, function () { dfObj.reject(); });
@ -63,51 +62,32 @@
</ul>
<div class="tab-content content-box">
<!-- general settings -->
<!-- Tab: General -->
<div id="general" class="tab-pane fade in active">
{{ partial("layout_partials/base_form",['fields':staticForm,'id':'frm_static_settings'])}}
</div>
<!-- Tab: Routes -->
<div id="iproute" class="tab-pane fade in">
<table id="grid-iproutes" class="table table-responsive" data-editDialog="DialogEditSTATICRoute">
<thead>
<tr>
<th data-column-id="uuid" data-type="string" data-identifier="true" data-visible="false">{{ lang._('ID') }}</th>
<th data-column-id="enabled" data-type="string" data-formatter="rowtoggle">{{ lang._('Enabled') }}</th>
<th data-column-id="network" data-type="string">{{ lang._('Network') }}</th>
<th data-column-id="gateway" data-type="string">{{ lang._('Gateway') }}</th>
<th data-column-id="interfacename" data-type="string">{{ lang._('Interface') }}</th>
<th data-column-id="commands" data-formatter="commands">{{ lang._('Commands') }}</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<td></td>
<td>
<button data-action="add" type="button" class="btn btn-xs btn-default"><span class="fa fa-plus"></span></button>
<button data-action="deleteSelected" type="button" class="btn btn-xs btn-default"><span class="fa fa-trash-o"></span></button>
</td>
</tr>
</tfoot>
</table>
{{ partial('layout_partials/base_bootgrid_table', formGridEditSTATICRoute)}}
</div>
</div>
<section class="page-content-main">
<div class="content-box">
<div class="col-md-12">
<br/>
<button class="btn btn-primary" id="reconfigureAct"
data-endpoint='/api/quagga/service/reconfigure'
data-label="{{ lang._('Apply') }}"
data-error-title="{{ lang._('Error reconfiguring STATIC') }}"
type="button"
></button>
<br/><br/>
</div>
</div>
<div class="content-box">
<div class="col-md-12">
<br/>
<button class="btn btn-primary" id="reconfigureAct"
data-endpoint='/api/quagga/service/reconfigure'
data-label="{{ lang._('Apply') }}"
data-error-title="{{ lang._('Error reconfiguring STATIC') }}"
type="button"
></button>
<br/><br/>
</div>
</div>
<div id="STATICChangeMessage" class="alert alert-info" style="display: none" role="alert">
{{ lang._('After changing settings, please remember to apply them.') }}
</div>
</section>
{{ partial("layout_partials/base_dialog",['fields':formDialogEditSTATICRoute,'id':'DialogEditSTATICRoute','label':lang._('Edit Routes')])}}
{{ partial("layout_partials/base_dialog",['fields':formDialogEditSTATICRoute,'id':formGridEditSTATICRoute['edit_dialog_id'],'label':lang._('Edit Routes')])}}

View file

@ -13,8 +13,7 @@ if helpers.exists('OPNsense.quagga.bfd.enabled') and OPNsense.quagga.bfd.enabled
if helpers.exists('OPNsense.quagga.bgp.enabled') and OPNsense.quagga.bgp.enabled == '1' %} bgpd{% endif %}{%
if helpers.exists('OPNsense.quagga.ospf6.enabled') and OPNsense.quagga.ospf6.enabled == '1' %} ospf6d{% endif %}{%
if helpers.exists('OPNsense.quagga.ripng.enabled') and OPNsense.quagga.ripng.enabled == '1' %} ripngd{% endif %}{%
if helpers.exists('OPNsense.quagga.static.enabled') and OPNsense.quagga.static.enabled == '1' %} staticd{% endif %}{%
if helpers.exists('OPNsense.quagga.isis.enabled') and OPNsense.quagga.isis.enabled == '1' %} isisd{% endif %}"
if helpers.exists('OPNsense.quagga.static.enabled') and OPNsense.quagga.static.enabled == '1' %} staticd{% endif %}"
frr_carp_demote="{%
if not helpers.empty('OPNsense.quagga.ospf.carp_demote') %} ospfd{% endif %}{%
if not helpers.empty('OPNsense.quagga.ospf6.carp_demote') %} ospf6d{% endif

View file

@ -108,19 +108,19 @@
<id>caddy.general.TlsDnsApiKey</id>
<label>API Field 1</label>
<type>text</type>
<help><![CDATA[This is the standard field for the API Key. Field can be left empty if optional: Cloudflare "api_token", Duckdns "api_token", DigitalOcean "auth_token", Godaddy "api_token", Gandi "bearer_token", IONOS "api_token", deSEC "token", Route53 "access_key_id", Porkbun "api_key", ACME-DNS "username", Netlify "personal_access_token", Njalla "api_token", Google Cloud DNS "gcp_project", Azure "tenant_id", OVH "endpoint", Namecheap "api_key", PowerDNS "server_url", DDNSS "api_token", Linode "api_token", Tencent Cloud "secret_id", Dinahosting "username", Hexonet "username", Mail-in-a-Box "api_url", DNS Made Easy "api_key", Bunny "access_key", Civo "api_token", Scaleway "secret_key", ACME Proxy "username", INWX "username", Netcup "customer_number", RFC2136 "key_name", Name.com "token", EasyDNS "api_token", Infomaniak "api_token", DirectAdmin "host", Hosttech "api_token", Vultr "api_token", Hetzner "api_token"]]></help>
<help><![CDATA[This is the standard field for the API Key. Field can be left empty if optional: Cloudflare "api_token", Duckdns "api_token", DigitalOcean "auth_token", Godaddy "api_token", Gandi "bearer_token", IONOS "api_token", deSEC "token", Route53 "access_key_id", Porkbun "api_key", ACME-DNS "username", Netlify "personal_access_token", Njalla "api_token", Google Cloud DNS "gcp_project", Azure "tenant_id", OVH "endpoint", Namecheap "api_key", PowerDNS "server_url", DDNSS "api_token", Linode "api_token", Tencent Cloud "secret_id", Dinahosting "username", Hexonet "username", Mail-in-a-Box "api_url", DNS Made Easy "api_key", Bunny "access_key", Civo "api_token", Scaleway "secret_key", ACME Proxy "username", INWX "username", Netcup "customer_number", RFC2136 "key_name", Name.com "token", EasyDNS "api_token", Infomaniak "api_token", DirectAdmin "host", Hosttech "api_token", Vultr "api_token", Hetzner "api_token", ClouDNS "auth_id".]]></help>
</field>
<field>
<id>caddy.general.TlsDnsSecretApiKey</id>
<label>API Field 2</label>
<type>text</type>
<help><![CDATA[Leave empty if your DNS Provider isn't specified here. Field can be left empty if optional: Duckdns "override_domain", Route53 "secret_access_key", Porkbun "api_secret_key", ACME-DNS "password", Azure "client_id", OVH "application_key", Namecheap "user", PowerDNS "api_token", DDNSS "username", Linode "api_url", Tencent Cloud "secret_key", Dinahosting "password", Hexonet "password", Mail-in-a-Box "email_address", DNS Made Easy "secret_key", Scaleway "organization_id", ACME Proxy "password", INWX "password", Netcup "api_key", RFC2136 "key_alg", Name.com "server", EasyDNS "api_key", DirectAdmin "user".]]></help>
<help><![CDATA[Leave empty if your DNS Provider isn't specified here. Field can be left empty if optional: Duckdns "override_domain", Route53 "secret_access_key", Porkbun "api_secret_key", ACME-DNS "password", Azure "client_id", OVH "application_key", Namecheap "user", PowerDNS "api_token", DDNSS "username", Linode "api_url", Tencent Cloud "secret_key", Dinahosting "password", Hexonet "password", Mail-in-a-Box "email_address", DNS Made Easy "secret_key", Scaleway "organization_id", ACME Proxy "password", INWX "password", Netcup "api_key", RFC2136 "key_alg", Name.com "server", EasyDNS "api_key", DirectAdmin "user", ClouDNS "auth_password".]]></help>
</field>
<field>
<id>caddy.general.TlsDnsOptionalField1</id>
<label>API Field 3</label>
<type>text</type>
<help><![CDATA[Leave empty if your DNS Provider isn't specified here. Field can be left empty if optional: Route53 "hosted_zone_id", ACME-DNS "subdomain", Azure "client_secret", OVH "application_secret", Namecheap "api_endpoint", DDNSS "password", Linode "api_version", Mail-in-a-Box "password", DNS Made Easy "api_endpoint", ACME Proxy "endpoint", INWX "shared_secret", Netcup "api_password", Name.com "user", EasyDNS "api_url", DirectAdmin "login_key", RFC2136 "key".]]></help>
<help><![CDATA[Leave empty if your DNS Provider isn't specified here. Field can be left empty if optional: Route53 "hosted_zone_id", ACME-DNS "subdomain", Azure "client_secret", OVH "application_secret", Namecheap "api_endpoint", DDNSS "password", Linode "api_version", Mail-in-a-Box "password", DNS Made Easy "api_endpoint", ACME Proxy "endpoint", INWX "shared_secret", Netcup "api_password", Name.com "user", EasyDNS "api_url", DirectAdmin "login_key", RFC2136 "key", ClouDNS "sub_auth_id".]]></help>
</field>
<field>
<id>caddy.general.TlsDnsOptionalField2</id>

View file

@ -61,6 +61,7 @@
<civo>Civo (optional)</civo>
<easydns>EasyDNS (optional)</easydns>
<hosttech>Hosttech (optional)</hosttech>
<cloudns>ClouDNS (optional)</cloudns>
</OptionValues>
</TlsDnsProvider>
<TlsDnsApiKey type="TextField"/>

View file

@ -171,7 +171,7 @@
# The same providers have to be added to "OPNsense/Caddy/includeDnsProvider", best in the same order as in this array for maintainability.
# For a new provider to work, it has to be compiled into the caddy binary.
#}
{% set dnsProviderSpecialConfig = ['duckdns', 'porkbun', 'desec', 'route53', 'acmedns', 'googleclouddns', 'azure', 'ovh', 'namecheap', 'powerdns', 'ddnss', 'linode', 'tencentcloud', 'dinahosting', 'hexonet', 'mailinabox', 'netcup', 'rfc2136', 'dnsmadeeasy', 'civo', 'scaleway', 'acmeproxy', 'inwx', 'namedotcom', 'easydns', 'directadmin'] %}
{% set dnsProviderSpecialConfig = ['duckdns', 'porkbun', 'desec', 'route53', 'acmedns', 'googleclouddns', 'azure', 'ovh', 'namecheap', 'powerdns', 'ddnss', 'linode', 'tencentcloud', 'dinahosting', 'hexonet', 'mailinabox', 'netcup', 'rfc2136', 'dnsmadeeasy', 'civo', 'scaleway', 'acmeproxy', 'inwx', 'namedotcom', 'easydns', 'directadmin', 'cloudns'] %}
{# Conditionally add the dynamic_dns section, acmedns provider is special, it does not support dynamic_dns. #}
{% if dnsProvider and dynDnsDomains|length > 0 and dnsProvider != "acmedns" %}

View file

@ -183,4 +183,11 @@
{% endif %}
{% if dnsOptionalField2 %}insecure_requests {{ dnsOptionalField2 }}
{% endif %}
{% elif dnsProvider == 'cloudns' %}
{% if dnsApiKey %}auth_id {{ dnsApiKey }}
{% endif %}
{% if dnsSecretApiKey %}auth_password {{ dnsSecretApiKey }}
{% endif %}
{% if dnsOptionalField1 %}sub_auth_id {{ dnsOptionalField1 }}
{% endif %}
{% endif %}