summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-01-03 13:09:09 +0100
committerChristian Poessinger <christian@poessinger.com>2021-01-03 13:09:09 +0100
commitf99c94fc7fa32482b44d6a61e038e1c82c17b6b0 (patch)
treebadc02544509b7e547ff2f987e0c40c0d06c9615
parent23c23a388528ffda430d1aa0fc16e50c566ad617 (diff)
downloadvyos-1x-f99c94fc7fa32482b44d6a61e038e1c82c17b6b0.tar.gz
vyos-1x-f99c94fc7fa32482b44d6a61e038e1c82c17b6b0.zip
op-mode: T3178: add "reset ip|ipv6 bgp" commands
-rw-r--r--op-mode-definitions/reset-ip-bgp.xml203
-rw-r--r--op-mode-definitions/reset-ipv6-bgp.xml62
-rwxr-xr-xsrc/completion/list_bgp_neighbors.sh65
3 files changed, 330 insertions, 0 deletions
diff --git a/op-mode-definitions/reset-ip-bgp.xml b/op-mode-definitions/reset-ip-bgp.xml
new file mode 100644
index 000000000..931a2a9bc
--- /dev/null
+++ b/op-mode-definitions/reset-ip-bgp.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0"?>
+<interfaceDefinition>
+ <node name="reset">
+ <children>
+ <node name="ip">
+ <children>
+ <node name="bgp">
+ <properties>
+ <help>Clear Border Gateway Protocol (BGP) statistics or status</help>
+ </properties>
+ <children>
+ <leafNode name="all">
+ <properties>
+ <help>Clear all BGP peering sessions</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 *"</command>
+ </leafNode>
+ <node name="dampening">
+ <properties>
+ <help>Clear BGP route flap dampening information</help>
+ </properties>
+ <command>vtysh -c "clear ip bgp dampening"</command>
+ </node>
+ <tagNode name="dampening">
+ <properties>
+ <help>Clear BGP route flap dampening information for given host|network address</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt; &lt;x.x.x.x/x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "clear ip bgp dampening $5"</command>
+ <children>
+ <leafNode name="node.tag">
+ <properties>
+ <help>Clear BGP route flap dampening information for given network address</help>
+ <completionHelp>
+ <list>&lt;x.x.x.x&gt;</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "clear ip bgp dampening $5 $6"</command>
+ </leafNode>
+ </children>
+ </tagNode>
+ <node name="external">
+ <properties>
+ <help>Clear all external peers</help>
+ <completionHelp>
+ <list>WORD</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Send route-refresh unless using 'soft-reconfiguration inbound'</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external in"</command>
+ <children>
+ <leafNode name="prefix-filter">
+ <properties>
+ <help>Push out prefix-list ORF and do inbound soft reconfig</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external in prefix-filter"</command>
+ </leafNode>
+ </children>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external out"</command>
+ </node>
+ <node name="soft">
+ <properties>
+ <help>Soft reconfig inbound and outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external soft"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Clear via soft reconfig of inbound update</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external soft in"</command>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 external soft out"</command>
+ </node>
+ </children>
+ </node>
+ </children>
+ </node>
+ <tagNode name="peer-group">
+ <properties>
+ <help>Clear BGP statistics or status for given peer-group</help>
+ <completionHelp>
+ <list>WORD</list>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Send route-refresh unless using 'soft-reconfiguration inbound'</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5 in"</command>
+ <children>
+ <leafNode name="prefix-filter">
+ <properties>
+ <help>Push out prefix-list ORF and do inbound soft reconfig</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5 in prefix-filter"</command>
+ </leafNode>
+ </children>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5 out"</command>
+ </node>
+ <node name="soft">
+ <properties>
+ <help>Soft reconfig inbound and outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5 soft"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Clear via soft reconfig of inbound update</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5 soft in"</command>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 peer-group $5 soft out"</command>
+ </node>
+ </children>
+ </node>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ <tagNode name="bgp">
+ <properties>
+ <help>Clear BGP neighbor IP address</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv4</script>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Send route-refresh unless using 'soft-reconfiguration inbound'</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4 in"</command>
+ <children>
+ <leafNode name="prefix-filter">
+ <properties>
+ <help>Push out prefix-list ORF and do inbound soft reconfig</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4 in prefix-filter"</command>
+ </leafNode>
+ </children>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4 out"</command>
+ </node>
+ <node name="soft">
+ <properties>
+ <help>Soft reconfig inbound and outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4 soft"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Clear via soft reconfig of inbound update</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4 soft in"</command>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv4 $4 soft out"</command>
+ </node>
+ </children>
+ </node>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ </children>
+ </node>
+</interfaceDefinition>
diff --git a/op-mode-definitions/reset-ipv6-bgp.xml b/op-mode-definitions/reset-ipv6-bgp.xml
new file mode 100644
index 000000000..3c4275331
--- /dev/null
+++ b/op-mode-definitions/reset-ipv6-bgp.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<interfaceDefinition>
+ <node name="reset">
+ <children>
+ <node name="ipv6">
+ <children>
+ <tagNode name="bgp">
+ <properties>
+ <help>Clear BGP neighbor IP address</help>
+ <completionHelp>
+ <script>${vyos_completion_dir}/list_bgp_neighbors.sh --ipv6</script>
+ </completionHelp>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Send route-refresh unless using 'soft-reconfiguration inbound'</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4 in"</command>
+ <children>
+ <leafNode name="prefix-filter">
+ <properties>
+ <help>Push out prefix-list ORF and do inbound soft reconfig</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4 in prefix-filter"</command>
+ </leafNode>
+ </children>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4 out"</command>
+ </node>
+ <node name="soft">
+ <properties>
+ <help>Soft reconfig inbound and outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4 soft"</command>
+ <children>
+ <node name="in">
+ <properties>
+ <help>Clear via soft reconfig of inbound update</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4 soft in"</command>
+ </node>
+ <node name="out">
+ <properties>
+ <help>Resend all outbound updates</help>
+ </properties>
+ <command>vtysh -c "clear bgp ipv6 $4 soft out"</command>
+ </node>
+ </children>
+ </node>
+ </children>
+ </tagNode>
+ </children>
+ </node>
+ </children>
+ </node>
+</interfaceDefinition>
diff --git a/src/completion/list_bgp_neighbors.sh b/src/completion/list_bgp_neighbors.sh
new file mode 100755
index 000000000..77c626452
--- /dev/null
+++ b/src/completion/list_bgp_neighbors.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+# Copyright (C) 2021 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Return BGP neighbor addresses from CLI, can either request IPv4 only, IPv6
+# only or both address-family neighbors
+
+ipv4=0
+ipv6=0
+
+while [[ "$#" -gt 0 ]]; do
+ case $1 in
+ -4|--ipv4) ipv4=1 ;;
+ -6|--ipv6) ipv6=1 ;;
+ -b|--both) ipv4=1; ipv6=1 ;;
+ *) echo "Unknown parameter passed: $1" ;;
+ esac
+ shift
+done
+
+declare -a vals
+eval "bgp_as=$(cli-shell-api listActiveNodes protocols bgp)"
+eval "vals=($(cli-shell-api listActiveNodes protocols bgp $bgp_as neighbor))"
+
+if [ $ipv4 -eq 1 ] && [ $ipv6 -eq 1 ]; then
+ echo -n '<x.x.x.x>' '<h:h:h:h:h:h:h:h>' ${vals[@]}
+elif [ $ipv4 -eq 1 ] ; then
+ echo -n '<x.x.x.x> '
+ for peer in "${vals[@]}"
+ do
+ ipaddrcheck --is-ipv4-single $peer
+ if [ $? -eq "0" ]; then
+ echo -n "$peer "
+ fi
+ done
+elif [ $ipv6 -eq 1 ] ; then
+ echo -n '<h:h:h:h:h:h:h:h> '
+ for peer in "${vals[@]}"
+ do
+ ipaddrcheck --is-ipv6-single $peer
+ if [ $? -eq "0" ]; then
+ echo -n "$peer "
+ fi
+ done
+else
+ echo "Usage:"
+ echo "-4|--ipv4 list only IPv4 peers"
+ echo "-6|--ipv6 list only IPv6 peers"
+ echo "--both list both IP4 and IPv6 peers"
+ echo ""
+ exit 1
+fi
+
+exit 0