summaryrefslogtreecommitdiff
path: root/bgpd/bgp_vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_vty.c')
-rw-r--r--bgpd/bgp_vty.c16594
1 files changed, 8663 insertions, 7931 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index a82856db1d..741afeb17e 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -58,146 +58,127 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "bgpd/bgp_updgrp.h"
#include "bgpd/bgp_bfd.h"
-static struct peer_group *
-listen_range_exists (struct bgp *bgp, struct prefix *range, int exact);
+static struct peer_group *listen_range_exists(struct bgp *bgp,
+ struct prefix *range, int exact);
/* Utility function to get address family from current node. */
-afi_t
-bgp_node_afi (struct vty *vty)
-{
- afi_t afi;
- switch (vty->node)
- {
- case BGP_IPV6_NODE:
- case BGP_IPV6M_NODE:
- case BGP_VPNV6_NODE:
- afi = AFI_IP6;
- break;
- case BGP_EVPN_NODE:
- afi = AFI_L2VPN;
- break;
- default:
- afi = AFI_IP;
- break;
- }
- return afi;
+afi_t bgp_node_afi(struct vty *vty)
+{
+ afi_t afi;
+ switch (vty->node) {
+ case BGP_IPV6_NODE:
+ case BGP_IPV6M_NODE:
+ case BGP_VPNV6_NODE:
+ afi = AFI_IP6;
+ break;
+ case BGP_EVPN_NODE:
+ afi = AFI_L2VPN;
+ break;
+ default:
+ afi = AFI_IP;
+ break;
+ }
+ return afi;
}
/* Utility function to get subsequent address family from current
node. */
-safi_t
-bgp_node_safi (struct vty *vty)
-{
- safi_t safi;
- switch (vty->node)
- {
- case BGP_VPNV4_NODE:
- case BGP_VPNV6_NODE:
- safi = SAFI_MPLS_VPN;
- break;
- case BGP_IPV4M_NODE:
- case BGP_IPV6M_NODE:
- safi = SAFI_MULTICAST;
- break;
- case BGP_EVPN_NODE:
- safi = SAFI_EVPN;
- break;
- default:
- safi = SAFI_UNICAST;
- break;
- }
- return safi;
+safi_t bgp_node_safi(struct vty *vty)
+{
+ safi_t safi;
+ switch (vty->node) {
+ case BGP_VPNV4_NODE:
+ case BGP_VPNV6_NODE:
+ safi = SAFI_MPLS_VPN;
+ break;
+ case BGP_IPV4M_NODE:
+ case BGP_IPV6M_NODE:
+ safi = SAFI_MULTICAST;
+ break;
+ case BGP_EVPN_NODE:
+ safi = SAFI_EVPN;
+ break;
+ default:
+ safi = SAFI_UNICAST;
+ break;
+ }
+ return safi;
}
/* supports <ipv4|ipv6> */
-afi_t
-bgp_vty_afi_from_arg(const char *afi_str)
-{
- afi_t afi = AFI_MAX; /* unknown */
- if (!strcmp(afi_str, "ipv4")) {
- afi = AFI_IP;
- }
- else if (!strcmp(afi_str, "ipv6")) {
- afi = AFI_IP6;
- }
- else if (!strcmp(afi_str, "l2vpn")) {
- afi = AFI_L2VPN;
- }
- return afi;
-}
-
-int
-bgp_parse_afi(const char *str, afi_t *afi)
-{
- *afi = bgp_vty_afi_from_arg(str);
- if (*afi != AFI_MAX)
- return 0;
- else
- return -1;
-}
-
-int
-argv_find_and_parse_afi(struct cmd_token **argv, int argc, int *index, afi_t *afi)
-{
- int ret = 0;
- if (argv_find (argv, argc, "ipv4", index))
- {
- ret = 1;
- if (afi)
- *afi = AFI_IP;
- }
- else if (argv_find (argv, argc, "ipv6", index))
- {
- ret = 1;
- if (afi)
- *afi = AFI_IP6;
- }
- return ret;
+afi_t bgp_vty_afi_from_arg(const char *afi_str)
+{
+ afi_t afi = AFI_MAX; /* unknown */
+ if (!strcmp(afi_str, "ipv4")) {
+ afi = AFI_IP;
+ } else if (!strcmp(afi_str, "ipv6")) {
+ afi = AFI_IP6;
+ } else if (!strcmp(afi_str, "l2vpn")) {
+ afi = AFI_L2VPN;
+ }
+ return afi;
+}
+
+int bgp_parse_afi(const char *str, afi_t *afi)
+{
+ *afi = bgp_vty_afi_from_arg(str);
+ if (*afi != AFI_MAX)
+ return 0;
+ else
+ return -1;
+}
+
+int argv_find_and_parse_afi(struct cmd_token **argv, int argc, int *index,
+ afi_t *afi)
+{
+ int ret = 0;
+ if (argv_find(argv, argc, "ipv4", index)) {
+ ret = 1;
+ if (afi)
+ *afi = AFI_IP;
+ } else if (argv_find(argv, argc, "ipv6", index)) {
+ ret = 1;
+ if (afi)
+ *afi = AFI_IP6;
+ }
+ return ret;
}
/* supports <unicast|multicast|vpn> */
-safi_t
-bgp_vty_safi_from_arg(const char *safi_str)
-{
- safi_t safi = SAFI_MAX; /* unknown */
- if (strncmp (safi_str, "m", 1) == 0)
- safi = SAFI_MULTICAST;
- else if (strncmp (safi_str, "u", 1) == 0)
- safi = SAFI_UNICAST;
- else if (strncmp (safi_str, "v", 1) == 0)
- safi = SAFI_MPLS_VPN;
- return safi;
-}
-
-int
-argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t *safi)
-{
- int ret = 0;
- if (argv_find (argv, argc, "unicast", index))
- {
- ret = 1;
- if (safi)
- *safi = SAFI_UNICAST;
- }
- else if (argv_find (argv, argc, "multicast", index))
- {
- ret = 1;
- if (safi)
- *safi = SAFI_MULTICAST;
- }
- else if (argv_find (argv, argc, "vpn", index))
- {
- ret = 1;
- if (safi)
- *safi = SAFI_MPLS_VPN;
- }
- else if (argv_find (argv, argc, "evpn", index))
- {
- ret = 1;
- if (safi)
- *safi = SAFI_EVPN;
- }
- return ret;
+safi_t bgp_vty_safi_from_arg(const char *safi_str)
+{
+ safi_t safi = SAFI_MAX; /* unknown */
+ if (strncmp(safi_str, "m", 1) == 0)
+ safi = SAFI_MULTICAST;
+ else if (strncmp(safi_str, "u", 1) == 0)
+ safi = SAFI_UNICAST;
+ else if (strncmp(safi_str, "v", 1) == 0)
+ safi = SAFI_MPLS_VPN;
+ return safi;
+}
+
+int argv_find_and_parse_safi(struct cmd_token **argv, int argc, int *index,
+ safi_t *safi)
+{
+ int ret = 0;
+ if (argv_find(argv, argc, "unicast", index)) {
+ ret = 1;
+ if (safi)
+ *safi = SAFI_UNICAST;
+ } else if (argv_find(argv, argc, "multicast", index)) {
+ ret = 1;
+ if (safi)
+ *safi = SAFI_MULTICAST;
+ } else if (argv_find(argv, argc, "vpn", index)) {
+ ret = 1;
+ if (safi)
+ *safi = SAFI_MPLS_VPN;
+ } else if (argv_find(argv, argc, "evpn", index)) {
+ ret = 1;
+ if (safi)
+ *safi = SAFI_EVPN;
+ }
+ return ret;
}
/*
@@ -222,7 +203,8 @@ argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t
* the event of a parse error in the vrf.
* argv -> The command tokens
* argc -> How many command tokens we have
- * idx -> The current place in the command, generally should be 0 for this function
+ * idx -> The current place in the command, generally should be 0 for this
+ * function
* afi -> The parsed afi if it was included in the show command, returned here
* safi -> The parsed safi if it was included in the show command, returned here
* bgp -> Pointer to the bgp data structure we need to fill in.
@@ -233,482 +215,453 @@ argv_find_and_parse_safi (struct cmd_token **argv, int argc, int *index, safi_t
* Returns 0 for failure to parse correctly, else the idx position of where
* it found the last token.
*/
-int
-bgp_vty_find_and_parse_afi_safi_bgp (struct vty *vty, struct cmd_token **argv, int argc, int *idx,
- afi_t *afi, safi_t *safi, struct bgp **bgp)
-{
- char *vrf_name = NULL;
-
- assert (afi);
- assert (safi);
- assert (bgp);
-
- if (argv_find (argv, argc, "ip", idx))
- *afi = AFI_IP;
-
- if (argv_find (argv, argc, "view", idx) || argv_find (argv, argc, "vrf", idx))
- {
- vrf_name = argv[*idx + 1]->arg;
-
- if (strmatch (vrf_name, "all"))
- *bgp = NULL;
- else
- {
- *bgp = bgp_lookup_by_name (vrf_name);
- if (!*bgp)
- {
- vty_out (vty, "View/Vrf specified is unknown: %s%s", vrf_name, VTY_NEWLINE);
- *idx = 0;
- return 0;
- }
- }
- }
- else
- {
- *bgp = bgp_get_default ();
- if (!*bgp)
- {
- vty_out (vty, "Unable to find default BGP instance%s", VTY_NEWLINE);
- *idx = 0;
- return 0;
- }
- }
-
- if (argv_find_and_parse_afi (argv, argc, idx, afi))
- argv_find_and_parse_safi (argv, argc, idx, safi);
-
- *idx += 1;
- return *idx;
-}
-
-static int
-peer_address_self_check (struct bgp *bgp, union sockunion *su)
-{
- struct interface *ifp = NULL;
-
- if (su->sa.sa_family == AF_INET)
- ifp = if_lookup_by_ipv4_exact (&su->sin.sin_addr, bgp->vrf_id);
- else if (su->sa.sa_family == AF_INET6)
- ifp = if_lookup_by_ipv6_exact (&su->sin6.sin6_addr,
- su->sin6.sin6_scope_id, bgp->vrf_id);
-
- if (ifp)
- return 1;
-
- return 0;
+int bgp_vty_find_and_parse_afi_safi_bgp(struct vty *vty,
+ struct cmd_token **argv, int argc,
+ int *idx, afi_t *afi, safi_t *safi,
+ struct bgp **bgp)
+{
+ char *vrf_name = NULL;
+
+ assert(afi);
+ assert(safi);
+ assert(bgp);
+
+ if (argv_find(argv, argc, "ip", idx))
+ *afi = AFI_IP;
+
+ if (argv_find(argv, argc, "view", idx)
+ || argv_find(argv, argc, "vrf", idx)) {
+ vrf_name = argv[*idx + 1]->arg;
+
+ if (strmatch(vrf_name, "all"))
+ *bgp = NULL;
+ else {
+ *bgp = bgp_lookup_by_name(vrf_name);
+ if (!*bgp) {
+ vty_out(vty,
+ "View/Vrf specified is unknown: %s%s",
+ vrf_name, VTY_NEWLINE);
+ *idx = 0;
+ return 0;
+ }
+ }
+ } else {
+ *bgp = bgp_get_default();
+ if (!*bgp) {
+ vty_out(vty, "Unable to find default BGP instance%s",
+ VTY_NEWLINE);
+ *idx = 0;
+ return 0;
+ }
+ }
+
+ if (argv_find_and_parse_afi(argv, argc, idx, afi))
+ argv_find_and_parse_safi(argv, argc, idx, safi);
+
+ *idx += 1;
+ return *idx;
+}
+
+static int peer_address_self_check(struct bgp *bgp, union sockunion *su)
+{
+ struct interface *ifp = NULL;
+
+ if (su->sa.sa_family == AF_INET)
+ ifp = if_lookup_by_ipv4_exact(&su->sin.sin_addr, bgp->vrf_id);
+ else if (su->sa.sa_family == AF_INET6)
+ ifp = if_lookup_by_ipv6_exact(&su->sin6.sin6_addr,
+ su->sin6.sin6_scope_id,
+ bgp->vrf_id);
+
+ if (ifp)
+ return 1;
+
+ return 0;
}
/* Utility function for looking up peer from VTY. */
/* This is used only for configuration, so disallow if attempted on
* a dynamic neighbor.
*/
-static struct peer *
-peer_lookup_vty (struct vty *vty, const char *ip_str)
-{
- struct bgp *bgp = VTY_GET_CONTEXT(bgp);
- int ret;
- union sockunion su;
- struct peer *peer;
-
- if (!bgp) {
- return NULL;
- }
-
- ret = str2sockunion (ip_str, &su);
- if (ret < 0)
- {
- peer = peer_lookup_by_conf_if (bgp, ip_str);
- if (!peer)
- {
- if ((peer = peer_lookup_by_hostname(bgp, ip_str)) == NULL)
- {
- vty_out (vty, "%% Malformed address or name: %s%s", ip_str, VTY_NEWLINE);
- return NULL;
- }
- }
- }
- else
- {
- peer = peer_lookup (bgp, &su);
- if (! peer)
- {
- vty_out (vty, "%% Specify remote-as or peer-group commands first%s",
- VTY_NEWLINE);
- return NULL;
- }
- if (peer_dynamic_neighbor (peer))
- {
- vty_out (vty, "%% Operation not allowed on a dynamic neighbor%s",
- VTY_NEWLINE);
- return NULL;
- }
-
- }
- return peer;
+static struct peer *peer_lookup_vty(struct vty *vty, const char *ip_str)
+{
+ struct bgp *bgp = VTY_GET_CONTEXT(bgp);
+ int ret;
+ union sockunion su;
+ struct peer *peer;
+
+ if (!bgp) {
+ return NULL;
+ }
+
+ ret = str2sockunion(ip_str, &su);
+ if (ret < 0) {
+ peer = peer_lookup_by_conf_if(bgp, ip_str);
+ if (!peer) {
+ if ((peer = peer_lookup_by_hostname(bgp, ip_str))
+ == NULL) {
+ vty_out(vty,
+ "%% Malformed address or name: %s%s",
+ ip_str, VTY_NEWLINE);
+ return NULL;
+ }
+ }
+ } else {
+ peer = peer_lookup(bgp, &su);
+ if (!peer) {
+ vty_out(vty,
+ "%% Specify remote-as or peer-group commands first%s",
+ VTY_NEWLINE);
+ return NULL;
+ }
+ if (peer_dynamic_neighbor(peer)) {
+ vty_out(vty,
+ "%% Operation not allowed on a dynamic neighbor%s",
+ VTY_NEWLINE);
+ return NULL;
+ }
+ }
+ return peer;
}
/* Utility function for looking up peer or peer group. */
/* This is used only for configuration, so disallow if attempted on
* a dynamic neighbor.
*/
-struct peer *
-peer_and_group_lookup_vty (struct vty *vty, const char *peer_str)
-{
- struct bgp *bgp = VTY_GET_CONTEXT(bgp);
- int ret;
- union sockunion su;
- struct peer *peer = NULL;
- struct peer_group *group = NULL;
-
- if (!bgp) {
- return NULL;
- }
-
- ret = str2sockunion (peer_str, &su);
- if (ret == 0)
- {
- /* IP address, locate peer. */
- peer = peer_lookup (bgp, &su);
- }
- else
- {
- /* Not IP, could match either peer configured on interface or a group. */
- peer = peer_lookup_by_conf_if (bgp, peer_str);
- if (!peer)
- group = peer_group_lookup (bgp, peer_str);
- }
-
- if (peer)
- {
- if (peer_dynamic_neighbor (peer))
- {
- vty_out (vty, "%% Operation not allowed on a dynamic neighbor%s",
- VTY_NEWLINE);
- return NULL;
- }
-
- return peer;
- }
-
- if (group)
- return group->conf;
-
- vty_out (vty, "%% Specify remote-as or peer-group commands first%s",
- VTY_NEWLINE);
-
- return NULL;
-}
-
-int
-bgp_vty_return (struct vty *vty, int ret)
-{
- const char *str = NULL;
-
- switch (ret)
- {
- case BGP_ERR_INVALID_VALUE:
- str = "Invalid value";
- break;
- case BGP_ERR_INVALID_FLAG:
- str = "Invalid flag";
- break;
- case BGP_ERR_PEER_GROUP_SHUTDOWN:
- str = "Peer-group has been shutdown. Activate the peer-group first";
- break;
- case BGP_ERR_PEER_FLAG_CONFLICT:
- str = "Can't set override-capability and strict-capability-match at the same time";
- break;
- case BGP_ERR_PEER_GROUP_NO_REMOTE_AS:
- str = "Specify remote-as or peer-group remote AS first";
- break;
- case BGP_ERR_PEER_GROUP_CANT_CHANGE:
- str = "Cannot change the peer-group. Deconfigure first";
- break;
- case BGP_ERR_PEER_GROUP_MISMATCH:
- str = "Peer is not a member of this peer-group";
- break;
- case BGP_ERR_PEER_FILTER_CONFLICT:
- str = "Prefix/distribute list can not co-exist";
- break;
- case BGP_ERR_NOT_INTERNAL_PEER:
- str = "Invalid command. Not an internal neighbor";
- break;
- case BGP_ERR_REMOVE_PRIVATE_AS:
- str = "remove-private-AS cannot be configured for IBGP peers";
- break;
- case BGP_ERR_LOCAL_AS_ALLOWED_ONLY_FOR_EBGP:
- str = "Local-AS allowed only for EBGP peers";
- break;
- case BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS:
- str = "Cannot have local-as same as BGP AS number";
- break;
- case BGP_ERR_TCPSIG_FAILED:
- str = "Error while applying TCP-Sig to session(s)";
- break;
- case BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK:
- str = "ebgp-multihop and ttl-security cannot be configured together";
- break;
- case BGP_ERR_NO_IBGP_WITH_TTLHACK:
- str = "ttl-security only allowed for EBGP peers";
- break;
- case BGP_ERR_AS_OVERRIDE:
- str = "as-override cannot be configured for IBGP peers";
- break;
- case BGP_ERR_INVALID_DYNAMIC_NEIGHBORS_LIMIT:
- str = "Invalid limit for number of dynamic neighbors";
- break;
- case BGP_ERR_DYNAMIC_NEIGHBORS_RANGE_EXISTS:
- str = "Dynamic neighbor listen range already exists";
- break;
- case BGP_ERR_INVALID_FOR_DYNAMIC_PEER:
- str = "Operation not allowed on a dynamic neighbor";
- break;
- case BGP_ERR_INVALID_FOR_DIRECT_PEER:
- str = "Operation not allowed on a directly connected neighbor";
- break;
- }
- if (str)
- {
- vty_out (vty, "%% %s%s", str, VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
+struct peer *peer_and_group_lookup_vty(struct vty *vty, const char *peer_str)
+{
+ struct bgp *bgp = VTY_GET_CONTEXT(bgp);
+ int ret;
+ union sockunion su;
+ struct peer *peer = NULL;
+ struct peer_group *group = NULL;
+
+ if (!bgp) {
+ return NULL;
+ }
+
+ ret = str2sockunion(peer_str, &su);
+ if (ret == 0) {
+ /* IP address, locate peer. */
+ peer = peer_lookup(bgp, &su);
+ } else {
+ /* Not IP, could match either peer configured on interface or a
+ * group. */
+ peer = peer_lookup_by_conf_if(bgp, peer_str);
+ if (!peer)
+ group = peer_group_lookup(bgp, peer_str);
+ }
+
+ if (peer) {
+ if (peer_dynamic_neighbor(peer)) {
+ vty_out(vty,
+ "%% Operation not allowed on a dynamic neighbor%s",
+ VTY_NEWLINE);
+ return NULL;
+ }
+
+ return peer;
+ }
+
+ if (group)
+ return group->conf;
+
+ vty_out(vty, "%% Specify remote-as or peer-group commands first%s",
+ VTY_NEWLINE);
+
+ return NULL;
+}
+
+int bgp_vty_return(struct vty *vty, int ret)
+{
+ const char *str = NULL;
+
+ switch (ret) {
+ case BGP_ERR_INVALID_VALUE:
+ str = "Invalid value";
+ break;
+ case BGP_ERR_INVALID_FLAG:
+ str = "Invalid flag";
+ break;
+ case BGP_ERR_PEER_GROUP_SHUTDOWN:
+ str = "Peer-group has been shutdown. Activate the peer-group first";
+ break;
+ case BGP_ERR_PEER_FLAG_CONFLICT:
+ str = "Can't set override-capability and strict-capability-match at the same time";
+ break;
+ case BGP_ERR_PEER_GROUP_NO_REMOTE_AS:
+ str = "Specify remote-as or peer-group remote AS first";
+ break;
+ case BGP_ERR_PEER_GROUP_CANT_CHANGE:
+ str = "Cannot change the peer-group. Deconfigure first";
+ break;
+ case BGP_ERR_PEER_GROUP_MISMATCH:
+ str = "Peer is not a member of this peer-group";
+ break;
+ case BGP_ERR_PEER_FILTER_CONFLICT:
+ str = "Prefix/distribute list can not co-exist";
+ break;
+ case BGP_ERR_NOT_INTERNAL_PEER:
+ str = "Invalid command. Not an internal neighbor";
+ break;
+ case BGP_ERR_REMOVE_PRIVATE_AS:
+ str = "remove-private-AS cannot be configured for IBGP peers";
+ break;
+ case BGP_ERR_LOCAL_AS_ALLOWED_ONLY_FOR_EBGP:
+ str = "Local-AS allowed only for EBGP peers";
+ break;
+ case BGP_ERR_CANNOT_HAVE_LOCAL_AS_SAME_AS:
+ str = "Cannot have local-as same as BGP AS number";
+ break;
+ case BGP_ERR_TCPSIG_FAILED:
+ str = "Error while applying TCP-Sig to session(s)";
+ break;
+ case BGP_ERR_NO_EBGP_MULTIHOP_WITH_TTLHACK:
+ str = "ebgp-multihop and ttl-security cannot be configured together";
+ break;
+ case BGP_ERR_NO_IBGP_WITH_TTLHACK:
+ str = "ttl-security only allowed for EBGP peers";
+ break;
+ case BGP_ERR_AS_OVERRIDE:
+ str = "as-override cannot be configured for IBGP peers";
+ break;
+ case BGP_ERR_INVALID_DYNAMIC_NEIGHBORS_LIMIT:
+ str = "Invalid limit for number of dynamic neighbors";
+ break;
+ case BGP_ERR_DYNAMIC_NEIGHBORS_RANGE_EXISTS:
+ str = "Dynamic neighbor listen range already exists";
+ break;
+ case BGP_ERR_INVALID_FOR_DYNAMIC_PEER:
+ str = "Operation not allowed on a dynamic neighbor";
+ break;
+ case BGP_ERR_INVALID_FOR_DIRECT_PEER:
+ str = "Operation not allowed on a directly connected neighbor";
+ break;
+ }
+ if (str) {
+ vty_out(vty, "%% %s%s", str, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
}
/* BGP clear sort. */
-enum clear_sort
-{
- clear_all,
- clear_peer,
- clear_group,
- clear_external,
- clear_as
+enum clear_sort {
+ clear_all,
+ clear_peer,
+ clear_group,
+ clear_external,
+ clear_as
};
-static void
-bgp_clear_vty_error (struct vty *vty, struct peer *peer, afi_t afi,
- safi_t safi, int error)
-{
- switch (error)
- {
- case BGP_ERR_AF_UNCONFIGURED:
- vty_out (vty,
- "%%BGP: Enable %s address family for the neighbor %s%s",
- afi_safi_print(afi, safi), peer->host, VTY_NEWLINE);
- break;
- case BGP_ERR_SOFT_RECONFIG_UNCONFIGURED:
- vty_out (vty, "%%BGP: Inbound soft reconfig for %s not possible as it%s has neither refresh capability, nor inbound soft reconfig%s", peer->host, VTY_NEWLINE, VTY_NEWLINE);
- break;
- default:
- break;
- }
+static void bgp_clear_vty_error(struct vty *vty, struct peer *peer, afi_t afi,
+ safi_t safi, int error)
+{
+ switch (error) {
+ case BGP_ERR_AF_UNCONFIGURED:
+ vty_out(vty,
+ "%%BGP: Enable %s address family for the neighbor %s%s",
+ afi_safi_print(afi, safi), peer->host, VTY_NEWLINE);
+ break;
+ case BGP_ERR_SOFT_RECONFIG_UNCONFIGURED:
+ vty_out(vty,
+ "%%BGP: Inbound soft reconfig for %s not possible as it%s has neither refresh capability, nor inbound soft reconfig%s",
+ peer->host, VTY_NEWLINE, VTY_NEWLINE);
+ break;
+ default:
+ break;
+ }
}
/* `clear ip bgp' functions. */
-static int
-bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
- enum clear_sort sort,enum bgp_clear_type stype, const char *arg)
-{
- int ret;
- struct peer *peer;
- struct listnode *node, *nnode;
-
- /* Clear all neighbors. */
- /*
- * Pass along pointer to next node to peer_clear() when walking all nodes
- * on the BGP instance as that may get freed if it is a doppelganger
- */
- if (sort == clear_all)
- {
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (stype == BGP_CLEAR_SOFT_NONE)
- ret = peer_clear (peer, &nnode);
- else if (peer->afc[afi][safi])
- ret = peer_clear_soft (peer, afi, safi, stype);
- else
- ret = 0;
-
- if (ret < 0)
- bgp_clear_vty_error (vty, peer, afi, safi, ret);
- }
-
- /* This is to apply read-only mode on this clear. */
- if (stype == BGP_CLEAR_SOFT_NONE)
- bgp->update_delay_over = 0;
-
- return CMD_SUCCESS;
- }
-
- /* Clear specified neighbors. */
- if (sort == clear_peer)
- {
- union sockunion su;
- int ret;
-
- /* Make sockunion for lookup. */
- ret = str2sockunion (arg, &su);
- if (ret < 0)
- {
- peer = peer_lookup_by_conf_if (bgp, arg);
- if (!peer)
- {
- peer = peer_lookup_by_hostname(bgp, arg);
- if (!peer)
- {
- vty_out (vty, "Malformed address or name: %s%s", arg, VTY_NEWLINE);
- return CMD_WARNING;
+static int bgp_clear(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi,
+ enum clear_sort sort, enum bgp_clear_type stype,
+ const char *arg)
+{
+ int ret;
+ struct peer *peer;
+ struct listnode *node, *nnode;
+
+ /* Clear all neighbors. */
+ /*
+ * Pass along pointer to next node to peer_clear() when walking all
+ * nodes
+ * on the BGP instance as that may get freed if it is a doppelganger
+ */
+ if (sort == clear_all) {
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (stype == BGP_CLEAR_SOFT_NONE)
+ ret = peer_clear(peer, &nnode);
+ else if (peer->afc[afi][safi])
+ ret = peer_clear_soft(peer, afi, safi, stype);
+ else
+ ret = 0;
+
+ if (ret < 0)
+ bgp_clear_vty_error(vty, peer, afi, safi, ret);
}
- }
- }
- else
- {
- peer = peer_lookup (bgp, &su);
- if (! peer)
- {
- vty_out (vty, "%%BGP: Unknown neighbor - \"%s\"%s", arg, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- if (stype == BGP_CLEAR_SOFT_NONE)
- ret = peer_clear (peer, NULL);
- else
- ret = peer_clear_soft (peer, afi, safi, stype);
-
- if (ret < 0)
- bgp_clear_vty_error (vty, peer, afi, safi, ret);
-
- return CMD_SUCCESS;
- }
-
- /* Clear all peer-group members. */
- if (sort == clear_group)
- {
- struct peer_group *group;
-
- group = peer_group_lookup (bgp, arg);
- if (! group)
- {
- vty_out (vty, "%%BGP: No such peer-group %s%s", arg, VTY_NEWLINE);
- return CMD_WARNING;
+
+ /* This is to apply read-only mode on this clear. */
+ if (stype == BGP_CLEAR_SOFT_NONE)
+ bgp->update_delay_over = 0;
+
+ return CMD_SUCCESS;
}
- for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
- {
- if (stype == BGP_CLEAR_SOFT_NONE)
- {
- peer_clear (peer, NULL);
- continue;
- }
+ /* Clear specified neighbors. */
+ if (sort == clear_peer) {
+ union sockunion su;
+ int ret;
+
+ /* Make sockunion for lookup. */
+ ret = str2sockunion(arg, &su);
+ if (ret < 0) {
+ peer = peer_lookup_by_conf_if(bgp, arg);
+ if (!peer) {
+ peer = peer_lookup_by_hostname(bgp, arg);
+ if (!peer) {
+ vty_out(vty,
+ "Malformed address or name: %s%s",
+ arg, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+ } else {
+ peer = peer_lookup(bgp, &su);
+ if (!peer) {
+ vty_out(vty,
+ "%%BGP: Unknown neighbor - \"%s\"%s",
+ arg, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
- if (! peer->afc[afi][safi])
- continue;
+ if (stype == BGP_CLEAR_SOFT_NONE)
+ ret = peer_clear(peer, NULL);
+ else
+ ret = peer_clear_soft(peer, afi, safi, stype);
- ret = peer_clear_soft (peer, afi, safi, stype);
+ if (ret < 0)
+ bgp_clear_vty_error(vty, peer, afi, safi, ret);
- if (ret < 0)
- bgp_clear_vty_error (vty, peer, afi, safi, ret);
+ return CMD_SUCCESS;
}
- return CMD_SUCCESS;
- }
- if (sort == clear_external)
- {
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (peer->sort == BGP_PEER_IBGP)
- continue;
+ /* Clear all peer-group members. */
+ if (sort == clear_group) {
+ struct peer_group *group;
+
+ group = peer_group_lookup(bgp, arg);
+ if (!group) {
+ vty_out(vty, "%%BGP: No such peer-group %s%s", arg,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ for (ALL_LIST_ELEMENTS(group->peer, node, nnode, peer)) {
+ if (stype == BGP_CLEAR_SOFT_NONE) {
+ peer_clear(peer, NULL);
+ continue;
+ }
+
+ if (!peer->afc[afi][safi])
+ continue;
- if (stype == BGP_CLEAR_SOFT_NONE)
- ret = peer_clear (peer, &nnode);
- else
- ret = peer_clear_soft (peer, afi, safi, stype);
+ ret = peer_clear_soft(peer, afi, safi, stype);
- if (ret < 0)
- bgp_clear_vty_error (vty, peer, afi, safi, ret);
+ if (ret < 0)
+ bgp_clear_vty_error(vty, peer, afi, safi, ret);
+ }
+ return CMD_SUCCESS;
}
- return CMD_SUCCESS;
- }
- if (sort == clear_as)
- {
- as_t as;
- int find = 0;
+ if (sort == clear_external) {
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (peer->sort == BGP_PEER_IBGP)
+ continue;
- VTY_GET_INTEGER_RANGE ("AS", as, arg, 1, BGP_AS4_MAX);
+ if (stype == BGP_CLEAR_SOFT_NONE)
+ ret = peer_clear(peer, &nnode);
+ else
+ ret = peer_clear_soft(peer, afi, safi, stype);
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (peer->as != as)
- continue;
-
- find = 1;
- if (stype == BGP_CLEAR_SOFT_NONE)
- ret = peer_clear (peer, &nnode);
- else
- ret = peer_clear_soft (peer, afi, safi, stype);
-
- if (ret < 0)
- bgp_clear_vty_error (vty, peer, afi, safi, ret);
- }
- if (! find)
- vty_out (vty, "%%BGP: No peer is configured with AS %s%s", arg,
- VTY_NEWLINE);
- return CMD_SUCCESS;
- }
-
- return CMD_SUCCESS;
-}
-
-static int
-bgp_clear_vty (struct vty *vty, const char *name, afi_t afi, safi_t safi,
- enum clear_sort sort, enum bgp_clear_type stype,
- const char *arg)
-{
- struct bgp *bgp;
-
- /* BGP structure lookup. */
- if (name)
- {
- bgp = bgp_lookup_by_name (name);
- if (bgp == NULL)
- {
- vty_out (vty, "Can't find BGP instance %s%s", name, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
- else
- {
- bgp = bgp_get_default ();
- if (bgp == NULL)
- {
- vty_out (vty, "No BGP process is configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- return bgp_clear (vty, bgp, afi, safi, sort, stype, arg);
+ if (ret < 0)
+ bgp_clear_vty_error(vty, peer, afi, safi, ret);
+ }
+ return CMD_SUCCESS;
+ }
+
+ if (sort == clear_as) {
+ as_t as;
+ int find = 0;
+
+ VTY_GET_INTEGER_RANGE("AS", as, arg, 1, BGP_AS4_MAX);
+
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (peer->as != as)
+ continue;
+
+ find = 1;
+ if (stype == BGP_CLEAR_SOFT_NONE)
+ ret = peer_clear(peer, &nnode);
+ else
+ ret = peer_clear_soft(peer, afi, safi, stype);
+
+ if (ret < 0)
+ bgp_clear_vty_error(vty, peer, afi, safi, ret);
+ }
+ if (!find)
+ vty_out(vty,
+ "%%BGP: No peer is configured with AS %s%s",
+ arg, VTY_NEWLINE);
+ return CMD_SUCCESS;
+ }
+
+ return CMD_SUCCESS;
+}
+
+static int bgp_clear_vty(struct vty *vty, const char *name, afi_t afi,
+ safi_t safi, enum clear_sort sort,
+ enum bgp_clear_type stype, const char *arg)
+{
+ struct bgp *bgp;
+
+ /* BGP structure lookup. */
+ if (name) {
+ bgp = bgp_lookup_by_name(name);
+ if (bgp == NULL) {
+ vty_out(vty, "Can't find BGP instance %s%s", name,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ } else {
+ bgp = bgp_get_default();
+ if (bgp == NULL) {
+ vty_out(vty, "No BGP process is configured%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ return bgp_clear(vty, bgp, afi, safi, sort, stype, arg);
}
/* clear soft inbound */
-static void
-bgp_clear_star_soft_in (struct vty *vty, const char *name)
+static void bgp_clear_star_soft_in(struct vty *vty, const char *name)
{
- bgp_clear_vty (vty, name, AFI_IP, SAFI_UNICAST, clear_all,
- BGP_CLEAR_SOFT_IN, NULL);
- bgp_clear_vty (vty, name, AFI_IP6, SAFI_UNICAST, clear_all,
- BGP_CLEAR_SOFT_IN, NULL);
+ bgp_clear_vty(vty, name, AFI_IP, SAFI_UNICAST, clear_all,
+ BGP_CLEAR_SOFT_IN, NULL);
+ bgp_clear_vty(vty, name, AFI_IP6, SAFI_UNICAST, clear_all,
+ BGP_CLEAR_SOFT_IN, NULL);
}
/* clear soft outbound */
-static void
-bgp_clear_star_soft_out (struct vty *vty, const char *name)
+static void bgp_clear_star_soft_out(struct vty *vty, const char *name)
{
- bgp_clear_vty (vty, name, AFI_IP, SAFI_UNICAST, clear_all,
- BGP_CLEAR_SOFT_OUT, NULL);
- bgp_clear_vty (vty, name, AFI_IP6, SAFI_UNICAST, clear_all,
- BGP_CLEAR_SOFT_OUT, NULL);
+ bgp_clear_vty(vty, name, AFI_IP, SAFI_UNICAST, clear_all,
+ BGP_CLEAR_SOFT_OUT, NULL);
+ bgp_clear_vty(vty, name, AFI_IP6, SAFI_UNICAST, clear_all,
+ BGP_CLEAR_SOFT_OUT, NULL);
}
@@ -720,8 +673,8 @@ DEFUN (bgp_multiple_instance_func,
BGP_STR
"Enable bgp multiple instance\n")
{
- bgp_option_set (BGP_OPT_MULTIPLE_INSTANCE);
- return CMD_SUCCESS;
+ bgp_option_set(BGP_OPT_MULTIPLE_INSTANCE);
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_multiple_instance,
@@ -731,15 +684,15 @@ DEFUN (no_bgp_multiple_instance,
BGP_STR
"BGP multiple instance\n")
{
- int ret;
+ int ret;
- ret = bgp_option_unset (BGP_OPT_MULTIPLE_INSTANCE);
- if (ret < 0)
- {
- vty_out (vty, "%% There are more than two BGP instances%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
+ ret = bgp_option_unset(BGP_OPT_MULTIPLE_INSTANCE);
+ if (ret < 0) {
+ vty_out(vty, "%% There are more than two BGP instances%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
}
DEFUN (bgp_config_type,
@@ -750,13 +703,13 @@ DEFUN (bgp_config_type,
"cisco\n"
"zebra\n")
{
- int idx_vendor = 2;
- if (strncmp (argv[idx_vendor]->arg, "c", 1) == 0)
- bgp_option_set (BGP_OPT_CONFIG_CISCO);
- else
- bgp_option_unset (BGP_OPT_CONFIG_CISCO);
+ int idx_vendor = 2;
+ if (strncmp(argv[idx_vendor]->arg, "c", 1) == 0)
+ bgp_option_set(BGP_OPT_CONFIG_CISCO);
+ else
+ bgp_option_unset(BGP_OPT_CONFIG_CISCO);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_config_type,
@@ -768,8 +721,8 @@ DEFUN (no_bgp_config_type,
"cisco\n"
"zebra\n")
{
- bgp_option_unset (BGP_OPT_CONFIG_CISCO);
- return CMD_SUCCESS;
+ bgp_option_unset(BGP_OPT_CONFIG_CISCO);
+ return CMD_SUCCESS;
}
@@ -779,7 +732,7 @@ DEFUN (no_synchronization,
NO_STR
"Perform IGP synchronization\n")
{
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_auto_summary,
@@ -788,7 +741,7 @@ DEFUN (no_auto_summary,
NO_STR
"Enable automatic network number summarization\n")
{
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "router bgp" commands. */
@@ -800,73 +753,77 @@ DEFUN_NOSH (router_bgp,
AS_STR
BGP_INSTANCE_HELP_STR)
{
- int idx_asn = 2;
- int idx_view_vrf = 3;
- int idx_vrf = 4;
- int ret;
- as_t as;
- struct bgp *bgp;
- const char *name = NULL;
- enum bgp_instance_type inst_type;
-
- // "router bgp" without an ASN
- if (argc == 2)
- {
- //Pending: Make VRF option available for ASN less config
- bgp = bgp_get_default();
-
- if (bgp == NULL)
- {
- vty_out (vty, "%% No BGP process is configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (listcount(bm->bgp) > 1)
- {
- vty_out (vty, "%% Multiple BGP processes are configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- // "router bgp X"
- else
- {
- VTY_GET_INTEGER_RANGE ("AS", as, argv[idx_asn]->arg, 1, BGP_AS4_MAX);
-
- inst_type = BGP_INSTANCE_TYPE_DEFAULT;
- if (argc > 3)
- {
- name = argv[idx_vrf]->arg;
-
- if (!strcmp(argv[idx_view_vrf]->text, "vrf"))
- inst_type = BGP_INSTANCE_TYPE_VRF;
- else if (!strcmp(argv[idx_view_vrf]->text, "view"))
- inst_type = BGP_INSTANCE_TYPE_VIEW;
- }
-
- ret = bgp_get (&bgp, &as, name, inst_type);
- switch (ret)
- {
- case BGP_ERR_MULTIPLE_INSTANCE_NOT_SET:
- vty_out (vty, "Please specify 'bgp multiple-instance' first%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- case BGP_ERR_AS_MISMATCH:
- vty_out (vty, "BGP is already running; AS is %u%s", as, VTY_NEWLINE);
- return CMD_WARNING;
- case BGP_ERR_INSTANCE_MISMATCH:
- vty_out (vty, "BGP instance name and AS number mismatch%s", VTY_NEWLINE);
- vty_out (vty, "BGP instance is already running; AS is %u%s",
- as, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- /* Pending: handle when user tries to change a view to vrf n vv. */
- }
-
- VTY_PUSH_CONTEXT(BGP_NODE, bgp);
-
- return CMD_SUCCESS;
+ int idx_asn = 2;
+ int idx_view_vrf = 3;
+ int idx_vrf = 4;
+ int ret;
+ as_t as;
+ struct bgp *bgp;
+ const char *name = NULL;
+ enum bgp_instance_type inst_type;
+
+ // "router bgp" without an ASN
+ if (argc == 2) {
+ // Pending: Make VRF option available for ASN less config
+ bgp = bgp_get_default();
+
+ if (bgp == NULL) {
+ vty_out(vty, "%% No BGP process is configured%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (listcount(bm->bgp) > 1) {
+ vty_out(vty,
+ "%% Multiple BGP processes are configured%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ // "router bgp X"
+ else {
+ VTY_GET_INTEGER_RANGE("AS", as, argv[idx_asn]->arg, 1,
+ BGP_AS4_MAX);
+
+ inst_type = BGP_INSTANCE_TYPE_DEFAULT;
+ if (argc > 3) {
+ name = argv[idx_vrf]->arg;
+
+ if (!strcmp(argv[idx_view_vrf]->text, "vrf"))
+ inst_type = BGP_INSTANCE_TYPE_VRF;
+ else if (!strcmp(argv[idx_view_vrf]->text, "view"))
+ inst_type = BGP_INSTANCE_TYPE_VIEW;
+ }
+
+ ret = bgp_get(&bgp, &as, name, inst_type);
+ switch (ret) {
+ case BGP_ERR_MULTIPLE_INSTANCE_NOT_SET:
+ vty_out(vty,
+ "Please specify 'bgp multiple-instance' first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ case BGP_ERR_AS_MISMATCH:
+ vty_out(vty, "BGP is already running; AS is %u%s", as,
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ case BGP_ERR_INSTANCE_MISMATCH:
+ vty_out(vty,
+ "BGP instance name and AS number mismatch%s",
+ VTY_NEWLINE);
+ vty_out(vty,
+ "BGP instance is already running; AS is %u%s",
+ as, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ /* Pending: handle when user tries to change a view to vrf n vv.
+ */
+ }
+
+ VTY_PUSH_CONTEXT(BGP_NODE, bgp);
+
+ return CMD_SUCCESS;
}
/* "no router bgp" commands. */
@@ -879,53 +836,51 @@ DEFUN (no_router_bgp,
AS_STR
BGP_INSTANCE_HELP_STR)
{
- int idx_asn = 3;
- int idx_vrf = 5;
- as_t as;
- struct bgp *bgp;
- const char *name = NULL;
-
- // "no router bgp" without an ASN
- if (argc == 3)
- {
- //Pending: Make VRF option available for ASN less config
- bgp = bgp_get_default();
-
- if (bgp == NULL)
- {
- vty_out (vty, "%% No BGP process is configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (listcount(bm->bgp) > 1)
- {
- vty_out (vty, "%% Multiple BGP processes are configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
- else
- {
- VTY_GET_INTEGER_RANGE ("AS", as, argv[idx_asn]->arg, 1, BGP_AS4_MAX);
-
- if (argc > 4)
- name = argv[idx_vrf]->arg;
+ int idx_asn = 3;
+ int idx_vrf = 5;
+ as_t as;
+ struct bgp *bgp;
+ const char *name = NULL;
+
+ // "no router bgp" without an ASN
+ if (argc == 3) {
+ // Pending: Make VRF option available for ASN less config
+ bgp = bgp_get_default();
+
+ if (bgp == NULL) {
+ vty_out(vty, "%% No BGP process is configured%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- /* Lookup bgp structure. */
- bgp = bgp_lookup (as, name);
- if (! bgp)
- {
- vty_out (vty, "%% Can't find BGP instance%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
+ if (listcount(bm->bgp) > 1) {
+ vty_out(vty,
+ "%% Multiple BGP processes are configured%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ } else {
+ VTY_GET_INTEGER_RANGE("AS", as, argv[idx_asn]->arg, 1,
+ BGP_AS4_MAX);
+
+ if (argc > 4)
+ name = argv[idx_vrf]->arg;
+
+ /* Lookup bgp structure. */
+ bgp = bgp_lookup(as, name);
+ if (!bgp) {
+ vty_out(vty, "%% Can't find BGP instance%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
- bgp_delete (bgp);
+ bgp_delete(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-
/* BGP router-id. */
DEFUN (bgp_router_id,
@@ -935,21 +890,21 @@ DEFUN (bgp_router_id,
"Override configured router identifier\n"
"Manually configured router identifier\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ipv4 = 2;
- int ret;
- struct in_addr id;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ipv4 = 2;
+ int ret;
+ struct in_addr id;
- ret = inet_aton (argv[idx_ipv4]->arg, &id);
- if (! ret)
- {
- vty_out (vty, "%% Malformed bgp router identifier%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ ret = inet_aton(argv[idx_ipv4]->arg, &id);
+ if (!ret) {
+ vty_out(vty, "%% Malformed bgp router identifier%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- bgp_router_id_static_set (bgp, id);
+ bgp_router_id_static_set(bgp, id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_router_id,
@@ -960,31 +915,30 @@ DEFUN (no_bgp_router_id,
"Override configured router identifier\n"
"Manually configured router identifier\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_router_id = 3;
- int ret;
- struct in_addr id;
-
- if (argc > idx_router_id)
- {
- ret = inet_aton (argv[idx_router_id]->arg, &id);
- if (! ret)
- {
- vty_out (vty, "%% Malformed BGP router identifier%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_router_id = 3;
+ int ret;
+ struct in_addr id;
+
+ if (argc > idx_router_id) {
+ ret = inet_aton(argv[idx_router_id]->arg, &id);
+ if (!ret) {
+ vty_out(vty, "%% Malformed BGP router identifier%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- if (! IPV4_ADDR_SAME (&bgp->router_id_static, &id))
- {
- vty_out (vty, "%% BGP router-id doesn't match%s", VTY_NEWLINE);
- return CMD_WARNING;
+ if (!IPV4_ADDR_SAME(&bgp->router_id_static, &id)) {
+ vty_out(vty, "%% BGP router-id doesn't match%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
}
- }
- id.s_addr = 0;
- bgp_router_id_static_set (bgp, id);
+ id.s_addr = 0;
+ bgp_router_id_static_set(bgp, id);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -997,22 +951,22 @@ DEFUN (bgp_cluster_id,
"Route-Reflector Cluster-id in IP address format\n"
"Route-Reflector Cluster-id as 32 bit quantity\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ipv4 = 2;
- int ret;
- struct in_addr cluster;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ipv4 = 2;
+ int ret;
+ struct in_addr cluster;
- ret = inet_aton (argv[idx_ipv4]->arg, &cluster);
- if (! ret)
- {
- vty_out (vty, "%% Malformed bgp cluster identifier%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ ret = inet_aton(argv[idx_ipv4]->arg, &cluster);
+ if (!ret) {
+ vty_out(vty, "%% Malformed bgp cluster identifier%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- bgp_cluster_id_set (bgp, &cluster);
- bgp_clear_star_soft_out (vty, bgp->name);
+ bgp_cluster_id_set(bgp, &cluster);
+ bgp_clear_star_soft_out(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_cluster_id,
@@ -1024,11 +978,11 @@ DEFUN (no_bgp_cluster_id,
"Route-Reflector Cluster-id in IP address format\n"
"Route-Reflector Cluster-id as 32 bit quantity\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_cluster_id_unset (bgp);
- bgp_clear_star_soft_out (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_cluster_id_unset(bgp);
+ bgp_clear_star_soft_out(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_confederation_identifier,
@@ -1039,15 +993,15 @@ DEFUN (bgp_confederation_identifier,
"AS number\n"
"Set routing domain confederation AS\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- as_t as;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ as_t as;
- VTY_GET_INTEGER_RANGE ("AS", as, argv[idx_number]->arg, 1, BGP_AS4_MAX);
+ VTY_GET_INTEGER_RANGE("AS", as, argv[idx_number]->arg, 1, BGP_AS4_MAX);
- bgp_confederation_id_set (bgp, as);
+ bgp_confederation_id_set(bgp, as);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_confederation_identifier,
@@ -1059,10 +1013,10 @@ DEFUN (no_bgp_confederation_identifier,
"AS number\n"
"Set routing domain confederation AS\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_confederation_id_unset (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_confederation_id_unset(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_confederation_peers,
@@ -1073,25 +1027,24 @@ DEFUN (bgp_confederation_peers,
"Peer ASs in BGP confederation\n"
AS_STR)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_asn = 3;
- as_t as;
- int i;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_asn = 3;
+ as_t as;
+ int i;
- for (i = idx_asn; i < argc; i++)
- {
- VTY_GET_INTEGER_RANGE ("AS", as, argv[i]->arg, 1, BGP_AS4_MAX);
+ for (i = idx_asn; i < argc; i++) {
+ VTY_GET_INTEGER_RANGE("AS", as, argv[i]->arg, 1, BGP_AS4_MAX);
- if (bgp->as == as)
- {
- vty_out (vty, "%% Local member-AS not allowed in confed peer list%s",
- VTY_NEWLINE);
- continue;
- }
+ if (bgp->as == as) {
+ vty_out(vty,
+ "%% Local member-AS not allowed in confed peer list%s",
+ VTY_NEWLINE);
+ continue;
+ }
- bgp_confederation_peers_add (bgp, as);
- }
- return CMD_SUCCESS;
+ bgp_confederation_peers_add(bgp, as);
+ }
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_confederation_peers,
@@ -1103,18 +1056,17 @@ DEFUN (no_bgp_confederation_peers,
"Peer ASs in BGP confederation\n"
AS_STR)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_asn = 4;
- as_t as;
- int i;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_asn = 4;
+ as_t as;
+ int i;
- for (i = idx_asn; i < argc; i++)
- {
- VTY_GET_INTEGER_RANGE ("AS", as, argv[i]->arg, 1, BGP_AS4_MAX);
+ for (i = idx_asn; i < argc; i++) {
+ VTY_GET_INTEGER_RANGE("AS", as, argv[i]->arg, 1, BGP_AS4_MAX);
- bgp_confederation_peers_remove (bgp, as);
- }
- return CMD_SUCCESS;
+ bgp_confederation_peers_remove(bgp, as);
+ }
+ return CMD_SUCCESS;
}
/**
@@ -1122,47 +1074,44 @@ DEFUN (no_bgp_confederation_peers,
* @peer_type: BGP_PEER_EBGP or BGP_PEER_IBGP
* @set: 1 for setting values, 0 for removing the max-paths config.
*/
-static int
-bgp_maxpaths_config_vty (struct vty *vty, int peer_type, const char *mpaths,
- u_int16_t options, int set)
-{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- u_int16_t maxpaths = 0;
- int ret;
- afi_t afi;
- safi_t safi;
-
- afi = bgp_node_afi (vty);
- safi = bgp_node_safi (vty);
-
- if (set)
- {
- maxpaths = strtol(mpaths, NULL, 10);
- if (maxpaths > multipath_num)
- {
- vty_out (vty,
- "%% Maxpaths Specified: %d is > than multipath num specified on bgp command line %d",
- maxpaths, multipath_num);
- return CMD_WARNING;
- }
- ret = bgp_maximum_paths_set (bgp, afi, safi, peer_type, maxpaths, options);
- }
- else
- ret = bgp_maximum_paths_unset (bgp, afi, safi, peer_type);
-
- if (ret < 0)
- {
- vty_out (vty,
- "%% Failed to %sset maximum-paths %s %u for afi %u, safi %u%s",
- (set == 1) ? "" : "un",
- (peer_type == BGP_PEER_EBGP) ? "ebgp" : "ibgp",
- maxpaths, afi, safi, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- bgp_recalculate_all_bestpaths (bgp);
-
- return CMD_SUCCESS;
+static int bgp_maxpaths_config_vty(struct vty *vty, int peer_type,
+ const char *mpaths, u_int16_t options,
+ int set)
+{
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ u_int16_t maxpaths = 0;
+ int ret;
+ afi_t afi;
+ safi_t safi;
+
+ afi = bgp_node_afi(vty);
+ safi = bgp_node_safi(vty);
+
+ if (set) {
+ maxpaths = strtol(mpaths, NULL, 10);
+ if (maxpaths > multipath_num) {
+ vty_out(vty,
+ "%% Maxpaths Specified: %d is > than multipath num specified on bgp command line %d",
+ maxpaths, multipath_num);
+ return CMD_WARNING;
+ }
+ ret = bgp_maximum_paths_set(bgp, afi, safi, peer_type, maxpaths,
+ options);
+ } else
+ ret = bgp_maximum_paths_unset(bgp, afi, safi, peer_type);
+
+ if (ret < 0) {
+ vty_out(vty,
+ "%% Failed to %sset maximum-paths %s %u for afi %u, safi %u%s",
+ (set == 1) ? "" : "un",
+ (peer_type == BGP_PEER_EBGP) ? "ebgp" : "ibgp",
+ maxpaths, afi, safi, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ bgp_recalculate_all_bestpaths(bgp);
+
+ return CMD_SUCCESS;
}
DEFUN (bgp_maxmed_admin,
@@ -1172,14 +1121,14 @@ DEFUN (bgp_maxmed_admin,
"Advertise routes with max-med\n"
"Administratively applied, for an indefinite period\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp->v_maxmed_admin = 1;
- bgp->maxmed_admin_value = BGP_MAXMED_VALUE_DEFAULT;
+ bgp->v_maxmed_admin = 1;
+ bgp->maxmed_admin_value = BGP_MAXMED_VALUE_DEFAULT;
- bgp_maxmed_update(bgp);
+ bgp_maxmed_update(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_maxmed_admin_medv,
@@ -1190,15 +1139,16 @@ DEFUN (bgp_maxmed_admin_medv,
"Administratively applied, for an indefinite period\n"
"Max MED value to be used\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
- bgp->v_maxmed_admin = 1;
- VTY_GET_INTEGER ("max-med admin med-value", bgp->maxmed_admin_value, argv[idx_number]->arg);
+ bgp->v_maxmed_admin = 1;
+ VTY_GET_INTEGER("max-med admin med-value", bgp->maxmed_admin_value,
+ argv[idx_number]->arg);
- bgp_maxmed_update(bgp);
+ bgp_maxmed_update(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_maxmed_admin,
@@ -1210,12 +1160,12 @@ DEFUN (no_bgp_maxmed_admin,
"Administratively applied, for an indefinite period\n"
"Max MED value to be used\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp->v_maxmed_admin = BGP_MAXMED_ADMIN_UNCONFIGURED;
- bgp->maxmed_admin_value = BGP_MAXMED_VALUE_DEFAULT;
- bgp_maxmed_update(bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp->v_maxmed_admin = BGP_MAXMED_ADMIN_UNCONFIGURED;
+ bgp->maxmed_admin_value = BGP_MAXMED_VALUE_DEFAULT;
+ bgp_maxmed_update(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_maxmed_onstartup,
@@ -1226,13 +1176,14 @@ DEFUN (bgp_maxmed_onstartup,
"Effective on a startup\n"
"Time (seconds) period for max-med\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- VTY_GET_INTEGER ("max-med on-startup period", bgp->v_maxmed_onstartup, argv[idx_number]->arg);
- bgp->maxmed_onstartup_value = BGP_MAXMED_VALUE_DEFAULT;
- bgp_maxmed_update(bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ VTY_GET_INTEGER("max-med on-startup period", bgp->v_maxmed_onstartup,
+ argv[idx_number]->arg);
+ bgp->maxmed_onstartup_value = BGP_MAXMED_VALUE_DEFAULT;
+ bgp_maxmed_update(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_maxmed_onstartup_medv,
@@ -1244,14 +1195,16 @@ DEFUN (bgp_maxmed_onstartup_medv,
"Time (seconds) period for max-med\n"
"Max MED value to be used\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- int idx_number_2 = 4;
- VTY_GET_INTEGER ("max-med on-startup period", bgp->v_maxmed_onstartup, argv[idx_number]->arg);
- VTY_GET_INTEGER ("max-med on-startup med-value", bgp->maxmed_onstartup_value, argv[idx_number_2]->arg);
- bgp_maxmed_update(bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ VTY_GET_INTEGER("max-med on-startup period", bgp->v_maxmed_onstartup,
+ argv[idx_number]->arg);
+ VTY_GET_INTEGER("max-med on-startup med-value",
+ bgp->maxmed_onstartup_value, argv[idx_number_2]->arg);
+ bgp_maxmed_update(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_maxmed_onstartup,
@@ -1264,79 +1217,74 @@ DEFUN (no_bgp_maxmed_onstartup,
"Time (seconds) period for max-med\n"
"Max MED value to be used\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- /* Cancel max-med onstartup if its on */
- if (bgp->t_maxmed_onstartup)
- {
- THREAD_TIMER_OFF (bgp->t_maxmed_onstartup);
- bgp->maxmed_onstartup_over = 1;
- }
+ /* Cancel max-med onstartup if its on */
+ if (bgp->t_maxmed_onstartup) {
+ THREAD_TIMER_OFF(bgp->t_maxmed_onstartup);
+ bgp->maxmed_onstartup_over = 1;
+ }
- bgp->v_maxmed_onstartup = BGP_MAXMED_ONSTARTUP_UNCONFIGURED;
- bgp->maxmed_onstartup_value = BGP_MAXMED_VALUE_DEFAULT;
+ bgp->v_maxmed_onstartup = BGP_MAXMED_ONSTARTUP_UNCONFIGURED;
+ bgp->maxmed_onstartup_value = BGP_MAXMED_VALUE_DEFAULT;
- bgp_maxmed_update(bgp);
+ bgp_maxmed_update(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static int
-bgp_update_delay_config_vty (struct vty *vty, const char *delay,
- const char *wait)
+static int bgp_update_delay_config_vty(struct vty *vty, const char *delay,
+ const char *wait)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- u_int16_t update_delay;
- u_int16_t establish_wait;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ u_int16_t update_delay;
+ u_int16_t establish_wait;
- VTY_GET_INTEGER_RANGE ("update-delay", update_delay, delay,
- BGP_UPDATE_DELAY_MIN, BGP_UPDATE_DELAY_MAX);
+ VTY_GET_INTEGER_RANGE("update-delay", update_delay, delay,
+ BGP_UPDATE_DELAY_MIN, BGP_UPDATE_DELAY_MAX);
- if (!wait) /* update-delay <delay> */
- {
- bgp->v_update_delay = update_delay;
- bgp->v_establish_wait = bgp->v_update_delay;
- return CMD_SUCCESS;
- }
+ if (!wait) /* update-delay <delay> */
+ {
+ bgp->v_update_delay = update_delay;
+ bgp->v_establish_wait = bgp->v_update_delay;
+ return CMD_SUCCESS;
+ }
- /* update-delay <delay> <establish-wait> */
- establish_wait = atoi (wait);
- if (update_delay < establish_wait)
- {
- vty_out (vty, "%%Failed: update-delay less than the establish-wait!%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
+ /* update-delay <delay> <establish-wait> */
+ establish_wait = atoi(wait);
+ if (update_delay < establish_wait) {
+ vty_out(vty,
+ "%%Failed: update-delay less than the establish-wait!%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- bgp->v_update_delay = update_delay;
- bgp->v_establish_wait = establish_wait;
+ bgp->v_update_delay = update_delay;
+ bgp->v_establish_wait = establish_wait;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static int
-bgp_update_delay_deconfig_vty (struct vty *vty)
+static int bgp_update_delay_deconfig_vty(struct vty *vty)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp->v_update_delay = BGP_UPDATE_DELAY_DEF;
- bgp->v_establish_wait = bgp->v_update_delay;
+ bgp->v_update_delay = BGP_UPDATE_DELAY_DEF;
+ bgp->v_establish_wait = bgp->v_update_delay;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-int
-bgp_config_write_update_delay (struct vty *vty, struct bgp *bgp)
+int bgp_config_write_update_delay(struct vty *vty, struct bgp *bgp)
{
- if (bgp->v_update_delay != BGP_UPDATE_DELAY_DEF)
- {
- vty_out (vty, " update-delay %d", bgp->v_update_delay);
- if (bgp->v_update_delay != bgp->v_establish_wait)
- vty_out (vty, " %d", bgp->v_establish_wait);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
+ if (bgp->v_update_delay != BGP_UPDATE_DELAY_DEF) {
+ vty_out(vty, " update-delay %d", bgp->v_update_delay);
+ if (bgp->v_update_delay != bgp->v_establish_wait)
+ vty_out(vty, " %d", bgp->v_establish_wait);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
- return 0;
+ return 0;
}
@@ -1347,8 +1295,8 @@ DEFUN (bgp_update_delay,
"Force initial delay for best-path and updates\n"
"Seconds\n")
{
- int idx_number = 1;
- return bgp_update_delay_config_vty(vty, argv[idx_number]->arg, NULL);
+ int idx_number = 1;
+ return bgp_update_delay_config_vty(vty, argv[idx_number]->arg, NULL);
}
DEFUN (bgp_update_delay_establish_wait,
@@ -1359,9 +1307,10 @@ DEFUN (bgp_update_delay_establish_wait,
"Wait for peers to be established\n"
"Seconds\n")
{
- int idx_number = 1;
- int idx_number_2 = 2;
- return bgp_update_delay_config_vty(vty, argv[idx_number]->arg, argv[idx_number_2]->arg);
+ int idx_number = 1;
+ int idx_number_2 = 2;
+ return bgp_update_delay_config_vty(vty, argv[idx_number]->arg,
+ argv[idx_number_2]->arg);
}
/* Update-delay deconfiguration */
@@ -1373,32 +1322,31 @@ DEFUN (no_bgp_update_delay,
"Seconds\n"
"Wait for peers to be established\n")
{
- return bgp_update_delay_deconfig_vty(vty);
+ return bgp_update_delay_deconfig_vty(vty);
}
-static int
-bgp_wpkt_quanta_config_vty (struct vty *vty, const char *num, char set)
+static int bgp_wpkt_quanta_config_vty(struct vty *vty, const char *num,
+ char set)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (set)
- VTY_GET_INTEGER_RANGE ("write-quanta", bgp->wpkt_quanta, num,
- 1, 10000);
- else
- bgp->wpkt_quanta = BGP_WRITE_PACKET_MAX;
+ if (set)
+ VTY_GET_INTEGER_RANGE("write-quanta", bgp->wpkt_quanta, num, 1,
+ 10000);
+ else
+ bgp->wpkt_quanta = BGP_WRITE_PACKET_MAX;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-int
-bgp_config_write_wpkt_quanta (struct vty *vty, struct bgp *bgp)
+int bgp_config_write_wpkt_quanta(struct vty *vty, struct bgp *bgp)
{
- if (bgp->wpkt_quanta != BGP_WRITE_PACKET_MAX)
- vty_out (vty, " write-quanta %d%s",
- bgp->wpkt_quanta, VTY_NEWLINE);
+ if (bgp->wpkt_quanta != BGP_WRITE_PACKET_MAX)
+ vty_out(vty, " write-quanta %d%s", bgp->wpkt_quanta,
+ VTY_NEWLINE);
- return 0;
+ return 0;
}
@@ -1409,8 +1357,8 @@ DEFUN (bgp_wpkt_quanta,
"How many packets to write to peer socket per run\n"
"Number of packets\n")
{
- int idx_number = 1;
- return bgp_wpkt_quanta_config_vty(vty, argv[idx_number]->arg, 1);
+ int idx_number = 1;
+ return bgp_wpkt_quanta_config_vty(vty, argv[idx_number]->arg, 1);
}
/* Update-delay deconfiguration */
@@ -1421,32 +1369,30 @@ DEFUN (no_bgp_wpkt_quanta,
"How many packets to write to peer socket per run\n"
"Number of packets\n")
{
- int idx_number = 2;
- return bgp_wpkt_quanta_config_vty(vty, argv[idx_number]->arg, 0);
+ int idx_number = 2;
+ return bgp_wpkt_quanta_config_vty(vty, argv[idx_number]->arg, 0);
}
-static int
-bgp_coalesce_config_vty (struct vty *vty, const char *num, char set)
+static int bgp_coalesce_config_vty(struct vty *vty, const char *num, char set)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (set)
- VTY_GET_INTEGER_RANGE ("coalesce-time", bgp->coalesce_time, num,
- 0, 4294967295);
- else
- bgp->coalesce_time = BGP_DEFAULT_SUBGROUP_COALESCE_TIME;
+ if (set)
+ VTY_GET_INTEGER_RANGE("coalesce-time", bgp->coalesce_time, num,
+ 0, 4294967295);
+ else
+ bgp->coalesce_time = BGP_DEFAULT_SUBGROUP_COALESCE_TIME;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-int
-bgp_config_write_coalesce_time (struct vty *vty, struct bgp *bgp)
+int bgp_config_write_coalesce_time(struct vty *vty, struct bgp *bgp)
{
- if (bgp->coalesce_time != BGP_DEFAULT_SUBGROUP_COALESCE_TIME)
- vty_out (vty, " coalesce-time %d%s",
- bgp->coalesce_time, VTY_NEWLINE);
+ if (bgp->coalesce_time != BGP_DEFAULT_SUBGROUP_COALESCE_TIME)
+ vty_out(vty, " coalesce-time %d%s", bgp->coalesce_time,
+ VTY_NEWLINE);
- return 0;
+ return 0;
}
@@ -1456,8 +1402,8 @@ DEFUN (bgp_coalesce_time,
"Subgroup coalesce timer\n"
"Subgroup coalesce timer value (in ms)\n")
{
- int idx_number = 1;
- return bgp_coalesce_config_vty(vty, argv[idx_number]->arg, 1);
+ int idx_number = 1;
+ return bgp_coalesce_config_vty(vty, argv[idx_number]->arg, 1);
}
DEFUN (no_bgp_coalesce_time,
@@ -1467,8 +1413,8 @@ DEFUN (no_bgp_coalesce_time,
"Subgroup coalesce timer\n"
"Subgroup coalesce timer value (in ms)\n")
{
- int idx_number = 2;
- return bgp_coalesce_config_vty(vty, argv[idx_number]->arg, 0);
+ int idx_number = 2;
+ return bgp_coalesce_config_vty(vty, argv[idx_number]->arg, 0);
}
/* Maximum-paths configuration */
@@ -1478,8 +1424,9 @@ DEFUN (bgp_maxpaths,
"Forward packets over multiple paths\n"
"Number of paths\n")
{
- int idx_number = 1;
- return bgp_maxpaths_config_vty(vty, BGP_PEER_EBGP, argv[idx_number]->arg, 0, 1);
+ int idx_number = 1;
+ return bgp_maxpaths_config_vty(vty, BGP_PEER_EBGP,
+ argv[idx_number]->arg, 0, 1);
}
DEFUN (bgp_maxpaths_ibgp,
@@ -1489,8 +1436,9 @@ DEFUN (bgp_maxpaths_ibgp,
"iBGP-multipath\n"
"Number of paths\n")
{
- int idx_number = 2;
- return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, argv[idx_number]->arg, 0, 1);
+ int idx_number = 2;
+ return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP,
+ argv[idx_number]->arg, 0, 1);
}
DEFUN (bgp_maxpaths_ibgp_cluster,
@@ -1501,9 +1449,10 @@ DEFUN (bgp_maxpaths_ibgp_cluster,
"Number of paths\n"
"Match the cluster length\n")
{
- int idx_number = 2;
- return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, argv[idx_number]->arg,
- BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN, 1);
+ int idx_number = 2;
+ return bgp_maxpaths_config_vty(
+ vty, BGP_PEER_IBGP, argv[idx_number]->arg,
+ BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN, 1);
}
DEFUN (no_bgp_maxpaths,
@@ -1513,7 +1462,7 @@ DEFUN (no_bgp_maxpaths,
"Forward packets over multiple paths\n"
"Number of paths\n")
{
- return bgp_maxpaths_config_vty(vty, BGP_PEER_EBGP, NULL, 0, 0);
+ return bgp_maxpaths_config_vty(vty, BGP_PEER_EBGP, NULL, 0, 0);
}
DEFUN (no_bgp_maxpaths_ibgp,
@@ -1525,32 +1474,29 @@ DEFUN (no_bgp_maxpaths_ibgp,
"Number of paths\n"
"Match the cluster length\n")
{
- return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, NULL, 0, 0);
+ return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, NULL, 0, 0);
}
-int
-bgp_config_write_maxpaths (struct vty *vty, struct bgp *bgp, afi_t afi,
- safi_t safi, int *write)
+int bgp_config_write_maxpaths(struct vty *vty, struct bgp *bgp, afi_t afi,
+ safi_t safi, int *write)
{
- if (bgp->maxpaths[afi][safi].maxpaths_ebgp != MULTIPATH_NUM)
- {
- bgp_config_write_family_header (vty, afi, safi, write);
- vty_out (vty, " maximum-paths %d%s",
- bgp->maxpaths[afi][safi].maxpaths_ebgp, VTY_NEWLINE);
- }
+ if (bgp->maxpaths[afi][safi].maxpaths_ebgp != MULTIPATH_NUM) {
+ bgp_config_write_family_header(vty, afi, safi, write);
+ vty_out(vty, " maximum-paths %d%s",
+ bgp->maxpaths[afi][safi].maxpaths_ebgp, VTY_NEWLINE);
+ }
- if (bgp->maxpaths[afi][safi].maxpaths_ibgp != MULTIPATH_NUM)
- {
- bgp_config_write_family_header (vty, afi, safi, write);
- vty_out (vty, " maximum-paths ibgp %d",
- bgp->maxpaths[afi][safi].maxpaths_ibgp);
- if (CHECK_FLAG (bgp->maxpaths[afi][safi].ibgp_flags,
- BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN))
- vty_out (vty, " equal-cluster-length");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
+ if (bgp->maxpaths[afi][safi].maxpaths_ibgp != MULTIPATH_NUM) {
+ bgp_config_write_family_header(vty, afi, safi, write);
+ vty_out(vty, " maximum-paths ibgp %d",
+ bgp->maxpaths[afi][safi].maxpaths_ibgp);
+ if (CHECK_FLAG(bgp->maxpaths[afi][safi].ibgp_flags,
+ BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN))
+ vty_out(vty, " equal-cluster-length");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
- return 0;
+ return 0;
}
/* BGP timers. */
@@ -1563,26 +1509,26 @@ DEFUN (bgp_timers,
"Keepalive interval\n"
"Holdtime\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 2;
- int idx_number_2 = 3;
- unsigned long keepalive = 0;
- unsigned long holdtime = 0;
-
- VTY_GET_INTEGER ("keepalive", keepalive, argv[idx_number]->arg);
- VTY_GET_INTEGER ("holdtime", holdtime, argv[idx_number_2]->arg);
-
- /* Holdtime value check. */
- if (holdtime < 3 && holdtime != 0)
- {
- vty_out (vty, "%% hold time value must be either 0 or greater than 3%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 2;
+ int idx_number_2 = 3;
+ unsigned long keepalive = 0;
+ unsigned long holdtime = 0;
+
+ VTY_GET_INTEGER("keepalive", keepalive, argv[idx_number]->arg);
+ VTY_GET_INTEGER("holdtime", holdtime, argv[idx_number_2]->arg);
+
+ /* Holdtime value check. */
+ if (holdtime < 3 && holdtime != 0) {
+ vty_out(vty,
+ "%% hold time value must be either 0 or greater than 3%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- bgp_timers_set (bgp, keepalive, holdtime);
+ bgp_timers_set(bgp, keepalive, holdtime);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_timers,
@@ -1594,10 +1540,10 @@ DEFUN (no_bgp_timers,
"Keepalive interval\n"
"Holdtime\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_timers_unset (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_timers_unset(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -1608,11 +1554,11 @@ DEFUN (bgp_client_to_client_reflection,
"Configure client to client route reflection\n"
"reflection of routes allowed\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_NO_CLIENT_TO_CLIENT);
- bgp_clear_star_soft_out (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_NO_CLIENT_TO_CLIENT);
+ bgp_clear_star_soft_out(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_client_to_client_reflection,
@@ -1623,11 +1569,11 @@ DEFUN (no_bgp_client_to_client_reflection,
"Configure client to client route reflection\n"
"reflection of routes allowed\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_NO_CLIENT_TO_CLIENT);
- bgp_clear_star_soft_out (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_NO_CLIENT_TO_CLIENT);
+ bgp_clear_star_soft_out(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp always-compare-med" configuration. */
@@ -1637,11 +1583,11 @@ DEFUN (bgp_always_compare_med,
"BGP specific commands\n"
"Allow comparing MED from different neighbors\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_ALWAYS_COMPARE_MED);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_ALWAYS_COMPARE_MED);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_always_compare_med,
@@ -1651,11 +1597,11 @@ DEFUN (no_bgp_always_compare_med,
"BGP specific commands\n"
"Allow comparing MED from different neighbors\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_ALWAYS_COMPARE_MED);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_ALWAYS_COMPARE_MED);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp deterministic-med" configuration. */
@@ -1665,15 +1611,14 @@ DEFUN (bgp_deterministic_med,
"BGP specific commands\n"
"Pick the best-MED path among paths advertised from the neighboring AS\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp_flag_check(bgp, BGP_FLAG_DETERMINISTIC_MED))
- {
- bgp_flag_set (bgp, BGP_FLAG_DETERMINISTIC_MED);
- bgp_recalculate_all_bestpaths (bgp);
- }
+ if (!bgp_flag_check(bgp, BGP_FLAG_DETERMINISTIC_MED)) {
+ bgp_flag_set(bgp, BGP_FLAG_DETERMINISTIC_MED);
+ bgp_recalculate_all_bestpaths(bgp);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_deterministic_med,
@@ -1683,45 +1628,43 @@ DEFUN (no_bgp_deterministic_med,
"BGP specific commands\n"
"Pick the best-MED path among paths advertised from the neighboring AS\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int bestpath_per_as_used;
- afi_t afi;
- safi_t safi;
- struct peer *peer;
- struct listnode *node, *nnode;
-
- if (bgp_flag_check(bgp, BGP_FLAG_DETERMINISTIC_MED))
- {
- bestpath_per_as_used = 0;
-
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- if (CHECK_FLAG (peer->af_flags[afi][safi], PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
- {
- bestpath_per_as_used = 1;
- break;
- }
-
- if (bestpath_per_as_used)
- break;
- }
-
- if (bestpath_per_as_used)
- {
- vty_out (vty, "bgp deterministic-med cannot be disabled while addpath-tx-bestpath-per-AS is in use%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- else
- {
- bgp_flag_unset (bgp, BGP_FLAG_DETERMINISTIC_MED);
- bgp_recalculate_all_bestpaths (bgp);
- }
- }
-
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int bestpath_per_as_used;
+ afi_t afi;
+ safi_t safi;
+ struct peer *peer;
+ struct listnode *node, *nnode;
+
+ if (bgp_flag_check(bgp, BGP_FLAG_DETERMINISTIC_MED)) {
+ bestpath_per_as_used = 0;
+
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST; safi < SAFI_MAX;
+ safi++)
+ if (CHECK_FLAG(
+ peer->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
+ bestpath_per_as_used = 1;
+ break;
+ }
+
+ if (bestpath_per_as_used)
+ break;
+ }
+
+ if (bestpath_per_as_used) {
+ vty_out(vty,
+ "bgp deterministic-med cannot be disabled while addpath-tx-bestpath-per-AS is in use%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ } else {
+ bgp_flag_unset(bgp, BGP_FLAG_DETERMINISTIC_MED);
+ bgp_recalculate_all_bestpaths(bgp);
+ }
+ }
+
+ return CMD_SUCCESS;
}
/* "bgp graceful-restart" configuration. */
@@ -1731,9 +1674,9 @@ DEFUN (bgp_graceful_restart,
"BGP specific commands\n"
"Graceful restart capability parameters\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_GRACEFUL_RESTART);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_GRACEFUL_RESTART);
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_graceful_restart,
@@ -1743,9 +1686,9 @@ DEFUN (no_bgp_graceful_restart,
"BGP specific commands\n"
"Graceful restart capability parameters\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_GRACEFUL_RESTART);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_GRACEFUL_RESTART);
+ return CMD_SUCCESS;
}
DEFUN (bgp_graceful_restart_stalepath_time,
@@ -1756,13 +1699,14 @@ DEFUN (bgp_graceful_restart_stalepath_time,
"Set the max time to hold onto restarting peer's stale paths\n"
"Delay value (seconds)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- u_int32_t stalepath;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ u_int32_t stalepath;
- VTY_GET_INTEGER_RANGE ("stalepath-time", stalepath, argv[idx_number]->arg, 1, 3600);
- bgp->stalepath_time = stalepath;
- return CMD_SUCCESS;
+ VTY_GET_INTEGER_RANGE("stalepath-time", stalepath,
+ argv[idx_number]->arg, 1, 3600);
+ bgp->stalepath_time = stalepath;
+ return CMD_SUCCESS;
}
DEFUN (bgp_graceful_restart_restart_time,
@@ -1773,13 +1717,14 @@ DEFUN (bgp_graceful_restart_restart_time,
"Set the time to wait to delete stale routes before a BGP open message is received\n"
"Delay value (seconds)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- u_int32_t restart;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ u_int32_t restart;
- VTY_GET_INTEGER_RANGE ("restart-time", restart, argv[idx_number]->arg, 1, 3600);
- bgp->restart_time = restart;
- return CMD_SUCCESS;
+ VTY_GET_INTEGER_RANGE("restart-time", restart, argv[idx_number]->arg, 1,
+ 3600);
+ bgp->restart_time = restart;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_graceful_restart_stalepath_time,
@@ -1791,10 +1736,10 @@ DEFUN (no_bgp_graceful_restart_stalepath_time,
"Set the max time to hold onto restarting peer's stale paths\n"
"Delay value (seconds)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp->stalepath_time = BGP_DEFAULT_STALEPATH_TIME;
- return CMD_SUCCESS;
+ bgp->stalepath_time = BGP_DEFAULT_STALEPATH_TIME;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_graceful_restart_restart_time,
@@ -1806,10 +1751,10 @@ DEFUN (no_bgp_graceful_restart_restart_time,
"Set the time to wait to delete stale routes before a BGP open message is received\n"
"Delay value (seconds)\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp->restart_time = BGP_DEFAULT_RESTART_TIME;
- return CMD_SUCCESS;
+ bgp->restart_time = BGP_DEFAULT_RESTART_TIME;
+ return CMD_SUCCESS;
}
DEFUN (bgp_graceful_restart_preserve_fw,
@@ -1819,9 +1764,9 @@ DEFUN (bgp_graceful_restart_preserve_fw,
"Graceful restart capability parameters\n"
"Sets F-bit indication that fib is preserved while doing Graceful Restart\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set(bgp, BGP_FLAG_GR_PRESERVE_FWD);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_GR_PRESERVE_FWD);
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_graceful_restart_preserve_fw,
@@ -1832,9 +1777,9 @@ DEFUN (no_bgp_graceful_restart_preserve_fw,
"Graceful restart capability parameters\n"
"Unsets F-bit indication that fib is preserved while doing Graceful Restart\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset(bgp, BGP_FLAG_GR_PRESERVE_FWD);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_GR_PRESERVE_FWD);
+ return CMD_SUCCESS;
}
/* "bgp fast-external-failover" configuration. */
@@ -1844,9 +1789,9 @@ DEFUN (bgp_fast_external_failover,
BGP_STR
"Immediately reset session if a link to a directly connected external peer goes down\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_NO_FAST_EXT_FAILOVER);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_NO_FAST_EXT_FAILOVER);
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_fast_external_failover,
@@ -1856,9 +1801,9 @@ DEFUN (no_bgp_fast_external_failover,
BGP_STR
"Immediately reset session if a link to a directly connected external peer goes down\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_NO_FAST_EXT_FAILOVER);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_NO_FAST_EXT_FAILOVER);
+ return CMD_SUCCESS;
}
/* "bgp enforce-first-as" configuration. */
@@ -1868,11 +1813,11 @@ DEFUN (bgp_enforce_first_as,
BGP_STR
"Enforce the first AS for EBGP routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_ENFORCE_FIRST_AS);
- bgp_clear_star_soft_in (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_ENFORCE_FIRST_AS);
+ bgp_clear_star_soft_in(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_enforce_first_as,
@@ -1882,11 +1827,11 @@ DEFUN (no_bgp_enforce_first_as,
BGP_STR
"Enforce the first AS for EBGP routes\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_ENFORCE_FIRST_AS);
- bgp_clear_star_soft_in (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_ENFORCE_FIRST_AS);
+ bgp_clear_star_soft_in(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp bestpath compare-routerid" configuration. */
@@ -1897,11 +1842,11 @@ DEFUN (bgp_bestpath_compare_router_id,
"Change the default bestpath selection\n"
"Compare router-id for identical EBGP paths\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_COMPARE_ROUTER_ID);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_COMPARE_ROUTER_ID);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_bestpath_compare_router_id,
@@ -1912,11 +1857,11 @@ DEFUN (no_bgp_bestpath_compare_router_id,
"Change the default bestpath selection\n"
"Compare router-id for identical EBGP paths\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_COMPARE_ROUTER_ID);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_COMPARE_ROUTER_ID);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp bestpath as-path ignore" configuration. */
@@ -1928,11 +1873,11 @@ DEFUN (bgp_bestpath_aspath_ignore,
"AS-path attribute\n"
"Ignore as-path length in selecting a route\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_ASPATH_IGNORE);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_ASPATH_IGNORE);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_bestpath_aspath_ignore,
@@ -1944,11 +1889,11 @@ DEFUN (no_bgp_bestpath_aspath_ignore,
"AS-path attribute\n"
"Ignore as-path length in selecting a route\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_ASPATH_IGNORE);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_ASPATH_IGNORE);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp bestpath as-path confed" configuration. */
@@ -1960,11 +1905,11 @@ DEFUN (bgp_bestpath_aspath_confed,
"AS-path attribute\n"
"Compare path lengths including confederation sets & sequences in selecting a route\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_ASPATH_CONFED);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_ASPATH_CONFED);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_bestpath_aspath_confed,
@@ -1976,11 +1921,11 @@ DEFUN (no_bgp_bestpath_aspath_confed,
"AS-path attribute\n"
"Compare path lengths including confederation sets & sequences in selecting a route\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_ASPATH_CONFED);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_ASPATH_CONFED);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp bestpath as-path multipath-relax" configuration. */
@@ -1994,20 +1939,20 @@ DEFUN (bgp_bestpath_aspath_multipath_relax,
"Generate an AS_SET\n"
"Do not generate an AS_SET\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx = 0;
- bgp_flag_set (bgp, BGP_FLAG_ASPATH_MULTIPATH_RELAX);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx = 0;
+ bgp_flag_set(bgp, BGP_FLAG_ASPATH_MULTIPATH_RELAX);
- /* no-as-set is now the default behavior so we can silently
- * ignore it */
- if (argv_find (argv, argc, "as-set", &idx))
- bgp_flag_set (bgp, BGP_FLAG_MULTIPATH_RELAX_AS_SET);
- else
- bgp_flag_unset (bgp, BGP_FLAG_MULTIPATH_RELAX_AS_SET) ;
+ /* no-as-set is now the default behavior so we can silently
+ * ignore it */
+ if (argv_find(argv, argc, "as-set", &idx))
+ bgp_flag_set(bgp, BGP_FLAG_MULTIPATH_RELAX_AS_SET);
+ else
+ bgp_flag_unset(bgp, BGP_FLAG_MULTIPATH_RELAX_AS_SET);
- bgp_recalculate_all_bestpaths (bgp);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_bestpath_aspath_multipath_relax,
@@ -2021,12 +1966,12 @@ DEFUN (no_bgp_bestpath_aspath_multipath_relax,
"Generate an AS_SET\n"
"Do not generate an AS_SET\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_ASPATH_MULTIPATH_RELAX);
- bgp_flag_unset (bgp, BGP_FLAG_MULTIPATH_RELAX_AS_SET);
- bgp_recalculate_all_bestpaths (bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_ASPATH_MULTIPATH_RELAX);
+ bgp_flag_unset(bgp, BGP_FLAG_MULTIPATH_RELAX_AS_SET);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "bgp log-neighbor-changes" configuration. */
@@ -2036,9 +1981,9 @@ DEFUN (bgp_log_neighbor_changes,
"BGP specific commands\n"
"Log neighbor up/down and reset reason\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES);
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_log_neighbor_changes,
@@ -2048,9 +1993,9 @@ DEFUN (no_bgp_log_neighbor_changes,
"BGP specific commands\n"
"Log neighbor up/down and reset reason\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_LOG_NEIGHBOR_CHANGES);
+ return CMD_SUCCESS;
}
/* "bgp bestpath med" configuration. */
@@ -2065,18 +2010,18 @@ DEFUN (bgp_bestpath_med,
"Treat missing MED as the least preferred one\n"
"Compare MED among confederation paths\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx = 0;
- if (argv_find (argv, argc, "confed", &idx))
- bgp_flag_set (bgp, BGP_FLAG_MED_CONFED);
- idx = 0;
- if (argv_find (argv, argc, "missing-as-worst", &idx))
- bgp_flag_set (bgp, BGP_FLAG_MED_MISSING_AS_WORST);
+ int idx = 0;
+ if (argv_find(argv, argc, "confed", &idx))
+ bgp_flag_set(bgp, BGP_FLAG_MED_CONFED);
+ idx = 0;
+ if (argv_find(argv, argc, "missing-as-worst", &idx))
+ bgp_flag_set(bgp, BGP_FLAG_MED_MISSING_AS_WORST);
- bgp_recalculate_all_bestpaths (bgp);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_bestpath_med,
@@ -2091,18 +2036,18 @@ DEFUN (no_bgp_bestpath_med,
"Treat missing MED as the least preferred one\n"
"Compare MED among confederation paths\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx = 0;
- if (argv_find (argv, argc, "confed", &idx))
- bgp_flag_unset (bgp, BGP_FLAG_MED_CONFED);
- idx = 0;
- if (argv_find (argv, argc, "missing-as-worst", &idx))
- bgp_flag_unset (bgp, BGP_FLAG_MED_MISSING_AS_WORST);
+ int idx = 0;
+ if (argv_find(argv, argc, "confed", &idx))
+ bgp_flag_unset(bgp, BGP_FLAG_MED_CONFED);
+ idx = 0;
+ if (argv_find(argv, argc, "missing-as-worst", &idx))
+ bgp_flag_unset(bgp, BGP_FLAG_MED_MISSING_AS_WORST);
- bgp_recalculate_all_bestpaths (bgp);
+ bgp_recalculate_all_bestpaths(bgp);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "no bgp default ipv4-unicast". */
@@ -2114,9 +2059,9 @@ DEFUN (no_bgp_default_ipv4_unicast,
"Configure BGP defaults\n"
"Activate ipv4-unicast for a peer by default\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_NO_DEFAULT_IPV4);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_NO_DEFAULT_IPV4);
+ return CMD_SUCCESS;
}
DEFUN (bgp_default_ipv4_unicast,
@@ -2126,9 +2071,9 @@ DEFUN (bgp_default_ipv4_unicast,
"Configure BGP defaults\n"
"Activate ipv4-unicast for a peer by default\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_NO_DEFAULT_IPV4);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_NO_DEFAULT_IPV4);
+ return CMD_SUCCESS;
}
/* Display hostname in certain command outputs */
@@ -2139,9 +2084,9 @@ DEFUN (bgp_default_show_hostname,
"Configure BGP defaults\n"
"Show hostname in certain command ouputs\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_SHOW_HOSTNAME);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_SHOW_HOSTNAME);
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_default_show_hostname,
@@ -2152,9 +2097,9 @@ DEFUN (no_bgp_default_show_hostname,
"Configure BGP defaults\n"
"Show hostname in certain command ouputs\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_SHOW_HOSTNAME);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_SHOW_HOSTNAME);
+ return CMD_SUCCESS;
}
/* "bgp network import-check" configuration. */
@@ -2165,23 +2110,21 @@ DEFUN (bgp_network_import_check,
"BGP network command\n"
"Check BGP network route exists in IGP\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp_flag_check(bgp, BGP_FLAG_IMPORT_CHECK))
- {
- bgp_flag_set (bgp, BGP_FLAG_IMPORT_CHECK);
- bgp_static_redo_import_check(bgp);
- }
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ if (!bgp_flag_check(bgp, BGP_FLAG_IMPORT_CHECK)) {
+ bgp_flag_set(bgp, BGP_FLAG_IMPORT_CHECK);
+ bgp_static_redo_import_check(bgp);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-ALIAS_HIDDEN (bgp_network_import_check,
- bgp_network_import_check_exact_cmd,
- "bgp network import-check exact",
- "BGP specific commands\n"
- "BGP network command\n"
- "Check BGP network route exists in IGP\n"
- "Match route precisely\n")
+ALIAS_HIDDEN(bgp_network_import_check, bgp_network_import_check_exact_cmd,
+ "bgp network import-check exact",
+ "BGP specific commands\n"
+ "BGP network command\n"
+ "Check BGP network route exists in IGP\n"
+ "Match route precisely\n")
DEFUN (no_bgp_network_import_check,
no_bgp_network_import_check_cmd,
@@ -2191,14 +2134,13 @@ DEFUN (no_bgp_network_import_check,
"BGP network command\n"
"Check BGP network route exists in IGP\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (bgp_flag_check(bgp, BGP_FLAG_IMPORT_CHECK))
- {
- bgp_flag_unset (bgp, BGP_FLAG_IMPORT_CHECK);
- bgp_static_redo_import_check(bgp);
- }
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ if (bgp_flag_check(bgp, BGP_FLAG_IMPORT_CHECK)) {
+ bgp_flag_unset(bgp, BGP_FLAG_IMPORT_CHECK);
+ bgp_static_redo_import_check(bgp);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_default_local_preference,
@@ -2209,16 +2151,16 @@ DEFUN (bgp_default_local_preference,
"local preference (higher=more preferred)\n"
"Configure default local preference value\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- u_int32_t local_pref;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ u_int32_t local_pref;
- VTY_GET_INTEGER ("local preference", local_pref, argv[idx_number]->arg);
+ VTY_GET_INTEGER("local preference", local_pref, argv[idx_number]->arg);
- bgp_default_local_preference_set (bgp, local_pref);
- bgp_clear_star_soft_in (vty, bgp->name);
+ bgp_default_local_preference_set(bgp, local_pref);
+ bgp_clear_star_soft_in(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_default_local_preference,
@@ -2230,11 +2172,11 @@ DEFUN (no_bgp_default_local_preference,
"local preference (higher=more preferred)\n"
"Configure default local preference value\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_default_local_preference_unset (bgp);
- bgp_clear_star_soft_in (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_default_local_preference_unset(bgp);
+ bgp_clear_star_soft_in(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -2246,15 +2188,16 @@ DEFUN (bgp_default_subgroup_pkt_queue_max,
"subgroup-pkt-queue-max\n"
"Configure subgroup packet queue max\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- u_int32_t max_size;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ u_int32_t max_size;
- VTY_GET_INTEGER ("subgroup packet queue max", max_size, argv[idx_number]->arg);
+ VTY_GET_INTEGER("subgroup packet queue max", max_size,
+ argv[idx_number]->arg);
- bgp_default_subgroup_pkt_queue_max_set (bgp, max_size);
+ bgp_default_subgroup_pkt_queue_max_set(bgp, max_size);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_default_subgroup_pkt_queue_max,
@@ -2266,9 +2209,9 @@ DEFUN (no_bgp_default_subgroup_pkt_queue_max,
"subgroup-pkt-queue-max\n"
"Configure subgroup packet queue max\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_default_subgroup_pkt_queue_max_unset (bgp);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_default_subgroup_pkt_queue_max_unset(bgp);
+ return CMD_SUCCESS;
}
@@ -2279,16 +2222,15 @@ DEFUN (bgp_rr_allow_outbound_policy,
"Allow modifications made by out route-map\n"
"on ibgp neighbors\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (!bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY))
- {
- bgp_flag_set(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY);
- update_group_announce_rrclients(bgp);
- bgp_clear_star_soft_out (vty, bgp->name);
- }
+ if (!bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY)) {
+ bgp_flag_set(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY);
+ update_group_announce_rrclients(bgp);
+ bgp_clear_star_soft_out(vty, bgp->name);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_rr_allow_outbound_policy,
@@ -2299,16 +2241,15 @@ DEFUN (no_bgp_rr_allow_outbound_policy,
"Allow modifications made by out route-map\n"
"on ibgp neighbors\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
- if (bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY))
- {
- bgp_flag_unset(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY);
- update_group_announce_rrclients(bgp);
- bgp_clear_star_soft_out (vty, bgp->name);
- }
+ if (bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY)) {
+ bgp_flag_unset(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY);
+ update_group_announce_rrclients(bgp);
+ bgp_clear_star_soft_out(vty, bgp->name);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (bgp_listen_limit,
@@ -2319,17 +2260,18 @@ DEFUN (bgp_listen_limit,
"maximum number of BGP Dynamic Neighbors that can be created\n"
"Configure Dynamic Neighbors listen limit value\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_number = 3;
- int listen_limit;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_number = 3;
+ int listen_limit;
- VTY_GET_INTEGER_RANGE ("listen limit", listen_limit, argv[idx_number]->arg,
- BGP_DYNAMIC_NEIGHBORS_LIMIT_MIN,
- BGP_DYNAMIC_NEIGHBORS_LIMIT_MAX);
+ VTY_GET_INTEGER_RANGE("listen limit", listen_limit,
+ argv[idx_number]->arg,
+ BGP_DYNAMIC_NEIGHBORS_LIMIT_MIN,
+ BGP_DYNAMIC_NEIGHBORS_LIMIT_MAX);
- bgp_listen_limit_set (bgp, listen_limit);
+ bgp_listen_limit_set(bgp, listen_limit);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_listen_limit,
@@ -2341,9 +2283,9 @@ DEFUN (no_bgp_listen_limit,
"Configure Dynamic Neighbors listen limit value to default\n"
"Configure Dynamic Neighbors listen limit value\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_listen_limit_unset (bgp);
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_listen_limit_unset(bgp);
+ return CMD_SUCCESS;
}
@@ -2351,32 +2293,31 @@ DEFUN (no_bgp_listen_limit,
* Check if this listen range is already configured. Check for exact
* match or overlap based on input.
*/
-static struct peer_group *
-listen_range_exists (struct bgp *bgp, struct prefix *range, int exact)
-{
- struct listnode *node, *nnode;
- struct listnode *node1, *nnode1;
- struct peer_group *group;
- struct prefix *lr;
- afi_t afi;
- int match;
-
- afi = family2afi(range->family);
- for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
- {
- for (ALL_LIST_ELEMENTS (group->listen_range[afi], node1,
- nnode1, lr))
- {
- if (exact)
- match = prefix_same (range, lr);
- else
- match = (prefix_match (range, lr) || prefix_match (lr, range));
- if (match)
- return group;
- }
- }
-
- return NULL;
+static struct peer_group *listen_range_exists(struct bgp *bgp,
+ struct prefix *range, int exact)
+{
+ struct listnode *node, *nnode;
+ struct listnode *node1, *nnode1;
+ struct peer_group *group;
+ struct prefix *lr;
+ afi_t afi;
+ int match;
+
+ afi = family2afi(range->family);
+ for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
+ for (ALL_LIST_ELEMENTS(group->listen_range[afi], node1, nnode1,
+ lr)) {
+ if (exact)
+ match = prefix_same(range, lr);
+ else
+ match = (prefix_match(range, lr)
+ || prefix_match(lr, range));
+ if (match)
+ return group;
+ }
+ }
+
+ return NULL;
}
DEFUN (bgp_listen_range,
@@ -2389,69 +2330,66 @@ DEFUN (bgp_listen_range,
"Member of the peer-group\n"
"Peer-group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct prefix range;
- struct peer_group *group, *existing_group;
- afi_t afi;
- int ret;
- int idx = 0;
-
- argv_find (argv, argc, "A.B.C.D/M", &idx);
- argv_find (argv, argc, "X:X::X:X/M", &idx);
- char *prefix = argv[idx]->arg;
- argv_find (argv, argc, "WORD", &idx);
- char *peergroup = argv[idx]->arg;
-
- /* Convert IP prefix string to struct prefix. */
- ret = str2prefix (prefix, &range);
- if (! ret)
- {
- vty_out (vty, "%% Malformed listen range%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- afi = family2afi(range.family);
-
- if (afi == AFI_IP6 && IN6_IS_ADDR_LINKLOCAL (&range.u.prefix6))
- {
- vty_out (vty, "%% Malformed listen range (link-local address)%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- apply_mask (&range);
-
- /* Check if same listen range is already configured. */
- existing_group = listen_range_exists (bgp, &range, 1);
- if (existing_group)
- {
- if (strcmp (existing_group->name, peergroup) == 0)
- return CMD_SUCCESS;
- else
- {
- vty_out (vty, "%% Same listen range is attached to peer-group %s%s",
- existing_group->name, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- /* Check if an overlapping listen range exists. */
- if (listen_range_exists (bgp, &range, 0))
- {
- vty_out (vty, "%% Listen range overlaps with existing listen range%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- group = peer_group_lookup (bgp, peergroup);
- if (! group)
- {
- vty_out (vty, "%% Configure the peer-group first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- ret = peer_group_listen_range_add(group, &range);
- return bgp_vty_return (vty, ret);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct prefix range;
+ struct peer_group *group, *existing_group;
+ afi_t afi;
+ int ret;
+ int idx = 0;
+
+ argv_find(argv, argc, "A.B.C.D/M", &idx);
+ argv_find(argv, argc, "X:X::X:X/M", &idx);
+ char *prefix = argv[idx]->arg;
+ argv_find(argv, argc, "WORD", &idx);
+ char *peergroup = argv[idx]->arg;
+
+ /* Convert IP prefix string to struct prefix. */
+ ret = str2prefix(prefix, &range);
+ if (!ret) {
+ vty_out(vty, "%% Malformed listen range%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ afi = family2afi(range.family);
+
+ if (afi == AFI_IP6 && IN6_IS_ADDR_LINKLOCAL(&range.u.prefix6)) {
+ vty_out(vty, "%% Malformed listen range (link-local address)%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ apply_mask(&range);
+
+ /* Check if same listen range is already configured. */
+ existing_group = listen_range_exists(bgp, &range, 1);
+ if (existing_group) {
+ if (strcmp(existing_group->name, peergroup) == 0)
+ return CMD_SUCCESS;
+ else {
+ vty_out(vty,
+ "%% Same listen range is attached to peer-group %s%s",
+ existing_group->name, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ /* Check if an overlapping listen range exists. */
+ if (listen_range_exists(bgp, &range, 0)) {
+ vty_out(vty,
+ "%% Listen range overlaps with existing listen range%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ group = peer_group_lookup(bgp, peergroup);
+ if (!group) {
+ vty_out(vty, "%% Configure the peer-group first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ ret = peer_group_listen_range_add(group, &range);
+ return bgp_vty_return(vty, ret);
}
DEFUN (no_bgp_listen_range,
@@ -2465,78 +2403,74 @@ DEFUN (no_bgp_listen_range,
"Member of the peer-group\n"
"Peer-group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- struct prefix range;
- struct peer_group *group;
- afi_t afi;
- int ret;
- int idx = 0;
-
- argv_find (argv, argc, "A.B.C.D/M", &idx);
- argv_find (argv, argc, "X:X::X:X/M", &idx);
- char *prefix = argv[idx]->arg;
- argv_find (argv, argc, "WORD", &idx);
- char *peergroup = argv[idx]->arg;
-
- // VTY_GET_IPV4_PREFIX ("listen range", range, argv[idx_ipv4_prefixlen]->arg);
-
- /* Convert IP prefix string to struct prefix. */
- ret = str2prefix (prefix, &range);
- if (! ret)
- {
- vty_out (vty, "%% Malformed listen range%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- afi = family2afi(range.family);
-
- if (afi == AFI_IP6 && IN6_IS_ADDR_LINKLOCAL (&range.u.prefix6))
- {
- vty_out (vty, "%% Malformed listen range (link-local address)%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- apply_mask (&range);
-
- group = peer_group_lookup (bgp, peergroup);
- if (! group)
- {
- vty_out (vty, "%% Peer-group does not exist%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- ret = peer_group_listen_range_del(group, &range);
- return bgp_vty_return (vty, ret);
-}
-
-int
-bgp_config_write_listen (struct vty *vty, struct bgp *bgp)
-{
- struct peer_group *group;
- struct listnode *node, *nnode, *rnode, *nrnode;
- struct prefix *range;
- afi_t afi;
- char buf[PREFIX2STR_BUFFER];
-
- if (bgp->dynamic_neighbors_limit != BGP_DYNAMIC_NEIGHBORS_LIMIT_DEFAULT)
- vty_out (vty, " bgp listen limit %d%s",
- bgp->dynamic_neighbors_limit, VTY_NEWLINE);
-
- for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
- {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- {
- for (ALL_LIST_ELEMENTS (group->listen_range[afi], rnode, nrnode, range))
- {
- prefix2str(range, buf, sizeof(buf));
- vty_out(vty, " bgp listen range %s peer-group %s%s",
- buf, group->name, VTY_NEWLINE);
- }
- }
- }
-
- return 0;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ struct prefix range;
+ struct peer_group *group;
+ afi_t afi;
+ int ret;
+ int idx = 0;
+
+ argv_find(argv, argc, "A.B.C.D/M", &idx);
+ argv_find(argv, argc, "X:X::X:X/M", &idx);
+ char *prefix = argv[idx]->arg;
+ argv_find(argv, argc, "WORD", &idx);
+ char *peergroup = argv[idx]->arg;
+
+ // VTY_GET_IPV4_PREFIX ("listen range", range,
+ // argv[idx_ipv4_prefixlen]->arg);
+
+ /* Convert IP prefix string to struct prefix. */
+ ret = str2prefix(prefix, &range);
+ if (!ret) {
+ vty_out(vty, "%% Malformed listen range%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ afi = family2afi(range.family);
+
+ if (afi == AFI_IP6 && IN6_IS_ADDR_LINKLOCAL(&range.u.prefix6)) {
+ vty_out(vty, "%% Malformed listen range (link-local address)%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ apply_mask(&range);
+
+ group = peer_group_lookup(bgp, peergroup);
+ if (!group) {
+ vty_out(vty, "%% Peer-group does not exist%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ ret = peer_group_listen_range_del(group, &range);
+ return bgp_vty_return(vty, ret);
+}
+
+int bgp_config_write_listen(struct vty *vty, struct bgp *bgp)
+{
+ struct peer_group *group;
+ struct listnode *node, *nnode, *rnode, *nrnode;
+ struct prefix *range;
+ afi_t afi;
+ char buf[PREFIX2STR_BUFFER];
+
+ if (bgp->dynamic_neighbors_limit != BGP_DYNAMIC_NEIGHBORS_LIMIT_DEFAULT)
+ vty_out(vty, " bgp listen limit %d%s",
+ bgp->dynamic_neighbors_limit, VTY_NEWLINE);
+
+ for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (ALL_LIST_ELEMENTS(group->listen_range[afi], rnode,
+ nrnode, range)) {
+ prefix2str(range, buf, sizeof(buf));
+ vty_out(vty,
+ " bgp listen range %s peer-group %s%s",
+ buf, group->name, VTY_NEWLINE);
+ }
+ }
+ }
+
+ return 0;
}
@@ -2546,11 +2480,11 @@ DEFUN (bgp_disable_connected_route_check,
"BGP specific commands\n"
"Disable checking if nexthop is connected on ebgp sessions\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_set (bgp, BGP_FLAG_DISABLE_NH_CONNECTED_CHK);
- bgp_clear_star_soft_in (vty, bgp->name);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_set(bgp, BGP_FLAG_DISABLE_NH_CONNECTED_CHK);
+ bgp_clear_star_soft_in(vty, bgp->name);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_bgp_disable_connected_route_check,
@@ -2560,80 +2494,74 @@ DEFUN (no_bgp_disable_connected_route_check,
"BGP specific commands\n"
"Disable checking if nexthop is connected on ebgp sessions\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- bgp_flag_unset (bgp, BGP_FLAG_DISABLE_NH_CONNECTED_CHK);
- bgp_clear_star_soft_in (vty, bgp->name);
-
- return CMD_SUCCESS;
-}
-
-
-static int
-peer_remote_as_vty (struct vty *vty, const char *peer_str,
- const char *as_str, afi_t afi, safi_t safi)
-{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int ret;
- as_t as;
- int as_type = AS_SPECIFIED;
- union sockunion su;
-
- if (as_str[0] == 'i')
- {
- as = 0;
- as_type = AS_INTERNAL;
- }
- else if (as_str[0] == 'e')
- {
- as = 0;
- as_type = AS_EXTERNAL;
- }
- else
- {
- /* Get AS number. */
- VTY_GET_INTEGER_RANGE ("AS", as, as_str, 1, BGP_AS4_MAX);
- }
-
- /* If peer is peer group, call proper function. */
- ret = str2sockunion (peer_str, &su);
- if (ret < 0)
- {
- /* Check for peer by interface */
- ret = peer_remote_as (bgp, NULL, peer_str, &as, as_type, afi, safi);
- if (ret < 0)
- {
- ret = peer_group_remote_as (bgp, peer_str, &as, as_type);
- if (ret < 0)
- {
- vty_out (vty, "%% Create the peer-group or interface first%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
- }
- }
- else
- {
- if (peer_address_self_check (bgp, &su))
- {
- vty_out (vty, "%% Can not configure the local system as neighbor%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- ret = peer_remote_as (bgp, &su, NULL, &as, as_type, afi, safi);
- }
-
- /* This peer belongs to peer group. */
- switch (ret)
- {
- case BGP_ERR_PEER_GROUP_MEMBER:
- vty_out (vty, "%% Peer-group AS %u. Cannot configure remote-as for member%s", as, VTY_NEWLINE);
- return CMD_WARNING;
- case BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT:
- vty_out (vty, "%% The AS# can not be changed from %u to %s, peer-group members must be all internal or all external%s", as, as_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
- return bgp_vty_return (vty, ret);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ bgp_flag_unset(bgp, BGP_FLAG_DISABLE_NH_CONNECTED_CHK);
+ bgp_clear_star_soft_in(vty, bgp->name);
+
+ return CMD_SUCCESS;
+}
+
+
+static int peer_remote_as_vty(struct vty *vty, const char *peer_str,
+ const char *as_str, afi_t afi, safi_t safi)
+{
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int ret;
+ as_t as;
+ int as_type = AS_SPECIFIED;
+ union sockunion su;
+
+ if (as_str[0] == 'i') {
+ as = 0;
+ as_type = AS_INTERNAL;
+ } else if (as_str[0] == 'e') {
+ as = 0;
+ as_type = AS_EXTERNAL;
+ } else {
+ /* Get AS number. */
+ VTY_GET_INTEGER_RANGE("AS", as, as_str, 1, BGP_AS4_MAX);
+ }
+
+ /* If peer is peer group, call proper function. */
+ ret = str2sockunion(peer_str, &su);
+ if (ret < 0) {
+ /* Check for peer by interface */
+ ret = peer_remote_as(bgp, NULL, peer_str, &as, as_type, afi,
+ safi);
+ if (ret < 0) {
+ ret = peer_group_remote_as(bgp, peer_str, &as, as_type);
+ if (ret < 0) {
+ vty_out(vty,
+ "%% Create the peer-group or interface first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
+ }
+ } else {
+ if (peer_address_self_check(bgp, &su)) {
+ vty_out(vty,
+ "%% Can not configure the local system as neighbor%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ ret = peer_remote_as(bgp, &su, NULL, &as, as_type, afi, safi);
+ }
+
+ /* This peer belongs to peer group. */
+ switch (ret) {
+ case BGP_ERR_PEER_GROUP_MEMBER:
+ vty_out(vty,
+ "%% Peer-group AS %u. Cannot configure remote-as for member%s",
+ as, VTY_NEWLINE);
+ return CMD_WARNING;
+ case BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT:
+ vty_out(vty,
+ "%% The AS# can not be changed from %u to %s, peer-group members must be all internal or all external%s",
+ as, as_str, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_remote_as,
@@ -2646,116 +2574,109 @@ DEFUN (neighbor_remote_as,
"Internal BGP peer\n"
"External BGP peer\n")
{
- int idx_peer = 1;
- int idx_remote_as = 3;
- return peer_remote_as_vty (vty, argv[idx_peer]->arg, argv[idx_remote_as]->arg, AFI_IP, SAFI_UNICAST);
-}
-
-static int
-peer_conf_interface_get (struct vty *vty, const char *conf_if, afi_t afi,
- safi_t safi, int v6only, const char *peer_group_name,
- const char *as_str)
-{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- as_t as = 0;
- int as_type = AS_UNSPECIFIED;
- struct peer *peer;
- struct peer_group *group;
- int ret = 0;
- union sockunion su;
-
- group = peer_group_lookup (bgp, conf_if);
-
- if (group)
- {
- vty_out (vty, "%% Name conflict with peer-group %s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (as_str)
- {
- if (as_str[0] == 'i')
- {
- as_type = AS_INTERNAL;
- }
- else if (as_str[0] == 'e')
- {
- as_type = AS_EXTERNAL;
- }
- else
- {
- /* Get AS number. */
- VTY_GET_INTEGER_RANGE ("AS", as, as_str, 1, BGP_AS4_MAX);
- as_type = AS_SPECIFIED;
- }
- }
-
- peer = peer_lookup_by_conf_if (bgp, conf_if);
- if (peer)
- {
- if (as_str)
- ret = peer_remote_as (bgp, &su, conf_if, &as, as_type, afi, safi);
- }
- else
- {
- if (bgp_flag_check (bgp, BGP_FLAG_NO_DEFAULT_IPV4)
- && afi == AFI_IP && safi == SAFI_UNICAST)
- peer = peer_create (NULL, conf_if, bgp, bgp->as, as, as_type, 0, 0,
- NULL);
- else
- peer = peer_create (NULL, conf_if, bgp, bgp->as, as, as_type, afi, safi,
- NULL);
-
- if (!peer)
- return CMD_WARNING;
-
- if (v6only)
- SET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
-
- /* Request zebra to initiate IPv6 RAs on this interface. We do this
- * any unnumbered peer in order to not worry about run-time transitions
- * (e.g., peering is initially IPv4, but the IPv4 /30 or /31 address
- * gets deleted later etc.)
- */
- if (peer->ifp)
- bgp_zebra_initiate_radv (bgp, peer);
- }
-
- if ((v6only && !CHECK_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY)) ||
- (!v6only && CHECK_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY)))
- {
- if (v6only)
- SET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
- else
- UNSET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
-
- /* v6only flag changed. Reset bgp seesion */
- if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->status))
- {
- peer->last_reset = PEER_DOWN_V6ONLY_CHANGE;
- bgp_notify_send (peer, BGP_NOTIFY_CEASE,
- BGP_NOTIFY_CEASE_CONFIG_CHANGE);
- }
- else
- bgp_session_reset(peer);
- }
-
- if (!CHECK_FLAG (peer->flags, PEER_FLAG_CAPABILITY_ENHE))
- peer_flag_set (peer, PEER_FLAG_CAPABILITY_ENHE);
-
- if (peer_group_name)
- {
- group = peer_group_lookup (bgp, peer_group_name);
- if (! group)
- {
- vty_out (vty, "%% Configure the peer-group first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- ret = peer_group_bind (bgp, &su, peer, group, &as);
- }
-
- return bgp_vty_return (vty, ret);
+ int idx_peer = 1;
+ int idx_remote_as = 3;
+ return peer_remote_as_vty(vty, argv[idx_peer]->arg,
+ argv[idx_remote_as]->arg, AFI_IP,
+ SAFI_UNICAST);
+}
+
+static int peer_conf_interface_get(struct vty *vty, const char *conf_if,
+ afi_t afi, safi_t safi, int v6only,
+ const char *peer_group_name,
+ const char *as_str)
+{
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ as_t as = 0;
+ int as_type = AS_UNSPECIFIED;
+ struct peer *peer;
+ struct peer_group *group;
+ int ret = 0;
+ union sockunion su;
+
+ group = peer_group_lookup(bgp, conf_if);
+
+ if (group) {
+ vty_out(vty, "%% Name conflict with peer-group %s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (as_str) {
+ if (as_str[0] == 'i') {
+ as_type = AS_INTERNAL;
+ } else if (as_str[0] == 'e') {
+ as_type = AS_EXTERNAL;
+ } else {
+ /* Get AS number. */
+ VTY_GET_INTEGER_RANGE("AS", as, as_str, 1, BGP_AS4_MAX);
+ as_type = AS_SPECIFIED;
+ }
+ }
+
+ peer = peer_lookup_by_conf_if(bgp, conf_if);
+ if (peer) {
+ if (as_str)
+ ret = peer_remote_as(bgp, &su, conf_if, &as, as_type,
+ afi, safi);
+ } else {
+ if (bgp_flag_check(bgp, BGP_FLAG_NO_DEFAULT_IPV4)
+ && afi == AFI_IP && safi == SAFI_UNICAST)
+ peer = peer_create(NULL, conf_if, bgp, bgp->as, as,
+ as_type, 0, 0, NULL);
+ else
+ peer = peer_create(NULL, conf_if, bgp, bgp->as, as,
+ as_type, afi, safi, NULL);
+
+ if (!peer)
+ return CMD_WARNING;
+
+ if (v6only)
+ SET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
+
+ /* Request zebra to initiate IPv6 RAs on this interface. We do
+ * this
+ * any unnumbered peer in order to not worry about run-time
+ * transitions
+ * (e.g., peering is initially IPv4, but the IPv4 /30 or /31
+ * address
+ * gets deleted later etc.)
+ */
+ if (peer->ifp)
+ bgp_zebra_initiate_radv(bgp, peer);
+ }
+
+ if ((v6only && !CHECK_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY))
+ || (!v6only && CHECK_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY))) {
+ if (v6only)
+ SET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
+ else
+ UNSET_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY);
+
+ /* v6only flag changed. Reset bgp seesion */
+ if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->status)) {
+ peer->last_reset = PEER_DOWN_V6ONLY_CHANGE;
+ bgp_notify_send(peer, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_CONFIG_CHANGE);
+ } else
+ bgp_session_reset(peer);
+ }
+
+ if (!CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE))
+ peer_flag_set(peer, PEER_FLAG_CAPABILITY_ENHE);
+
+ if (peer_group_name) {
+ group = peer_group_lookup(bgp, peer_group_name);
+ if (!group) {
+ vty_out(vty, "%% Configure the peer-group first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ ret = peer_group_bind(bgp, &su, peer, group, &as);
+ }
+
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_interface_config,
@@ -2767,15 +2688,16 @@ DEFUN (neighbor_interface_config,
"Member of the peer-group\n"
"Peer-group name\n")
{
- int idx_word = 1;
- int idx_peer_group_word = 4;
+ int idx_word = 1;
+ int idx_peer_group_word = 4;
- if (argc > idx_peer_group_word)
- return peer_conf_interface_get (vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 0,
- argv[idx_peer_group_word]->arg, NULL);
- else
- return peer_conf_interface_get (vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 0,
- NULL, NULL);
+ if (argc > idx_peer_group_word)
+ return peer_conf_interface_get(
+ vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 0,
+ argv[idx_peer_group_word]->arg, NULL);
+ else
+ return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
+ SAFI_UNICAST, 0, NULL, NULL);
}
DEFUN (neighbor_interface_config_v6only,
@@ -2788,15 +2710,16 @@ DEFUN (neighbor_interface_config_v6only,
"Member of the peer-group\n"
"Peer-group name\n")
{
- int idx_word = 1;
- int idx_peer_group_word = 5;
+ int idx_word = 1;
+ int idx_peer_group_word = 5;
- if (argc > idx_peer_group_word)
- return peer_conf_interface_get (vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 1,
- argv[idx_peer_group_word]->arg, NULL);
+ if (argc > idx_peer_group_word)
+ return peer_conf_interface_get(
+ vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 1,
+ argv[idx_peer_group_word]->arg, NULL);
- return peer_conf_interface_get (vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 1,
- NULL, NULL);
+ return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
+ SAFI_UNICAST, 1, NULL, NULL);
}
@@ -2811,10 +2734,11 @@ DEFUN (neighbor_interface_config_remote_as,
"Internal BGP peer\n"
"External BGP peer\n")
{
- int idx_word = 1;
- int idx_remote_as = 4;
- return peer_conf_interface_get (vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 0,
- NULL, argv[idx_remote_as]->arg);
+ int idx_word = 1;
+ int idx_remote_as = 4;
+ return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
+ SAFI_UNICAST, 0, NULL,
+ argv[idx_remote_as]->arg);
}
DEFUN (neighbor_interface_v6only_config_remote_as,
@@ -2829,10 +2753,11 @@ DEFUN (neighbor_interface_v6only_config_remote_as,
"Internal BGP peer\n"
"External BGP peer\n")
{
- int idx_word = 1;
- int idx_remote_as = 5;
- return peer_conf_interface_get (vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, 1,
- NULL, argv[idx_remote_as]->arg);
+ int idx_word = 1;
+ int idx_remote_as = 5;
+ return peer_conf_interface_get(vty, argv[idx_word]->arg, AFI_IP,
+ SAFI_UNICAST, 1, NULL,
+ argv[idx_remote_as]->arg);
}
DEFUN (neighbor_peer_group,
@@ -2842,23 +2767,23 @@ DEFUN (neighbor_peer_group,
"Interface name or neighbor tag\n"
"Configure peer-group\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_word = 1;
- struct peer *peer;
- struct peer_group *group;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_word = 1;
+ struct peer *peer;
+ struct peer_group *group;
- peer = peer_lookup_by_conf_if (bgp, argv[idx_word]->arg);
- if (peer)
- {
- vty_out (vty, "%% Name conflict with interface: %s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ peer = peer_lookup_by_conf_if(bgp, argv[idx_word]->arg);
+ if (peer) {
+ vty_out(vty, "%% Name conflict with interface: %s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- group = peer_group_get (bgp, argv[idx_word]->arg);
- if (! group)
- return CMD_WARNING;
+ group = peer_group_get(bgp, argv[idx_word]->arg);
+ if (!group)
+ return CMD_WARNING;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_neighbor,
@@ -2872,57 +2797,53 @@ DEFUN (no_neighbor,
"Internal BGP peer\n"
"External BGP peer\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_peer = 2;
- int ret;
- union sockunion su;
- struct peer_group *group;
- struct peer *peer;
- struct peer *other;
-
- ret = str2sockunion (argv[idx_peer]->arg, &su);
- if (ret < 0)
- {
- /* look up for neighbor by interface name config. */
- peer = peer_lookup_by_conf_if (bgp, argv[idx_peer]->arg);
- if (peer)
- {
- /* Request zebra to terminate IPv6 RAs on this interface. */
- if (peer->ifp)
- bgp_zebra_terminate_radv (peer->bgp, peer);
- peer_delete (peer);
- return CMD_SUCCESS;
- }
-
- group = peer_group_lookup (bgp, argv[idx_peer]->arg);
- if (group)
- peer_group_delete (group);
- else
- {
- vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
- else
- {
- peer = peer_lookup (bgp, &su);
- if (peer)
- {
- if (peer_dynamic_neighbor (peer))
- {
- vty_out (vty, "%% Operation not allowed on a dynamic neighbor%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_peer = 2;
+ int ret;
+ union sockunion su;
+ struct peer_group *group;
+ struct peer *peer;
+ struct peer *other;
+
+ ret = str2sockunion(argv[idx_peer]->arg, &su);
+ if (ret < 0) {
+ /* look up for neighbor by interface name config. */
+ peer = peer_lookup_by_conf_if(bgp, argv[idx_peer]->arg);
+ if (peer) {
+ /* Request zebra to terminate IPv6 RAs on this
+ * interface. */
+ if (peer->ifp)
+ bgp_zebra_terminate_radv(peer->bgp, peer);
+ peer_delete(peer);
+ return CMD_SUCCESS;
+ }
- other = peer->doppelganger;
- peer_delete (peer);
- if (other && other->status != Deleted)
- peer_delete(other);
+ group = peer_group_lookup(bgp, argv[idx_peer]->arg);
+ if (group)
+ peer_group_delete(group);
+ else {
+ vty_out(vty, "%% Create the peer-group first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ } else {
+ peer = peer_lookup(bgp, &su);
+ if (peer) {
+ if (peer_dynamic_neighbor(peer)) {
+ vty_out(vty,
+ "%% Operation not allowed on a dynamic neighbor%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ other = peer->doppelganger;
+ peer_delete(peer);
+ if (other && other->status != Deleted)
+ peer_delete(other);
+ }
}
- }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_neighbor_interface_config,
@@ -2940,25 +2861,23 @@ DEFUN (no_neighbor_interface_config,
"Internal BGP peer\n"
"External BGP peer\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_word = 2;
- struct peer *peer;
-
- /* look up for neighbor by interface name config. */
- peer = peer_lookup_by_conf_if (bgp, argv[idx_word]->arg);
- if (peer)
- {
- /* Request zebra to terminate IPv6 RAs on this interface. */
- if (peer->ifp)
- bgp_zebra_terminate_radv (peer->bgp, peer);
- peer_delete (peer);
- }
- else
- {
- vty_out (vty, "%% Create the bgp interface first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_word = 2;
+ struct peer *peer;
+
+ /* look up for neighbor by interface name config. */
+ peer = peer_lookup_by_conf_if(bgp, argv[idx_word]->arg);
+ if (peer) {
+ /* Request zebra to terminate IPv6 RAs on this interface. */
+ if (peer->ifp)
+ bgp_zebra_terminate_radv(peer->bgp, peer);
+ peer_delete(peer);
+ } else {
+ vty_out(vty, "%% Create the bgp interface first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
}
DEFUN (no_neighbor_peer_group,
@@ -2969,19 +2888,18 @@ DEFUN (no_neighbor_peer_group,
"Neighbor tag\n"
"Configure peer-group\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_word = 2;
- struct peer_group *group;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_word = 2;
+ struct peer_group *group;
- group = peer_group_lookup (bgp, argv[idx_word]->arg);
- if (group)
- peer_group_delete (group);
- else
- {
- vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
+ group = peer_group_lookup(bgp, argv[idx_word]->arg);
+ if (group)
+ peer_group_delete(group);
+ else {
+ vty_out(vty, "%% Create the peer-group first%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
}
DEFUN (no_neighbor_interface_peer_group_remote_as,
@@ -2995,28 +2913,27 @@ DEFUN (no_neighbor_interface_peer_group_remote_as,
"Internal BGP peer\n"
"External BGP peer\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_word = 2;
- struct peer_group *group;
- struct peer *peer;
-
- /* look up for neighbor by interface name config. */
- peer = peer_lookup_by_conf_if (bgp, argv[idx_word]->arg);
- if (peer)
- {
- peer_as_change (peer, 0, AS_SPECIFIED);
- return CMD_SUCCESS;
- }
-
- group = peer_group_lookup (bgp, argv[idx_word]->arg);
- if (group)
- peer_group_remote_as_delete (group);
- else
- {
- vty_out (vty, "%% Create the peer-group or interface first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_word = 2;
+ struct peer_group *group;
+ struct peer *peer;
+
+ /* look up for neighbor by interface name config. */
+ peer = peer_lookup_by_conf_if(bgp, argv[idx_word]->arg);
+ if (peer) {
+ peer_as_change(peer, 0, AS_SPECIFIED);
+ return CMD_SUCCESS;
+ }
+
+ group = peer_group_lookup(bgp, argv[idx_word]->arg);
+ if (group)
+ peer_group_remote_as_delete(group);
+ else {
+ vty_out(vty, "%% Create the peer-group or interface first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
}
DEFUN (neighbor_local_as,
@@ -3027,19 +2944,20 @@ DEFUN (neighbor_local_as,
"Specify a local-as number\n"
"AS number used as local AS\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- struct peer *peer;
- int ret;
- as_t as;
+ int idx_peer = 1;
+ int idx_number = 3;
+ struct peer *peer;
+ int ret;
+ as_t as;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER_RANGE ("Local AS", as, argv[idx_number]->arg, 1, BGP_AS4_MAX);
- ret = peer_local_as_set (peer, as, 0, 0);
- return bgp_vty_return (vty, ret);
+ VTY_GET_INTEGER_RANGE("Local AS", as, argv[idx_number]->arg, 1,
+ BGP_AS4_MAX);
+ ret = peer_local_as_set(peer, as, 0, 0);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_local_as_no_prepend,
@@ -3051,19 +2969,20 @@ DEFUN (neighbor_local_as_no_prepend,
"AS number used as local AS\n"
"Do not prepend local-as to updates from ebgp peers\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- struct peer *peer;
- int ret;
- as_t as;
+ int idx_peer = 1;
+ int idx_number = 3;
+ struct peer *peer;
+ int ret;
+ as_t as;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER_RANGE ("Local AS", as, argv[idx_number]->arg, 1, BGP_AS4_MAX);
- ret = peer_local_as_set (peer, as, 1, 0);
- return bgp_vty_return (vty, ret);
+ VTY_GET_INTEGER_RANGE("Local AS", as, argv[idx_number]->arg, 1,
+ BGP_AS4_MAX);
+ ret = peer_local_as_set(peer, as, 1, 0);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_local_as_no_prepend_replace_as,
@@ -3076,19 +2995,20 @@ DEFUN (neighbor_local_as_no_prepend_replace_as,
"Do not prepend local-as to updates from ebgp peers\n"
"Do not prepend local-as to updates from ibgp peers\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- struct peer *peer;
- int ret;
- as_t as;
+ int idx_peer = 1;
+ int idx_number = 3;
+ struct peer *peer;
+ int ret;
+ as_t as;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER_RANGE ("Local AS", as, argv[idx_number]->arg, 1, BGP_AS4_MAX);
- ret = peer_local_as_set (peer, as, 1, 1);
- return bgp_vty_return (vty, ret);
+ VTY_GET_INTEGER_RANGE("Local AS", as, argv[idx_number]->arg, 1,
+ BGP_AS4_MAX);
+ ret = peer_local_as_set(peer, as, 1, 1);
+ return bgp_vty_return(vty, ret);
}
DEFUN (no_neighbor_local_as,
@@ -3102,21 +3022,19 @@ DEFUN (no_neighbor_local_as,
"Do not prepend local-as to updates from ebgp peers\n"
"Do not prepend local-as to updates from ibgp peers\n")
{
- int idx_peer = 2;
- struct peer *peer;
- int ret;
+ int idx_peer = 2;
+ struct peer *peer;
+ int ret;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_local_as_unset (peer);
- return bgp_vty_return (vty, ret);
+ ret = peer_local_as_unset(peer);
+ return bgp_vty_return(vty, ret);
}
-
-
DEFUN (neighbor_solo,
neighbor_solo_cmd,
"neighbor <A.B.C.D|X:X::X:X|WORD> solo",
@@ -3124,16 +3042,16 @@ DEFUN (neighbor_solo,
NEIGHBOR_ADDR_STR2
"Solo peer - part of its own update group\n")
{
- int idx_peer = 1;
- struct peer *peer;
- int ret;
+ int idx_peer = 1;
+ struct peer *peer;
+ int ret;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = update_group_adjust_soloness(peer, 1);
- return bgp_vty_return (vty, ret);
+ ret = update_group_adjust_soloness(peer, 1);
+ return bgp_vty_return(vty, ret);
}
DEFUN (no_neighbor_solo,
@@ -3144,16 +3062,16 @@ DEFUN (no_neighbor_solo,
NEIGHBOR_ADDR_STR2
"Solo peer - part of its own update group\n")
{
- int idx_peer = 2;
- struct peer *peer;
- int ret;
+ int idx_peer = 2;
+ struct peer *peer;
+ int ret;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = update_group_adjust_soloness(peer, 0);
- return bgp_vty_return (vty, ret);
+ ret = update_group_adjust_soloness(peer, 0);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_password,
@@ -3164,17 +3082,17 @@ DEFUN (neighbor_password,
"Set a password\n"
"The password\n")
{
- int idx_peer = 1;
- int idx_line = 3;
- struct peer *peer;
- int ret;
+ int idx_peer = 1;
+ int idx_line = 3;
+ struct peer *peer;
+ int ret;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_password_set (peer, argv[idx_line]->arg);
- return bgp_vty_return (vty, ret);
+ ret = peer_password_set(peer, argv[idx_line]->arg);
+ return bgp_vty_return(vty, ret);
}
DEFUN (no_neighbor_password,
@@ -3186,16 +3104,16 @@ DEFUN (no_neighbor_password,
"Set a password\n"
"The password\n")
{
- int idx_peer = 2;
- struct peer *peer;
- int ret;
+ int idx_peer = 2;
+ struct peer *peer;
+ int ret;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_password_unset (peer);
- return bgp_vty_return (vty, ret);
+ ret = peer_password_unset(peer);
+ return bgp_vty_return(vty, ret);
}
@@ -3206,19 +3124,19 @@ DEFUN (neighbor_activate,
NEIGHBOR_ADDR_STR2
"Enable the Address Family for this Neighbor\n")
{
- int idx_peer = 1;
- int ret;
- struct peer *peer;
+ int idx_peer = 1;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_activate (peer, bgp_node_afi (vty), bgp_node_safi (vty));
+ ret = peer_activate(peer, bgp_node_afi(vty), bgp_node_safi(vty));
- if (ret)
- return CMD_WARNING;
- return CMD_SUCCESS;
+ if (ret)
+ return CMD_WARNING;
+ return CMD_SUCCESS;
}
DEFUN (no_neighbor_activate,
@@ -3229,20 +3147,20 @@ DEFUN (no_neighbor_activate,
NEIGHBOR_ADDR_STR2
"Enable the Address Family for this Neighbor\n")
{
- int idx_peer = 2;
- int ret;
- struct peer *peer;
+ int idx_peer = 2;
+ int ret;
+ struct peer *peer;
- /* Lookup peer. */
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ /* Lookup peer. */
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_deactivate (peer, bgp_node_afi (vty), bgp_node_safi (vty));
+ ret = peer_deactivate(peer, bgp_node_afi(vty), bgp_node_safi(vty));
- if (ret)
- return CMD_WARNING;
- return CMD_SUCCESS;
+ if (ret)
+ return CMD_WARNING;
+ return CMD_SUCCESS;
}
DEFUN (neighbor_set_peer_group,
@@ -3253,62 +3171,60 @@ DEFUN (neighbor_set_peer_group,
"Member of the peer-group\n"
"Peer-group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_peer = 1;
- int idx_word = 3;
- int ret;
- as_t as;
- union sockunion su;
- struct peer *peer;
- struct peer_group *group;
-
- peer = NULL;
-
- ret = str2sockunion (argv[idx_peer]->arg, &su);
- if (ret < 0)
- {
- peer = peer_lookup_by_conf_if (bgp, argv[idx_peer]->arg);
- if (!peer)
- {
- vty_out (vty, "%% Malformed address or name: %s%s", argv[idx_peer]->arg, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
- else
- {
- if (peer_address_self_check (bgp, &su))
- {
- vty_out (vty, "%% Can not configure the local system as neighbor%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- /* Disallow for dynamic neighbor. */
- peer = peer_lookup (bgp, &su);
- if (peer && peer_dynamic_neighbor (peer))
- {
- vty_out (vty, "%% Operation not allowed on a dynamic neighbor%s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- group = peer_group_lookup (bgp, argv[idx_word]->arg);
- if (! group)
- {
- vty_out (vty, "%% Configure the peer-group first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- ret = peer_group_bind (bgp, &su, peer, group, &as);
-
- if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT)
- {
- vty_out (vty, "%% Peer with AS %u cannot be in this peer-group, members must be all internal or all external%s", as, VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- return bgp_vty_return (vty, ret);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_peer = 1;
+ int idx_word = 3;
+ int ret;
+ as_t as;
+ union sockunion su;
+ struct peer *peer;
+ struct peer_group *group;
+
+ peer = NULL;
+
+ ret = str2sockunion(argv[idx_peer]->arg, &su);
+ if (ret < 0) {
+ peer = peer_lookup_by_conf_if(bgp, argv[idx_peer]->arg);
+ if (!peer) {
+ vty_out(vty, "%% Malformed address or name: %s%s",
+ argv[idx_peer]->arg, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ } else {
+ if (peer_address_self_check(bgp, &su)) {
+ vty_out(vty,
+ "%% Can not configure the local system as neighbor%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ /* Disallow for dynamic neighbor. */
+ peer = peer_lookup(bgp, &su);
+ if (peer && peer_dynamic_neighbor(peer)) {
+ vty_out(vty,
+ "%% Operation not allowed on a dynamic neighbor%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ group = peer_group_lookup(bgp, argv[idx_word]->arg);
+ if (!group) {
+ vty_out(vty, "%% Configure the peer-group first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ ret = peer_group_bind(bgp, &su, peer, group, &as);
+
+ if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT) {
+ vty_out(vty,
+ "%% Peer with AS %u cannot be in this peer-group, members must be all internal or all external%s",
+ as, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ return bgp_vty_return(vty, ret);
}
DEFUN (no_neighbor_set_peer_group,
@@ -3320,71 +3236,72 @@ DEFUN (no_neighbor_set_peer_group,
"Member of the peer-group\n"
"Peer-group name\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_peer = 2;
- int idx_word = 4;
- int ret;
- struct peer *peer;
- struct peer_group *group;
-
- peer = peer_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
-
- group = peer_group_lookup (bgp, argv[idx_word]->arg);
- if (! group)
- {
- vty_out (vty, "%% Configure the peer-group first%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_peer = 2;
+ int idx_word = 4;
+ int ret;
+ struct peer *peer;
+ struct peer_group *group;
+
+ peer = peer_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
+
+ group = peer_group_lookup(bgp, argv[idx_word]->arg);
+ if (!group) {
+ vty_out(vty, "%% Configure the peer-group first%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- ret = peer_group_unbind (bgp, peer, group);
+ ret = peer_group_unbind(bgp, peer, group);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_flag_modify_vty (struct vty *vty, const char *ip_str,
- u_int16_t flag, int set)
+static int peer_flag_modify_vty(struct vty *vty, const char *ip_str,
+ u_int16_t flag, int set)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /*
- * If 'neighbor <interface>', then this is for directly connected peers,
- * we should not accept disable-connected-check.
- */
- if (peer->conf_if && (flag == PEER_FLAG_DISABLE_CONNECTED_CHECK)) {
- vty_out (vty, "%s is directly connected peer, cannot accept disable-"
- "connected-check%s", ip_str, VTY_NEWLINE);
- return CMD_WARNING;
- }
+ /*
+ * If 'neighbor <interface>', then this is for directly connected peers,
+ * we should not accept disable-connected-check.
+ */
+ if (peer->conf_if && (flag == PEER_FLAG_DISABLE_CONNECTED_CHECK)) {
+ vty_out(vty,
+ "%s is directly connected peer, cannot accept disable-"
+ "connected-check%s",
+ ip_str, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- if (!set && flag == PEER_FLAG_SHUTDOWN)
- peer_tx_shutdown_message_unset (peer);
+ if (!set && flag == PEER_FLAG_SHUTDOWN)
+ peer_tx_shutdown_message_unset(peer);
- if (set)
- ret = peer_flag_set (peer, flag);
- else
- ret = peer_flag_unset (peer, flag);
+ if (set)
+ ret = peer_flag_set(peer, flag);
+ else
+ ret = peer_flag_unset(peer, flag);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_flag_set_vty (struct vty *vty, const char *ip_str, u_int16_t flag)
+static int peer_flag_set_vty(struct vty *vty, const char *ip_str,
+ u_int16_t flag)
{
- return peer_flag_modify_vty (vty, ip_str, flag, 1);
+ return peer_flag_modify_vty(vty, ip_str, flag, 1);
}
-static int
-peer_flag_unset_vty (struct vty *vty, const char *ip_str, u_int16_t flag)
+static int peer_flag_unset_vty(struct vty *vty, const char *ip_str,
+ u_int16_t flag)
{
- return peer_flag_modify_vty (vty, ip_str, flag, 0);
+ return peer_flag_modify_vty(vty, ip_str, flag, 0);
}
/* neighbor passive. */
@@ -3395,8 +3312,8 @@ DEFUN (neighbor_passive,
NEIGHBOR_ADDR_STR2
"Don't send open messages to this neighbor\n")
{
- int idx_peer = 1;
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_PASSIVE);
+ int idx_peer = 1;
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg, PEER_FLAG_PASSIVE);
}
DEFUN (no_neighbor_passive,
@@ -3407,8 +3324,8 @@ DEFUN (no_neighbor_passive,
NEIGHBOR_ADDR_STR2
"Don't send open messages to this neighbor\n")
{
- int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_PASSIVE);
+ int idx_peer = 2;
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg, PEER_FLAG_PASSIVE);
}
/* neighbor shutdown. */
@@ -3421,29 +3338,27 @@ DEFUN (neighbor_shutdown_msg,
"Add a shutdown message (draft-ietf-idr-shutdown-06)\n"
"Shutdown message\n")
{
- int idx_peer = 1;
+ int idx_peer = 1;
- if (argc >= 5)
- {
- struct peer *peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- char *message;
+ if (argc >= 5) {
+ struct peer *peer =
+ peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ char *message;
- if (!peer)
- return CMD_WARNING;
- message = argv_concat (argv, argc, 4);
- peer_tx_shutdown_message_set (peer, message);
- XFREE (MTYPE_TMP, message);
- }
+ if (!peer)
+ return CMD_WARNING;
+ message = argv_concat(argv, argc, 4);
+ peer_tx_shutdown_message_set(peer, message);
+ XFREE(MTYPE_TMP, message);
+ }
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_SHUTDOWN);
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg, PEER_FLAG_SHUTDOWN);
}
-ALIAS (neighbor_shutdown_msg,
- neighbor_shutdown_cmd,
- "neighbor <A.B.C.D|X:X::X:X|WORD> shutdown",
- NEIGHBOR_STR
- NEIGHBOR_ADDR_STR2
- "Administratively shut down this neighbor\n")
+ALIAS(neighbor_shutdown_msg, neighbor_shutdown_cmd,
+ "neighbor <A.B.C.D|X:X::X:X|WORD> shutdown",
+ NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+ "Administratively shut down this neighbor\n")
DEFUN (no_neighbor_shutdown_msg,
no_neighbor_shutdown_msg_cmd,
@@ -3455,18 +3370,16 @@ DEFUN (no_neighbor_shutdown_msg,
"Remove a shutdown message (draft-ietf-idr-shutdown-06)\n"
"Shutdown message\n")
{
- int idx_peer = 2;
+ int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_SHUTDOWN);
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_SHUTDOWN);
}
-ALIAS (no_neighbor_shutdown_msg,
- no_neighbor_shutdown_cmd,
- "no neighbor <A.B.C.D|X:X::X:X|WORD> shutdown",
- NO_STR
- NEIGHBOR_STR
- NEIGHBOR_ADDR_STR2
- "Administratively shut down this neighbor\n")
+ALIAS(no_neighbor_shutdown_msg, no_neighbor_shutdown_cmd,
+ "no neighbor <A.B.C.D|X:X::X:X|WORD> shutdown",
+ NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+ "Administratively shut down this neighbor\n")
/* neighbor capability dynamic. */
DEFUN (neighbor_capability_dynamic,
@@ -3477,8 +3390,9 @@ DEFUN (neighbor_capability_dynamic,
"Advertise capability to the peer\n"
"Advertise dynamic capability to this neighbor\n")
{
- int idx_peer = 1;
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_DYNAMIC_CAPABILITY);
+ int idx_peer = 1;
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_DYNAMIC_CAPABILITY);
}
DEFUN (no_neighbor_capability_dynamic,
@@ -3490,8 +3404,9 @@ DEFUN (no_neighbor_capability_dynamic,
"Advertise capability to the peer\n"
"Advertise dynamic capability to this neighbor\n")
{
- int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_DYNAMIC_CAPABILITY);
+ int idx_peer = 2;
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_DYNAMIC_CAPABILITY);
}
/* neighbor dont-capability-negotiate */
@@ -3502,8 +3417,9 @@ DEFUN (neighbor_dont_capability_negotiate,
NEIGHBOR_ADDR_STR2
"Do not perform capability negotiation\n")
{
- int idx_peer = 1;
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_DONT_CAPABILITY);
+ int idx_peer = 1;
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_DONT_CAPABILITY);
}
DEFUN (no_neighbor_dont_capability_negotiate,
@@ -3514,8 +3430,9 @@ DEFUN (no_neighbor_dont_capability_negotiate,
NEIGHBOR_ADDR_STR2
"Do not perform capability negotiation\n")
{
- int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_DONT_CAPABILITY);
+ int idx_peer = 2;
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_DONT_CAPABILITY);
}
/* neighbor capability extended next hop encoding */
@@ -3527,8 +3444,9 @@ DEFUN (neighbor_capability_enhe,
"Advertise capability to the peer\n"
"Advertise extended next-hop capability to the peer\n")
{
- int idx_peer = 1;
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_CAPABILITY_ENHE);
+ int idx_peer = 1;
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_CAPABILITY_ENHE);
}
DEFUN (no_neighbor_capability_enhe,
@@ -3540,41 +3458,40 @@ DEFUN (no_neighbor_capability_enhe,
"Advertise capability to the peer\n"
"Advertise extended next-hop capability to the peer\n")
{
- int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_CAPABILITY_ENHE);
+ int idx_peer = 2;
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_CAPABILITY_ENHE);
}
-static int
-peer_af_flag_modify_vty (struct vty *vty, const char *peer_str, afi_t afi,
- safi_t safi, u_int32_t flag, int set)
+static int peer_af_flag_modify_vty(struct vty *vty, const char *peer_str,
+ afi_t afi, safi_t safi, u_int32_t flag,
+ int set)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, peer_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, peer_str);
+ if (!peer)
+ return CMD_WARNING;
- if (set)
- ret = peer_af_flag_set (peer, afi, safi, flag);
- else
- ret = peer_af_flag_unset (peer, afi, safi, flag);
+ if (set)
+ ret = peer_af_flag_set(peer, afi, safi, flag);
+ else
+ ret = peer_af_flag_unset(peer, afi, safi, flag);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_af_flag_set_vty (struct vty *vty, const char *peer_str, afi_t afi,
- safi_t safi, u_int32_t flag)
+static int peer_af_flag_set_vty(struct vty *vty, const char *peer_str,
+ afi_t afi, safi_t safi, u_int32_t flag)
{
- return peer_af_flag_modify_vty (vty, peer_str, afi, safi, flag, 1);
+ return peer_af_flag_modify_vty(vty, peer_str, afi, safi, flag, 1);
}
-static int
-peer_af_flag_unset_vty (struct vty *vty, const char *peer_str, afi_t afi,
- safi_t safi, u_int32_t flag)
+static int peer_af_flag_unset_vty(struct vty *vty, const char *peer_str,
+ afi_t afi, safi_t safi, u_int32_t flag)
{
- return peer_af_flag_modify_vty (vty, peer_str, afi, safi, flag, 0);
+ return peer_af_flag_modify_vty(vty, peer_str, afi, safi, flag, 0);
}
/* neighbor capability orf prefix-list. */
@@ -3590,21 +3507,21 @@ DEFUN (neighbor_capability_orf_prefix,
"Capability to RECEIVE the ORF from this neighbor\n"
"Capability to SEND the ORF to this neighbor\n")
{
- int idx_peer = 1;
- int idx_send_recv = 5;
- u_int16_t flag = 0;
+ int idx_peer = 1;
+ int idx_send_recv = 5;
+ u_int16_t flag = 0;
- if (strncmp (argv[idx_send_recv]->arg, "s", 1) == 0)
- flag = PEER_FLAG_ORF_PREFIX_SM;
- else if (strncmp (argv[idx_send_recv]->arg, "r", 1) == 0)
- flag = PEER_FLAG_ORF_PREFIX_RM;
- else if (strncmp (argv[idx_send_recv]->arg, "b", 1) == 0)
- flag = PEER_FLAG_ORF_PREFIX_SM|PEER_FLAG_ORF_PREFIX_RM;
- else
- return CMD_WARNING;
+ if (strncmp(argv[idx_send_recv]->arg, "s", 1) == 0)
+ flag = PEER_FLAG_ORF_PREFIX_SM;
+ else if (strncmp(argv[idx_send_recv]->arg, "r", 1) == 0)
+ flag = PEER_FLAG_ORF_PREFIX_RM;
+ else if (strncmp(argv[idx_send_recv]->arg, "b", 1) == 0)
+ flag = PEER_FLAG_ORF_PREFIX_SM | PEER_FLAG_ORF_PREFIX_RM;
+ else
+ return CMD_WARNING;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), flag);
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), flag);
}
DEFUN (no_neighbor_capability_orf_prefix,
@@ -3620,21 +3537,22 @@ DEFUN (no_neighbor_capability_orf_prefix,
"Capability to RECEIVE the ORF from this neighbor\n"
"Capability to SEND the ORF to this neighbor\n")
{
- int idx_peer = 2;
- int idx_send_recv = 6;
- u_int16_t flag = 0;
+ int idx_peer = 2;
+ int idx_send_recv = 6;
+ u_int16_t flag = 0;
- if (strncmp (argv[idx_send_recv]->arg, "s", 1) == 0)
- flag = PEER_FLAG_ORF_PREFIX_SM;
- else if (strncmp (argv[idx_send_recv]->arg, "r", 1) == 0)
- flag = PEER_FLAG_ORF_PREFIX_RM;
- else if (strncmp (argv[idx_send_recv]->arg, "b", 1) == 0)
- flag = PEER_FLAG_ORF_PREFIX_SM|PEER_FLAG_ORF_PREFIX_RM;
- else
- return CMD_WARNING;
+ if (strncmp(argv[idx_send_recv]->arg, "s", 1) == 0)
+ flag = PEER_FLAG_ORF_PREFIX_SM;
+ else if (strncmp(argv[idx_send_recv]->arg, "r", 1) == 0)
+ flag = PEER_FLAG_ORF_PREFIX_RM;
+ else if (strncmp(argv[idx_send_recv]->arg, "b", 1) == 0)
+ flag = PEER_FLAG_ORF_PREFIX_SM | PEER_FLAG_ORF_PREFIX_RM;
+ else
+ return CMD_WARNING;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), flag);
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ flag);
}
/* neighbor next-hop-self. */
@@ -3645,9 +3563,9 @@ DEFUN (neighbor_nexthop_self,
NEIGHBOR_ADDR_STR2
"Disable the next hop calculation for this neighbor\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), PEER_FLAG_NEXTHOP_SELF);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), PEER_FLAG_NEXTHOP_SELF);
}
/* neighbor next-hop-self. */
@@ -3659,10 +3577,10 @@ DEFUN (neighbor_nexthop_self_force,
"Disable the next hop calculation for this neighbor\n"
"Set the next hop to self for reflected routes\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_FORCE_NEXTHOP_SELF);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_FORCE_NEXTHOP_SELF);
}
DEFUN (no_neighbor_nexthop_self,
@@ -3673,10 +3591,10 @@ DEFUN (no_neighbor_nexthop_self,
NEIGHBOR_ADDR_STR2
"Disable the next hop calculation for this neighbor\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_NEXTHOP_SELF);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_NEXTHOP_SELF);
}
DEFUN (no_neighbor_nexthop_self_force,
@@ -3688,10 +3606,10 @@ DEFUN (no_neighbor_nexthop_self_force,
"Disable the next hop calculation for this neighbor\n"
"Set the next hop to self for reflected routes\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_FORCE_NEXTHOP_SELF);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_FORCE_NEXTHOP_SELF);
}
/* neighbor as-override */
@@ -3702,10 +3620,9 @@ DEFUN (neighbor_as_override,
NEIGHBOR_ADDR_STR2
"Override ASNs in outbound updates if aspath equals remote-as\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_AS_OVERRIDE);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), PEER_FLAG_AS_OVERRIDE);
}
DEFUN (no_neighbor_as_override,
@@ -3716,10 +3633,10 @@ DEFUN (no_neighbor_as_override,
NEIGHBOR_ADDR_STR2
"Override ASNs in outbound updates if aspath equals remote-as\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_AS_OVERRIDE);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_AS_OVERRIDE);
}
/* neighbor remove-private-AS. */
@@ -3730,10 +3647,10 @@ DEFUN (neighbor_remove_private_as,
NEIGHBOR_ADDR_STR2
"Remove private ASNs in outbound updates\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS);
}
DEFUN (neighbor_remove_private_as_all,
@@ -3744,10 +3661,10 @@ DEFUN (neighbor_remove_private_as_all,
"Remove private ASNs in outbound updates\n"
"Apply to all AS numbers")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
}
DEFUN (neighbor_remove_private_as_replace_as,
@@ -3758,10 +3675,10 @@ DEFUN (neighbor_remove_private_as_replace_as,
"Remove private ASNs in outbound updates\n"
"Replace private ASNs with our ASN in outbound updates\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
}
DEFUN (neighbor_remove_private_as_all_replace_as,
@@ -3773,10 +3690,10 @@ DEFUN (neighbor_remove_private_as_all_replace_as,
"Apply to all AS numbers\n"
"Replace private ASNs with our ASN in outbound updates\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
}
DEFUN (no_neighbor_remove_private_as,
@@ -3787,10 +3704,10 @@ DEFUN (no_neighbor_remove_private_as,
NEIGHBOR_ADDR_STR2
"Remove private ASNs in outbound updates\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS);
}
DEFUN (no_neighbor_remove_private_as_all,
@@ -3802,10 +3719,10 @@ DEFUN (no_neighbor_remove_private_as_all,
"Remove private ASNs in outbound updates\n"
"Apply to all AS numbers\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL);
}
DEFUN (no_neighbor_remove_private_as_replace_as,
@@ -3817,10 +3734,10 @@ DEFUN (no_neighbor_remove_private_as_replace_as,
"Remove private ASNs in outbound updates\n"
"Replace private ASNs with our ASN in outbound updates\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE);
}
DEFUN (no_neighbor_remove_private_as_all_replace_as,
@@ -3833,10 +3750,10 @@ DEFUN (no_neighbor_remove_private_as_all_replace_as,
"Apply to all AS numbers\n"
"Replace private ASNs with our ASN in outbound updates\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE);
}
@@ -3848,10 +3765,10 @@ DEFUN (neighbor_send_community,
NEIGHBOR_ADDR_STR2
"Send Community attribute to this neighbor\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_SEND_COMMUNITY);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_SEND_COMMUNITY);
}
DEFUN (no_neighbor_send_community,
@@ -3862,10 +3779,10 @@ DEFUN (no_neighbor_send_community,
NEIGHBOR_ADDR_STR2
"Send Community attribute to this neighbor\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_SEND_COMMUNITY);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_SEND_COMMUNITY);
}
/* neighbor send-community extended. */
@@ -3881,30 +3798,28 @@ DEFUN (neighbor_send_community_type,
"Send Standard Community attributes\n"
"Send Large Community attributes\n")
{
- int idx = 0;
- u_int32_t flag = 0;
-
- char *peer = argv[1]->arg;
-
- if (argv_find (argv, argc, "standard", &idx))
- SET_FLAG (flag, PEER_FLAG_SEND_COMMUNITY);
- else if (argv_find (argv, argc, "extended", &idx))
- SET_FLAG (flag, PEER_FLAG_SEND_EXT_COMMUNITY);
- else if (argv_find (argv, argc, "large", &idx))
- SET_FLAG (flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
- else if (argv_find (argv, argc, "both", &idx))
- {
- SET_FLAG (flag, PEER_FLAG_SEND_COMMUNITY);
- SET_FLAG (flag, PEER_FLAG_SEND_EXT_COMMUNITY);
- }
- else
- {
- SET_FLAG (flag, PEER_FLAG_SEND_COMMUNITY);
- SET_FLAG (flag, PEER_FLAG_SEND_EXT_COMMUNITY);
- SET_FLAG (flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
- }
+ int idx = 0;
+ u_int32_t flag = 0;
+
+ char *peer = argv[1]->arg;
+
+ if (argv_find(argv, argc, "standard", &idx))
+ SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
+ else if (argv_find(argv, argc, "extended", &idx))
+ SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
+ else if (argv_find(argv, argc, "large", &idx))
+ SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
+ else if (argv_find(argv, argc, "both", &idx)) {
+ SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
+ SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
+ } else {
+ SET_FLAG(flag, PEER_FLAG_SEND_COMMUNITY);
+ SET_FLAG(flag, PEER_FLAG_SEND_EXT_COMMUNITY);
+ SET_FLAG(flag, PEER_FLAG_SEND_LARGE_COMMUNITY);
+ }
- return peer_af_flag_set_vty (vty, peer, bgp_node_afi (vty), bgp_node_safi (vty), flag);
+ return peer_af_flag_set_vty(vty, peer, bgp_node_afi(vty),
+ bgp_node_safi(vty), flag);
}
DEFUN (no_neighbor_send_community_type,
@@ -3920,31 +3835,31 @@ DEFUN (no_neighbor_send_community_type,
"Send Standard Community attributes\n"
"Send Large Community attributes\n")
{
- int idx_peer = 2;
- int idx_type = 4;
- if (strncmp (argv[idx_type]->arg, "s", 1) == 0)
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_SEND_COMMUNITY);
- if (strncmp (argv[idx_type]->arg, "e", 1) == 0)
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_SEND_EXT_COMMUNITY);
- if (strncmp (argv[idx_type]->arg, "l", 1) == 0)
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_SEND_LARGE_COMMUNITY);
- if (strncmp (argv[idx_type]->arg, "b", 1) == 0)
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_SEND_COMMUNITY |
- PEER_FLAG_SEND_EXT_COMMUNITY);
-
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- (PEER_FLAG_SEND_COMMUNITY |
- PEER_FLAG_SEND_EXT_COMMUNITY|
- PEER_FLAG_SEND_LARGE_COMMUNITY));
+ int idx_peer = 2;
+ int idx_type = 4;
+ if (strncmp(argv[idx_type]->arg, "s", 1) == 0)
+ return peer_af_flag_unset_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), PEER_FLAG_SEND_COMMUNITY);
+ if (strncmp(argv[idx_type]->arg, "e", 1) == 0)
+ return peer_af_flag_unset_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), PEER_FLAG_SEND_EXT_COMMUNITY);
+ if (strncmp(argv[idx_type]->arg, "l", 1) == 0)
+ return peer_af_flag_unset_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), PEER_FLAG_SEND_LARGE_COMMUNITY);
+ if (strncmp(argv[idx_type]->arg, "b", 1) == 0)
+ return peer_af_flag_unset_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_SEND_COMMUNITY
+ | PEER_FLAG_SEND_EXT_COMMUNITY);
+
+ return peer_af_flag_unset_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ (PEER_FLAG_SEND_COMMUNITY | PEER_FLAG_SEND_EXT_COMMUNITY
+ | PEER_FLAG_SEND_LARGE_COMMUNITY));
}
/* neighbor soft-reconfig. */
@@ -3956,10 +3871,10 @@ DEFUN (neighbor_soft_reconfiguration,
"Per neighbor soft reconfiguration\n"
"Allow inbound soft reconfiguration for this neighbor\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg,
- bgp_node_afi (vty), bgp_node_safi (vty),
- PEER_FLAG_SOFT_RECONFIG);
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_SOFT_RECONFIG);
}
DEFUN (no_neighbor_soft_reconfiguration,
@@ -3971,10 +3886,10 @@ DEFUN (no_neighbor_soft_reconfiguration,
"Per neighbor soft reconfiguration\n"
"Allow inbound soft reconfiguration for this neighbor\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg,
- bgp_node_afi (vty), bgp_node_safi (vty),
- PEER_FLAG_SOFT_RECONFIG);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_SOFT_RECONFIG);
}
DEFUN (neighbor_route_reflector_client,
@@ -3984,17 +3899,17 @@ DEFUN (neighbor_route_reflector_client,
NEIGHBOR_ADDR_STR2
"Configure a neighbor as Route Reflector client\n")
{
- int idx_peer = 1;
- struct peer *peer;
+ int idx_peer = 1;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REFLECTOR_CLIENT);
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_REFLECTOR_CLIENT);
}
DEFUN (no_neighbor_route_reflector_client,
@@ -4005,10 +3920,10 @@ DEFUN (no_neighbor_route_reflector_client,
NEIGHBOR_ADDR_STR2
"Configure a neighbor as Route Reflector client\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_REFLECTOR_CLIENT);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_REFLECTOR_CLIENT);
}
/* neighbor route-server-client. */
@@ -4019,15 +3934,15 @@ DEFUN (neighbor_route_server_client,
NEIGHBOR_ADDR_STR2
"Configure a neighbor as Route Server client\n")
{
- int idx_peer = 1;
- struct peer *peer;
+ int idx_peer = 1;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_RSERVER_CLIENT);
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_RSERVER_CLIENT);
}
DEFUN (no_neighbor_route_server_client,
@@ -4038,10 +3953,10 @@ DEFUN (no_neighbor_route_server_client,
NEIGHBOR_ADDR_STR2
"Configure a neighbor as Route Server client\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_RSERVER_CLIENT);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_RSERVER_CLIENT);
}
DEFUN (neighbor_nexthop_local_unchanged,
@@ -4052,10 +3967,10 @@ DEFUN (neighbor_nexthop_local_unchanged,
"Configure treatment of outgoing link-local nexthop attribute\n"
"Leave link-local nexthop unchanged for this peer\n")
{
- int idx_peer = 1;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED );
+ int idx_peer = 1;
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED);
}
DEFUN (no_neighbor_nexthop_local_unchanged,
@@ -4067,10 +3982,10 @@ DEFUN (no_neighbor_nexthop_local_unchanged,
"Configure treatment of outgoing link-local-nexthop attribute\n"
"Leave link-local nexthop unchanged for this peer\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED );
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_NEXTHOP_LOCAL_UNCHANGED);
}
DEFUN (neighbor_attr_unchanged,
@@ -4100,27 +4015,28 @@ DEFUN (neighbor_attr_unchanged,
"Nexthop attribute\n"
"As-path attribute\n")
{
- int idx = 0;
- char *peer = argv[1]->arg;
- u_int16_t flags = 0;
+ int idx = 0;
+ char *peer = argv[1]->arg;
+ u_int16_t flags = 0;
- if (argv_find (argv, argc, "as-path", &idx))
- SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
- idx = 0;
- if (argv_find (argv, argc, "next-hop", &idx))
- SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
- idx = 0;
- if (argv_find (argv, argc, "med", &idx))
- SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
+ if (argv_find(argv, argc, "as-path", &idx))
+ SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
+ idx = 0;
+ if (argv_find(argv, argc, "next-hop", &idx))
+ SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
+ idx = 0;
+ if (argv_find(argv, argc, "med", &idx))
+ SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
- if (!flags) // no flags means all of them!
- {
- SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
- SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
- SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
- }
+ if (!flags) // no flags means all of them!
+ {
+ SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
+ SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
+ SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
+ }
- return peer_af_flag_set_vty (vty, peer, bgp_node_afi (vty), bgp_node_safi (vty), flags);
+ return peer_af_flag_set_vty(vty, peer, bgp_node_afi(vty),
+ bgp_node_safi(vty), flags);
}
DEFUN (no_neighbor_attr_unchanged,
@@ -4151,63 +4067,62 @@ DEFUN (no_neighbor_attr_unchanged,
"Nexthop attribute\n"
"As-path attribute\n")
{
- int idx = 0;
- char *peer = argv[2]->arg;
- u_int16_t flags = 0;
+ int idx = 0;
+ char *peer = argv[2]->arg;
+ u_int16_t flags = 0;
- if (argv_find (argv, argc, "as-path", &idx))
- SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
- idx = 0;
- if (argv_find (argv, argc, "next-hop", &idx))
- SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
- idx = 0;
- if (argv_find (argv, argc, "med", &idx))
- SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
+ if (argv_find(argv, argc, "as-path", &idx))
+ SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
+ idx = 0;
+ if (argv_find(argv, argc, "next-hop", &idx))
+ SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
+ idx = 0;
+ if (argv_find(argv, argc, "med", &idx))
+ SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
- if (!flags) // no flags means all of them!
- {
- SET_FLAG (flags, PEER_FLAG_AS_PATH_UNCHANGED);
- SET_FLAG (flags, PEER_FLAG_NEXTHOP_UNCHANGED);
- SET_FLAG (flags, PEER_FLAG_MED_UNCHANGED);
- }
+ if (!flags) // no flags means all of them!
+ {
+ SET_FLAG(flags, PEER_FLAG_AS_PATH_UNCHANGED);
+ SET_FLAG(flags, PEER_FLAG_NEXTHOP_UNCHANGED);
+ SET_FLAG(flags, PEER_FLAG_MED_UNCHANGED);
+ }
- return peer_af_flag_unset_vty (vty, peer, bgp_node_afi (vty), bgp_node_safi (vty), flags);
+ return peer_af_flag_unset_vty(vty, peer, bgp_node_afi(vty),
+ bgp_node_safi(vty), flags);
}
/* EBGP multihop configuration. */
-static int
-peer_ebgp_multihop_set_vty (struct vty *vty, const char *ip_str,
- const char *ttl_str)
+static int peer_ebgp_multihop_set_vty(struct vty *vty, const char *ip_str,
+ const char *ttl_str)
{
- struct peer *peer;
- unsigned int ttl;
+ struct peer *peer;
+ unsigned int ttl;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- if (peer->conf_if)
- return bgp_vty_return (vty, BGP_ERR_INVALID_FOR_DIRECT_PEER);
+ if (peer->conf_if)
+ return bgp_vty_return(vty, BGP_ERR_INVALID_FOR_DIRECT_PEER);
- if (! ttl_str)
- ttl = MAXTTL;
- else
- VTY_GET_INTEGER_RANGE ("TTL", ttl, ttl_str, 1, MAXTTL);
+ if (!ttl_str)
+ ttl = MAXTTL;
+ else
+ VTY_GET_INTEGER_RANGE("TTL", ttl, ttl_str, 1, MAXTTL);
- return bgp_vty_return (vty, peer_ebgp_multihop_set (peer, ttl));
+ return bgp_vty_return(vty, peer_ebgp_multihop_set(peer, ttl));
}
-static int
-peer_ebgp_multihop_unset_vty (struct vty *vty, const char *ip_str)
+static int peer_ebgp_multihop_unset_vty(struct vty *vty, const char *ip_str)
{
- struct peer *peer;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- return bgp_vty_return (vty, peer_ebgp_multihop_unset (peer));
+ return bgp_vty_return(vty, peer_ebgp_multihop_unset(peer));
}
/* neighbor ebgp-multihop. */
@@ -4218,8 +4133,8 @@ DEFUN (neighbor_ebgp_multihop,
NEIGHBOR_ADDR_STR2
"Allow EBGP neighbors not on directly connected networks\n")
{
- int idx_peer = 1;
- return peer_ebgp_multihop_set_vty (vty, argv[idx_peer]->arg, NULL);
+ int idx_peer = 1;
+ return peer_ebgp_multihop_set_vty(vty, argv[idx_peer]->arg, NULL);
}
DEFUN (neighbor_ebgp_multihop_ttl,
@@ -4230,9 +4145,10 @@ DEFUN (neighbor_ebgp_multihop_ttl,
"Allow EBGP neighbors not on directly connected networks\n"
"maximum hop count\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- return peer_ebgp_multihop_set_vty (vty, argv[idx_peer]->arg, argv[idx_number]->arg);
+ int idx_peer = 1;
+ int idx_number = 3;
+ return peer_ebgp_multihop_set_vty(vty, argv[idx_peer]->arg,
+ argv[idx_number]->arg);
}
DEFUN (no_neighbor_ebgp_multihop,
@@ -4244,8 +4160,8 @@ DEFUN (no_neighbor_ebgp_multihop,
"Allow EBGP neighbors not on directly connected networks\n"
"maximum hop count\n")
{
- int idx_peer = 2;
- return peer_ebgp_multihop_unset_vty (vty, argv[idx_peer]->arg);
+ int idx_peer = 2;
+ return peer_ebgp_multihop_unset_vty(vty, argv[idx_peer]->arg);
}
@@ -4258,8 +4174,9 @@ DEFUN (neighbor_disable_connected_check,
"one-hop away EBGP peer using loopback address\n"
"Enforce EBGP neighbors perform multihop\n")
{
- int idx_peer = 1;
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_DISABLE_CONNECTED_CHECK);
+ int idx_peer = 1;
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_DISABLE_CONNECTED_CHECK);
}
DEFUN (no_neighbor_disable_connected_check,
@@ -4271,8 +4188,9 @@ DEFUN (no_neighbor_disable_connected_check,
"one-hop away EBGP peer using loopback address\n"
"Enforce EBGP neighbors perform multihop\n")
{
- int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_DISABLE_CONNECTED_CHECK);
+ int idx_peer = 2;
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_DISABLE_CONNECTED_CHECK);
}
DEFUN (neighbor_description,
@@ -4283,22 +4201,22 @@ DEFUN (neighbor_description,
"Neighbor specific description\n"
"Up to 80 characters describing this neighbor\n")
{
- int idx_peer = 1;
- int idx_line = 3;
- struct peer *peer;
- char *str;
+ int idx_peer = 1;
+ int idx_line = 3;
+ struct peer *peer;
+ char *str;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- str = argv_concat(argv, argc, idx_line);
+ str = argv_concat(argv, argc, idx_line);
- peer_description_set (peer, str);
+ peer_description_set(peer, str);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_neighbor_description,
@@ -4310,63 +4228,58 @@ DEFUN (no_neighbor_description,
"Neighbor specific description\n"
"Up to 80 characters describing this neighbor\n")
{
- int idx_peer = 2;
- struct peer *peer;
+ int idx_peer = 2;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- peer_description_unset (peer);
+ peer_description_unset(peer);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Neighbor update-source. */
-static int
-peer_update_source_vty (struct vty *vty, const char *peer_str,
- const char *source_str)
-{
- struct peer *peer;
- struct prefix p;
-
- peer = peer_and_group_lookup_vty (vty, peer_str);
- if (! peer)
- return CMD_WARNING;
-
- if (peer->conf_if)
- return CMD_WARNING;
-
- if (source_str)
- {
- union sockunion su;
- int ret = str2sockunion (source_str, &su);
-
- if (ret == 0)
- peer_update_source_addr_set (peer, &su);
- else
- {
- if (str2prefix (source_str, &p))
- {
- vty_out (vty, "%% Invalid update-source, remove prefix length %s",
- VTY_NEWLINE);
- return CMD_WARNING;
- }
- else
- peer_update_source_if_set (peer, source_str);
- }
- }
- else
- peer_update_source_unset (peer);
-
- return CMD_SUCCESS;
-}
-
-#define BGP_UPDATE_SOURCE_HELP_STR \
- "IPv4 address\n" \
- "IPv6 address\n" \
- "Interface name (requires zebra to be running)\n"
+static int peer_update_source_vty(struct vty *vty, const char *peer_str,
+ const char *source_str)
+{
+ struct peer *peer;
+ struct prefix p;
+
+ peer = peer_and_group_lookup_vty(vty, peer_str);
+ if (!peer)
+ return CMD_WARNING;
+
+ if (peer->conf_if)
+ return CMD_WARNING;
+
+ if (source_str) {
+ union sockunion su;
+ int ret = str2sockunion(source_str, &su);
+
+ if (ret == 0)
+ peer_update_source_addr_set(peer, &su);
+ else {
+ if (str2prefix(source_str, &p)) {
+ vty_out(vty,
+ "%% Invalid update-source, remove prefix length %s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ } else
+ peer_update_source_if_set(peer, source_str);
+ }
+ } else
+ peer_update_source_unset(peer);
+
+ return CMD_SUCCESS;
+}
+
+#define BGP_UPDATE_SOURCE_HELP_STR \
+ "IPv4 address\n" \
+ "IPv6 address\n" \
+ "Interface name (requires zebra to be running)\n"
DEFUN (neighbor_update_source,
neighbor_update_source_cmd,
@@ -4376,9 +4289,10 @@ DEFUN (neighbor_update_source,
"Source of routing updates\n"
BGP_UPDATE_SOURCE_HELP_STR)
{
- int idx_peer = 1;
- int idx_peer_2 = 3;
- return peer_update_source_vty (vty, argv[idx_peer]->arg, argv[idx_peer_2]->arg);
+ int idx_peer = 1;
+ int idx_peer_2 = 3;
+ return peer_update_source_vty(vty, argv[idx_peer]->arg,
+ argv[idx_peer_2]->arg);
}
DEFUN (no_neighbor_update_source,
@@ -4390,28 +4304,27 @@ DEFUN (no_neighbor_update_source,
"Source of routing updates\n"
BGP_UPDATE_SOURCE_HELP_STR)
{
- int idx_peer = 2;
- return peer_update_source_vty (vty, argv[idx_peer]->arg, NULL);
+ int idx_peer = 2;
+ return peer_update_source_vty(vty, argv[idx_peer]->arg, NULL);
}
-static int
-peer_default_originate_set_vty (struct vty *vty, const char *peer_str,
- afi_t afi, safi_t safi,
- const char *rmap, int set)
+static int peer_default_originate_set_vty(struct vty *vty, const char *peer_str,
+ afi_t afi, safi_t safi,
+ const char *rmap, int set)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, peer_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, peer_str);
+ if (!peer)
+ return CMD_WARNING;
- if (set)
- ret = peer_default_originate_set (peer, afi, safi, rmap);
- else
- ret = peer_default_originate_unset (peer, afi, safi);
+ if (set)
+ ret = peer_default_originate_set(peer, afi, safi, rmap);
+ else
+ ret = peer_default_originate_unset(peer, afi, safi);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
/* neighbor default-originate. */
@@ -4422,9 +4335,10 @@ DEFUN (neighbor_default_originate,
NEIGHBOR_ADDR_STR2
"Originate default route to this neighbor\n")
{
- int idx_peer = 1;
- return peer_default_originate_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), NULL, 1);
+ int idx_peer = 1;
+ return peer_default_originate_set_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty),
+ bgp_node_safi(vty), NULL, 1);
}
DEFUN (neighbor_default_originate_rmap,
@@ -4436,10 +4350,11 @@ DEFUN (neighbor_default_originate_rmap,
"Route-map to specify criteria to originate default\n"
"route-map name\n")
{
- int idx_peer = 1;
- int idx_word = 4;
- return peer_default_originate_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_word]->arg, 1);
+ int idx_peer = 1;
+ int idx_word = 4;
+ return peer_default_originate_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_word]->arg, 1);
}
DEFUN (no_neighbor_default_originate,
@@ -4452,38 +4367,35 @@ DEFUN (no_neighbor_default_originate,
"Route-map to specify criteria to originate default\n"
"route-map name\n")
{
- int idx_peer = 2;
- return peer_default_originate_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), NULL, 0);
+ int idx_peer = 2;
+ return peer_default_originate_set_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty),
+ bgp_node_safi(vty), NULL, 0);
}
/* Set neighbor's BGP port. */
-static int
-peer_port_vty (struct vty *vty, const char *ip_str, int afi,
- const char *port_str)
-{
- struct peer *peer;
- u_int16_t port;
- struct servent *sp;
-
- peer = peer_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
-
- if (! port_str)
- {
- sp = getservbyname ("bgp", "tcp");
- port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs (sp->s_port);
- }
- else
- {
- VTY_GET_INTEGER("port", port, port_str);
- }
+static int peer_port_vty(struct vty *vty, const char *ip_str, int afi,
+ const char *port_str)
+{
+ struct peer *peer;
+ u_int16_t port;
+ struct servent *sp;
+
+ peer = peer_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
+
+ if (!port_str) {
+ sp = getservbyname("bgp", "tcp");
+ port = (sp == NULL) ? BGP_PORT_DEFAULT : ntohs(sp->s_port);
+ } else {
+ VTY_GET_INTEGER("port", port, port_str);
+ }
- peer_port_set (peer, port);
+ peer_port_set(peer, port);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Set specified peer's BGP port. */
@@ -4495,9 +4407,10 @@ DEFUN (neighbor_port,
"Neighbor's BGP port\n"
"TCP port number\n")
{
- int idx_ip = 1;
- int idx_number = 3;
- return peer_port_vty (vty, argv[idx_ip]->arg, AFI_IP, argv[idx_number]->arg);
+ int idx_ip = 1;
+ int idx_number = 3;
+ return peer_port_vty(vty, argv[idx_ip]->arg, AFI_IP,
+ argv[idx_number]->arg);
}
DEFUN (no_neighbor_port,
@@ -4509,44 +4422,41 @@ DEFUN (no_neighbor_port,
"Neighbor's BGP port\n"
"TCP port number\n")
{
- int idx_ip = 2;
- return peer_port_vty (vty, argv[idx_ip]->arg, AFI_IP, NULL);
+ int idx_ip = 2;
+ return peer_port_vty(vty, argv[idx_ip]->arg, AFI_IP, NULL);
}
/* neighbor weight. */
-static int
-peer_weight_set_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi,
- const char *weight_str)
+static int peer_weight_set_vty(struct vty *vty, const char *ip_str, afi_t afi,
+ safi_t safi, const char *weight_str)
{
- int ret;
- struct peer *peer;
- unsigned long weight;
+ int ret;
+ struct peer *peer;
+ unsigned long weight;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER_RANGE("weight", weight, weight_str, 0, 65535);
+ VTY_GET_INTEGER_RANGE("weight", weight, weight_str, 0, 65535);
- ret = peer_weight_set (peer, afi, safi, weight);
- return bgp_vty_return (vty, ret);
+ ret = peer_weight_set(peer, afi, safi, weight);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_weight_unset_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi)
+static int peer_weight_unset_vty(struct vty *vty, const char *ip_str, afi_t afi,
+ safi_t safi)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_weight_unset (peer, afi, safi);
- return bgp_vty_return (vty, ret);
+ ret = peer_weight_unset(peer, afi, safi);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_weight,
@@ -4557,13 +4467,10 @@ DEFUN (neighbor_weight,
"Set default weight for routes from this neighbor\n"
"default weight\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- return peer_weight_set_vty (vty,
- argv[idx_peer]->arg,
- bgp_node_afi (vty),
- bgp_node_safi (vty),
- argv[idx_number]->arg);
+ int idx_peer = 1;
+ int idx_number = 3;
+ return peer_weight_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), argv[idx_number]->arg);
}
DEFUN (no_neighbor_weight,
@@ -4575,8 +4482,9 @@ DEFUN (no_neighbor_weight,
"Set default weight for routes from this neighbor\n"
"default weight\n")
{
- int idx_peer = 2;
- return peer_weight_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty), bgp_node_safi (vty));
+ int idx_peer = 2;
+ return peer_weight_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty));
}
@@ -4588,8 +4496,9 @@ DEFUN (neighbor_override_capability,
NEIGHBOR_ADDR_STR2
"Override capability negotiation result\n")
{
- int idx_peer = 1;
- return peer_flag_set_vty (vty, argv[idx_peer]->arg, PEER_FLAG_OVERRIDE_CAPABILITY);
+ int idx_peer = 1;
+ return peer_flag_set_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_OVERRIDE_CAPABILITY);
}
DEFUN (no_neighbor_override_capability,
@@ -4600,8 +4509,9 @@ DEFUN (no_neighbor_override_capability,
NEIGHBOR_ADDR_STR2
"Override capability negotiation result\n")
{
- int idx_peer = 2;
- return peer_flag_unset_vty (vty, argv[idx_peer]->arg, PEER_FLAG_OVERRIDE_CAPABILITY);
+ int idx_peer = 2;
+ return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
+ PEER_FLAG_OVERRIDE_CAPABILITY);
}
DEFUN (neighbor_strict_capability,
@@ -4611,8 +4521,9 @@ DEFUN (neighbor_strict_capability,
NEIGHBOR_ADDR_STR
"Strict capability negotiation match\n")
{
- int idx_ip = 1;
- return peer_flag_set_vty (vty, argv[idx_ip]->arg, PEER_FLAG_STRICT_CAP_MATCH);
+ int idx_ip = 1;
+ return peer_flag_set_vty(vty, argv[idx_ip]->arg,
+ PEER_FLAG_STRICT_CAP_MATCH);
}
DEFUN (no_neighbor_strict_capability,
@@ -4623,44 +4534,43 @@ DEFUN (no_neighbor_strict_capability,
NEIGHBOR_ADDR_STR
"Strict capability negotiation match\n")
{
- int idx_ip = 2;
- return peer_flag_unset_vty (vty, argv[idx_ip]->arg, PEER_FLAG_STRICT_CAP_MATCH);
+ int idx_ip = 2;
+ return peer_flag_unset_vty(vty, argv[idx_ip]->arg,
+ PEER_FLAG_STRICT_CAP_MATCH);
}
-static int
-peer_timers_set_vty (struct vty *vty, const char *ip_str,
- const char *keep_str, const char *hold_str)
+static int peer_timers_set_vty(struct vty *vty, const char *ip_str,
+ const char *keep_str, const char *hold_str)
{
- int ret;
- struct peer *peer;
- u_int32_t keepalive;
- u_int32_t holdtime;
+ int ret;
+ struct peer *peer;
+ u_int32_t keepalive;
+ u_int32_t holdtime;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER_RANGE ("Keepalive", keepalive, keep_str, 0, 65535);
- VTY_GET_INTEGER_RANGE ("Holdtime", holdtime, hold_str, 0, 65535);
+ VTY_GET_INTEGER_RANGE("Keepalive", keepalive, keep_str, 0, 65535);
+ VTY_GET_INTEGER_RANGE("Holdtime", holdtime, hold_str, 0, 65535);
- ret = peer_timers_set (peer, keepalive, holdtime);
+ ret = peer_timers_set(peer, keepalive, holdtime);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_timers_unset_vty (struct vty *vty, const char *ip_str)
+static int peer_timers_unset_vty(struct vty *vty, const char *ip_str)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_timers_unset (peer);
+ ret = peer_timers_unset(peer);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_timers,
@@ -4672,10 +4582,12 @@ DEFUN (neighbor_timers,
"Keepalive interval\n"
"Holdtime\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- int idx_number_2 = 4;
- return peer_timers_set_vty (vty, argv[idx_peer]->arg, argv[idx_number]->arg, argv[idx_number_2]->arg);
+ int idx_peer = 1;
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ return peer_timers_set_vty(vty, argv[idx_peer]->arg,
+ argv[idx_number]->arg,
+ argv[idx_number_2]->arg);
}
DEFUN (no_neighbor_timers,
@@ -4688,43 +4600,41 @@ DEFUN (no_neighbor_timers,
"Keepalive interval\n"
"Holdtime\n")
{
- int idx_peer = 2;
- return peer_timers_unset_vty (vty, argv[idx_peer]->arg);
+ int idx_peer = 2;
+ return peer_timers_unset_vty(vty, argv[idx_peer]->arg);
}
-static int
-peer_timers_connect_set_vty (struct vty *vty, const char *ip_str,
- const char *time_str)
+static int peer_timers_connect_set_vty(struct vty *vty, const char *ip_str,
+ const char *time_str)
{
- int ret;
- struct peer *peer;
- u_int32_t connect;
+ int ret;
+ struct peer *peer;
+ u_int32_t connect;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER_RANGE ("Connect time", connect, time_str, 0, 65535);
+ VTY_GET_INTEGER_RANGE("Connect time", connect, time_str, 0, 65535);
- ret = peer_timers_connect_set (peer, connect);
+ ret = peer_timers_connect_set(peer, connect);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_timers_connect_unset_vty (struct vty *vty, const char *ip_str)
+static int peer_timers_connect_unset_vty(struct vty *vty, const char *ip_str)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_timers_connect_unset (peer);
+ ret = peer_timers_connect_unset(peer);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_timers_connect,
@@ -4736,9 +4646,10 @@ DEFUN (neighbor_timers_connect,
"BGP connect timer\n"
"Connect timer\n")
{
- int idx_peer = 1;
- int idx_number = 4;
- return peer_timers_connect_set_vty (vty, argv[idx_peer]->arg, argv[idx_number]->arg);
+ int idx_peer = 1;
+ int idx_number = 4;
+ return peer_timers_connect_set_vty(vty, argv[idx_peer]->arg,
+ argv[idx_number]->arg);
}
DEFUN (no_neighbor_timers_connect,
@@ -4751,32 +4662,32 @@ DEFUN (no_neighbor_timers_connect,
"BGP connect timer\n"
"Connect timer\n")
{
- int idx_peer = 2;
- return peer_timers_connect_unset_vty (vty, argv[idx_peer]->arg);
+ int idx_peer = 2;
+ return peer_timers_connect_unset_vty(vty, argv[idx_peer]->arg);
}
-static int
-peer_advertise_interval_vty (struct vty *vty, const char *ip_str,
- const char *time_str, int set)
+static int peer_advertise_interval_vty(struct vty *vty, const char *ip_str,
+ const char *time_str, int set)
{
- int ret;
- struct peer *peer;
- u_int32_t routeadv = 0;
+ int ret;
+ struct peer *peer;
+ u_int32_t routeadv = 0;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- if (time_str)
- VTY_GET_INTEGER_RANGE ("advertise interval", routeadv, time_str, 0, 600);
+ if (time_str)
+ VTY_GET_INTEGER_RANGE("advertise interval", routeadv, time_str,
+ 0, 600);
- if (set)
- ret = peer_advertise_interval_set (peer, routeadv);
- else
- ret = peer_advertise_interval_unset (peer);
+ if (set)
+ ret = peer_advertise_interval_set(peer, routeadv);
+ else
+ ret = peer_advertise_interval_unset(peer);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_advertise_interval,
@@ -4787,9 +4698,10 @@ DEFUN (neighbor_advertise_interval,
"Minimum interval between sending BGP routing updates\n"
"time in seconds\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- return peer_advertise_interval_vty (vty, argv[idx_peer]->arg, argv[idx_number]->arg, 1);
+ int idx_peer = 1;
+ int idx_number = 3;
+ return peer_advertise_interval_vty(vty, argv[idx_peer]->arg,
+ argv[idx_number]->arg, 1);
}
DEFUN (no_neighbor_advertise_interval,
@@ -4801,8 +4713,8 @@ DEFUN (no_neighbor_advertise_interval,
"Minimum interval between sending BGP routing updates\n"
"time in seconds\n")
{
- int idx_peer = 2;
- return peer_advertise_interval_vty (vty, argv[idx_peer]->arg, NULL, 0);
+ int idx_peer = 2;
+ return peer_advertise_interval_vty(vty, argv[idx_peer]->arg, NULL, 0);
}
@@ -4815,26 +4727,27 @@ DEFUN (bgp_set_route_map_delay_timer,
"Time in secs to wait before processing route-map changes\n"
"0 disables the timer, no route updates happen when route-maps change\n")
{
- int idx_number = 3;
- u_int32_t rmap_delay_timer;
-
- if (argv[idx_number]->arg)
- {
- VTY_GET_INTEGER_RANGE ("delay-timer", rmap_delay_timer, argv[idx_number]->arg, 0, 600);
- bm->rmap_update_timer = rmap_delay_timer;
-
- /* if the dynamic update handling is being disabled, and a timer is
- * running, stop the timer and act as if the timer has already fired.
- */
- if (!rmap_delay_timer && bm->t_rmap_update )
- {
- BGP_TIMER_OFF(bm->t_rmap_update);
- thread_execute (bm->master, bgp_route_map_update_timer, NULL, 0);
- }
- return CMD_SUCCESS;
- }
- else
- return CMD_WARNING;
+ int idx_number = 3;
+ u_int32_t rmap_delay_timer;
+
+ if (argv[idx_number]->arg) {
+ VTY_GET_INTEGER_RANGE("delay-timer", rmap_delay_timer,
+ argv[idx_number]->arg, 0, 600);
+ bm->rmap_update_timer = rmap_delay_timer;
+
+ /* if the dynamic update handling is being disabled, and a timer
+ * is
+ * running, stop the timer and act as if the timer has already
+ * fired.
+ */
+ if (!rmap_delay_timer && bm->t_rmap_update) {
+ BGP_TIMER_OFF(bm->t_rmap_update);
+ thread_execute(bm->master, bgp_route_map_update_timer,
+ NULL, 0);
+ }
+ return CMD_SUCCESS;
+ } else
+ return CMD_WARNING;
}
DEFUN (no_bgp_set_route_map_delay_timer,
@@ -4847,28 +4760,28 @@ DEFUN (no_bgp_set_route_map_delay_timer,
"0 disables the timer, no route updates happen when route-maps change\n")
{
- bm->rmap_update_timer = RMAP_DEFAULT_UPDATE_TIMER;
+ bm->rmap_update_timer = RMAP_DEFAULT_UPDATE_TIMER;
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* neighbor interface */
-static int
-peer_interface_vty (struct vty *vty, const char *ip_str, const char *str)
+static int peer_interface_vty(struct vty *vty, const char *ip_str,
+ const char *str)
{
- struct peer *peer;
+ struct peer *peer;
- peer = peer_lookup_vty (vty, ip_str);
- if (! peer || peer->conf_if)
- return CMD_WARNING;
+ peer = peer_lookup_vty(vty, ip_str);
+ if (!peer || peer->conf_if)
+ return CMD_WARNING;
- if (str)
- peer_interface_set (peer, str);
- else
- peer_interface_unset (peer);
+ if (str)
+ peer_interface_set(peer, str);
+ else
+ peer_interface_unset(peer);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (neighbor_interface,
@@ -4879,9 +4792,9 @@ DEFUN (neighbor_interface,
"Interface\n"
"Interface name\n")
{
- int idx_ip = 1;
- int idx_word = 3;
- return peer_interface_vty (vty, argv[idx_ip]->arg, argv[idx_word]->arg);
+ int idx_ip = 1;
+ int idx_word = 3;
+ return peer_interface_vty(vty, argv[idx_ip]->arg, argv[idx_word]->arg);
}
DEFUN (no_neighbor_interface,
@@ -4893,56 +4806,55 @@ DEFUN (no_neighbor_interface,
"Interface\n"
"Interface name\n")
{
- int idx_peer = 2;
- return peer_interface_vty (vty, argv[idx_peer]->arg, NULL);
+ int idx_peer = 2;
+ return peer_interface_vty(vty, argv[idx_peer]->arg, NULL);
}
/* Set distribute list to the peer. */
-static int
-peer_distribute_set_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi,
- const char *name_str, const char *direct_str)
+static int peer_distribute_set_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi, const char *name_str,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
+ int ret;
+ struct peer *peer;
+ int direct = FILTER_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "i", 1) == 0)
+ direct = FILTER_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = FILTER_OUT;
- ret = peer_distribute_set (peer, afi, safi, direct, name_str);
+ ret = peer_distribute_set(peer, afi, safi, direct, name_str);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_distribute_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *direct_str)
+static int peer_distribute_unset_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
+ int ret;
+ struct peer *peer;
+ int direct = FILTER_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "i", 1) == 0)
+ direct = FILTER_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = FILTER_OUT;
- ret = peer_distribute_unset (peer, afi, safi, direct);
+ ret = peer_distribute_unset(peer, afi, safi, direct);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_distribute_list,
@@ -4957,11 +4869,12 @@ DEFUN (neighbor_distribute_list,
"Filter incoming updates\n"
"Filter outgoing updates\n")
{
- int idx_peer = 1;
- int idx_acl = 3;
- int idx_in_out = 4;
- return peer_distribute_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_acl]->arg, argv[idx_in_out]->arg);
+ int idx_peer = 1;
+ int idx_acl = 3;
+ int idx_in_out = 4;
+ return peer_distribute_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_acl]->arg, argv[idx_in_out]->arg);
}
DEFUN (no_neighbor_distribute_list,
@@ -4977,58 +4890,59 @@ DEFUN (no_neighbor_distribute_list,
"Filter incoming updates\n"
"Filter outgoing updates\n")
{
- int idx_peer = 2;
- int idx_in_out = 5;
- return peer_distribute_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_in_out]->arg);
+ int idx_peer = 2;
+ int idx_in_out = 5;
+ return peer_distribute_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_in_out]->arg);
}
/* Set prefix list to the peer. */
-static int
-peer_prefix_list_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *name_str,
- const char *direct_str)
+static int peer_prefix_list_set_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi,
+ const char *name_str,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
+ int ret;
+ struct peer *peer;
+ int direct = FILTER_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "i", 1) == 0)
+ direct = FILTER_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = FILTER_OUT;
- ret = peer_prefix_list_set (peer, afi, safi, direct, name_str);
+ ret = peer_prefix_list_set(peer, afi, safi, direct, name_str);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_prefix_list_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *direct_str)
+static int peer_prefix_list_unset_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
+ int ret;
+ struct peer *peer;
+ int direct = FILTER_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "i", 1) == 0)
+ direct = FILTER_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = FILTER_OUT;
- ret = peer_prefix_list_unset (peer, afi, safi, direct);
+ ret = peer_prefix_list_unset(peer, afi, safi, direct);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_prefix_list,
@@ -5041,11 +4955,12 @@ DEFUN (neighbor_prefix_list,
"Filter incoming updates\n"
"Filter outgoing updates\n")
{
- int idx_peer = 1;
- int idx_word = 3;
- int idx_in_out = 4;
- return peer_prefix_list_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_word]->arg, argv[idx_in_out]->arg);
+ int idx_peer = 1;
+ int idx_word = 3;
+ int idx_in_out = 4;
+ return peer_prefix_list_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_word]->arg, argv[idx_in_out]->arg);
}
DEFUN (no_neighbor_prefix_list,
@@ -5059,58 +4974,56 @@ DEFUN (no_neighbor_prefix_list,
"Filter incoming updates\n"
"Filter outgoing updates\n")
{
- int idx_peer = 2;
- int idx_in_out = 5;
- return peer_prefix_list_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_in_out]->arg);
+ int idx_peer = 2;
+ int idx_in_out = 5;
+ return peer_prefix_list_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_in_out]->arg);
}
-static int
-peer_aslist_set_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi,
- const char *name_str, const char *direct_str)
+static int peer_aslist_set_vty(struct vty *vty, const char *ip_str, afi_t afi,
+ safi_t safi, const char *name_str,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
+ int ret;
+ struct peer *peer;
+ int direct = FILTER_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "i", 1) == 0)
+ direct = FILTER_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = FILTER_OUT;
- ret = peer_aslist_set (peer, afi, safi, direct, name_str);
+ ret = peer_aslist_set(peer, afi, safi, direct, name_str);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_aslist_unset_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi,
- const char *direct_str)
+static int peer_aslist_unset_vty(struct vty *vty, const char *ip_str, afi_t afi,
+ safi_t safi, const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = FILTER_IN;
+ int ret;
+ struct peer *peer;
+ int direct = FILTER_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "i", 1) == 0)
- direct = FILTER_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = FILTER_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "i", 1) == 0)
+ direct = FILTER_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = FILTER_OUT;
- ret = peer_aslist_unset (peer, afi, safi, direct);
+ ret = peer_aslist_unset(peer, afi, safi, direct);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_filter_list,
@@ -5123,11 +5036,12 @@ DEFUN (neighbor_filter_list,
"Filter incoming routes\n"
"Filter outgoing routes\n")
{
- int idx_peer = 1;
- int idx_word = 3;
- int idx_in_out = 4;
- return peer_aslist_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_word]->arg, argv[idx_in_out]->arg);
+ int idx_peer = 1;
+ int idx_word = 3;
+ int idx_in_out = 4;
+ return peer_aslist_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty), argv[idx_word]->arg,
+ argv[idx_in_out]->arg);
}
DEFUN (no_neighbor_filter_list,
@@ -5141,58 +5055,58 @@ DEFUN (no_neighbor_filter_list,
"Filter incoming routes\n"
"Filter outgoing routes\n")
{
- int idx_peer = 2;
- int idx_in_out = 5;
- return peer_aslist_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_in_out]->arg);
+ int idx_peer = 2;
+ int idx_in_out = 5;
+ return peer_aslist_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_in_out]->arg);
}
/* Set route-map to the peer. */
-static int
-peer_route_map_set_vty (struct vty *vty, const char *ip_str,
- afi_t afi, safi_t safi,
- const char *name_str, const char *direct_str)
+static int peer_route_map_set_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi, const char *name_str,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = RMAP_IN;
+ int ret;
+ struct peer *peer;
+ int direct = RMAP_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "in", 2) == 0)
- direct = RMAP_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = RMAP_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "in", 2) == 0)
+ direct = RMAP_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = RMAP_OUT;
- ret = peer_route_map_set (peer, afi, safi, direct, name_str);
+ ret = peer_route_map_set(peer, afi, safi, direct, name_str);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_route_map_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *direct_str)
+static int peer_route_map_unset_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi,
+ const char *direct_str)
{
- int ret;
- struct peer *peer;
- int direct = RMAP_IN;
+ int ret;
+ struct peer *peer;
+ int direct = RMAP_IN;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- /* Check filter direction. */
- if (strncmp (direct_str, "in", 2) == 0)
- direct = RMAP_IN;
- else if (strncmp (direct_str, "o", 1) == 0)
- direct = RMAP_OUT;
+ /* Check filter direction. */
+ if (strncmp(direct_str, "in", 2) == 0)
+ direct = RMAP_IN;
+ else if (strncmp(direct_str, "o", 1) == 0)
+ direct = RMAP_OUT;
- ret = peer_route_map_unset (peer, afi, safi, direct);
+ ret = peer_route_map_unset(peer, afi, safi, direct);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_route_map,
@@ -5205,11 +5119,12 @@ DEFUN (neighbor_route_map,
"Apply map to incoming routes\n"
"Apply map to outbound routes\n")
{
- int idx_peer = 1;
- int idx_word = 3;
- int idx_in_out = 4;
- return peer_route_map_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_word]->arg, argv[idx_in_out]->arg);
+ int idx_peer = 1;
+ int idx_word = 3;
+ int idx_in_out = 4;
+ return peer_route_map_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_word]->arg, argv[idx_in_out]->arg);
}
DEFUN (no_neighbor_route_map,
@@ -5223,44 +5138,44 @@ DEFUN (no_neighbor_route_map,
"Apply map to incoming routes\n"
"Apply map to outbound routes\n")
{
- int idx_peer = 2;
- int idx_in_out = 5;
- return peer_route_map_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_in_out]->arg);
+ int idx_peer = 2;
+ int idx_in_out = 5;
+ return peer_route_map_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_in_out]->arg);
}
/* Set unsuppress-map to the peer. */
-static int
-peer_unsuppress_map_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *name_str)
+static int peer_unsuppress_map_set_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi,
+ const char *name_str)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_unsuppress_map_set (peer, afi, safi, name_str);
+ ret = peer_unsuppress_map_set(peer, afi, safi, name_str);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
/* Unset route-map from the peer. */
-static int
-peer_unsuppress_map_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi)
+static int peer_unsuppress_map_unset_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_unsuppress_map_unset (peer, afi, safi);
+ ret = peer_unsuppress_map_unset(peer, afi, safi);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_unsuppress_map,
@@ -5271,10 +5186,11 @@ DEFUN (neighbor_unsuppress_map,
"Route-map to selectively unsuppress suppressed routes\n"
"Name of route map\n")
{
- int idx_peer = 1;
- int idx_word = 3;
- return peer_unsuppress_map_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_word]->arg);
+ int idx_peer = 1;
+ int idx_word = 3;
+ return peer_unsuppress_map_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_word]->arg);
}
DEFUN (no_neighbor_unsuppress_map,
@@ -5286,57 +5202,58 @@ DEFUN (no_neighbor_unsuppress_map,
"Route-map to selectively unsuppress suppressed routes\n"
"Name of route map\n")
{
- int idx_peer = 2;
- return peer_unsuppress_map_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty));
+ int idx_peer = 2;
+ return peer_unsuppress_map_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty),
+ bgp_node_safi(vty));
}
-static int
-peer_maximum_prefix_set_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi, const char *num_str,
- const char *threshold_str, int warning,
- const char *restart_str)
+static int peer_maximum_prefix_set_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi,
+ const char *num_str,
+ const char *threshold_str, int warning,
+ const char *restart_str)
{
- int ret;
- struct peer *peer;
- u_int32_t max;
- u_char threshold;
- u_int16_t restart;
+ int ret;
+ struct peer *peer;
+ u_int32_t max;
+ u_char threshold;
+ u_int16_t restart;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- VTY_GET_INTEGER ("maximum number", max, num_str);
- if (threshold_str)
- threshold = atoi (threshold_str);
- else
- threshold = MAXIMUM_PREFIX_THRESHOLD_DEFAULT;
+ VTY_GET_INTEGER("maximum number", max, num_str);
+ if (threshold_str)
+ threshold = atoi(threshold_str);
+ else
+ threshold = MAXIMUM_PREFIX_THRESHOLD_DEFAULT;
- if (restart_str)
- restart = atoi (restart_str);
- else
- restart = 0;
+ if (restart_str)
+ restart = atoi(restart_str);
+ else
+ restart = 0;
- ret = peer_maximum_prefix_set (peer, afi, safi, max, threshold, warning, restart);
+ ret = peer_maximum_prefix_set(peer, afi, safi, max, threshold, warning,
+ restart);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
-static int
-peer_maximum_prefix_unset_vty (struct vty *vty, const char *ip_str, afi_t afi,
- safi_t safi)
+static int peer_maximum_prefix_unset_vty(struct vty *vty, const char *ip_str,
+ afi_t afi, safi_t safi)
{
- int ret;
- struct peer *peer;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, ip_str);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, ip_str);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_maximum_prefix_unset (peer, afi, safi);
+ ret = peer_maximum_prefix_unset(peer, afi, safi);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
/* Maximum number of prefix configuration. prefix count is different
@@ -5350,11 +5267,11 @@ DEFUN (neighbor_maximum_prefix,
"Maximum number of prefix accept from this peer\n"
"maximum no. of prefix limit\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- return peer_maximum_prefix_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_number]->arg, NULL, 0,
- NULL);
+ int idx_peer = 1;
+ int idx_number = 3;
+ return peer_maximum_prefix_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_number]->arg, NULL, 0, NULL);
}
DEFUN (neighbor_maximum_prefix_threshold,
@@ -5366,12 +5283,12 @@ DEFUN (neighbor_maximum_prefix_threshold,
"maximum no. of prefix limit\n"
"Threshold value (%) at which to generate a warning msg\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- int idx_number_2 = 4;
- return peer_maximum_prefix_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_number]->arg, argv[idx_number_2]->arg, 0,
- NULL);
+ int idx_peer = 1;
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ return peer_maximum_prefix_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_number]->arg, argv[idx_number_2]->arg, 0, NULL);
}
DEFUN (neighbor_maximum_prefix_warning,
@@ -5383,11 +5300,11 @@ DEFUN (neighbor_maximum_prefix_warning,
"maximum no. of prefix limit\n"
"Only give warning message when limit is exceeded\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- return peer_maximum_prefix_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_number]->arg, NULL, 1,
- NULL);
+ int idx_peer = 1;
+ int idx_number = 3;
+ return peer_maximum_prefix_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_number]->arg, NULL, 1, NULL);
}
DEFUN (neighbor_maximum_prefix_threshold_warning,
@@ -5400,11 +5317,12 @@ DEFUN (neighbor_maximum_prefix_threshold_warning,
"Threshold value (%) at which to generate a warning msg\n"
"Only give warning message when limit is exceeded\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- int idx_number_2 = 4;
- return peer_maximum_prefix_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_number]->arg, argv[idx_number_2]->arg, 1, NULL);
+ int idx_peer = 1;
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ return peer_maximum_prefix_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_number]->arg, argv[idx_number_2]->arg, 1, NULL);
}
DEFUN (neighbor_maximum_prefix_restart,
@@ -5417,11 +5335,12 @@ DEFUN (neighbor_maximum_prefix_restart,
"Restart bgp connection after limit is exceeded\n"
"Restart interval in minutes")
{
- int idx_peer = 1;
- int idx_number = 3;
- int idx_number_2 = 5;
- return peer_maximum_prefix_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_number]->arg, NULL, 0, argv[idx_number_2]->arg);
+ int idx_peer = 1;
+ int idx_number = 3;
+ int idx_number_2 = 5;
+ return peer_maximum_prefix_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_number]->arg, NULL, 0, argv[idx_number_2]->arg);
}
DEFUN (neighbor_maximum_prefix_threshold_restart,
@@ -5435,12 +5354,14 @@ DEFUN (neighbor_maximum_prefix_threshold_restart,
"Restart bgp connection after limit is exceeded\n"
"Restart interval in minutes\n")
{
- int idx_peer = 1;
- int idx_number = 3;
- int idx_number_2 = 4;
- int idx_number_3 = 6;
- return peer_maximum_prefix_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty), argv[idx_number]->arg, argv[idx_number_2]->arg, 0, argv[idx_number_3]->arg);
+ int idx_peer = 1;
+ int idx_number = 3;
+ int idx_number_2 = 4;
+ int idx_number_3 = 6;
+ return peer_maximum_prefix_set_vty(
+ vty, argv[idx_peer]->arg, bgp_node_afi(vty), bgp_node_safi(vty),
+ argv[idx_number]->arg, argv[idx_number_2]->arg, 0,
+ argv[idx_number_3]->arg);
}
DEFUN (no_neighbor_maximum_prefix,
@@ -5456,9 +5377,10 @@ DEFUN (no_neighbor_maximum_prefix,
"Restart interval in minutes\n"
"Only give warning message when limit is exceeded\n")
{
- int idx_peer = 2;
- return peer_maximum_prefix_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty));
+ int idx_peer = 2;
+ return peer_maximum_prefix_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty),
+ bgp_node_safi(vty));
}
@@ -5472,31 +5394,30 @@ DEFUN (neighbor_allowas_in,
"Number of occurances of AS number\n"
"Only accept my AS in the as-path if the route was originated in my AS\n")
{
- int idx_peer = 1;
- int idx_number_origin = 3;
- int ret;
- int origin = 0;
- struct peer *peer;
- int allow_num = 0;
-
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
-
- if (argc <= idx_number_origin)
- allow_num = 3;
- else
- {
- if (argv[idx_number_origin]->type == WORD_TKN)
- origin = 1;
- else
- allow_num = atoi (argv[idx_number_origin]->arg);
- }
+ int idx_peer = 1;
+ int idx_number_origin = 3;
+ int ret;
+ int origin = 0;
+ struct peer *peer;
+ int allow_num = 0;
+
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
+
+ if (argc <= idx_number_origin)
+ allow_num = 3;
+ else {
+ if (argv[idx_number_origin]->type == WORD_TKN)
+ origin = 1;
+ else
+ allow_num = atoi(argv[idx_number_origin]->arg);
+ }
- ret = peer_allowas_in_set (peer, bgp_node_afi (vty), bgp_node_safi (vty),
- allow_num, origin);
+ ret = peer_allowas_in_set(peer, bgp_node_afi(vty), bgp_node_safi(vty),
+ allow_num, origin);
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (no_neighbor_allowas_in,
@@ -5509,17 +5430,18 @@ DEFUN (no_neighbor_allowas_in,
"Number of occurances of AS number\n"
"Only accept my AS in the as-path if the route was originated in my AS\n")
{
- int idx_peer = 2;
- int ret;
- struct peer *peer;
+ int idx_peer = 2;
+ int ret;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- ret = peer_allowas_in_unset (peer, bgp_node_afi (vty), bgp_node_safi (vty));
+ ret = peer_allowas_in_unset(peer, bgp_node_afi(vty),
+ bgp_node_safi(vty));
- return bgp_vty_return (vty, ret);
+ return bgp_vty_return(vty, ret);
}
DEFUN (neighbor_ttl_security,
@@ -5531,28 +5453,29 @@ DEFUN (neighbor_ttl_security,
"Specify the maximum number of hops to the BGP peer\n"
"Number of hops to BGP peer\n")
{
- int idx_peer = 1;
- int idx_number = 4;
- struct peer *peer;
- int gtsm_hops;
-
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
-
- VTY_GET_INTEGER_RANGE ("", gtsm_hops, argv[idx_number]->arg, 1, 254);
-
- /*
- * If 'neighbor swpX', then this is for directly connected peers,
- * we should not accept a ttl-security hops value greater than 1.
- */
- if (peer->conf_if && (gtsm_hops > 1)) {
- vty_out (vty, "%s is directly connected peer, hops cannot exceed 1%s",
- argv[idx_peer]->arg, VTY_NEWLINE);
- return CMD_WARNING;
- }
+ int idx_peer = 1;
+ int idx_number = 4;
+ struct peer *peer;
+ int gtsm_hops;
+
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
+
+ VTY_GET_INTEGER_RANGE("", gtsm_hops, argv[idx_number]->arg, 1, 254);
+
+ /*
+ * If 'neighbor swpX', then this is for directly connected peers,
+ * we should not accept a ttl-security hops value greater than 1.
+ */
+ if (peer->conf_if && (gtsm_hops > 1)) {
+ vty_out(vty,
+ "%s is directly connected peer, hops cannot exceed 1%s",
+ argv[idx_peer]->arg, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- return bgp_vty_return (vty, peer_ttl_security_hops_set (peer, gtsm_hops));
+ return bgp_vty_return(vty, peer_ttl_security_hops_set(peer, gtsm_hops));
}
DEFUN (no_neighbor_ttl_security,
@@ -5565,14 +5488,14 @@ DEFUN (no_neighbor_ttl_security,
"Specify the maximum number of hops to the BGP peer\n"
"Number of hops to BGP peer\n")
{
- int idx_peer = 2;
- struct peer *peer;
+ int idx_peer = 2;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- return bgp_vty_return (vty, peer_ttl_security_hops_unset (peer));
+ return bgp_vty_return(vty, peer_ttl_security_hops_unset(peer));
}
DEFUN (neighbor_addpath_tx_all_paths,
@@ -5582,16 +5505,16 @@ DEFUN (neighbor_addpath_tx_all_paths,
NEIGHBOR_ADDR_STR2
"Use addpath to advertise all paths to a neighbor\n")
{
- int idx_peer = 1;
- struct peer *peer;
+ int idx_peer = 1;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_ADDPATH_TX_ALL_PATHS);
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_ADDPATH_TX_ALL_PATHS);
}
DEFUN (no_neighbor_addpath_tx_all_paths,
@@ -5602,10 +5525,10 @@ DEFUN (no_neighbor_addpath_tx_all_paths,
NEIGHBOR_ADDR_STR2
"Use addpath to advertise all paths to a neighbor\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_ADDPATH_TX_ALL_PATHS);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_ADDPATH_TX_ALL_PATHS);
}
DEFUN (neighbor_addpath_tx_bestpath_per_as,
@@ -5615,16 +5538,16 @@ DEFUN (neighbor_addpath_tx_bestpath_per_as,
NEIGHBOR_ADDR_STR2
"Use addpath to advertise the bestpath per each neighboring AS\n")
{
- int idx_peer = 1;
- struct peer *peer;
+ int idx_peer = 1;
+ struct peer *peer;
- peer = peer_and_group_lookup_vty (vty, argv[idx_peer]->arg);
- if (! peer)
- return CMD_WARNING;
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (!peer)
+ return CMD_WARNING;
- return peer_af_flag_set_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS);
+ return peer_af_flag_set_vty(vty, argv[idx_peer]->arg, bgp_node_afi(vty),
+ bgp_node_safi(vty),
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS);
}
DEFUN (no_neighbor_addpath_tx_bestpath_per_as,
@@ -5635,10 +5558,10 @@ DEFUN (no_neighbor_addpath_tx_bestpath_per_as,
NEIGHBOR_ADDR_STR2
"Use addpath to advertise the bestpath per each neighboring AS\n")
{
- int idx_peer = 2;
- return peer_af_flag_unset_vty (vty, argv[idx_peer]->arg, bgp_node_afi (vty),
- bgp_node_safi (vty),
- PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS);
+ int idx_peer = 2;
+ return peer_af_flag_unset_vty(vty, argv[idx_peer]->arg,
+ bgp_node_afi(vty), bgp_node_safi(vty),
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS);
}
DEFUN_NOSH (address_family_ipv4_safi,
@@ -5648,27 +5571,24 @@ DEFUN_NOSH (address_family_ipv4_safi,
"Address Family\n"
BGP_SAFI_HELP_STR)
{
- int idx_safi = 2;
- if (argc == (idx_safi + 1))
- {
- switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg))
- {
- case SAFI_MULTICAST:
- vty->node = BGP_IPV4M_NODE;
- break;
- case SAFI_MPLS_VPN:
- vty->node = BGP_VPNV4_NODE;
- break;
- case SAFI_UNICAST:
- default:
- vty->node = BGP_IPV4_NODE;
- break;
- }
- }
- else
- vty->node = BGP_IPV4_NODE;
-
- return CMD_SUCCESS;
+ int idx_safi = 2;
+ if (argc == (idx_safi + 1)) {
+ switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) {
+ case SAFI_MULTICAST:
+ vty->node = BGP_IPV4M_NODE;
+ break;
+ case SAFI_MPLS_VPN:
+ vty->node = BGP_VPNV4_NODE;
+ break;
+ case SAFI_UNICAST:
+ default:
+ vty->node = BGP_IPV4_NODE;
+ break;
+ }
+ } else
+ vty->node = BGP_IPV4_NODE;
+
+ return CMD_SUCCESS;
}
DEFUN_NOSH (address_family_ipv6_safi,
@@ -5678,27 +5598,24 @@ DEFUN_NOSH (address_family_ipv6_safi,
"Address Family\n"
BGP_SAFI_HELP_STR)
{
- int idx_safi = 2;
- if (argc == (idx_safi + 1))
- {
- switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg))
- {
- case SAFI_MULTICAST:
- vty->node = BGP_IPV6M_NODE;
- break;
- case SAFI_MPLS_VPN:
- vty->node = BGP_VPNV6_NODE;
- break;
- case SAFI_UNICAST:
- default:
- vty->node = BGP_IPV6_NODE;
- break;
- }
- }
- else
- vty->node = BGP_IPV6_NODE;
-
- return CMD_SUCCESS;
+ int idx_safi = 2;
+ if (argc == (idx_safi + 1)) {
+ switch (bgp_vty_safi_from_arg(argv[idx_safi]->arg)) {
+ case SAFI_MULTICAST:
+ vty->node = BGP_IPV6M_NODE;
+ break;
+ case SAFI_MPLS_VPN:
+ vty->node = BGP_VPNV6_NODE;
+ break;
+ case SAFI_UNICAST:
+ default:
+ vty->node = BGP_IPV6_NODE;
+ break;
+ }
+ } else
+ vty->node = BGP_IPV6_NODE;
+
+ return CMD_SUCCESS;
}
#ifdef KEEP_OLD_VPN_COMMANDS
@@ -5709,8 +5626,8 @@ DEFUN_NOSH (address_family_vpnv4,
"Address Family\n"
"Address Family modifier\n")
{
- vty->node = BGP_VPNV4_NODE;
- return CMD_SUCCESS;
+ vty->node = BGP_VPNV4_NODE;
+ return CMD_SUCCESS;
}
DEFUN_NOSH (address_family_vpnv6,
@@ -5720,8 +5637,8 @@ DEFUN_NOSH (address_family_vpnv6,
"Address Family\n"
"Address Family modifier\n")
{
- vty->node = BGP_VPNV6_NODE;
- return CMD_SUCCESS;
+ vty->node = BGP_VPNV6_NODE;
+ return CMD_SUCCESS;
}
#endif
@@ -5733,8 +5650,8 @@ DEFUN_NOSH (address_family_evpn,
"Layer2 VPN Address family\n"
"Ethernet Virtual Private Network Subsequent Address Family\n")
{
- vty->node = BGP_EVPN_NODE;
- return CMD_SUCCESS;
+ vty->node = BGP_EVPN_NODE;
+ return CMD_SUCCESS;
}
DEFUN_NOSH (exit_address_family,
@@ -5742,96 +5659,83 @@ DEFUN_NOSH (exit_address_family,
"exit-address-family",
"Exit from Address Family configuration mode\n")
{
- if (vty->node == BGP_IPV4_NODE
- || vty->node == BGP_IPV4M_NODE
- || vty->node == BGP_VPNV4_NODE
- || vty->node == BGP_IPV6_NODE
- || vty->node == BGP_IPV6M_NODE
- || vty->node == BGP_VPNV6_NODE
- || vty->node == BGP_EVPN_NODE)
- vty->node = BGP_NODE;
- return CMD_SUCCESS;
+ if (vty->node == BGP_IPV4_NODE || vty->node == BGP_IPV4M_NODE
+ || vty->node == BGP_VPNV4_NODE || vty->node == BGP_IPV6_NODE
+ || vty->node == BGP_IPV6M_NODE || vty->node == BGP_VPNV6_NODE
+ || vty->node == BGP_EVPN_NODE)
+ vty->node = BGP_NODE;
+ return CMD_SUCCESS;
}
/* Recalculate bestpath and re-advertise a prefix */
-static int
-bgp_clear_prefix (struct vty *vty, const char *view_name, const char *ip_str,
- afi_t afi, safi_t safi, struct prefix_rd *prd)
-{
- int ret;
- struct prefix match;
- struct bgp_node *rn;
- struct bgp_node *rm;
- struct bgp *bgp;
- struct bgp_table *table;
- struct bgp_table *rib;
-
- /* BGP structure lookup. */
- if (view_name)
- {
- bgp = bgp_lookup_by_name (view_name);
- if (bgp == NULL)
- {
- vty_out (vty, "%% Can't find BGP instance %s%s", view_name, VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
- else
- {
- bgp = bgp_get_default ();
- if (bgp == NULL)
- {
- vty_out (vty, "%% No BGP process is configured%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- }
-
- /* Check IP address argument. */
- ret = str2prefix (ip_str, &match);
- if (! ret)
- {
- vty_out (vty, "%% address is malformed%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- match.family = afi2family (afi);
- rib = bgp->rib[afi][safi];
-
- if (safi == SAFI_MPLS_VPN)
- {
- for (rn = bgp_table_top (rib); rn; rn = bgp_route_next (rn))
- {
- if (prd && memcmp (rn->p.u.val, prd->val, 8) != 0)
- continue;
-
- if ((table = rn->info) != NULL)
- {
- if ((rm = bgp_node_match (table, &match)) != NULL)
- {
- if (rm->p.prefixlen == match.prefixlen)
- {
- SET_FLAG (rn->flags, BGP_NODE_USER_CLEAR);
- bgp_process (bgp, rm, afi, safi);
- }
- bgp_unlock_node (rm);
- }
- }
- }
- }
- else
- {
- if ((rn = bgp_node_match (rib, &match)) != NULL)
- {
- if (rn->p.prefixlen == match.prefixlen)
- {
- SET_FLAG (rn->flags, BGP_NODE_USER_CLEAR);
- bgp_process (bgp, rn, afi, safi);
- }
- bgp_unlock_node (rn);
- }
- }
-
- return CMD_SUCCESS;
+static int bgp_clear_prefix(struct vty *vty, const char *view_name,
+ const char *ip_str, afi_t afi, safi_t safi,
+ struct prefix_rd *prd)
+{
+ int ret;
+ struct prefix match;
+ struct bgp_node *rn;
+ struct bgp_node *rm;
+ struct bgp *bgp;
+ struct bgp_table *table;
+ struct bgp_table *rib;
+
+ /* BGP structure lookup. */
+ if (view_name) {
+ bgp = bgp_lookup_by_name(view_name);
+ if (bgp == NULL) {
+ vty_out(vty, "%% Can't find BGP instance %s%s",
+ view_name, VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ } else {
+ bgp = bgp_get_default();
+ if (bgp == NULL) {
+ vty_out(vty, "%% No BGP process is configured%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ }
+
+ /* Check IP address argument. */
+ ret = str2prefix(ip_str, &match);
+ if (!ret) {
+ vty_out(vty, "%% address is malformed%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ match.family = afi2family(afi);
+ rib = bgp->rib[afi][safi];
+
+ if (safi == SAFI_MPLS_VPN) {
+ for (rn = bgp_table_top(rib); rn; rn = bgp_route_next(rn)) {
+ if (prd && memcmp(rn->p.u.val, prd->val, 8) != 0)
+ continue;
+
+ if ((table = rn->info) != NULL) {
+ if ((rm = bgp_node_match(table, &match))
+ != NULL) {
+ if (rm->p.prefixlen
+ == match.prefixlen) {
+ SET_FLAG(rn->flags,
+ BGP_NODE_USER_CLEAR);
+ bgp_process(bgp, rm, afi, safi);
+ }
+ bgp_unlock_node(rm);
+ }
+ }
+ }
+ } else {
+ if ((rn = bgp_node_match(rib, &match)) != NULL) {
+ if (rn->p.prefixlen == match.prefixlen) {
+ SET_FLAG(rn->flags, BGP_NODE_USER_CLEAR);
+ bgp_process(bgp, rn, afi, safi);
+ }
+ bgp_unlock_node(rn);
+ }
+ }
+
+ return CMD_SUCCESS;
}
/* one clear bgp command to rule them all */
@@ -5859,85 +5763,70 @@ DEFUN (clear_ip_bgp_all,
"Push out prefix-list ORF and do inbound soft reconfig\n"
BGP_SOFT_OUT_STR)
{
- char *vrf = NULL;
-
- afi_t afi = AFI_IP6;
- safi_t safi = SAFI_UNICAST;
- enum clear_sort clr_sort = clear_peer;
- enum bgp_clear_type clr_type;
- char *clr_arg = NULL;
-
- int idx = 0;
-
- /* clear [ip] bgp */
- if (argv_find (argv, argc, "ip", &idx))
- afi = AFI_IP;
- /* [<view|vrf> WORD] */
- if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
- {
- vrf = argv[idx + 1]->arg;
- idx += 2;
- }
- /* <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> */
- if (argv_find (argv, argc, "*", &idx))
- {
- clr_sort = clear_all;
- }
- else if (argv_find (argv, argc, "A.B.C.D", &idx))
- {
- clr_sort = clear_peer;
- clr_arg = argv[idx]->arg;
- }
- else if (argv_find (argv, argc, "X:X::X:X", &idx))
- {
- clr_sort = clear_peer;
- clr_arg = argv[idx]->arg;
- }
- else if (argv_find (argv, argc, "peer-group", &idx))
- {
- clr_sort = clear_group;
- idx++;
- clr_arg = argv[idx]->arg;
- }
- else if (argv_find (argv, argc, "WORD", &idx))
- {
- clr_sort = clear_peer;
- clr_arg = argv[idx]->arg;
- }
- else if (argv_find (argv, argc, "(1-4294967295)", &idx))
- {
- clr_sort = clear_as;
- clr_arg = argv[idx]->arg;
- }
- else if (argv_find (argv, argc, "external", &idx))
- {
- clr_sort = clear_external;
- }
- /* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
- if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
- {
- argv_find_and_parse_safi (argv, argc, &idx, &safi);
- }
- /* [<soft [<in|out>]|in [prefix-filter]|out>] */
- if (argv_find (argv, argc, "soft", &idx))
- {
- if (argv_find (argv, argc, "in", &idx) || argv_find (argv, argc, "out", &idx))
- clr_type = strmatch (argv[idx]->text, "in") ? BGP_CLEAR_SOFT_IN : BGP_CLEAR_SOFT_OUT;
- else
- clr_type = BGP_CLEAR_SOFT_BOTH;
- }
- else if (argv_find (argv, argc, "in", &idx))
- {
- clr_type = argv_find (argv, argc, "prefix-filter", &idx) ? BGP_CLEAR_SOFT_IN_ORF_PREFIX : BGP_CLEAR_SOFT_IN;
- }
- else if (argv_find (argv, argc, "out", &idx))
- {
- clr_type = BGP_CLEAR_SOFT_OUT;
- }
- else
- clr_type = BGP_CLEAR_SOFT_NONE;
-
- return bgp_clear_vty (vty, vrf, afi, safi, clr_sort, clr_type, clr_arg);
+ char *vrf = NULL;
+
+ afi_t afi = AFI_IP6;
+ safi_t safi = SAFI_UNICAST;
+ enum clear_sort clr_sort = clear_peer;
+ enum bgp_clear_type clr_type;
+ char *clr_arg = NULL;
+
+ int idx = 0;
+
+ /* clear [ip] bgp */
+ if (argv_find(argv, argc, "ip", &idx))
+ afi = AFI_IP;
+ /* [<view|vrf> WORD] */
+ if (argv_find(argv, argc, "view", &idx)
+ || argv_find(argv, argc, "vrf", &idx)) {
+ vrf = argv[idx + 1]->arg;
+ idx += 2;
+ }
+ /* <*|A.B.C.D|X:X::X:X|WORD|(1-4294967295)|external|peer-group WORD> */
+ if (argv_find(argv, argc, "*", &idx)) {
+ clr_sort = clear_all;
+ } else if (argv_find(argv, argc, "A.B.C.D", &idx)) {
+ clr_sort = clear_peer;
+ clr_arg = argv[idx]->arg;
+ } else if (argv_find(argv, argc, "X:X::X:X", &idx)) {
+ clr_sort = clear_peer;
+ clr_arg = argv[idx]->arg;
+ } else if (argv_find(argv, argc, "peer-group", &idx)) {
+ clr_sort = clear_group;
+ idx++;
+ clr_arg = argv[idx]->arg;
+ } else if (argv_find(argv, argc, "WORD", &idx)) {
+ clr_sort = clear_peer;
+ clr_arg = argv[idx]->arg;
+ } else if (argv_find(argv, argc, "(1-4294967295)", &idx)) {
+ clr_sort = clear_as;
+ clr_arg = argv[idx]->arg;
+ } else if (argv_find(argv, argc, "external", &idx)) {
+ clr_sort = clear_external;
+ }
+ /* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
+ if (argv_find_and_parse_afi(argv, argc, &idx, &afi)) {
+ argv_find_and_parse_safi(argv, argc, &idx, &safi);
+ }
+ /* [<soft [<in|out>]|in [prefix-filter]|out>] */
+ if (argv_find(argv, argc, "soft", &idx)) {
+ if (argv_find(argv, argc, "in", &idx)
+ || argv_find(argv, argc, "out", &idx))
+ clr_type = strmatch(argv[idx]->text, "in")
+ ? BGP_CLEAR_SOFT_IN
+ : BGP_CLEAR_SOFT_OUT;
+ else
+ clr_type = BGP_CLEAR_SOFT_BOTH;
+ } else if (argv_find(argv, argc, "in", &idx)) {
+ clr_type = argv_find(argv, argc, "prefix-filter", &idx)
+ ? BGP_CLEAR_SOFT_IN_ORF_PREFIX
+ : BGP_CLEAR_SOFT_IN;
+ } else if (argv_find(argv, argc, "out", &idx)) {
+ clr_type = BGP_CLEAR_SOFT_OUT;
+ } else
+ clr_type = BGP_CLEAR_SOFT_NONE;
+
+ return bgp_clear_vty(vty, vrf, afi, safi, clr_sort, clr_type, clr_arg);
}
DEFUN (clear_ip_bgp_prefix,
@@ -5950,18 +5839,18 @@ DEFUN (clear_ip_bgp_prefix,
"Clear bestpath and re-advertise\n"
"IPv4 prefix\n")
{
- char *vrf = NULL;
- char *prefix = NULL;
+ char *vrf = NULL;
+ char *prefix = NULL;
- int idx = 0;
+ int idx = 0;
- /* [<view|vrf> WORD] */
- if (argv_find (argv, argc, "WORD", &idx))
- vrf = argv[idx]->arg;
+ /* [<view|vrf> WORD] */
+ if (argv_find(argv, argc, "WORD", &idx))
+ vrf = argv[idx]->arg;
- prefix = argv[argc-1]->arg;
+ prefix = argv[argc - 1]->arg;
- return bgp_clear_prefix (vty, vrf, prefix, AFI_IP, SAFI_UNICAST, NULL);
+ return bgp_clear_prefix(vty, vrf, prefix, AFI_IP, SAFI_UNICAST, NULL);
}
DEFUN (clear_bgp_ipv6_safi_prefix,
@@ -5975,10 +5864,11 @@ DEFUN (clear_bgp_ipv6_safi_prefix,
"Clear bestpath and re-advertise\n"
"IPv6 prefix\n")
{
- int idx_safi = 3;
- int idx_ipv6_prefixlen = 5;
- return bgp_clear_prefix (vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6,
- bgp_vty_safi_from_arg(argv[idx_safi]->arg), NULL);
+ int idx_safi = 3;
+ int idx_ipv6_prefixlen = 5;
+ return bgp_clear_prefix(
+ vty, NULL, argv[idx_ipv6_prefixlen]->arg, AFI_IP6,
+ bgp_vty_safi_from_arg(argv[idx_safi]->arg), NULL);
}
DEFUN (clear_bgp_instance_ipv6_safi_prefix,
@@ -5993,11 +5883,12 @@ DEFUN (clear_bgp_instance_ipv6_safi_prefix,
"Clear bestpath and re-advertise\n"
"IPv6 prefix\n")
{
- int idx_word = 3;
- int idx_safi = 5;
- int idx_ipv6_prefixlen = 7;
- return bgp_clear_prefix (vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg, AFI_IP6,
- bgp_vty_safi_from_arg(argv[idx_safi]->arg), NULL);
+ int idx_word = 3;
+ int idx_safi = 5;
+ int idx_ipv6_prefixlen = 7;
+ return bgp_clear_prefix(
+ vty, argv[idx_word]->arg, argv[idx_ipv6_prefixlen]->arg,
+ AFI_IP6, bgp_vty_safi_from_arg(argv[idx_safi]->arg), NULL);
}
DEFUN (show_bgp_views,
@@ -6008,28 +5899,26 @@ DEFUN (show_bgp_views,
BGP_STR
"Show the defined BGP views\n")
{
- struct list *inst = bm->bgp;
- struct listnode *node;
- struct bgp *bgp;
+ struct list *inst = bm->bgp;
+ struct listnode *node;
+ struct bgp *bgp;
- if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
- {
- vty_out (vty, "BGP Multiple Instance is not enabled%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (!bgp_option_check(BGP_OPT_MULTIPLE_INSTANCE)) {
+ vty_out(vty, "BGP Multiple Instance is not enabled%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- vty_out (vty, "Defined BGP views:%s", VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS_RO(inst, node, bgp))
- {
- /* Skip VRFs. */
- if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF)
- continue;
- vty_out (vty, "\t%s (AS%u)%s",
- bgp->name ? bgp->name : "(null)",
- bgp->as, VTY_NEWLINE);
- }
+ vty_out(vty, "Defined BGP views:%s", VTY_NEWLINE);
+ for (ALL_LIST_ELEMENTS_RO(inst, node, bgp)) {
+ /* Skip VRFs. */
+ if (bgp->inst_type == BGP_INSTANCE_TYPE_VRF)
+ continue;
+ vty_out(vty, "\t%s (AS%u)%s", bgp->name ? bgp->name : "(null)",
+ bgp->as, VTY_NEWLINE);
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_vrfs,
@@ -6041,104 +5930,99 @@ DEFUN (show_bgp_vrfs,
"Show BGP VRFs\n"
JSON_STR)
{
- struct list *inst = bm->bgp;
- struct listnode *node;
- struct bgp *bgp;
- u_char uj = use_json(argc, argv);
- json_object *json = NULL;
- json_object *json_vrfs = NULL;
- int count = 0;
- static char header[] = "Type Id RouterId #PeersCfg #PeersEstb Name";
-
- if (!bgp_option_check (BGP_OPT_MULTIPLE_INSTANCE))
- {
- vty_out (vty, "BGP Multiple Instance is not enabled%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- if (uj)
- {
- json = json_object_new_object();
- json_vrfs = json_object_new_object();
- }
-
- for (ALL_LIST_ELEMENTS_RO(inst, node, bgp))
- {
- const char *name, *type;
- struct peer *peer;
- struct listnode *node, *nnode;
- int peers_cfg, peers_estb;
- json_object *json_vrf = NULL;
- int vrf_id_ui;
-
- /* Skip Views. */
- if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
- continue;
-
- count++;
- if (!uj && count == 1)
- vty_out (vty, "%s%s", header, VTY_NEWLINE);
-
- peers_cfg = peers_estb = 0;
- if (uj)
- json_vrf = json_object_new_object();
-
-
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
- continue;
- peers_cfg++;
- if (peer->status == Established)
- peers_estb++;
- }
-
- if (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- {
- name = "Default";
- type = "DFLT";
- }
- else
- {
- name = bgp->name;
- type = "VRF";
- }
-
- vrf_id_ui = (bgp->vrf_id == VRF_UNKNOWN) ? -1 : bgp->vrf_id;
- if (uj)
- {
- json_object_string_add(json_vrf, "type", type);
- json_object_int_add(json_vrf, "vrfId", vrf_id_ui);
- json_object_string_add(json_vrf, "routerId", inet_ntoa (bgp->router_id));
- json_object_int_add(json_vrf, "numConfiguredPeers", peers_cfg);
- json_object_int_add(json_vrf, "numEstablishedPeers", peers_estb);
-
- json_object_object_add(json_vrfs, name, json_vrf);
- }
- else
- vty_out (vty, "%4s %-5d %-16s %9u %10u %s%s",
- type, vrf_id_ui, inet_ntoa (bgp->router_id),
- peers_cfg, peers_estb, name,
- VTY_NEWLINE);
- }
-
- if (uj)
- {
- json_object_object_add(json, "vrfs", json_vrfs);
-
- json_object_int_add(json, "totalVrfs", count);
-
- vty_out (vty, "%s%s", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY), VTY_NEWLINE);
- json_object_free(json);
- }
- else
- {
- if (count)
- vty_out (vty, "%sTotal number of VRFs (including default): %d%s",
- VTY_NEWLINE, count, VTY_NEWLINE);
- }
-
- return CMD_SUCCESS;
+ struct list *inst = bm->bgp;
+ struct listnode *node;
+ struct bgp *bgp;
+ u_char uj = use_json(argc, argv);
+ json_object *json = NULL;
+ json_object *json_vrfs = NULL;
+ int count = 0;
+ static char header[] =
+ "Type Id RouterId #PeersCfg #PeersEstb Name";
+
+ if (!bgp_option_check(BGP_OPT_MULTIPLE_INSTANCE)) {
+ vty_out(vty, "BGP Multiple Instance is not enabled%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (uj) {
+ json = json_object_new_object();
+ json_vrfs = json_object_new_object();
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(inst, node, bgp)) {
+ const char *name, *type;
+ struct peer *peer;
+ struct listnode *node, *nnode;
+ int peers_cfg, peers_estb;
+ json_object *json_vrf = NULL;
+ int vrf_id_ui;
+
+ /* Skip Views. */
+ if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
+ continue;
+
+ count++;
+ if (!uj && count == 1)
+ vty_out(vty, "%s%s", header, VTY_NEWLINE);
+
+ peers_cfg = peers_estb = 0;
+ if (uj)
+ json_vrf = json_object_new_object();
+
+
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
+ continue;
+ peers_cfg++;
+ if (peer->status == Established)
+ peers_estb++;
+ }
+
+ if (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) {
+ name = "Default";
+ type = "DFLT";
+ } else {
+ name = bgp->name;
+ type = "VRF";
+ }
+
+ vrf_id_ui = (bgp->vrf_id == VRF_UNKNOWN) ? -1 : bgp->vrf_id;
+ if (uj) {
+ json_object_string_add(json_vrf, "type", type);
+ json_object_int_add(json_vrf, "vrfId", vrf_id_ui);
+ json_object_string_add(json_vrf, "routerId",
+ inet_ntoa(bgp->router_id));
+ json_object_int_add(json_vrf, "numConfiguredPeers",
+ peers_cfg);
+ json_object_int_add(json_vrf, "numEstablishedPeers",
+ peers_estb);
+
+ json_object_object_add(json_vrfs, name, json_vrf);
+ } else
+ vty_out(vty, "%4s %-5d %-16s %9u %10u %s%s", type,
+ vrf_id_ui, inet_ntoa(bgp->router_id), peers_cfg,
+ peers_estb, name, VTY_NEWLINE);
+ }
+
+ if (uj) {
+ json_object_object_add(json, "vrfs", json_vrfs);
+
+ json_object_int_add(json, "totalVrfs", count);
+
+ vty_out(vty, "%s%s", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY),
+ VTY_NEWLINE);
+ json_object_free(json);
+ } else {
+ if (count)
+ vty_out(vty,
+ "%sTotal number of VRFs (including default): %d%s",
+ VTY_NEWLINE, count, VTY_NEWLINE);
+ }
+
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_memory,
@@ -6149,661 +6033,788 @@ DEFUN (show_bgp_memory,
BGP_STR
"Global BGP memory statistics\n")
{
- char memstrbuf[MTYPE_MEMSTR_LEN];
- unsigned long count;
-
- /* RIB related usage stats */
- count = mtype_stats_alloc (MTYPE_BGP_NODE);
- vty_out (vty, "%ld RIB nodes, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_node)),
- VTY_NEWLINE);
-
- count = mtype_stats_alloc (MTYPE_BGP_ROUTE);
- vty_out (vty, "%ld BGP routes, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_info)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_BGP_ROUTE_EXTRA)))
- vty_out (vty, "%ld BGP route ancillaries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_info_extra)),
- VTY_NEWLINE);
-
- if ((count = mtype_stats_alloc (MTYPE_BGP_STATIC)))
- vty_out (vty, "%ld Static routes, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_static)),
- VTY_NEWLINE);
-
- if ((count = mtype_stats_alloc (MTYPE_BGP_PACKET)))
- vty_out (vty, "%ld Packets, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bpacket)),
- VTY_NEWLINE);
-
- /* Adj-In/Out */
- if ((count = mtype_stats_alloc (MTYPE_BGP_ADJ_IN)))
- vty_out (vty, "%ld Adj-In entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_adj_in)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_BGP_ADJ_OUT)))
- vty_out (vty, "%ld Adj-Out entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_adj_out)),
- VTY_NEWLINE);
-
- if ((count = mtype_stats_alloc (MTYPE_BGP_NEXTHOP_CACHE)))
- vty_out (vty, "%ld Nexthop cache entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_nexthop_cache)),
- VTY_NEWLINE);
-
- if ((count = mtype_stats_alloc (MTYPE_BGP_DAMP_INFO)))
- vty_out (vty, "%ld Dampening entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct bgp_damp_info)),
- VTY_NEWLINE);
-
- /* Attributes */
- count = attr_count();
- vty_out (vty, "%ld BGP attributes, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof(struct attr)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_ATTR_EXTRA)))
- vty_out (vty, "%ld BGP extra attributes, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof(struct attr_extra)),
- VTY_NEWLINE);
-
- if ((count = attr_unknown_count()))
- vty_out (vty, "%ld unknown attributes%s", count, VTY_NEWLINE);
-
- /* AS_PATH attributes */
- count = aspath_count ();
- vty_out (vty, "%ld BGP AS-PATH entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct aspath)),
- VTY_NEWLINE);
-
- count = mtype_stats_alloc (MTYPE_AS_SEG);
- vty_out (vty, "%ld BGP AS-PATH segments, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct assegment)),
- VTY_NEWLINE);
-
- /* Other attributes */
- if ((count = community_count ()))
- vty_out (vty, "%ld BGP community entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct community)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_ECOMMUNITY)))
- vty_out (vty, "%ld BGP community entries, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct ecommunity)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_LCOMMUNITY)))
- vty_out (vty, "%ld BGP large-community entries, using %s of memory%s",
- count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct lcommunity)),
- VTY_NEWLINE);
-
- if ((count = mtype_stats_alloc (MTYPE_CLUSTER)))
- vty_out (vty, "%ld Cluster lists, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct cluster_list)),
- VTY_NEWLINE);
-
- /* Peer related usage */
- count = mtype_stats_alloc (MTYPE_BGP_PEER);
- vty_out (vty, "%ld peers, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct peer)),
- VTY_NEWLINE);
-
- if ((count = mtype_stats_alloc (MTYPE_PEER_GROUP)))
- vty_out (vty, "%ld peer groups, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct peer_group)),
- VTY_NEWLINE);
-
- /* Other */
- if ((count = mtype_stats_alloc (MTYPE_HASH)))
- vty_out (vty, "%ld hash tables, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct hash)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_HASH_BACKET)))
- vty_out (vty, "%ld hash buckets, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (struct hash_backet)),
- VTY_NEWLINE);
- if ((count = mtype_stats_alloc (MTYPE_BGP_REGEXP)))
- vty_out (vty, "%ld compiled regexes, using %s of memory%s", count,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- count * sizeof (regex_t)),
- VTY_NEWLINE);
- return CMD_SUCCESS;
+ char memstrbuf[MTYPE_MEMSTR_LEN];
+ unsigned long count;
+
+ /* RIB related usage stats */
+ count = mtype_stats_alloc(MTYPE_BGP_NODE);
+ vty_out(vty, "%ld RIB nodes, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_node)),
+ VTY_NEWLINE);
+
+ count = mtype_stats_alloc(MTYPE_BGP_ROUTE);
+ vty_out(vty, "%ld BGP routes, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_info)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_BGP_ROUTE_EXTRA)))
+ vty_out(vty, "%ld BGP route ancillaries, using %s of memory%s",
+ count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_info_extra)),
+ VTY_NEWLINE);
+
+ if ((count = mtype_stats_alloc(MTYPE_BGP_STATIC)))
+ vty_out(vty, "%ld Static routes, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_static)),
+ VTY_NEWLINE);
+
+ if ((count = mtype_stats_alloc(MTYPE_BGP_PACKET)))
+ vty_out(vty, "%ld Packets, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bpacket)),
+ VTY_NEWLINE);
+
+ /* Adj-In/Out */
+ if ((count = mtype_stats_alloc(MTYPE_BGP_ADJ_IN)))
+ vty_out(vty, "%ld Adj-In entries, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_adj_in)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_BGP_ADJ_OUT)))
+ vty_out(vty, "%ld Adj-Out entries, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_adj_out)),
+ VTY_NEWLINE);
+
+ if ((count = mtype_stats_alloc(MTYPE_BGP_NEXTHOP_CACHE)))
+ vty_out(vty, "%ld Nexthop cache entries, using %s of memory%s",
+ count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_nexthop_cache)),
+ VTY_NEWLINE);
+
+ if ((count = mtype_stats_alloc(MTYPE_BGP_DAMP_INFO)))
+ vty_out(vty, "%ld Dampening entries, using %s of memory%s",
+ count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct bgp_damp_info)),
+ VTY_NEWLINE);
+
+ /* Attributes */
+ count = attr_count();
+ vty_out(vty, "%ld BGP attributes, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct attr)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_ATTR_EXTRA)))
+ vty_out(vty, "%ld BGP extra attributes, using %s of memory%s",
+ count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct attr_extra)),
+ VTY_NEWLINE);
+
+ if ((count = attr_unknown_count()))
+ vty_out(vty, "%ld unknown attributes%s", count, VTY_NEWLINE);
+
+ /* AS_PATH attributes */
+ count = aspath_count();
+ vty_out(vty, "%ld BGP AS-PATH entries, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct aspath)),
+ VTY_NEWLINE);
+
+ count = mtype_stats_alloc(MTYPE_AS_SEG);
+ vty_out(vty, "%ld BGP AS-PATH segments, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct assegment)),
+ VTY_NEWLINE);
+
+ /* Other attributes */
+ if ((count = community_count()))
+ vty_out(vty, "%ld BGP community entries, using %s of memory%s",
+ count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct community)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_ECOMMUNITY)))
+ vty_out(vty, "%ld BGP community entries, using %s of memory%s",
+ count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct ecommunity)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_LCOMMUNITY)))
+ vty_out(vty,
+ "%ld BGP large-community entries, using %s of memory%s",
+ count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct lcommunity)),
+ VTY_NEWLINE);
+
+ if ((count = mtype_stats_alloc(MTYPE_CLUSTER)))
+ vty_out(vty, "%ld Cluster lists, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct cluster_list)),
+ VTY_NEWLINE);
+
+ /* Peer related usage */
+ count = mtype_stats_alloc(MTYPE_BGP_PEER);
+ vty_out(vty, "%ld peers, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct peer)),
+ VTY_NEWLINE);
+
+ if ((count = mtype_stats_alloc(MTYPE_PEER_GROUP)))
+ vty_out(vty, "%ld peer groups, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct peer_group)),
+ VTY_NEWLINE);
+
+ /* Other */
+ if ((count = mtype_stats_alloc(MTYPE_HASH)))
+ vty_out(vty, "%ld hash tables, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct hash)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_HASH_BACKET)))
+ vty_out(vty, "%ld hash buckets, using %s of memory%s", count,
+ mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(struct hash_backet)),
+ VTY_NEWLINE);
+ if ((count = mtype_stats_alloc(MTYPE_BGP_REGEXP)))
+ vty_out(vty, "%ld compiled regexes, using %s of memory%s",
+ count, mtype_memstr(memstrbuf, sizeof(memstrbuf),
+ count * sizeof(regex_t)),
+ VTY_NEWLINE);
+ return CMD_SUCCESS;
}
/* Show BGP peer's summary information. */
-static int
-bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi,
- u_char use_json, json_object *json)
-{
- struct peer *peer;
- struct listnode *node, *nnode;
- unsigned int count = 0, dn_count = 0;
- char timebuf[BGP_UPTIME_LEN], dn_flag[2];
- char neighbor_buf[VTY_BUFSIZ];
- int neighbor_col_default_width = 16;
- int len;
- int max_neighbor_width = 0;
- json_object *json_peer = NULL;
- json_object *json_peers = NULL;
-
- if (use_json)
- {
- if (json == NULL)
- json = json_object_new_object();
-
- json_peers = json_object_new_object();
- }
- else
- {
- /* Loop over all neighbors that will be displayed to determine how many
- * characters are needed for the Neighbor column
- */
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
- continue;
-
- if (peer->afc[afi][safi])
- {
- memset(dn_flag, '\0', sizeof(dn_flag));
- if (peer_dynamic_neighbor(peer))
- dn_flag[0] = '*';
-
- if (peer->hostname && bgp_flag_check(bgp, BGP_FLAG_SHOW_HOSTNAME))
- sprintf(neighbor_buf, "%s%s(%s) ", dn_flag, peer->hostname, peer->host);
- else
- sprintf(neighbor_buf, "%s%s ", dn_flag, peer->host);
+static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi,
+ u_char use_json, json_object *json)
+{
+ struct peer *peer;
+ struct listnode *node, *nnode;
+ unsigned int count = 0, dn_count = 0;
+ char timebuf[BGP_UPTIME_LEN], dn_flag[2];
+ char neighbor_buf[VTY_BUFSIZ];
+ int neighbor_col_default_width = 16;
+ int len;
+ int max_neighbor_width = 0;
+ json_object *json_peer = NULL;
+ json_object *json_peers = NULL;
+
+ if (use_json) {
+ if (json == NULL)
+ json = json_object_new_object();
+
+ json_peers = json_object_new_object();
+ } else {
+ /* Loop over all neighbors that will be displayed to determine
+ * how many
+ * characters are needed for the Neighbor column
+ */
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
+ continue;
+
+ if (peer->afc[afi][safi]) {
+ memset(dn_flag, '\0', sizeof(dn_flag));
+ if (peer_dynamic_neighbor(peer))
+ dn_flag[0] = '*';
+
+ if (peer->hostname
+ && bgp_flag_check(bgp,
+ BGP_FLAG_SHOW_HOSTNAME))
+ sprintf(neighbor_buf, "%s%s(%s) ",
+ dn_flag, peer->hostname,
+ peer->host);
+ else
+ sprintf(neighbor_buf, "%s%s ", dn_flag,
+ peer->host);
+
+ len = strlen(neighbor_buf);
+
+ if (len > max_neighbor_width)
+ max_neighbor_width = len;
+ }
+ }
- len = strlen(neighbor_buf);
+ /* Originally we displayed the Neighbor column as 16
+ * characters wide so make that the default
+ */
+ if (max_neighbor_width < neighbor_col_default_width)
+ max_neighbor_width = neighbor_col_default_width;
+ }
- if (len > max_neighbor_width)
- max_neighbor_width = len;
- }
- }
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
+ continue;
+
+ if (peer->afc[afi][safi]) {
+ if (!count) {
+ unsigned long ents;
+ char memstrbuf[MTYPE_MEMSTR_LEN];
+ int vrf_id_ui;
+
+ vrf_id_ui = (bgp->vrf_id == VRF_UNKNOWN)
+ ? -1
+ : bgp->vrf_id;
+
+ /* Usage summary and header */
+ if (use_json) {
+ json_object_string_add(
+ json, "routerId",
+ inet_ntoa(bgp->router_id));
+ json_object_int_add(json, "as",
+ bgp->as);
+ json_object_int_add(json, "vrfId",
+ vrf_id_ui);
+ json_object_string_add(
+ json, "vrfName",
+ (bgp->inst_type
+ == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name);
+ } else {
+ vty_out(vty,
+ "BGP router identifier %s, local AS number %u vrf-id %d",
+ inet_ntoa(bgp->router_id),
+ bgp->as, vrf_id_ui);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ if (bgp_update_delay_configured(bgp)) {
+ if (use_json) {
+ json_object_int_add(
+ json,
+ "updateDelayLimit",
+ bgp->v_update_delay);
+
+ if (bgp->v_update_delay
+ != bgp->v_establish_wait)
+ json_object_int_add(
+ json,
+ "updateDelayEstablishWait",
+ bgp->v_establish_wait);
+
+ if (bgp_update_delay_active(
+ bgp)) {
+ json_object_string_add(
+ json,
+ "updateDelayFirstNeighbor",
+ bgp->update_delay_begin_time);
+ json_object_boolean_true_add(
+ json,
+ "updateDelayInProgress");
+ } else {
+ if (bgp->update_delay_over) {
+ json_object_string_add(
+ json,
+ "updateDelayFirstNeighbor",
+ bgp->update_delay_begin_time);
+ json_object_string_add(
+ json,
+ "updateDelayBestpathResumed",
+ bgp->update_delay_end_time);
+ json_object_string_add(
+ json,
+ "updateDelayZebraUpdateResume",
+ bgp->update_delay_zebra_resume_time);
+ json_object_string_add(
+ json,
+ "updateDelayPeerUpdateResume",
+ bgp->update_delay_peers_resume_time);
+ }
+ }
+ } else {
+ vty_out(vty,
+ "Read-only mode update-delay limit: %d seconds%s",
+ bgp->v_update_delay,
+ VTY_NEWLINE);
+ if (bgp->v_update_delay
+ != bgp->v_establish_wait)
+ vty_out(vty,
+ " Establish wait: %d seconds%s",
+ bgp->v_establish_wait,
+ VTY_NEWLINE);
+
+ if (bgp_update_delay_active(
+ bgp)) {
+ vty_out(vty,
+ " First neighbor established: %s%s",
+ bgp->update_delay_begin_time,
+ VTY_NEWLINE);
+ vty_out(vty,
+ " Delay in progress%s",
+ VTY_NEWLINE);
+ } else {
+ if (bgp->update_delay_over) {
+ vty_out(vty,
+ " First neighbor established: %s%s",
+ bgp->update_delay_begin_time,
+ VTY_NEWLINE);
+ vty_out(vty,
+ " Best-paths resumed: %s%s",
+ bgp->update_delay_end_time,
+ VTY_NEWLINE);
+ vty_out(vty,
+ " zebra update resumed: %s%s",
+ bgp->update_delay_zebra_resume_time,
+ VTY_NEWLINE);
+ vty_out(vty,
+ " peers update resumed: %s%s",
+ bgp->update_delay_peers_resume_time,
+ VTY_NEWLINE);
+ }
+ }
+ }
+ }
+
+ if (use_json) {
+ if (bgp_maxmed_onstartup_configured(bgp)
+ && bgp->maxmed_active)
+ json_object_boolean_true_add(
+ json,
+ "maxMedOnStartup");
+ if (bgp->v_maxmed_admin)
+ json_object_boolean_true_add(
+ json,
+ "maxMedAdministrative");
+
+ json_object_int_add(
+ json, "tableVersion",
+ bgp_table_version(
+ bgp->rib[afi][safi]));
+
+ ents = bgp_table_count(
+ bgp->rib[afi][safi]);
+ json_object_int_add(json, "ribCount",
+ ents);
+ json_object_int_add(
+ json, "ribMemory",
+ ents * sizeof(struct bgp_node));
+
+ ents = listcount(bgp->peer);
+ json_object_int_add(json, "peerCount",
+ ents);
+ json_object_int_add(
+ json, "peerMemory",
+ ents * sizeof(struct peer));
+
+ if ((ents = listcount(bgp->group))) {
+ json_object_int_add(
+ json, "peerGroupCount",
+ ents);
+ json_object_int_add(
+ json, "peerGroupMemory",
+ ents * sizeof(struct
+ peer_group));
+ }
+
+ if (CHECK_FLAG(bgp->af_flags[afi][safi],
+ BGP_CONFIG_DAMPENING))
+ json_object_boolean_true_add(
+ json,
+ "dampeningEnabled");
+ } else {
+ if (bgp_maxmed_onstartup_configured(bgp)
+ && bgp->maxmed_active)
+ vty_out(vty,
+ "Max-med on-startup active%s",
+ VTY_NEWLINE);
+ if (bgp->v_maxmed_admin)
+ vty_out(vty,
+ "Max-med administrative active%s",
+ VTY_NEWLINE);
+
+ vty_out(vty,
+ "BGP table version %" PRIu64
+ "%s",
+ bgp_table_version(
+ bgp->rib[afi][safi]),
+ VTY_NEWLINE);
+
+ ents = bgp_table_count(
+ bgp->rib[afi][safi]);
+ vty_out(vty,
+ "RIB entries %ld, using %s of memory%s",
+ ents,
+ mtype_memstr(
+ memstrbuf,
+ sizeof(memstrbuf),
+ ents * sizeof(struct
+ bgp_node)),
+ VTY_NEWLINE);
+
+ /* Peer related usage */
+ ents = listcount(bgp->peer);
+ vty_out(vty,
+ "Peers %ld, using %s of memory%s",
+ ents,
+ mtype_memstr(
+ memstrbuf,
+ sizeof(memstrbuf),
+ ents * sizeof(struct
+ peer)),
+ VTY_NEWLINE);
+
+ if ((ents = listcount(bgp->group)))
+ vty_out(vty,
+ "Peer groups %ld, using %s of memory%s",
+ ents,
+ mtype_memstr(
+ memstrbuf,
+ sizeof(memstrbuf),
+ ents * sizeof(struct
+ peer_group)),
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(bgp->af_flags[afi][safi],
+ BGP_CONFIG_DAMPENING))
+ vty_out(vty,
+ "Dampening enabled.%s",
+ VTY_NEWLINE);
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ /* Subtract 8 here because 'Neighbor' is
+ * 8 characters */
+ vty_out(vty, "Neighbor");
+ vty_out(vty, "%*s",
+ max_neighbor_width - 8, " ");
+ vty_out(vty,
+ "V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd%s",
+ VTY_NEWLINE);
+ }
+ }
+
+ count++;
+
+ if (use_json) {
+ json_peer = json_object_new_object();
+
+ if (peer_dynamic_neighbor(peer))
+ json_object_boolean_true_add(
+ json_peer, "dynamicPeer");
+
+ if (peer->hostname)
+ json_object_string_add(json_peer,
+ "hostname",
+ peer->hostname);
+
+ if (peer->domainname)
+ json_object_string_add(
+ json_peer, "domainname",
+ peer->domainname);
+
+ json_object_int_add(json_peer, "remoteAs",
+ peer->as);
+ json_object_int_add(json_peer, "version", 4);
+ json_object_int_add(
+ json_peer, "msgRcvd",
+ peer->open_in + peer->update_in
+ + peer->keepalive_in
+ + peer->notify_in
+ + peer->refresh_in
+ + peer->dynamic_cap_in);
+ json_object_int_add(
+ json_peer, "msgSent",
+ peer->open_out + peer->update_out
+ + peer->keepalive_out
+ + peer->notify_out
+ + peer->refresh_out
+ + peer->dynamic_cap_out);
+
+ json_object_int_add(json_peer, "tableVersion",
+ peer->version[afi][safi]);
+ json_object_int_add(json_peer, "outq",
+ peer->obuf->count);
+ json_object_int_add(json_peer, "inq", 0);
+ peer_uptime(peer->uptime, timebuf,
+ BGP_UPTIME_LEN, use_json,
+ json_peer);
+ json_object_int_add(json_peer,
+ "prefixReceivedCount",
+ peer->pcount[afi][safi]);
+
+ if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
+ json_object_string_add(json_peer,
+ "state",
+ "Idle (Admin)");
+ else if (CHECK_FLAG(
+ peer->sflags,
+ PEER_STATUS_PREFIX_OVERFLOW))
+ json_object_string_add(json_peer,
+ "state",
+ "Idle (PfxCt)");
+ else
+ json_object_string_add(
+ json_peer, "state",
+ lookup_msg(bgp_status_msg,
+ peer->status, NULL));
+
+ if (peer->conf_if)
+ json_object_string_add(json_peer,
+ "idType",
+ "interface");
+ else if (peer->su.sa.sa_family == AF_INET)
+ json_object_string_add(
+ json_peer, "idType", "ipv4");
+ else if (peer->su.sa.sa_family == AF_INET6)
+ json_object_string_add(
+ json_peer, "idType", "ipv6");
+
+ json_object_object_add(json_peers, peer->host,
+ json_peer);
+ } else {
+ memset(dn_flag, '\0', sizeof(dn_flag));
+ if (peer_dynamic_neighbor(peer)) {
+ dn_count++;
+ dn_flag[0] = '*';
+ }
+
+ if (peer->hostname
+ && bgp_flag_check(bgp,
+ BGP_FLAG_SHOW_HOSTNAME))
+ len = vty_out(vty, "%s%s(%s)", dn_flag,
+ peer->hostname,
+ peer->host);
+ else
+ len = vty_out(vty, "%s%s", dn_flag,
+ peer->host);
+
+ /* pad the neighbor column with spaces */
+ if (len < max_neighbor_width)
+ vty_out(vty, "%*s",
+ max_neighbor_width - len, " ");
+
+ vty_out(vty, "4 %10u %7d %7d %8" PRIu64
+ " %4d %4zd %8s",
+ peer->as,
+ peer->open_in + peer->update_in
+ + peer->keepalive_in
+ + peer->notify_in
+ + peer->refresh_in
+ + peer->dynamic_cap_in,
+ peer->open_out + peer->update_out
+ + peer->keepalive_out
+ + peer->notify_out
+ + peer->refresh_out
+ + peer->dynamic_cap_out,
+ peer->version[afi][safi], 0,
+ peer->obuf->count,
+ peer_uptime(peer->uptime, timebuf,
+ BGP_UPTIME_LEN, 0, NULL));
+
+ if (peer->status == Established)
+ vty_out(vty, " %12ld",
+ peer->pcount[afi][safi]);
+ else {
+ if (CHECK_FLAG(peer->flags,
+ PEER_FLAG_SHUTDOWN))
+ vty_out(vty, " Idle (Admin)");
+ else if (
+ CHECK_FLAG(
+ peer->sflags,
+ PEER_STATUS_PREFIX_OVERFLOW))
+ vty_out(vty, " Idle (PfxCt)");
+ else
+ vty_out(vty, " %12s",
+ lookup_msg(
+ bgp_status_msg,
+ peer->status,
+ NULL));
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ }
+ }
- /* Originally we displayed the Neighbor column as 16
- * characters wide so make that the default
- */
- if (max_neighbor_width < neighbor_col_default_width)
- max_neighbor_width = neighbor_col_default_width;
- }
+ if (use_json) {
+ json_object_object_add(json, "peers", json_peers);
+
+ json_object_int_add(json, "totalPeers", count);
+ json_object_int_add(json, "dynamicPeers", dn_count);
+
+ vty_out(vty, "%s%s", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY),
+ VTY_NEWLINE);
+ json_object_free(json);
+ } else {
+ if (count)
+ vty_out(vty, "%sTotal number of neighbors %d%s",
+ VTY_NEWLINE, count, VTY_NEWLINE);
+ else {
+ if (use_json)
+ vty_out(vty,
+ "{\"error\": {\"message\": \"No %s neighbor configured\"}}%s",
+ afi_safi_print(afi, safi), VTY_NEWLINE);
+ else
+ vty_out(vty, "No %s neighbor is configured%s",
+ afi_safi_print(afi, safi), VTY_NEWLINE);
+ }
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
- continue;
+ if (dn_count && !use_json) {
+ vty_out(vty, "* - dynamic neighbor%s", VTY_NEWLINE);
+ vty_out(vty, "%d dynamic neighbor(s), limit %d%s",
+ dn_count, bgp->dynamic_neighbors_limit,
+ VTY_NEWLINE);
+ }
+ }
- if (peer->afc[afi][safi])
- {
- if (!count)
- {
- unsigned long ents;
- char memstrbuf[MTYPE_MEMSTR_LEN];
- int vrf_id_ui;
-
- vrf_id_ui = (bgp->vrf_id == VRF_UNKNOWN) ? -1 : bgp->vrf_id;
-
- /* Usage summary and header */
- if (use_json)
- {
- json_object_string_add(json, "routerId", inet_ntoa (bgp->router_id));
- json_object_int_add(json, "as", bgp->as);
- json_object_int_add(json, "vrfId", vrf_id_ui);
- json_object_string_add(json, "vrfName",
- (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- ? "Default" : bgp->name);
- }
- else
- {
- vty_out (vty,
- "BGP router identifier %s, local AS number %u vrf-id %d",
- inet_ntoa (bgp->router_id), bgp->as, vrf_id_ui);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- if (bgp_update_delay_configured(bgp))
- {
- if (use_json)
- {
- json_object_int_add(json, "updateDelayLimit", bgp->v_update_delay);
-
- if (bgp->v_update_delay != bgp->v_establish_wait)
- json_object_int_add(json, "updateDelayEstablishWait", bgp->v_establish_wait);
-
- if (bgp_update_delay_active(bgp))
- {
- json_object_string_add(json, "updateDelayFirstNeighbor", bgp->update_delay_begin_time);
- json_object_boolean_true_add(json, "updateDelayInProgress");
- }
- else
- {
- if (bgp->update_delay_over)
- {
- json_object_string_add(json, "updateDelayFirstNeighbor",
- bgp->update_delay_begin_time);
- json_object_string_add(json, "updateDelayBestpathResumed",
- bgp->update_delay_end_time);
- json_object_string_add(json, "updateDelayZebraUpdateResume",
- bgp->update_delay_zebra_resume_time);
- json_object_string_add(json, "updateDelayPeerUpdateResume",
- bgp->update_delay_peers_resume_time);
- }
- }
- }
- else
- {
- vty_out (vty, "Read-only mode update-delay limit: %d seconds%s",
- bgp->v_update_delay, VTY_NEWLINE);
- if (bgp->v_update_delay != bgp->v_establish_wait)
- vty_out (vty, " Establish wait: %d seconds%s",
- bgp->v_establish_wait, VTY_NEWLINE);
-
- if (bgp_update_delay_active(bgp))
- {
- vty_out (vty, " First neighbor established: %s%s",
- bgp->update_delay_begin_time, VTY_NEWLINE);
- vty_out (vty, " Delay in progress%s", VTY_NEWLINE);
- }
- else
- {
- if (bgp->update_delay_over)
- {
- vty_out (vty, " First neighbor established: %s%s",
- bgp->update_delay_begin_time, VTY_NEWLINE);
- vty_out (vty, " Best-paths resumed: %s%s",
- bgp->update_delay_end_time, VTY_NEWLINE);
- vty_out (vty, " zebra update resumed: %s%s",
- bgp->update_delay_zebra_resume_time, VTY_NEWLINE);
- vty_out (vty, " peers update resumed: %s%s",
- bgp->update_delay_peers_resume_time, VTY_NEWLINE);
- }
- }
- }
- }
-
- if (use_json)
- {
- if (bgp_maxmed_onstartup_configured(bgp) && bgp->maxmed_active)
- json_object_boolean_true_add(json, "maxMedOnStartup");
- if (bgp->v_maxmed_admin)
- json_object_boolean_true_add(json, "maxMedAdministrative");
-
- json_object_int_add(json, "tableVersion", bgp_table_version(bgp->rib[afi][safi]));
-
- ents = bgp_table_count (bgp->rib[afi][safi]);
- json_object_int_add(json, "ribCount", ents);
- json_object_int_add(json, "ribMemory", ents * sizeof (struct bgp_node));
-
- ents = listcount (bgp->peer);
- json_object_int_add(json, "peerCount", ents);
- json_object_int_add(json, "peerMemory", ents * sizeof (struct peer));
-
- if ((ents = listcount (bgp->group)))
- {
- json_object_int_add(json, "peerGroupCount", ents);
- json_object_int_add(json, "peerGroupMemory", ents * sizeof (struct peer_group));
- }
-
- if (CHECK_FLAG (bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING))
- json_object_boolean_true_add(json, "dampeningEnabled");
- }
- else
- {
- if (bgp_maxmed_onstartup_configured(bgp) && bgp->maxmed_active)
- vty_out (vty, "Max-med on-startup active%s", VTY_NEWLINE);
- if (bgp->v_maxmed_admin)
- vty_out (vty, "Max-med administrative active%s", VTY_NEWLINE);
-
- vty_out(vty, "BGP table version %" PRIu64 "%s",
- bgp_table_version(bgp->rib[afi][safi]), VTY_NEWLINE);
-
- ents = bgp_table_count (bgp->rib[afi][safi]);
- vty_out (vty, "RIB entries %ld, using %s of memory%s", ents,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- ents * sizeof (struct bgp_node)),
- VTY_NEWLINE);
-
- /* Peer related usage */
- ents = listcount (bgp->peer);
- vty_out (vty, "Peers %ld, using %s of memory%s",
- ents,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- ents * sizeof (struct peer)),
- VTY_NEWLINE);
-
- if ((ents = listcount (bgp->group)))
- vty_out (vty, "Peer groups %ld, using %s of memory%s", ents,
- mtype_memstr (memstrbuf, sizeof (memstrbuf),
- ents * sizeof (struct peer_group)),
- VTY_NEWLINE);
-
- if (CHECK_FLAG (bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING))
- vty_out (vty, "Dampening enabled.%s", VTY_NEWLINE);
- vty_out (vty, "%s", VTY_NEWLINE);
-
- /* Subtract 8 here because 'Neighbor' is 8 characters */
- vty_out (vty, "Neighbor");
- vty_out (vty, "%*s", max_neighbor_width - 8, " ");
- vty_out (vty, "V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd%s", VTY_NEWLINE);
- }
- }
-
- count++;
-
- if (use_json)
- {
- json_peer = json_object_new_object();
-
- if (peer_dynamic_neighbor(peer))
- json_object_boolean_true_add(json_peer, "dynamicPeer");
-
- if (peer->hostname)
- json_object_string_add(json_peer, "hostname", peer->hostname);
-
- if (peer->domainname)
- json_object_string_add(json_peer, "domainname", peer->domainname);
-
- json_object_int_add(json_peer, "remoteAs", peer->as);
- json_object_int_add(json_peer, "version", 4);
- json_object_int_add(json_peer, "msgRcvd",
- peer->open_in + peer->update_in + peer->keepalive_in
- + peer->notify_in + peer->refresh_in
- + peer->dynamic_cap_in);
- json_object_int_add(json_peer, "msgSent",
- peer->open_out + peer->update_out + peer->keepalive_out
- + peer->notify_out + peer->refresh_out
- + peer->dynamic_cap_out);
-
- json_object_int_add(json_peer, "tableVersion", peer->version[afi][safi]);
- json_object_int_add(json_peer, "outq", peer->obuf->count);
- json_object_int_add(json_peer, "inq", 0);
- peer_uptime (peer->uptime, timebuf, BGP_UPTIME_LEN, use_json, json_peer);
- json_object_int_add(json_peer, "prefixReceivedCount", peer->pcount[afi][safi]);
-
- if (CHECK_FLAG (peer->flags, PEER_FLAG_SHUTDOWN))
- json_object_string_add(json_peer, "state", "Idle (Admin)");
- else if (CHECK_FLAG (peer->sflags, PEER_STATUS_PREFIX_OVERFLOW))
- json_object_string_add(json_peer, "state", "Idle (PfxCt)");
- else
- json_object_string_add(json_peer, "state", lookup_msg(bgp_status_msg, peer->status, NULL));
-
- if (peer->conf_if)
- json_object_string_add(json_peer, "idType", "interface");
- else if (peer->su.sa.sa_family == AF_INET)
- json_object_string_add(json_peer, "idType", "ipv4");
- else if (peer->su.sa.sa_family == AF_INET6)
- json_object_string_add(json_peer, "idType", "ipv6");
-
- json_object_object_add(json_peers, peer->host, json_peer);
- }
- else
- {
- memset(dn_flag, '\0', sizeof(dn_flag));
- if (peer_dynamic_neighbor(peer))
- {
- dn_count++;
- dn_flag[0] = '*';
- }
-
- if (peer->hostname && bgp_flag_check(bgp, BGP_FLAG_SHOW_HOSTNAME))
- len = vty_out (vty, "%s%s(%s)", dn_flag, peer->hostname,
- peer->host);
- else
- len = vty_out (vty, "%s%s", dn_flag, peer->host);
-
- /* pad the neighbor column with spaces */
- if (len < max_neighbor_width)
- vty_out (vty, "%*s", max_neighbor_width - len, " ");
-
- vty_out (vty, "4 %10u %7d %7d %8" PRIu64 " %4d %4zd %8s",
- peer->as,
- peer->open_in + peer->update_in + peer->keepalive_in
- + peer->notify_in + peer->refresh_in
- + peer->dynamic_cap_in,
- peer->open_out + peer->update_out + peer->keepalive_out
- + peer->notify_out + peer->refresh_out
- + peer->dynamic_cap_out,
- peer->version[afi][safi],
- 0,
- peer->obuf->count,
- peer_uptime (peer->uptime, timebuf, BGP_UPTIME_LEN, 0, NULL));
-
- if (peer->status == Established)
- vty_out (vty, " %12ld", peer->pcount[afi][safi]);
- else
- {
- if (CHECK_FLAG (peer->flags, PEER_FLAG_SHUTDOWN))
- vty_out (vty, " Idle (Admin)");
- else if (CHECK_FLAG (peer->sflags, PEER_STATUS_PREFIX_OVERFLOW))
- vty_out (vty, " Idle (PfxCt)");
- else
- vty_out (vty, " %12s", lookup_msg(bgp_status_msg, peer->status, NULL));
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- }
-
- if (use_json)
- {
- json_object_object_add(json, "peers", json_peers);
-
- json_object_int_add(json, "totalPeers", count);
- json_object_int_add(json, "dynamicPeers", dn_count);
-
- vty_out (vty, "%s%s", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY), VTY_NEWLINE);
- json_object_free(json);
- }
- else
- {
- if (count)
- vty_out (vty, "%sTotal number of neighbors %d%s", VTY_NEWLINE,
- count, VTY_NEWLINE);
- else
- {
- if (use_json)
- vty_out(vty, "{\"error\": {\"message\": \"No %s neighbor configured\"}}%s",
- afi_safi_print(afi, safi), VTY_NEWLINE);
- else
- vty_out (vty, "No %s neighbor is configured%s",
- afi_safi_print(afi, safi), VTY_NEWLINE);
- }
-
- if (dn_count && ! use_json)
- {
- vty_out(vty, "* - dynamic neighbor%s", VTY_NEWLINE);
- vty_out(vty,
- "%d dynamic neighbor(s), limit %d%s",
- dn_count, bgp->dynamic_neighbors_limit, VTY_NEWLINE);
- }
- }
-
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/*
* Return if we have a peer configured to use this afi/safi
*/
-static int
-bgp_show_summary_afi_safi_peer_exists (struct bgp *bgp, int afi, int safi)
-{
- struct listnode *node;
- struct peer *peer;
-
- for (ALL_LIST_ELEMENTS_RO (bgp->peer, node, peer))
- {
- if (!CHECK_FLAG (peer->flags, PEER_FLAG_CONFIG_NODE))
- continue;
-
- if (peer->afc[afi][safi])
- return 1;
- }
-
- return 0;
-}
-
-static void
-bgp_show_summary_afi_safi (struct vty *vty, struct bgp *bgp, int afi, int safi,
- u_char use_json, json_object *json)
-{
- int is_first = 1;
- int afi_wildcard = (afi == AFI_MAX);
- int safi_wildcard = (safi == SAFI_MAX);
- int is_wildcard = (afi_wildcard || safi_wildcard);
-
- if (use_json && is_wildcard)
- vty_out (vty, "{%s", VTY_NEWLINE);
- if (afi_wildcard)
- afi = 1; /* AFI_IP */
- while (afi < AFI_MAX)
- {
- if (safi_wildcard)
- safi = 1; /* SAFI_UNICAST */
- while (safi < SAFI_MAX)
- {
- if (bgp_show_summary_afi_safi_peer_exists (bgp, afi, safi))
- {
- if (is_wildcard)
- {
- /*
- * So limit output to those afi/safi pairs that
- * actualy have something interesting in them
- */
- if (use_json)
- {
- json = json_object_new_object();
-
- if (! is_first)
- vty_out (vty, ",%s", VTY_NEWLINE);
- else
- is_first = 0;
-
- vty_out(vty, "\"%s\":", afi_safi_json(afi, safi));
- }
- else
- {
- vty_out (vty, "%s%s Summary:%s",
- VTY_NEWLINE, afi_safi_print(afi, safi), VTY_NEWLINE);
- }
- }
- bgp_show_summary (vty, bgp, afi, safi, use_json, json);
- }
- safi++;
- if (safi == SAFI_RESERVED_4 ||
- safi == SAFI_RESERVED_5) /* handle special cases to match zebra.h */
- safi++;
- if (! safi_wildcard)
- safi = SAFI_MAX;
- }
- afi++;
- if (! afi_wildcard ||
- afi == AFI_L2VPN) /* special case, not handled yet */
- afi = AFI_MAX;
- }
-
- if (use_json && is_wildcard)
- vty_out (vty, "}%s", VTY_NEWLINE);
-
-}
-
-static void
-bgp_show_all_instances_summary_vty (struct vty *vty, afi_t afi, safi_t safi,
- u_char use_json)
-{
- struct listnode *node, *nnode;
- struct bgp *bgp;
- json_object *json = NULL;
- int is_first = 1;
-
- if (use_json)
- vty_out (vty, "{%s", VTY_NEWLINE);
-
- for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
- {
- if (use_json)
- {
- json = json_object_new_object();
-
- if (! is_first)
- vty_out (vty, ",%s", VTY_NEWLINE);
- else
- is_first = 0;
-
- vty_out(vty, "\"%s\":", (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- ? "Default" : bgp->name);
- }
- else
- {
- vty_out (vty, "%sInstance %s:%s",
- VTY_NEWLINE,
- (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- ? "Default" : bgp->name, VTY_NEWLINE);
- }
- bgp_show_summary_afi_safi (vty, bgp, afi, safi, use_json, json);
- }
-
- if (use_json)
- vty_out (vty, "}%s", VTY_NEWLINE);
-
-}
-
-static int
-bgp_show_summary_vty (struct vty *vty, const char *name,
- afi_t afi, safi_t safi, u_char use_json)
-{
- struct bgp *bgp;
-
- if (name)
- {
- if (strmatch(name, "all"))
- {
- bgp_show_all_instances_summary_vty (vty, afi, safi, use_json);
- return CMD_SUCCESS;
- }
- else
- {
- bgp = bgp_lookup_by_name (name);
-
- if (! bgp)
- {
- if (use_json)
- vty_out (vty, "{}%s", VTY_NEWLINE);
- else
- vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- bgp_show_summary_afi_safi (vty, bgp, afi, safi, use_json, NULL);
- return CMD_SUCCESS;
- }
- }
-
- bgp = bgp_get_default ();
-
- if (bgp)
- bgp_show_summary_afi_safi (vty, bgp, afi, safi, use_json, NULL);
-
- return CMD_SUCCESS;
+static int bgp_show_summary_afi_safi_peer_exists(struct bgp *bgp, int afi,
+ int safi)
+{
+ struct listnode *node;
+ struct peer *peer;
+
+ for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
+ if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
+ continue;
+
+ if (peer->afc[afi][safi])
+ return 1;
+ }
+
+ return 0;
+}
+
+static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi,
+ int safi, u_char use_json,
+ json_object *json)
+{
+ int is_first = 1;
+ int afi_wildcard = (afi == AFI_MAX);
+ int safi_wildcard = (safi == SAFI_MAX);
+ int is_wildcard = (afi_wildcard || safi_wildcard);
+
+ if (use_json && is_wildcard)
+ vty_out(vty, "{%s", VTY_NEWLINE);
+ if (afi_wildcard)
+ afi = 1; /* AFI_IP */
+ while (afi < AFI_MAX) {
+ if (safi_wildcard)
+ safi = 1; /* SAFI_UNICAST */
+ while (safi < SAFI_MAX) {
+ if (bgp_show_summary_afi_safi_peer_exists(bgp, afi,
+ safi)) {
+ if (is_wildcard) {
+ /*
+ * So limit output to those afi/safi
+ * pairs that
+ * actualy have something interesting in
+ * them
+ */
+ if (use_json) {
+ json = json_object_new_object();
+
+ if (!is_first)
+ vty_out(vty, ",%s",
+ VTY_NEWLINE);
+ else
+ is_first = 0;
+
+ vty_out(vty, "\"%s\":",
+ afi_safi_json(afi,
+ safi));
+ } else {
+ vty_out(vty, "%s%s Summary:%s",
+ VTY_NEWLINE,
+ afi_safi_print(afi,
+ safi),
+ VTY_NEWLINE);
+ }
+ }
+ bgp_show_summary(vty, bgp, afi, safi, use_json,
+ json);
+ }
+ safi++;
+ if (safi == SAFI_RESERVED_4
+ || safi
+ == SAFI_RESERVED_5) /* handle special
+ cases to match
+ zebra.h */
+ safi++;
+ if (!safi_wildcard)
+ safi = SAFI_MAX;
+ }
+ afi++;
+ if (!afi_wildcard
+ || afi == AFI_L2VPN) /* special case, not handled yet */
+ afi = AFI_MAX;
+ }
+
+ if (use_json && is_wildcard)
+ vty_out(vty, "}%s", VTY_NEWLINE);
+}
+
+static void bgp_show_all_instances_summary_vty(struct vty *vty, afi_t afi,
+ safi_t safi, u_char use_json)
+{
+ struct listnode *node, *nnode;
+ struct bgp *bgp;
+ json_object *json = NULL;
+ int is_first = 1;
+
+ if (use_json)
+ vty_out(vty, "{%s", VTY_NEWLINE);
+
+ for (ALL_LIST_ELEMENTS(bm->bgp, node, nnode, bgp)) {
+ if (use_json) {
+ json = json_object_new_object();
+
+ if (!is_first)
+ vty_out(vty, ",%s", VTY_NEWLINE);
+ else
+ is_first = 0;
+
+ vty_out(vty, "\"%s\":",
+ (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name);
+ } else {
+ vty_out(vty, "%sInstance %s:%s", VTY_NEWLINE,
+ (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name,
+ VTY_NEWLINE);
+ }
+ bgp_show_summary_afi_safi(vty, bgp, afi, safi, use_json, json);
+ }
+
+ if (use_json)
+ vty_out(vty, "}%s", VTY_NEWLINE);
+}
+
+static int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi,
+ safi_t safi, u_char use_json)
+{
+ struct bgp *bgp;
+
+ if (name) {
+ if (strmatch(name, "all")) {
+ bgp_show_all_instances_summary_vty(vty, afi, safi,
+ use_json);
+ return CMD_SUCCESS;
+ } else {
+ bgp = bgp_lookup_by_name(name);
+
+ if (!bgp) {
+ if (use_json)
+ vty_out(vty, "{}%s", VTY_NEWLINE);
+ else
+ vty_out(vty,
+ "%% No such BGP instance exist%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ bgp_show_summary_afi_safi(vty, bgp, afi, safi, use_json,
+ NULL);
+ return CMD_SUCCESS;
+ }
+ }
+
+ bgp = bgp_get_default();
+
+ if (bgp)
+ bgp_show_summary_afi_safi(vty, bgp, afi, safi, use_json, NULL);
+
+ return CMD_SUCCESS;
}
/* `show [ip] bgp summary' commands. */
@@ -6819,52 +6830,51 @@ DEFUN (show_ip_bgp_summary,
"Summary of BGP neighbor status\n"
JSON_STR)
{
- char *vrf = NULL;
- afi_t afi = AFI_MAX;
- safi_t safi = SAFI_MAX;
-
- int idx = 0;
-
- /* show [ip] bgp */
- if (argv_find (argv, argc, "ip", &idx))
- afi = AFI_IP;
- /* [<view|vrf> WORD] */
- if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
- vrf = argv[++idx]->arg;
- /* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
- if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
- {
- argv_find_and_parse_safi (argv, argc, &idx, &safi);
- }
-
- int uj = use_json (argc, argv);
-
- return bgp_show_summary_vty (vty, vrf, afi, safi, uj);
-}
-
-const char *
-afi_safi_print (afi_t afi, safi_t safi)
-{
- if (afi == AFI_IP && safi == SAFI_UNICAST)
- return "IPv4 Unicast";
- else if (afi == AFI_IP && safi == SAFI_MULTICAST)
- return "IPv4 Multicast";
- else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
- return "IPv4 VPN";
- else if (afi == AFI_IP && safi == SAFI_ENCAP)
- return "IPv4 Encap";
- else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
- return "IPv6 Unicast";
- else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
- return "IPv6 Multicast";
- else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
- return "IPv6 VPN";
- else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
- return "IPv6 Encap";
- else if (afi == AFI_L2VPN && safi == SAFI_EVPN)
- return "L2VPN EVPN";
- else
- return "Unknown";
+ char *vrf = NULL;
+ afi_t afi = AFI_MAX;
+ safi_t safi = SAFI_MAX;
+
+ int idx = 0;
+
+ /* show [ip] bgp */
+ if (argv_find(argv, argc, "ip", &idx))
+ afi = AFI_IP;
+ /* [<view|vrf> WORD] */
+ if (argv_find(argv, argc, "view", &idx)
+ || argv_find(argv, argc, "vrf", &idx))
+ vrf = argv[++idx]->arg;
+ /* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
+ if (argv_find_and_parse_afi(argv, argc, &idx, &afi)) {
+ argv_find_and_parse_safi(argv, argc, &idx, &safi);
+ }
+
+ int uj = use_json(argc, argv);
+
+ return bgp_show_summary_vty(vty, vrf, afi, safi, uj);
+}
+
+const char *afi_safi_print(afi_t afi, safi_t safi)
+{
+ if (afi == AFI_IP && safi == SAFI_UNICAST)
+ return "IPv4 Unicast";
+ else if (afi == AFI_IP && safi == SAFI_MULTICAST)
+ return "IPv4 Multicast";
+ else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
+ return "IPv4 VPN";
+ else if (afi == AFI_IP && safi == SAFI_ENCAP)
+ return "IPv4 Encap";
+ else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
+ return "IPv6 Unicast";
+ else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
+ return "IPv6 Multicast";
+ else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
+ return "IPv6 VPN";
+ else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
+ return "IPv6 Encap";
+ else if (afi == AFI_L2VPN && safi == SAFI_EVPN)
+ return "L2VPN EVPN";
+ else
+ return "Unknown";
}
/*
@@ -6873,1881 +6883,2581 @@ afi_safi_print (afi_t afi, safi_t safi)
* to use this function, please ensure you
* are doing this within json output
*/
-const char *
-afi_safi_json (afi_t afi, safi_t safi)
-{
- if (afi == AFI_IP && safi == SAFI_UNICAST)
- return "ipv4Unicast";
- else if (afi == AFI_IP && safi == SAFI_MULTICAST)
- return "ipv4Multicast";
- else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
- return "ipv4Vpn";
- else if (afi == AFI_IP && safi == SAFI_ENCAP)
- return "ipv4Encap";
- else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
- return "ipv6Unicast";
- else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
- return "ipv6Multicast";
- else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
- return "ipv6Vpn";
- else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
- return "ipv6Encap";
- else if (afi == AFI_L2VPN && safi == SAFI_EVPN)
- return "l2VpnEvpn";
- else
- return "Unknown";
+const char *afi_safi_json(afi_t afi, safi_t safi)
+{
+ if (afi == AFI_IP && safi == SAFI_UNICAST)
+ return "ipv4Unicast";
+ else if (afi == AFI_IP && safi == SAFI_MULTICAST)
+ return "ipv4Multicast";
+ else if (afi == AFI_IP && safi == SAFI_MPLS_VPN)
+ return "ipv4Vpn";
+ else if (afi == AFI_IP && safi == SAFI_ENCAP)
+ return "ipv4Encap";
+ else if (afi == AFI_IP6 && safi == SAFI_UNICAST)
+ return "ipv6Unicast";
+ else if (afi == AFI_IP6 && safi == SAFI_MULTICAST)
+ return "ipv6Multicast";
+ else if (afi == AFI_IP6 && safi == SAFI_MPLS_VPN)
+ return "ipv6Vpn";
+ else if (afi == AFI_IP6 && safi == SAFI_ENCAP)
+ return "ipv6Encap";
+ else if (afi == AFI_L2VPN && safi == SAFI_EVPN)
+ return "l2VpnEvpn";
+ else
+ return "Unknown";
}
/* Show BGP peer's information. */
-enum show_type
+enum show_type { show_all, show_peer };
+
+static void bgp_show_peer_afi_orf_cap(struct vty *vty, struct peer *p,
+ afi_t afi, safi_t safi,
+ u_int16_t adv_smcap, u_int16_t adv_rmcap,
+ u_int16_t rcv_smcap, u_int16_t rcv_rmcap,
+ u_char use_json, json_object *json_pref)
+{
+ /* Send-Mode */
+ if (CHECK_FLAG(p->af_cap[afi][safi], adv_smcap)
+ || CHECK_FLAG(p->af_cap[afi][safi], rcv_smcap)) {
+ if (use_json) {
+ if (CHECK_FLAG(p->af_cap[afi][safi], adv_smcap)
+ && CHECK_FLAG(p->af_cap[afi][safi], rcv_smcap))
+ json_object_string_add(json_pref, "sendMode",
+ "advertisedAndReceived");
+ else if (CHECK_FLAG(p->af_cap[afi][safi], adv_smcap))
+ json_object_string_add(json_pref, "sendMode",
+ "advertised");
+ else if (CHECK_FLAG(p->af_cap[afi][safi], rcv_smcap))
+ json_object_string_add(json_pref, "sendMode",
+ "received");
+ } else {
+ vty_out(vty, " Send-mode: ");
+ if (CHECK_FLAG(p->af_cap[afi][safi], adv_smcap))
+ vty_out(vty, "advertised");
+ if (CHECK_FLAG(p->af_cap[afi][safi], rcv_smcap))
+ vty_out(vty, "%sreceived",
+ CHECK_FLAG(p->af_cap[afi][safi],
+ adv_smcap)
+ ? ", "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ }
+
+ /* Receive-Mode */
+ if (CHECK_FLAG(p->af_cap[afi][safi], adv_rmcap)
+ || CHECK_FLAG(p->af_cap[afi][safi], rcv_rmcap)) {
+ if (use_json) {
+ if (CHECK_FLAG(p->af_cap[afi][safi], adv_rmcap)
+ && CHECK_FLAG(p->af_cap[afi][safi], rcv_rmcap))
+ json_object_string_add(json_pref, "recvMode",
+ "advertisedAndReceived");
+ else if (CHECK_FLAG(p->af_cap[afi][safi], adv_rmcap))
+ json_object_string_add(json_pref, "recvMode",
+ "advertised");
+ else if (CHECK_FLAG(p->af_cap[afi][safi], rcv_rmcap))
+ json_object_string_add(json_pref, "recvMode",
+ "received");
+ } else {
+ vty_out(vty, " Receive-mode: ");
+ if (CHECK_FLAG(p->af_cap[afi][safi], adv_rmcap))
+ vty_out(vty, "advertised");
+ if (CHECK_FLAG(p->af_cap[afi][safi], rcv_rmcap))
+ vty_out(vty, "%sreceived",
+ CHECK_FLAG(p->af_cap[afi][safi],
+ adv_rmcap)
+ ? ", "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ }
+}
+
+static void bgp_show_peer_afi(struct vty *vty, struct peer *p, afi_t afi,
+ safi_t safi, u_char use_json,
+ json_object *json_neigh)
+{
+ struct bgp_filter *filter;
+ struct peer_af *paf;
+ char orf_pfx_name[BUFSIZ];
+ int orf_pfx_count;
+ json_object *json_af = NULL;
+ json_object *json_prefA = NULL;
+ json_object *json_prefB = NULL;
+ json_object *json_addr = NULL;
+
+ if (use_json) {
+ json_addr = json_object_new_object();
+ json_af = json_object_new_object();
+ filter = &p->filter[afi][safi];
+
+ if (peer_group_active(p))
+ json_object_string_add(json_addr, "peerGroupMember",
+ p->group->name);
+
+ paf = peer_af_find(p, afi, safi);
+ if (paf && PAF_SUBGRP(paf)) {
+ json_object_int_add(json_addr, "updateGroupId",
+ PAF_UPDGRP(paf)->id);
+ json_object_int_add(json_addr, "subGroupId",
+ PAF_SUBGRP(paf)->id);
+ json_object_int_add(json_addr, "packetQueueLength",
+ bpacket_queue_virtual_length(paf));
+ }
+
+ if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_RCV)) {
+ json_object_int_add(json_af, "orfType",
+ ORF_TYPE_PREFIX);
+ json_prefA = json_object_new_object();
+ bgp_show_peer_afi_orf_cap(vty, p, afi, safi,
+ PEER_CAP_ORF_PREFIX_SM_ADV,
+ PEER_CAP_ORF_PREFIX_RM_ADV,
+ PEER_CAP_ORF_PREFIX_SM_RCV,
+ PEER_CAP_ORF_PREFIX_RM_RCV,
+ use_json, json_prefA);
+ json_object_object_add(json_af, "orfPrefixList",
+ json_prefA);
+ }
+
+ if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV)) {
+ json_object_int_add(json_af, "orfOldType",
+ ORF_TYPE_PREFIX_OLD);
+ json_prefB = json_object_new_object();
+ bgp_show_peer_afi_orf_cap(
+ vty, p, afi, safi, PEER_CAP_ORF_PREFIX_SM_ADV,
+ PEER_CAP_ORF_PREFIX_RM_ADV,
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV, use_json,
+ json_prefB);
+ json_object_object_add(json_af, "orfOldPrefixList",
+ json_prefB);
+ }
+
+ if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
+ json_object_object_add(json_addr, "afDependentCap",
+ json_af);
+ else
+ json_object_free(json_af);
+
+ sprintf(orf_pfx_name, "%s.%d.%d", p->host, afi, safi);
+ orf_pfx_count = prefix_bgp_show_prefix_list(
+ NULL, afi, orf_pfx_name, use_json);
+
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_ORF_PREFIX_SEND)
+ || orf_pfx_count) {
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_ORF_PREFIX_SEND))
+ json_object_boolean_true_add(json_neigh,
+ "orfSent");
+ if (orf_pfx_count)
+ json_object_int_add(json_addr, "orfRecvCounter",
+ orf_pfx_count);
+ }
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_ORF_WAIT_REFRESH))
+ json_object_string_add(
+ json_addr, "orfFirstUpdate",
+ "deferredUntilORFOrRouteRefreshRecvd");
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REFLECTOR_CLIENT))
+ json_object_boolean_true_add(json_addr,
+ "routeReflectorClient");
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_RSERVER_CLIENT))
+ json_object_boolean_true_add(json_addr,
+ "routeServerClient");
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
+ json_object_boolean_true_add(json_addr,
+ "inboundSoftConfigPermit");
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
+ json_object_boolean_true_add(
+ json_addr,
+ "privateAsNumsAllReplacedInUpdatesToNbr");
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
+ json_object_boolean_true_add(
+ json_addr,
+ "privateAsNumsReplacedInUpdatesToNbr");
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
+ json_object_boolean_true_add(
+ json_addr,
+ "privateAsNumsAllRemovedInUpdatesToNbr");
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS))
+ json_object_boolean_true_add(
+ json_addr,
+ "privateAsNumsRemovedInUpdatesToNbr");
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_ALL_PATHS))
+ json_object_boolean_true_add(json_addr,
+ "addpathTxAllPaths");
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
+ json_object_boolean_true_add(json_addr,
+ "addpathTxBestpathPerAS");
+
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_AS_OVERRIDE))
+ json_object_string_add(json_addr,
+ "overrideASNsInOutboundUpdates",
+ "ifAspathEqualRemoteAs");
+
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF)
+ || CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_FORCE_NEXTHOP_SELF))
+ json_object_boolean_true_add(json_addr,
+ "routerAlwaysNextHop");
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_AS_PATH_UNCHANGED))
+ json_object_boolean_true_add(
+ json_addr, "unchangedAsPathPropogatedToNbr");
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_NEXTHOP_UNCHANGED))
+ json_object_boolean_true_add(
+ json_addr, "unchangedNextHopPropogatedToNbr");
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
+ json_object_boolean_true_add(
+ json_addr, "unchangedMedPropogatedToNbr");
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
+ || CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY)) {
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_COMMUNITY)
+ && CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY))
+ json_object_string_add(json_addr,
+ "commAttriSentToNbr",
+ "extendedAndStandard");
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY))
+ json_object_string_add(json_addr,
+ "commAttriSentToNbr",
+ "extended");
+ else
+ json_object_string_add(json_addr,
+ "commAttriSentToNbr",
+ "standard");
+ }
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_DEFAULT_ORIGINATE)) {
+ if (p->default_rmap[afi][safi].name)
+ json_object_string_add(
+ json_addr, "defaultRouteMap",
+ p->default_rmap[afi][safi].name);
+
+ if (paf && PAF_SUBGRP(paf)
+ && CHECK_FLAG(PAF_SUBGRP(paf)->sflags,
+ SUBGRP_STATUS_DEFAULT_ORIGINATE))
+ json_object_boolean_true_add(json_addr,
+ "defaultSent");
+ else
+ json_object_boolean_true_add(json_addr,
+ "defaultNotSent");
+ }
+
+ if (filter->plist[FILTER_IN].name
+ || filter->dlist[FILTER_IN].name
+ || filter->aslist[FILTER_IN].name
+ || filter->map[RMAP_IN].name)
+ json_object_boolean_true_add(json_addr,
+ "inboundPathPolicyConfig");
+ if (filter->plist[FILTER_OUT].name
+ || filter->dlist[FILTER_OUT].name
+ || filter->aslist[FILTER_OUT].name
+ || filter->map[RMAP_OUT].name || filter->usmap.name)
+ json_object_boolean_true_add(
+ json_addr, "outboundPathPolicyConfig");
+
+ /* prefix-list */
+ if (filter->plist[FILTER_IN].name)
+ json_object_string_add(json_addr,
+ "incomingUpdatePrefixFilterList",
+ filter->plist[FILTER_IN].name);
+ if (filter->plist[FILTER_OUT].name)
+ json_object_string_add(json_addr,
+ "outgoingUpdatePrefixFilterList",
+ filter->plist[FILTER_OUT].name);
+
+ /* distribute-list */
+ if (filter->dlist[FILTER_IN].name)
+ json_object_string_add(
+ json_addr, "incomingUpdateNetworkFilterList",
+ filter->dlist[FILTER_IN].name);
+ if (filter->dlist[FILTER_OUT].name)
+ json_object_string_add(
+ json_addr, "outgoingUpdateNetworkFilterList",
+ filter->dlist[FILTER_OUT].name);
+
+ /* filter-list. */
+ if (filter->aslist[FILTER_IN].name)
+ json_object_string_add(json_addr,
+ "incomingUpdateAsPathFilterList",
+ filter->aslist[FILTER_IN].name);
+ if (filter->aslist[FILTER_OUT].name)
+ json_object_string_add(json_addr,
+ "outgoingUpdateAsPathFilterList",
+ filter->aslist[FILTER_OUT].name);
+
+ /* route-map. */
+ if (filter->map[RMAP_IN].name)
+ json_object_string_add(
+ json_addr, "routeMapForIncomingAdvertisements",
+ filter->map[RMAP_IN].name);
+ if (filter->map[RMAP_OUT].name)
+ json_object_string_add(
+ json_addr, "routeMapForOutgoingAdvertisements",
+ filter->map[RMAP_OUT].name);
+
+ /* unsuppress-map */
+ if (filter->usmap.name)
+ json_object_string_add(json_addr,
+ "selectiveUnsuppressRouteMap",
+ filter->usmap.name);
+
+ /* Receive prefix count */
+ json_object_int_add(json_addr, "acceptedPrefixCounter",
+ p->pcount[afi][safi]);
+
+ /* Maximum prefix */
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX)) {
+ json_object_int_add(json_addr, "prefixAllowedMax",
+ p->pmax[afi][safi]);
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_MAX_PREFIX_WARNING))
+ json_object_boolean_true_add(
+ json_addr, "prefixAllowedMaxWarning");
+ json_object_int_add(json_addr,
+ "prefixAllowedWarningThresh",
+ p->pmax_threshold[afi][safi]);
+ if (p->pmax_restart[afi][safi])
+ json_object_int_add(
+ json_addr,
+ "prefixAllowedRestartIntervalMsecs",
+ p->pmax_restart[afi][safi] * 60000);
+ }
+ json_object_object_add(json_neigh, afi_safi_print(afi, safi),
+ json_addr);
+
+ } else {
+ filter = &p->filter[afi][safi];
+
+ vty_out(vty, " For address family: %s%s",
+ afi_safi_print(afi, safi), VTY_NEWLINE);
+
+ if (peer_group_active(p))
+ vty_out(vty, " %s peer-group member%s", p->group->name,
+ VTY_NEWLINE);
+
+ paf = peer_af_find(p, afi, safi);
+ if (paf && PAF_SUBGRP(paf)) {
+ vty_out(vty, " Update group %" PRIu64
+ ", subgroup %" PRIu64 "%s",
+ PAF_UPDGRP(paf)->id, PAF_SUBGRP(paf)->id,
+ VTY_NEWLINE);
+ vty_out(vty, " Packet Queue length %d%s",
+ bpacket_queue_virtual_length(paf), VTY_NEWLINE);
+ } else {
+ vty_out(vty, " Not part of any update group%s",
+ VTY_NEWLINE);
+ }
+ if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
+ vty_out(vty, " AF-dependant capabilities:%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_RCV)) {
+ vty_out(vty,
+ " Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
+ ORF_TYPE_PREFIX, VTY_NEWLINE);
+ bgp_show_peer_afi_orf_cap(
+ vty, p, afi, safi, PEER_CAP_ORF_PREFIX_SM_ADV,
+ PEER_CAP_ORF_PREFIX_RM_ADV,
+ PEER_CAP_ORF_PREFIX_SM_RCV,
+ PEER_CAP_ORF_PREFIX_RM_RCV, use_json, NULL);
+ }
+ if (CHECK_FLAG(p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV)
+ || CHECK_FLAG(p->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV)) {
+ vty_out(vty,
+ " Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
+ ORF_TYPE_PREFIX_OLD, VTY_NEWLINE);
+ bgp_show_peer_afi_orf_cap(
+ vty, p, afi, safi, PEER_CAP_ORF_PREFIX_SM_ADV,
+ PEER_CAP_ORF_PREFIX_RM_ADV,
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV, use_json, NULL);
+ }
+
+ sprintf(orf_pfx_name, "%s.%d.%d", p->host, afi, safi);
+ orf_pfx_count = prefix_bgp_show_prefix_list(
+ NULL, afi, orf_pfx_name, use_json);
+
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_ORF_PREFIX_SEND)
+ || orf_pfx_count) {
+ vty_out(vty, " Outbound Route Filter (ORF):");
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_ORF_PREFIX_SEND))
+ vty_out(vty, " sent;");
+ if (orf_pfx_count)
+ vty_out(vty, " received (%d entries)",
+ orf_pfx_count);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_ORF_WAIT_REFRESH))
+ vty_out(vty,
+ " First update is deferred until ORF or ROUTE-REFRESH is received%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REFLECTOR_CLIENT))
+ vty_out(vty, " Route-Reflector Client%s", VTY_NEWLINE);
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_RSERVER_CLIENT))
+ vty_out(vty, " Route-Server Client%s", VTY_NEWLINE);
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
+ vty_out(vty, " Inbound soft reconfiguration allowed%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
+ vty_out(vty,
+ " Private AS numbers (all) replaced in updates to this neighbor%s",
+ VTY_NEWLINE);
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
+ vty_out(vty,
+ " Private AS numbers replaced in updates to this neighbor%s",
+ VTY_NEWLINE);
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
+ vty_out(vty,
+ " Private AS numbers (all) removed in updates to this neighbor%s",
+ VTY_NEWLINE);
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_REMOVE_PRIVATE_AS))
+ vty_out(vty,
+ " Private AS numbers removed in updates to this neighbor%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_ALL_PATHS))
+ vty_out(vty, " Advertise all paths via addpath%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
+ vty_out(vty,
+ " Advertise bestpath per AS via addpath%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_AS_OVERRIDE))
+ vty_out(vty,
+ " Override ASNs in outbound updates if aspath equals remote-as%s",
+ VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF)
+ || CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_FORCE_NEXTHOP_SELF))
+ vty_out(vty, " NEXT_HOP is always this router%s",
+ VTY_NEWLINE);
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_AS_PATH_UNCHANGED))
+ vty_out(vty,
+ " AS_PATH is propagated unchanged to this neighbor%s",
+ VTY_NEWLINE);
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_NEXTHOP_UNCHANGED))
+ vty_out(vty,
+ " NEXT_HOP is propagated unchanged to this neighbor%s",
+ VTY_NEWLINE);
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
+ vty_out(vty,
+ " MED is propagated unchanged to this neighbor%s",
+ VTY_NEWLINE);
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
+ || CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY)
+ || CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_LARGE_COMMUNITY)) {
+ vty_out(vty,
+ " Community attribute sent to this neighbor");
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_COMMUNITY)
+ && CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY)
+ && CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_LARGE_COMMUNITY))
+ vty_out(vty, "(all)%s", VTY_NEWLINE);
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_LARGE_COMMUNITY))
+ vty_out(vty, "(large)%s", VTY_NEWLINE);
+ else if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY))
+ vty_out(vty, "(extended)%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "(standard)%s", VTY_NEWLINE);
+ }
+ if (CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_DEFAULT_ORIGINATE)) {
+ vty_out(vty, " Default information originate,");
+
+ if (p->default_rmap[afi][safi].name)
+ vty_out(vty, " default route-map %s%s,",
+ p->default_rmap[afi][safi].map ? "*"
+ : "",
+ p->default_rmap[afi][safi].name);
+ if (paf && PAF_SUBGRP(paf)
+ && CHECK_FLAG(PAF_SUBGRP(paf)->sflags,
+ SUBGRP_STATUS_DEFAULT_ORIGINATE))
+ vty_out(vty, " default sent%s", VTY_NEWLINE);
+ else
+ vty_out(vty, " default not sent%s",
+ VTY_NEWLINE);
+ }
+
+ if (filter->plist[FILTER_IN].name
+ || filter->dlist[FILTER_IN].name
+ || filter->aslist[FILTER_IN].name
+ || filter->map[RMAP_IN].name)
+ vty_out(vty, " Inbound path policy configured%s",
+ VTY_NEWLINE);
+ if (filter->plist[FILTER_OUT].name
+ || filter->dlist[FILTER_OUT].name
+ || filter->aslist[FILTER_OUT].name
+ || filter->map[RMAP_OUT].name || filter->usmap.name)
+ vty_out(vty, " Outbound path policy configured%s",
+ VTY_NEWLINE);
+
+ /* prefix-list */
+ if (filter->plist[FILTER_IN].name)
+ vty_out(vty,
+ " Incoming update prefix filter list is %s%s%s",
+ filter->plist[FILTER_IN].plist ? "*" : "",
+ filter->plist[FILTER_IN].name, VTY_NEWLINE);
+ if (filter->plist[FILTER_OUT].name)
+ vty_out(vty,
+ " Outgoing update prefix filter list is %s%s%s",
+ filter->plist[FILTER_OUT].plist ? "*" : "",
+ filter->plist[FILTER_OUT].name, VTY_NEWLINE);
+
+ /* distribute-list */
+ if (filter->dlist[FILTER_IN].name)
+ vty_out(vty,
+ " Incoming update network filter list is %s%s%s",
+ filter->dlist[FILTER_IN].alist ? "*" : "",
+ filter->dlist[FILTER_IN].name, VTY_NEWLINE);
+ if (filter->dlist[FILTER_OUT].name)
+ vty_out(vty,
+ " Outgoing update network filter list is %s%s%s",
+ filter->dlist[FILTER_OUT].alist ? "*" : "",
+ filter->dlist[FILTER_OUT].name, VTY_NEWLINE);
+
+ /* filter-list. */
+ if (filter->aslist[FILTER_IN].name)
+ vty_out(vty,
+ " Incoming update AS path filter list is %s%s%s",
+ filter->aslist[FILTER_IN].aslist ? "*" : "",
+ filter->aslist[FILTER_IN].name, VTY_NEWLINE);
+ if (filter->aslist[FILTER_OUT].name)
+ vty_out(vty,
+ " Outgoing update AS path filter list is %s%s%s",
+ filter->aslist[FILTER_OUT].aslist ? "*" : "",
+ filter->aslist[FILTER_OUT].name, VTY_NEWLINE);
+
+ /* route-map. */
+ if (filter->map[RMAP_IN].name)
+ vty_out(vty,
+ " Route map for incoming advertisements is %s%s%s",
+ filter->map[RMAP_IN].map ? "*" : "",
+ filter->map[RMAP_IN].name, VTY_NEWLINE);
+ if (filter->map[RMAP_OUT].name)
+ vty_out(vty,
+ " Route map for outgoing advertisements is %s%s%s",
+ filter->map[RMAP_OUT].map ? "*" : "",
+ filter->map[RMAP_OUT].name, VTY_NEWLINE);
+
+ /* unsuppress-map */
+ if (filter->usmap.name)
+ vty_out(vty,
+ " Route map for selective unsuppress is %s%s%s",
+ filter->usmap.map ? "*" : "",
+ filter->usmap.name, VTY_NEWLINE);
+
+ /* Receive prefix count */
+ vty_out(vty, " %ld accepted prefixes%s", p->pcount[afi][safi],
+ VTY_NEWLINE);
+
+ /* Maximum prefix */
+ if (CHECK_FLAG(p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX)) {
+ vty_out(vty, " Maximum prefixes allowed %ld%s%s",
+ p->pmax[afi][safi],
+ CHECK_FLAG(p->af_flags[afi][safi],
+ PEER_FLAG_MAX_PREFIX_WARNING)
+ ? " (warning-only)"
+ : "",
+ VTY_NEWLINE);
+ vty_out(vty, " Threshold for warning message %d%%",
+ p->pmax_threshold[afi][safi]);
+ if (p->pmax_restart[afi][safi])
+ vty_out(vty, ", restart interval %d min",
+ p->pmax_restart[afi][safi]);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+}
+
+static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
+ json_object *json)
{
- show_all,
- show_peer
-};
+ struct bgp *bgp;
+ char buf1[PREFIX2STR_BUFFER], buf[SU_ADDRSTRLEN];
+ char timebuf[BGP_UPTIME_LEN];
+ char dn_flag[2];
+ const char *subcode_str;
+ const char *code_str;
+ afi_t afi;
+ safi_t safi;
+ u_int16_t i;
+ u_char *msg;
+ json_object *json_neigh = NULL;
+ time_t epoch_tbuf;
-static void
-bgp_show_peer_afi_orf_cap (struct vty *vty, struct peer *p, afi_t afi, safi_t safi,
- u_int16_t adv_smcap, u_int16_t adv_rmcap, u_int16_t rcv_smcap,
- u_int16_t rcv_rmcap, u_char use_json, json_object *json_pref)
-{
- /* Send-Mode */
- if (CHECK_FLAG (p->af_cap[afi][safi], adv_smcap)
- || CHECK_FLAG (p->af_cap[afi][safi], rcv_smcap))
- {
- if (use_json)
- {
- if (CHECK_FLAG (p->af_cap[afi][safi], adv_smcap) && CHECK_FLAG (p->af_cap[afi][safi], rcv_smcap))
- json_object_string_add(json_pref, "sendMode", "advertisedAndReceived");
- else if (CHECK_FLAG (p->af_cap[afi][safi], adv_smcap))
- json_object_string_add(json_pref, "sendMode", "advertised");
- else if (CHECK_FLAG (p->af_cap[afi][safi], rcv_smcap))
- json_object_string_add(json_pref, "sendMode", "received");
- }
- else
- {
- vty_out (vty, " Send-mode: ");
- if (CHECK_FLAG (p->af_cap[afi][safi], adv_smcap))
- vty_out (vty, "advertised");
- if (CHECK_FLAG (p->af_cap[afi][safi], rcv_smcap))
- vty_out (vty, "%sreceived",
- CHECK_FLAG (p->af_cap[afi][safi], adv_smcap) ?
- ", " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
-
- /* Receive-Mode */
- if (CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap)
- || CHECK_FLAG (p->af_cap[afi][safi], rcv_rmcap))
- {
- if (use_json)
- {
- if (CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap) && CHECK_FLAG (p->af_cap[afi][safi], rcv_rmcap))
- json_object_string_add(json_pref, "recvMode", "advertisedAndReceived");
- else if (CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap))
- json_object_string_add(json_pref, "recvMode", "advertised");
- else if (CHECK_FLAG (p->af_cap[afi][safi], rcv_rmcap))
- json_object_string_add(json_pref, "recvMode", "received");
- }
- else
- {
- vty_out (vty, " Receive-mode: ");
- if (CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap))
- vty_out (vty, "advertised");
- if (CHECK_FLAG (p->af_cap[afi][safi], rcv_rmcap))
- vty_out (vty, "%sreceived",
- CHECK_FLAG (p->af_cap[afi][safi], adv_rmcap) ?
- ", " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
-}
-
-static void
-bgp_show_peer_afi (struct vty *vty, struct peer *p, afi_t afi, safi_t safi,
- u_char use_json, json_object *json_neigh)
-{
- struct bgp_filter *filter;
- struct peer_af *paf;
- char orf_pfx_name[BUFSIZ];
- int orf_pfx_count;
- json_object *json_af = NULL;
- json_object *json_prefA = NULL;
- json_object *json_prefB = NULL;
- json_object *json_addr = NULL;
-
- if (use_json)
- {
- json_addr = json_object_new_object();
- json_af = json_object_new_object();
- filter = &p->filter[afi][safi];
-
- if (peer_group_active(p))
- json_object_string_add(json_addr, "peerGroupMember", p->group->name);
-
- paf = peer_af_find(p, afi, safi);
- if (paf && PAF_SUBGRP(paf))
- {
- json_object_int_add(json_addr, "updateGroupId", PAF_UPDGRP(paf)->id);
- json_object_int_add(json_addr, "subGroupId", PAF_SUBGRP(paf)->id);
- json_object_int_add(json_addr, "packetQueueLength", bpacket_queue_virtual_length(paf));
- }
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
- {
- json_object_int_add(json_af, "orfType", ORF_TYPE_PREFIX);
- json_prefA = json_object_new_object();
- bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
- PEER_CAP_ORF_PREFIX_SM_ADV,
- PEER_CAP_ORF_PREFIX_RM_ADV,
- PEER_CAP_ORF_PREFIX_SM_RCV,
- PEER_CAP_ORF_PREFIX_RM_RCV, use_json, json_prefA);
- json_object_object_add(json_af, "orfPrefixList", json_prefA);
- }
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
- {
- json_object_int_add(json_af, "orfOldType", ORF_TYPE_PREFIX_OLD);
- json_prefB = json_object_new_object();
- bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
- PEER_CAP_ORF_PREFIX_SM_ADV,
- PEER_CAP_ORF_PREFIX_RM_ADV,
- PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
- PEER_CAP_ORF_PREFIX_RM_OLD_RCV, use_json, json_prefB);
- json_object_object_add(json_af, "orfOldPrefixList", json_prefB);
- }
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
- json_object_object_add(json_addr, "afDependentCap", json_af);
- else
- json_object_free(json_af);
-
- sprintf (orf_pfx_name, "%s.%d.%d", p->host, afi, safi);
- orf_pfx_count = prefix_bgp_show_prefix_list (NULL, afi, orf_pfx_name, use_json);
-
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND)
- || orf_pfx_count)
- {
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND))
- json_object_boolean_true_add(json_neigh, "orfSent");
- if (orf_pfx_count)
- json_object_int_add(json_addr, "orfRecvCounter", orf_pfx_count);
- }
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_WAIT_REFRESH))
- json_object_string_add(json_addr, "orfFirstUpdate", "deferredUntilORFOrRouteRefreshRecvd");
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REFLECTOR_CLIENT))
- json_object_boolean_true_add(json_addr, "routeReflectorClient");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
- json_object_boolean_true_add(json_addr, "routeServerClient");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
- json_object_boolean_true_add(json_addr, "inboundSoftConfigPermit");
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
- json_object_boolean_true_add(json_addr, "privateAsNumsAllReplacedInUpdatesToNbr");
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
- json_object_boolean_true_add(json_addr, "privateAsNumsReplacedInUpdatesToNbr");
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
- json_object_boolean_true_add(json_addr, "privateAsNumsAllRemovedInUpdatesToNbr");
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS))
- json_object_boolean_true_add(json_addr, "privateAsNumsRemovedInUpdatesToNbr");
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_ADDPATH_TX_ALL_PATHS))
- json_object_boolean_true_add(json_addr, "addpathTxAllPaths");
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
- json_object_boolean_true_add(json_addr, "addpathTxBestpathPerAS");
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_AS_OVERRIDE))
- json_object_string_add(json_addr, "overrideASNsInOutboundUpdates", "ifAspathEqualRemoteAs");
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF) ||
- CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_FORCE_NEXTHOP_SELF))
- json_object_boolean_true_add(json_addr, "routerAlwaysNextHop");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED))
- json_object_boolean_true_add(json_addr, "unchangedAsPathPropogatedToNbr");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED))
- json_object_boolean_true_add(json_addr, "unchangedNextHopPropogatedToNbr");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
- json_object_boolean_true_add(json_addr, "unchangedMedPropogatedToNbr");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
- || CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
- {
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
- && CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
- json_object_string_add(json_addr, "commAttriSentToNbr", "extendedAndStandard");
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
- json_object_string_add(json_addr, "commAttriSentToNbr", "extended");
- else
- json_object_string_add(json_addr, "commAttriSentToNbr", "standard");
- }
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE))
- {
- if (p->default_rmap[afi][safi].name)
- json_object_string_add(json_addr, "defaultRouteMap", p->default_rmap[afi][safi].name);
-
- if (paf && PAF_SUBGRP(paf) && CHECK_FLAG(PAF_SUBGRP(paf)->sflags, SUBGRP_STATUS_DEFAULT_ORIGINATE))
- json_object_boolean_true_add(json_addr, "defaultSent");
- else
- json_object_boolean_true_add(json_addr, "defaultNotSent");
- }
-
- if (filter->plist[FILTER_IN].name
- || filter->dlist[FILTER_IN].name
- || filter->aslist[FILTER_IN].name
- || filter->map[RMAP_IN].name)
- json_object_boolean_true_add(json_addr, "inboundPathPolicyConfig");
- if (filter->plist[FILTER_OUT].name
- || filter->dlist[FILTER_OUT].name
- || filter->aslist[FILTER_OUT].name
- || filter->map[RMAP_OUT].name
- || filter->usmap.name)
- json_object_boolean_true_add(json_addr, "outboundPathPolicyConfig");
-
- /* prefix-list */
- if (filter->plist[FILTER_IN].name)
- json_object_string_add(json_addr, "incomingUpdatePrefixFilterList", filter->plist[FILTER_IN].name);
- if (filter->plist[FILTER_OUT].name)
- json_object_string_add(json_addr, "outgoingUpdatePrefixFilterList", filter->plist[FILTER_OUT].name);
-
- /* distribute-list */
- if (filter->dlist[FILTER_IN].name)
- json_object_string_add(json_addr, "incomingUpdateNetworkFilterList", filter->dlist[FILTER_IN].name);
- if (filter->dlist[FILTER_OUT].name)
- json_object_string_add(json_addr, "outgoingUpdateNetworkFilterList", filter->dlist[FILTER_OUT].name);
-
- /* filter-list. */
- if (filter->aslist[FILTER_IN].name)
- json_object_string_add(json_addr, "incomingUpdateAsPathFilterList", filter->aslist[FILTER_IN].name);
- if (filter->aslist[FILTER_OUT].name)
- json_object_string_add(json_addr, "outgoingUpdateAsPathFilterList", filter->aslist[FILTER_OUT].name);
-
- /* route-map. */
- if (filter->map[RMAP_IN].name)
- json_object_string_add(json_addr, "routeMapForIncomingAdvertisements", filter->map[RMAP_IN].name);
- if (filter->map[RMAP_OUT].name)
- json_object_string_add(json_addr, "routeMapForOutgoingAdvertisements", filter->map[RMAP_OUT].name);
-
- /* unsuppress-map */
- if (filter->usmap.name)
- json_object_string_add(json_addr, "selectiveUnsuppressRouteMap", filter->usmap.name);
-
- /* Receive prefix count */
- json_object_int_add(json_addr, "acceptedPrefixCounter", p->pcount[afi][safi]);
-
- /* Maximum prefix */
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX))
- {
- json_object_int_add(json_addr, "prefixAllowedMax", p->pmax[afi][safi]);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_WARNING))
- json_object_boolean_true_add(json_addr, "prefixAllowedMaxWarning");
- json_object_int_add(json_addr, "prefixAllowedWarningThresh", p->pmax_threshold[afi][safi]);
- if (p->pmax_restart[afi][safi])
- json_object_int_add(json_addr, "prefixAllowedRestartIntervalMsecs", p->pmax_restart[afi][safi] * 60000);
- }
- json_object_object_add(json_neigh, afi_safi_print (afi, safi), json_addr);
-
- }
- else
- {
- filter = &p->filter[afi][safi];
-
- vty_out (vty, " For address family: %s%s", afi_safi_print (afi, safi),
- VTY_NEWLINE);
-
- if (peer_group_active(p))
- vty_out (vty, " %s peer-group member%s", p->group->name, VTY_NEWLINE);
-
- paf = peer_af_find(p, afi, safi);
- if (paf && PAF_SUBGRP(paf))
- {
- vty_out (vty, " Update group %" PRIu64 ", subgroup %" PRIu64 "%s",
- PAF_UPDGRP(paf)->id, PAF_SUBGRP(paf)->id, VTY_NEWLINE);
- vty_out (vty, " Packet Queue length %d%s",
- bpacket_queue_virtual_length(paf), VTY_NEWLINE);
- }
- else
- {
- vty_out(vty, " Not part of any update group%s", VTY_NEWLINE);
- }
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
- vty_out (vty, " AF-dependant capabilities:%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
- {
- vty_out (vty, " Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
- ORF_TYPE_PREFIX, VTY_NEWLINE);
- bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
- PEER_CAP_ORF_PREFIX_SM_ADV,
- PEER_CAP_ORF_PREFIX_RM_ADV,
- PEER_CAP_ORF_PREFIX_SM_RCV,
- PEER_CAP_ORF_PREFIX_RM_RCV, use_json, NULL);
- }
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV)
- || CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
- {
- vty_out (vty, " Outbound Route Filter (ORF) type (%d) Prefix-list:%s",
- ORF_TYPE_PREFIX_OLD, VTY_NEWLINE);
- bgp_show_peer_afi_orf_cap (vty, p, afi, safi,
- PEER_CAP_ORF_PREFIX_SM_ADV,
- PEER_CAP_ORF_PREFIX_RM_ADV,
- PEER_CAP_ORF_PREFIX_SM_OLD_RCV,
- PEER_CAP_ORF_PREFIX_RM_OLD_RCV, use_json, NULL);
- }
-
- sprintf (orf_pfx_name, "%s.%d.%d", p->host, afi, safi);
- orf_pfx_count = prefix_bgp_show_prefix_list (NULL, afi, orf_pfx_name, use_json);
-
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND)
- || orf_pfx_count)
- {
- vty_out (vty, " Outbound Route Filter (ORF):");
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_PREFIX_SEND))
- vty_out (vty, " sent;");
- if (orf_pfx_count)
- vty_out (vty, " received (%d entries)", orf_pfx_count);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_ORF_WAIT_REFRESH))
- vty_out (vty, " First update is deferred until ORF or ROUTE-REFRESH is received%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REFLECTOR_CLIENT))
- vty_out (vty, " Route-Reflector Client%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT))
- vty_out (vty, " Route-Server Client%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG))
- vty_out (vty, " Inbound soft reconfiguration allowed%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL_REPLACE))
- vty_out (vty, " Private AS numbers (all) replaced in updates to this neighbor%s", VTY_NEWLINE);
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE))
- vty_out (vty, " Private AS numbers replaced in updates to this neighbor%s", VTY_NEWLINE);
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS_ALL))
- vty_out (vty, " Private AS numbers (all) removed in updates to this neighbor%s", VTY_NEWLINE);
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_REMOVE_PRIVATE_AS))
- vty_out (vty, " Private AS numbers removed in updates to this neighbor%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_ADDPATH_TX_ALL_PATHS))
- vty_out (vty, " Advertise all paths via addpath%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
- vty_out (vty, " Advertise bestpath per AS via addpath%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_AS_OVERRIDE))
- vty_out (vty, " Override ASNs in outbound updates if aspath equals remote-as%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF) ||
- CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_FORCE_NEXTHOP_SELF))
- vty_out (vty, " NEXT_HOP is always this router%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_AS_PATH_UNCHANGED))
- vty_out (vty, " AS_PATH is propagated unchanged to this neighbor%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_UNCHANGED))
- vty_out (vty, " NEXT_HOP is propagated unchanged to this neighbor%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MED_UNCHANGED))
- vty_out (vty, " MED is propagated unchanged to this neighbor%s", VTY_NEWLINE);
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
- || CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY)
- || CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_LARGE_COMMUNITY))
- {
- vty_out (vty, " Community attribute sent to this neighbor");
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_COMMUNITY)
- && CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY)
- && CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_LARGE_COMMUNITY))
- vty_out (vty, "(all)%s", VTY_NEWLINE);
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_LARGE_COMMUNITY))
- vty_out (vty, "(large)%s", VTY_NEWLINE);
- else if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_SEND_EXT_COMMUNITY))
- vty_out (vty, "(extended)%s", VTY_NEWLINE);
- else
- vty_out (vty, "(standard)%s", VTY_NEWLINE);
- }
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_DEFAULT_ORIGINATE))
- {
- vty_out (vty, " Default information originate,");
-
- if (p->default_rmap[afi][safi].name)
- vty_out (vty, " default route-map %s%s,",
- p->default_rmap[afi][safi].map ? "*" : "",
- p->default_rmap[afi][safi].name);
- if (paf && PAF_SUBGRP(paf) && CHECK_FLAG(PAF_SUBGRP(paf)->sflags, SUBGRP_STATUS_DEFAULT_ORIGINATE))
- vty_out (vty, " default sent%s", VTY_NEWLINE);
- else
- vty_out (vty, " default not sent%s", VTY_NEWLINE);
- }
-
- if (filter->plist[FILTER_IN].name
- || filter->dlist[FILTER_IN].name
- || filter->aslist[FILTER_IN].name
- || filter->map[RMAP_IN].name)
- vty_out (vty, " Inbound path policy configured%s", VTY_NEWLINE);
- if (filter->plist[FILTER_OUT].name
- || filter->dlist[FILTER_OUT].name
- || filter->aslist[FILTER_OUT].name
- || filter->map[RMAP_OUT].name
- || filter->usmap.name)
- vty_out (vty, " Outbound path policy configured%s", VTY_NEWLINE);
-
- /* prefix-list */
- if (filter->plist[FILTER_IN].name)
- vty_out (vty, " Incoming update prefix filter list is %s%s%s",
- filter->plist[FILTER_IN].plist ? "*" : "",
- filter->plist[FILTER_IN].name,
- VTY_NEWLINE);
- if (filter->plist[FILTER_OUT].name)
- vty_out (vty, " Outgoing update prefix filter list is %s%s%s",
- filter->plist[FILTER_OUT].plist ? "*" : "",
- filter->plist[FILTER_OUT].name,
- VTY_NEWLINE);
-
- /* distribute-list */
- if (filter->dlist[FILTER_IN].name)
- vty_out (vty, " Incoming update network filter list is %s%s%s",
- filter->dlist[FILTER_IN].alist ? "*" : "",
- filter->dlist[FILTER_IN].name,
- VTY_NEWLINE);
- if (filter->dlist[FILTER_OUT].name)
- vty_out (vty, " Outgoing update network filter list is %s%s%s",
- filter->dlist[FILTER_OUT].alist ? "*" : "",
- filter->dlist[FILTER_OUT].name,
- VTY_NEWLINE);
-
- /* filter-list. */
- if (filter->aslist[FILTER_IN].name)
- vty_out (vty, " Incoming update AS path filter list is %s%s%s",
- filter->aslist[FILTER_IN].aslist ? "*" : "",
- filter->aslist[FILTER_IN].name,
- VTY_NEWLINE);
- if (filter->aslist[FILTER_OUT].name)
- vty_out (vty, " Outgoing update AS path filter list is %s%s%s",
- filter->aslist[FILTER_OUT].aslist ? "*" : "",
- filter->aslist[FILTER_OUT].name,
- VTY_NEWLINE);
-
- /* route-map. */
- if (filter->map[RMAP_IN].name)
- vty_out (vty, " Route map for incoming advertisements is %s%s%s",
- filter->map[RMAP_IN].map ? "*" : "",
- filter->map[RMAP_IN].name,
- VTY_NEWLINE);
- if (filter->map[RMAP_OUT].name)
- vty_out (vty, " Route map for outgoing advertisements is %s%s%s",
- filter->map[RMAP_OUT].map ? "*" : "",
- filter->map[RMAP_OUT].name,
- VTY_NEWLINE);
-
- /* unsuppress-map */
- if (filter->usmap.name)
- vty_out (vty, " Route map for selective unsuppress is %s%s%s",
- filter->usmap.map ? "*" : "",
- filter->usmap.name, VTY_NEWLINE);
-
- /* Receive prefix count */
- vty_out (vty, " %ld accepted prefixes%s", p->pcount[afi][safi], VTY_NEWLINE);
-
- /* Maximum prefix */
- if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX))
- {
- vty_out (vty, " Maximum prefixes allowed %ld%s%s", p->pmax[afi][safi],
- CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_MAX_PREFIX_WARNING)
- ? " (warning-only)" : "", VTY_NEWLINE);
- vty_out (vty, " Threshold for warning message %d%%",
- p->pmax_threshold[afi][safi]);
- if (p->pmax_restart[afi][safi])
- vty_out (vty, ", restart interval %d min", p->pmax_restart[afi][safi]);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-}
-
-static void
-bgp_show_peer (struct vty *vty, struct peer *p, u_char use_json, json_object *json)
-{
- struct bgp *bgp;
- char buf1[PREFIX2STR_BUFFER], buf[SU_ADDRSTRLEN];
- char timebuf[BGP_UPTIME_LEN];
- char dn_flag[2];
- const char *subcode_str;
- const char *code_str;
- afi_t afi;
- safi_t safi;
- u_int16_t i;
- u_char *msg;
- json_object *json_neigh = NULL;
- time_t epoch_tbuf;
-
- bgp = p->bgp;
-
- if (use_json)
- json_neigh = json_object_new_object();
-
- memset (dn_flag, '\0', sizeof (dn_flag));
- if (!p->conf_if && peer_dynamic_neighbor (p))
- dn_flag[0] = '*';
-
- if (!use_json)
- {
- if (p->conf_if) /* Configured interface name. */
- vty_out (vty, "BGP neighbor on %s: %s, ", p->conf_if,
- BGP_PEER_SU_UNSPEC(p) ? "None" :
- sockunion2str (&p->su, buf, SU_ADDRSTRLEN));
- else /* Configured IP address. */
- vty_out (vty, "BGP neighbor is %s%s, ", dn_flag, p->host);
- }
-
- if (use_json)
- {
- if (p->conf_if && BGP_PEER_SU_UNSPEC(p))
- json_object_string_add(json_neigh, "bgpNeighborAddr", "none");
- else if (p->conf_if && !BGP_PEER_SU_UNSPEC(p))
- json_object_string_add(json_neigh, "bgpNeighborAddr", sockunion2str (&p->su, buf, SU_ADDRSTRLEN));
-
- json_object_int_add(json_neigh, "remoteAs", p->as);
-
- if (p->change_local_as)
- json_object_int_add(json_neigh, "localAs", p->change_local_as);
- else
- json_object_int_add(json_neigh, "localAs", p->local_as);
-
- if (CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND))
- json_object_boolean_true_add(json_neigh, "localAsNoPrepend");
-
- if (CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_REPLACE_AS))
- json_object_boolean_true_add(json_neigh, "localAsReplaceAs");
- }
- else
- {
- if ((p->as_type == AS_SPECIFIED) ||
- (p->as_type == AS_EXTERNAL) ||
- (p->as_type == AS_INTERNAL))
- vty_out (vty, "remote AS %u, ", p->as);
- else
- vty_out (vty, "remote AS Unspecified, ");
- vty_out (vty, "local AS %u%s%s, ",
- p->change_local_as ? p->change_local_as : p->local_as,
- CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND) ?
- " no-prepend" : "",
- CHECK_FLAG (p->flags, PEER_FLAG_LOCAL_AS_REPLACE_AS) ?
- " replace-as" : "");
- }
- /* peer type internal, external, confed-internal or confed-external */
- if (p->as == p->local_as)
- {
- if (use_json)
- {
- if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION))
- json_object_boolean_true_add(json_neigh, "nbrConfedInternalLink");
- else
- json_object_boolean_true_add(json_neigh, "nbrInternalLink");
- }
- else
- {
- if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION))
- vty_out (vty, "confed-internal link%s", VTY_NEWLINE);
- else
- vty_out (vty, "internal link%s", VTY_NEWLINE);
- }
- }
- else
- {
- if (use_json)
- {
- if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION))
- json_object_boolean_true_add(json_neigh, "nbrConfedExternalLink");
- else
- json_object_boolean_true_add(json_neigh, "nbrExternalLink");
- }
- else
- {
- if (bgp_confederation_peers_check(bgp, p->as))
- vty_out (vty, "confed-external link%s", VTY_NEWLINE);
- else
- vty_out (vty, "external link%s", VTY_NEWLINE);
- }
- }
-
- /* Description. */
- if (p->desc)
- {
- if (use_json)
- json_object_string_add(json_neigh, "nbrDesc", p->desc);
- else
- vty_out (vty, " Description: %s%s", p->desc, VTY_NEWLINE);
- }
-
- if (p->hostname)
- {
- if (use_json)
- {
- if (p->hostname)
- json_object_string_add(json_neigh, "hostname", p->hostname);
-
- if (p->domainname)
- json_object_string_add(json_neigh, "domainname", p->domainname);
- }
- else
- {
- if (p->domainname && (p->domainname[0] != '\0'))
- vty_out(vty, "Hostname: %s.%s%s", p->hostname, p->domainname,
- VTY_NEWLINE);
- else
- vty_out(vty, "Hostname: %s%s", p->hostname, VTY_NEWLINE);
- }
-
- }
-
- /* Peer-group */
- if (p->group)
- {
- if (use_json)
- {
- json_object_string_add(json_neigh, "peerGroup", p->group->name);
-
- if (dn_flag[0])
- {
- struct prefix prefix, *range = NULL;
-
- sockunion2hostprefix(&(p->su), &prefix);
- range = peer_group_lookup_dynamic_neighbor_range (p->group, &prefix);
-
- if (range)
- {
- prefix2str(range, buf1, sizeof(buf1));
- json_object_string_add(json_neigh, "peerSubnetRangeGroup", buf1);
- }
- }
- }
- else
- {
- vty_out (vty, " Member of peer-group %s for session parameters%s",
- p->group->name, VTY_NEWLINE);
-
- if (dn_flag[0])
- {
- struct prefix prefix, *range = NULL;
-
- sockunion2hostprefix(&(p->su), &prefix);
- range = peer_group_lookup_dynamic_neighbor_range (p->group, &prefix);
-
- if (range)
- {
- prefix2str(range, buf1, sizeof(buf1));
- vty_out (vty, " Belongs to the subnet range group: %s%s", buf1, VTY_NEWLINE);
- }
- }
- }
- }
-
- if (use_json)
- {
- /* Administrative shutdown. */
- if (CHECK_FLAG (p->flags, PEER_FLAG_SHUTDOWN))
- json_object_boolean_true_add(json_neigh, "adminShutDown");
-
- /* BGP Version. */
- json_object_int_add(json_neigh, "bgpVersion", 4);
- json_object_string_add(json_neigh, "remoteRouterId",
- inet_ntop (AF_INET, &p->remote_id, buf1, sizeof(buf1)));
-
- /* Confederation */
- if (CHECK_FLAG (bgp->config, BGP_CONFIG_CONFEDERATION) && bgp_confederation_peers_check (bgp, p->as))
- json_object_boolean_true_add(json_neigh, "nbrCommonAdmin");
-
- /* Status. */
- json_object_string_add(json_neigh, "bgpState", lookup_msg(bgp_status_msg, p->status, NULL));
-
- if (p->status == Established)
- {
- time_t uptime;
- struct tm *tm;
-
- uptime = bgp_clock();
- uptime -= p->uptime;
- tm = gmtime(&uptime);
- epoch_tbuf = time(NULL) - uptime;
-
- json_object_int_add(json_neigh, "bgpTimerUp", (tm->tm_sec * 1000) + (tm->tm_min * 60000) + (tm->tm_hour * 3600000));
- json_object_string_add(json_neigh, "bgpTimerUpString", peer_uptime (p->uptime, timebuf, BGP_UPTIME_LEN, 0, NULL));
- json_object_int_add(json_neigh, "bgpTimerUpEstablishedEpoch", epoch_tbuf);
- }
-
- else if (p->status == Active)
- {
- if (CHECK_FLAG (p->flags, PEER_FLAG_PASSIVE))
- json_object_string_add(json_neigh, "bgpStateIs", "passive");
- else if (CHECK_FLAG (p->sflags, PEER_STATUS_NSF_WAIT))
- json_object_string_add(json_neigh, "bgpStateIs", "passiveNSF");
- }
-
- /* read timer */
- time_t uptime;
- struct tm *tm;
-
- uptime = bgp_clock();
- uptime -= p->readtime;
- tm = gmtime(&uptime);
- json_object_int_add(json_neigh, "bgpTimerLastRead", (tm->tm_sec * 1000) + (tm->tm_min * 60000) + (tm->tm_hour * 3600000));
-
- uptime = bgp_clock();
- uptime -= p->last_write;
- tm = gmtime(&uptime);
- json_object_int_add(json_neigh, "bgpTimerLastWrite", (tm->tm_sec * 1000) + (tm->tm_min * 60000) + (tm->tm_hour * 3600000));
-
- uptime = bgp_clock();
- uptime -= p->update_time;
- tm = gmtime(&uptime);
- json_object_int_add(json_neigh, "bgpInUpdateElapsedTimeMsecs",
- (tm->tm_sec * 1000) + (tm->tm_min * 60000) + (tm->tm_hour * 3600000));
-
- /* Configured timer values. */
- json_object_int_add(json_neigh, "bgpTimerHoldTimeMsecs", p->v_holdtime * 1000);
- json_object_int_add(json_neigh, "bgpTimerKeepAliveIntervalMsecs", p->v_keepalive * 1000);
-
- if (CHECK_FLAG (p->config, PEER_CONFIG_TIMER))
- {
- json_object_int_add(json_neigh, "bgpTimerConfiguredHoldTimeMsecs", p->holdtime * 1000);
- json_object_int_add(json_neigh, "bgpTimerConfiguredKeepAliveIntervalMsecs", p->keepalive * 1000);
- }
- }
- else
- {
- /* Administrative shutdown. */
- if (CHECK_FLAG (p->flags, PEER_FLAG_SHUTDOWN))
- vty_out (vty, " Administratively shut down%s", VTY_NEWLINE);
-
- /* BGP Version. */
- vty_out (vty, " BGP version 4");
- vty_out (vty, ", remote router ID %s%s",
- inet_ntop (AF_INET, &p->remote_id, buf1, sizeof(buf1)),
- VTY_NEWLINE);
-
- /* Confederation */
- if (CHECK_FLAG (bgp->config, BGP_CONFIG_CONFEDERATION)
- && bgp_confederation_peers_check (bgp, p->as))
- vty_out (vty, " Neighbor under common administration%s", VTY_NEWLINE);
-
- /* Status. */
- vty_out (vty, " BGP state = %s", lookup_msg(bgp_status_msg, p->status, NULL));
-
- if (p->status == Established)
- vty_out (vty, ", up for %8s", peer_uptime (p->uptime, timebuf, BGP_UPTIME_LEN, 0, NULL));
-
- else if (p->status == Active)
- {
- if (CHECK_FLAG (p->flags, PEER_FLAG_PASSIVE))
- vty_out (vty, " (passive)");
- else if (CHECK_FLAG (p->sflags, PEER_STATUS_NSF_WAIT))
- vty_out (vty, " (NSF passive)");
- }
- vty_out (vty, "%s", VTY_NEWLINE);
-
- /* read timer */
- vty_out (vty, " Last read %s", peer_uptime (p->readtime, timebuf, BGP_UPTIME_LEN, 0, NULL));
- vty_out (vty, ", Last write %s%s",
- peer_uptime (p->last_write, timebuf, BGP_UPTIME_LEN, 0, NULL), VTY_NEWLINE);
-
- /* Configured timer values. */
- vty_out (vty, " Hold time is %d, keepalive interval is %d seconds%s",
- p->v_holdtime, p->v_keepalive, VTY_NEWLINE);
- if (CHECK_FLAG (p->config, PEER_CONFIG_TIMER))
- {
- vty_out (vty, " Configured hold time is %d", p->holdtime);
- vty_out (vty, ", keepalive interval is %d seconds%s",
- p->keepalive, VTY_NEWLINE);
- }
- }
- /* Capability. */
- if (p->status == Established)
- {
- if (p->cap
- || p->afc_adv[AFI_IP][SAFI_UNICAST]
- || p->afc_recv[AFI_IP][SAFI_UNICAST]
- || p->afc_adv[AFI_IP][SAFI_MULTICAST]
- || p->afc_recv[AFI_IP][SAFI_MULTICAST]
- || p->afc_adv[AFI_IP6][SAFI_UNICAST]
- || p->afc_recv[AFI_IP6][SAFI_UNICAST]
- || p->afc_adv[AFI_IP6][SAFI_MULTICAST]
- || p->afc_recv[AFI_IP6][SAFI_MULTICAST]
- || p->afc_adv[AFI_IP6][SAFI_MPLS_VPN]
- || p->afc_recv[AFI_IP6][SAFI_MPLS_VPN]
- || p->afc_adv[AFI_IP6][SAFI_ENCAP]
- || p->afc_recv[AFI_IP6][SAFI_ENCAP]
- || p->afc_adv[AFI_IP][SAFI_ENCAP]
- || p->afc_recv[AFI_IP][SAFI_ENCAP]
- || p->afc_adv[AFI_IP][SAFI_MPLS_VPN]
- || p->afc_recv[AFI_IP][SAFI_MPLS_VPN])
- {
- if (use_json)
- {
- json_object *json_cap = NULL;
-
- json_cap = json_object_new_object();
-
- /* AS4 */
- if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
- {
- if (CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV) && CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV))
- json_object_string_add(json_cap, "4byteAs", "advertisedAndReceived");
- else if (CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
- json_object_string_add(json_cap, "4byteAs", "advertised");
- else if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV))
- json_object_string_add(json_cap, "4byteAs", "received");
- }
-
- /* AddPath */
- if (CHECK_FLAG (p->cap, PEER_CAP_ADDPATH_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_ADDPATH_ADV))
- {
- json_object *json_add = NULL;
- const char *print_store;
-
- json_add = json_object_new_object();
-
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- json_object *json_sub = NULL;
- json_sub = json_object_new_object();
- print_store = afi_safi_print (afi, safi);
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV))
- {
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV) && CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV))
- json_object_boolean_true_add(json_sub, "txAdvertisedAndReceived");
- else if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV))
- json_object_boolean_true_add(json_sub, "txAdvertised");
- else if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV))
- json_object_boolean_true_add(json_sub, "txReceived");
- }
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV))
- {
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV) && CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV))
- json_object_boolean_true_add(json_sub, "rxAdvertisedAndReceived");
- else if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV))
- json_object_boolean_true_add(json_sub, "rxAdvertised");
- else if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV))
- json_object_boolean_true_add(json_sub, "rxReceived");
- }
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV))
- json_object_object_add(json_add, print_store, json_sub);
- else
- json_object_free(json_sub);
- }
-
- json_object_object_add(json_cap, "addPath", json_add);
- }
-
- /* Dynamic */
- if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
- {
- if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV) && CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV))
- json_object_string_add(json_cap, "dynamic", "advertisedAndReceived");
- else if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
- json_object_string_add(json_cap, "dynamic", "advertised");
- else if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV))
- json_object_string_add(json_cap, "dynamic", "received");
- }
-
- /* Extended nexthop */
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_ENHE_ADV))
- {
- json_object *json_nxt = NULL;
- const char *print_store;
-
-
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_ADV) && CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV))
- json_object_string_add(json_cap, "extendedNexthop", "advertisedAndReceived");
- else if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_ADV))
- json_object_string_add(json_cap, "extendedNexthop", "advertised");
- else if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV))
- json_object_string_add(json_cap, "extendedNexthop", "received");
-
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV))
- {
- json_nxt = json_object_new_object();
-
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_cap[AFI_IP][safi], PEER_CAP_ENHE_AF_RCV))
- {
- print_store = afi_safi_print (AFI_IP, safi);
- json_object_string_add(json_nxt, print_store, "recieved");
- }
- }
- json_object_object_add(json_cap, "extendedNexthopFamililesByPeer", json_nxt);
- }
- }
-
- /* Route Refresh */
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV)
- || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
- {
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV) && (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV) || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV)))
- {
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV) && CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV))
- json_object_string_add(json_cap, "routeRefresh", "advertisedAndReceivedOldNew");
- else
- {
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
- json_object_string_add(json_cap, "routeRefresh", "advertisedAndReceivedOld");
- else
- json_object_string_add(json_cap, "routeRefresh", "advertisedAndReceivedNew");
- }
- }
- else if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV))
- json_object_string_add(json_cap, "routeRefresh", "advertised");
- else if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV) || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
- json_object_string_add(json_cap, "routeRefresh", "received");
- }
-
- /* Multiprotocol Extensions */
- json_object *json_multi = NULL;
- json_multi = json_object_new_object();
-
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (p->afc_adv[afi][safi] || p->afc_recv[afi][safi])
- {
- json_object *json_exten = NULL;
- json_exten = json_object_new_object();
-
- if (p->afc_adv[afi][safi] && p->afc_recv[afi][safi])
- json_object_boolean_true_add(json_exten, "advertisedAndReceived");
- else if (p->afc_adv[afi][safi])
- json_object_boolean_true_add(json_exten, "advertised");
- else if (p->afc_recv[afi][safi])
- json_object_boolean_true_add(json_exten, "received");
-
- json_object_object_add(json_multi, afi_safi_print (afi, safi), json_exten);
- }
- }
- }
- json_object_object_add(json_cap, "multiprotocolExtensions", json_multi);
-
- /* Gracefull Restart */
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
- {
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV) && CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
- json_object_string_add(json_cap, "gracefulRestart", "advertisedAndReceived");
- else if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
- json_object_string_add(json_cap, "gracefulRestartCapability", "advertised");
- else if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
- json_object_string_add(json_cap, "gracefulRestartCapability", "received");
-
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
- {
- int restart_af_count = 0;
- json_object *json_restart = NULL;
- json_restart = json_object_new_object();
-
- json_object_int_add(json_cap, "gracefulRestartRemoteTimerMsecs", p->v_gr_restart * 1000);
-
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_RCV))
- {
- json_object *json_sub = NULL;
- json_sub = json_object_new_object();
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_PRESERVE_RCV))
- json_object_boolean_true_add(json_sub, "preserved");
- restart_af_count++;
- json_object_object_add(json_restart, afi_safi_print (afi, safi), json_sub);
- }
- }
- }
- if (! restart_af_count)
- {
- json_object_string_add(json_cap, "addressFamiliesByPeer", "none");
- json_object_free(json_restart);
- }
- else
- json_object_object_add(json_cap, "addressFamiliesByPeer", json_restart);
- }
- }
- json_object_object_add(json_neigh, "neighborCapabilities", json_cap);
- }
- else
- {
- vty_out (vty, " Neighbor capabilities:%s", VTY_NEWLINE);
-
- /* AS4 */
- if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
- {
- vty_out (vty, " 4 Byte AS:");
- if (CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
- vty_out (vty, " advertised");
- if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV))
- vty_out (vty, " %sreceived",
- CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV) ? "and " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* AddPath */
- if (CHECK_FLAG (p->cap, PEER_CAP_ADDPATH_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_ADDPATH_ADV))
- {
- vty_out (vty, " AddPath:%s", VTY_NEWLINE);
-
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV))
- {
- vty_out (vty, " %s: TX ", afi_safi_print (afi, safi));
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV))
- vty_out (vty, "advertised %s", afi_safi_print (afi, safi));
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_RCV))
- vty_out (vty, "%sreceived", CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_TX_ADV) ? " and " : "" );
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV) ||
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV))
- {
- vty_out (vty, " %s: RX ", afi_safi_print (afi, safi));
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV))
- vty_out (vty, "advertised %s", afi_safi_print (afi, safi));
-
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_RCV))
- vty_out (vty, "%sreceived", CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_ADDPATH_AF_RX_ADV) ? " and " : "" );
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- }
-
- /* Dynamic */
- if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
- {
- vty_out (vty, " Dynamic:");
- if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
- vty_out (vty, " advertised");
- if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV))
- vty_out (vty, " %sreceived",
- CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV) ? "and " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Extended nexthop */
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_ENHE_ADV))
- {
- vty_out (vty, " Extended nexthop:");
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_ADV))
- vty_out (vty, " advertised");
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV))
- vty_out (vty, " %sreceived",
- CHECK_FLAG (p->cap, PEER_CAP_ENHE_ADV) ? "and " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->cap, PEER_CAP_ENHE_RCV))
- {
- vty_out (vty, " Address families by peer:%s ", VTY_NEWLINE);
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- if (CHECK_FLAG (p->af_cap[AFI_IP][safi], PEER_CAP_ENHE_AF_RCV))
- vty_out (vty, " %s%s",
- afi_safi_print (AFI_IP, safi), VTY_NEWLINE);
- }
- }
-
- /* Route Refresh */
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV)
- || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
- {
- vty_out (vty, " Route refresh:");
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV))
- vty_out (vty, " advertised");
- if (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV))
- vty_out (vty, " %sreceived(%s)",
- CHECK_FLAG (p->cap, PEER_CAP_REFRESH_ADV) ? "and " : "",
- (CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV)
- && CHECK_FLAG (p->cap, PEER_CAP_REFRESH_NEW_RCV)) ?
- "old & new" : CHECK_FLAG (p->cap, PEER_CAP_REFRESH_OLD_RCV) ? "old" : "new");
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Multiprotocol Extensions */
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- if (p->afc_adv[afi][safi] || p->afc_recv[afi][safi])
- {
- vty_out (vty, " Address Family %s:", afi_safi_print (afi, safi));
- if (p->afc_adv[afi][safi])
- vty_out (vty, " advertised");
- if (p->afc_recv[afi][safi])
- vty_out (vty, " %sreceived", p->afc_adv[afi][safi] ? "and " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Hostname capability */
- if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_ADV) ||
- CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_RCV))
- {
- vty_out (vty, " Hostname Capability:");
- if (CHECK_FLAG (p->cap, PEER_CAP_HOSTNAME_ADV))
- vty_out (vty, " advertised");
- if (CHECK_FLAG (p->cap, PEER_CAP_HOSTNAME_RCV))
- vty_out (vty, " %sreceived",
- CHECK_FLAG (p->cap, PEER_CAP_HOSTNAME_ADV) ? "and " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Gracefull Restart */
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
- || CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
- {
- vty_out (vty, " Graceful Restart Capabilty:");
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV))
- vty_out (vty, " advertised");
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
- vty_out (vty, " %sreceived",
- CHECK_FLAG (p->cap, PEER_CAP_RESTART_ADV) ? "and " : "");
- vty_out (vty, "%s", VTY_NEWLINE);
-
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV))
- {
- int restart_af_count = 0;
-
- vty_out (vty, " Remote Restart timer is %d seconds%s",
- p->v_gr_restart, VTY_NEWLINE);
- vty_out (vty, " Address families by peer:%s ", VTY_NEWLINE);
-
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- if (CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_RCV))
- {
- vty_out (vty, "%s%s(%s)", restart_af_count ? ", " : "",
- afi_safi_print (afi, safi),
- CHECK_FLAG (p->af_cap[afi][safi], PEER_CAP_RESTART_AF_PRESERVE_RCV) ?
- "preserved" : "not preserved");
- restart_af_count++;
- }
- if (! restart_af_count)
- vty_out (vty, "none");
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- }
- }
- }
-
- /* graceful restart information */
- if (CHECK_FLAG (p->cap, PEER_CAP_RESTART_RCV)
- || p->t_gr_restart
- || p->t_gr_stale)
- {
- json_object *json_grace = NULL;
- json_object *json_grace_send = NULL;
- json_object *json_grace_recv = NULL;
- int eor_send_af_count = 0;
- int eor_receive_af_count = 0;
-
- if (use_json)
- {
- json_grace = json_object_new_object();
- json_grace_send = json_object_new_object();
- json_grace_recv = json_object_new_object();
-
- if (p->status == Established)
- {
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_SEND))
- {
- json_object_boolean_true_add(json_grace_send, afi_safi_print (afi, safi));
- eor_send_af_count++;
- }
- }
- }
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_RECEIVED))
- {
- json_object_boolean_true_add(json_grace_recv, afi_safi_print (afi, safi));
- eor_receive_af_count++;
- }
- }
- }
- }
-
- json_object_object_add(json_grace, "endOfRibSend", json_grace_send);
- json_object_object_add(json_grace, "endOfRibRecv", json_grace_recv);
-
- if (p->t_gr_restart)
- json_object_int_add(json_grace, "gracefulRestartTimerMsecs", thread_timer_remain_second (p->t_gr_restart) * 1000);
-
- if (p->t_gr_stale)
- json_object_int_add(json_grace, "gracefulStalepathTimerMsecs", thread_timer_remain_second (p->t_gr_stale) * 1000);
-
- json_object_object_add(json_neigh, "gracefulRestartInfo", json_grace);
- }
- else
- {
- vty_out (vty, " Graceful restart informations:%s", VTY_NEWLINE);
- if (p->status == Established)
- {
- vty_out (vty, " End-of-RIB send: ");
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_SEND))
- {
- vty_out (vty, "%s%s", eor_send_af_count ? ", " : "",
- afi_safi_print (afi, safi));
- eor_send_af_count++;
- }
- }
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- vty_out (vty, " End-of-RIB received: ");
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- {
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (CHECK_FLAG (p->af_sflags[afi][safi], PEER_STATUS_EOR_RECEIVED))
- {
- vty_out (vty, "%s%s", eor_receive_af_count ? ", " : "",
- afi_safi_print (afi, safi));
- eor_receive_af_count++;
- }
- }
- }
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- if (p->t_gr_restart)
- vty_out (vty, " The remaining time of restart timer is %ld%s",
- thread_timer_remain_second (p->t_gr_restart), VTY_NEWLINE);
-
- if (p->t_gr_stale)
- vty_out (vty, " The remaining time of stalepath timer is %ld%s",
- thread_timer_remain_second (p->t_gr_stale), VTY_NEWLINE);
- }
- }
- if (use_json)
- {
- json_object *json_stat = NULL;
- json_stat = json_object_new_object();
- /* Packet counts. */
- json_object_int_add(json_stat, "depthInq", 0);
- json_object_int_add(json_stat, "depthOutq", (unsigned long) p->obuf->count);
- json_object_int_add(json_stat, "opensSent", p->open_out);
- json_object_int_add(json_stat, "opensRecv", p->open_in);
- json_object_int_add(json_stat, "notificationsSent", p->notify_out);
- json_object_int_add(json_stat, "notificationsRecv", p->notify_in);
- json_object_int_add(json_stat, "updatesSent", p->update_out);
- json_object_int_add(json_stat, "updatesRecv", p->update_in);
- json_object_int_add(json_stat, "keepalivesSent", p->keepalive_out);
- json_object_int_add(json_stat, "keepalivesRecv", p->keepalive_in);
- json_object_int_add(json_stat, "routeRefreshSent", p->refresh_out);
- json_object_int_add(json_stat, "routeRefreshRecv", p->refresh_in);
- json_object_int_add(json_stat, "capabilitySent", p->dynamic_cap_out);
- json_object_int_add(json_stat, "capabilityRecv", p->dynamic_cap_in);
- json_object_int_add(json_stat, "totalSent", p->open_out + p->notify_out + p->update_out + p->keepalive_out + p->refresh_out + p->dynamic_cap_out);
- json_object_int_add(json_stat, "totalRecv", p->open_in + p->notify_in + p->update_in + p->keepalive_in + p->refresh_in + p->dynamic_cap_in);
- json_object_object_add(json_neigh, "messageStats", json_stat);
- }
- else
- {
- /* Packet counts. */
- vty_out (vty, " Message statistics:%s", VTY_NEWLINE);
- vty_out (vty, " Inq depth is 0%s", VTY_NEWLINE);
- vty_out (vty, " Outq depth is %lu%s", (unsigned long) p->obuf->count, VTY_NEWLINE);
- vty_out (vty, " Sent Rcvd%s", VTY_NEWLINE);
- vty_out (vty, " Opens: %10d %10d%s", p->open_out, p->open_in, VTY_NEWLINE);
- vty_out (vty, " Notifications: %10d %10d%s", p->notify_out, p->notify_in, VTY_NEWLINE);
- vty_out (vty, " Updates: %10d %10d%s", p->update_out, p->update_in, VTY_NEWLINE);
- vty_out (vty, " Keepalives: %10d %10d%s", p->keepalive_out, p->keepalive_in, VTY_NEWLINE);
- vty_out (vty, " Route Refresh: %10d %10d%s", p->refresh_out, p->refresh_in, VTY_NEWLINE);
- vty_out (vty, " Capability: %10d %10d%s", p->dynamic_cap_out, p->dynamic_cap_in, VTY_NEWLINE);
- vty_out (vty, " Total: %10d %10d%s", p->open_out + p->notify_out +
- p->update_out + p->keepalive_out + p->refresh_out + p->dynamic_cap_out,
- p->open_in + p->notify_in + p->update_in + p->keepalive_in + p->refresh_in +
- p->dynamic_cap_in, VTY_NEWLINE);
- }
-
- if (use_json)
- {
- /* advertisement-interval */
- json_object_int_add(json_neigh, "minBtwnAdvertisementRunsTimerMsecs", p->v_routeadv * 1000);
-
- /* Update-source. */
- if (p->update_if || p->update_source)
- {
- if (p->update_if)
- json_object_string_add(json_neigh, "updateSource", p->update_if);
- else if (p->update_source)
- json_object_string_add(json_neigh, "updateSource", sockunion2str (p->update_source, buf1, SU_ADDRSTRLEN));
- }
- }
- else
- {
- /* advertisement-interval */
- vty_out (vty, " Minimum time between advertisement runs is %d seconds%s",
- p->v_routeadv, VTY_NEWLINE);
-
- /* Update-source. */
- if (p->update_if || p->update_source)
- {
- vty_out (vty, " Update source is ");
- if (p->update_if)
- vty_out (vty, "%s", p->update_if);
- else if (p->update_source)
- vty_out (vty, "%s", sockunion2str (p->update_source, buf1, SU_ADDRSTRLEN));
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- /* Address Family Information */
- json_object *json_hold = NULL;
-
- if (use_json)
- json_hold = json_object_new_object();
-
- for (afi = AFI_IP ; afi < AFI_MAX ; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- if (p->afc[afi][safi])
- bgp_show_peer_afi (vty, p, afi, safi, use_json, json_hold);
-
- if (use_json)
- {
- json_object_object_add(json_neigh, "addressFamilyInfo", json_hold);
- json_object_int_add(json_neigh, "connectionsEstablished", p->established);
- json_object_int_add(json_neigh, "connectionsDropped", p->dropped);
- }
- else
- vty_out (vty, " Connections established %d; dropped %d%s", p->established, p->dropped,
- VTY_NEWLINE);
-
- if (! p->last_reset)
- {
- if (use_json)
- json_object_string_add(json_neigh, "lastReset", "never");
- else
- vty_out (vty, " Last reset never%s", VTY_NEWLINE);
- }
- else
- {
- if (use_json)
- {
- time_t uptime;
- struct tm *tm;
-
- uptime = bgp_clock();
- uptime -= p->resettime;
- tm = gmtime(&uptime);
- json_object_int_add(json_neigh, "lastResetTimerMsecs", (tm->tm_sec * 1000) + (tm->tm_min * 60000) + (tm->tm_hour * 3600000));
- json_object_string_add(json_neigh, "lastResetDueTo", peer_down_str[(int) p->last_reset]);
- if (p->last_reset == PEER_DOWN_NOTIFY_SEND ||
- p->last_reset == PEER_DOWN_NOTIFY_RECEIVED)
- {
- char errorcodesubcode_hexstr[5];
- char errorcodesubcode_str[256];
-
- code_str = bgp_notify_code_str(p->notify.code);
- subcode_str = bgp_notify_subcode_str(p->notify.code, p->notify.subcode);
-
- sprintf(errorcodesubcode_hexstr, "%02X%02X", p->notify.code, p->notify.subcode);
- json_object_string_add(json_neigh, "lastErrorCodeSubcode", errorcodesubcode_hexstr);
- snprintf(errorcodesubcode_str, 255, "%s%s", code_str, subcode_str);
- json_object_string_add(json_neigh, "lastNotificationReason", errorcodesubcode_str);
- if (p->last_reset == PEER_DOWN_NOTIFY_RECEIVED
- && p->notify.code == BGP_NOTIFY_CEASE
- && (p->notify.subcode == BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN
- || p->notify.subcode == BGP_NOTIFY_CEASE_ADMIN_RESET)
- && p->notify.length)
- {
- char msgbuf[1024];
- const char *msg_str;
-
- msg_str = bgp_notify_admin_message(msgbuf, sizeof(msgbuf),
- (u_char*)p->notify.data, p->notify.length);
- if (msg_str)
- json_object_string_add(json_neigh, "lastShutdownDescription", msg_str);
- }
- }
- }
- else
- {
- vty_out (vty, " Last reset %s, ",
- peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN, 0, NULL));
-
- if (p->last_reset == PEER_DOWN_NOTIFY_SEND ||
- p->last_reset == PEER_DOWN_NOTIFY_RECEIVED)
- {
- code_str = bgp_notify_code_str(p->notify.code);
- subcode_str = bgp_notify_subcode_str(p->notify.code, p->notify.subcode);
- vty_out (vty, "due to NOTIFICATION %s (%s%s)%s",
- p->last_reset == PEER_DOWN_NOTIFY_SEND ? "sent" : "received",
- code_str, subcode_str, VTY_NEWLINE);
- if (p->last_reset == PEER_DOWN_NOTIFY_RECEIVED
- && p->notify.code == BGP_NOTIFY_CEASE
- && (p->notify.subcode == BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN
- || p->notify.subcode == BGP_NOTIFY_CEASE_ADMIN_RESET)
- && p->notify.length)
- {
- char msgbuf[1024];
- const char *msg_str;
-
- msg_str = bgp_notify_admin_message(msgbuf, sizeof(msgbuf),
- (u_char*)p->notify.data, p->notify.length);
- if (msg_str)
- vty_out (vty, " Message: \"%s\"%s", msg_str, VTY_NEWLINE);
- }
- }
- else
- {
- vty_out (vty, "due to %s%s",
- peer_down_str[(int) p->last_reset], VTY_NEWLINE);
- }
-
- if (p->last_reset_cause_size)
- {
- msg = p->last_reset_cause;
- vty_out(vty, " Message received that caused BGP to send a NOTIFICATION:%s ", VTY_NEWLINE);
- for (i = 1; i <= p->last_reset_cause_size; i++)
- {
- vty_out(vty, "%02X", *msg++);
-
- if (i != p->last_reset_cause_size)
- {
- if (i % 16 == 0)
- {
- vty_out(vty, "%s ", VTY_NEWLINE);
- }
- else if (i % 4 == 0)
- {
- vty_out(vty, " ");
- }
- }
- }
- vty_out(vty, "%s", VTY_NEWLINE);
- }
- }
- }
-
- if (CHECK_FLAG (p->sflags, PEER_STATUS_PREFIX_OVERFLOW))
- {
- if (use_json)
- json_object_boolean_true_add(json_neigh, "prefixesConfigExceedMax");
- else
- vty_out (vty, " Peer had exceeded the max. no. of prefixes configured.%s", VTY_NEWLINE);
-
- if (p->t_pmax_restart)
- {
- if (use_json)
- {
- json_object_boolean_true_add(json_neigh, "reducePrefixNumFrom");
- json_object_int_add(json_neigh, "restartInTimerMsec", thread_timer_remain_second (p->t_pmax_restart) * 1000);
- }
- else
- vty_out (vty, " Reduce the no. of prefix from %s, will restart in %ld seconds%s",
- p->host, thread_timer_remain_second (p->t_pmax_restart),
- VTY_NEWLINE);
- }
- else
- {
- if (use_json)
- json_object_boolean_true_add(json_neigh, "reducePrefixNumAndClearIpBgp");
- else
- vty_out (vty, " Reduce the no. of prefix and clear ip bgp %s to restore peering%s",
- p->host, VTY_NEWLINE);
- }
- }
-
- /* EBGP Multihop and GTSM */
- if (p->sort != BGP_PEER_IBGP)
- {
- if (use_json)
- {
- if (p->gtsm_hops > 0)
- json_object_int_add(json_neigh, "externalBgpNbrMaxHopsAway", p->gtsm_hops);
- else if (p->ttl > 1)
- json_object_int_add(json_neigh, "externalBgpNbrMaxHopsAway", p->ttl);
- }
- else
- {
- if (p->gtsm_hops > 0)
- vty_out (vty, " External BGP neighbor may be up to %d hops away.%s",
- p->gtsm_hops, VTY_NEWLINE);
- else if (p->ttl > 1)
- vty_out (vty, " External BGP neighbor may be up to %d hops away.%s",
- p->ttl, VTY_NEWLINE);
- }
- }
- else
- {
- if (p->gtsm_hops > 0)
- {
- if (use_json)
- json_object_int_add(json_neigh, "internalBgpNbrMaxHopsAway", p->gtsm_hops);
- else
- vty_out (vty, " Internal BGP neighbor may be up to %d hops away.%s",
- p->gtsm_hops, VTY_NEWLINE);
- }
- }
-
- /* Local address. */
- if (p->su_local)
- {
- if (use_json)
- {
- json_object_string_add(json_neigh, "hostLocal", sockunion2str (p->su_local, buf1, SU_ADDRSTRLEN));
- json_object_int_add(json_neigh, "portLocal", ntohs (p->su_local->sin.sin_port));
- }
- else
- vty_out (vty, "Local host: %s, Local port: %d%s",
- sockunion2str (p->su_local, buf1, SU_ADDRSTRLEN),
- ntohs (p->su_local->sin.sin_port),
- VTY_NEWLINE);
- }
-
- /* Remote address. */
- if (p->su_remote)
- {
- if (use_json)
- {
- json_object_string_add(json_neigh, "hostForeign", sockunion2str (p->su_remote, buf1, SU_ADDRSTRLEN));
- json_object_int_add(json_neigh, "portForeign", ntohs (p->su_remote->sin.sin_port));
- }
- else
- vty_out (vty, "Foreign host: %s, Foreign port: %d%s",
- sockunion2str (p->su_remote, buf1, SU_ADDRSTRLEN),
- ntohs (p->su_remote->sin.sin_port),
- VTY_NEWLINE);
- }
-
- /* Nexthop display. */
- if (p->su_local)
- {
- if (use_json)
- {
- json_object_string_add(json_neigh, "nexthop",
- inet_ntop (AF_INET, &p->nexthop.v4, buf1, sizeof(buf1)));
- json_object_string_add(json_neigh, "nexthopGlobal",
- inet_ntop (AF_INET6, &p->nexthop.v6_global, buf1, sizeof(buf1)));
- json_object_string_add(json_neigh, "nexthopLocal",
- inet_ntop (AF_INET6, &p->nexthop.v6_local, buf1, sizeof(buf1)));
- if (p->shared_network)
- json_object_string_add(json_neigh, "bgpConnection", "sharedNetwork");
- else
- json_object_string_add(json_neigh, "bgpConnection", "nonSharedNetwork");
- }
- else
- {
- vty_out (vty, "Nexthop: %s%s",
- inet_ntop (AF_INET, &p->nexthop.v4, buf1, sizeof(buf1)),
- VTY_NEWLINE);
- vty_out (vty, "Nexthop global: %s%s",
- inet_ntop (AF_INET6, &p->nexthop.v6_global, buf1, sizeof(buf1)),
- VTY_NEWLINE);
- vty_out (vty, "Nexthop local: %s%s",
- inet_ntop (AF_INET6, &p->nexthop.v6_local, buf1, sizeof(buf1)),
- VTY_NEWLINE);
- vty_out (vty, "BGP connection: %s%s",
- p->shared_network ? "shared network" : "non shared network",
- VTY_NEWLINE);
- }
- }
-
- /* Timer information. */
- if (use_json)
- {
- json_object_int_add(json_neigh, "connectRetryTimer", p->v_connect);
- if (p->status == Established && p->rtt)
- json_object_int_add(json_neigh, "estimatedRttInMsecs", p->rtt);
- if (p->t_start)
- json_object_int_add(json_neigh, "nextStartTimerDueInMsecs", thread_timer_remain_second (p->t_start) * 1000);
- if (p->t_connect)
- json_object_int_add(json_neigh, "nextConnectTimerDueInMsecs", thread_timer_remain_second (p->t_connect) * 1000);
- if (p->t_routeadv)
- {
- json_object_int_add(json_neigh, "mraiInterval", p->v_routeadv);
- json_object_int_add(json_neigh, "mraiTimerExpireInMsecs", thread_timer_remain_second (p->t_routeadv) * 1000);
- }
-
- if (p->t_read)
- json_object_string_add(json_neigh, "readThread", "on");
- else
- json_object_string_add(json_neigh, "readThread", "off");
- if (p->t_write)
- json_object_string_add(json_neigh, "writeThread", "on");
- else
- json_object_string_add(json_neigh, "writeThread", "off");
- }
- else
- {
- vty_out (vty, "BGP Connect Retry Timer in Seconds: %d%s",
- p->v_connect, VTY_NEWLINE);
- if (p->status == Established && p->rtt)
- vty_out (vty, "Estimated round trip time: %d ms%s",
- p->rtt, VTY_NEWLINE);
- if (p->t_start)
- vty_out (vty, "Next start timer due in %ld seconds%s",
- thread_timer_remain_second (p->t_start), VTY_NEWLINE);
- if (p->t_connect)
- vty_out (vty, "Next connect timer due in %ld seconds%s",
- thread_timer_remain_second (p->t_connect), VTY_NEWLINE);
- if (p->t_routeadv)
- vty_out (vty, "MRAI (interval %u) timer expires in %ld seconds%s",
- p->v_routeadv, thread_timer_remain_second (p->t_routeadv),
- VTY_NEWLINE);
-
- vty_out (vty, "Read thread: %s Write thread: %s%s",
- p->t_read ? "on" : "off",
- p->t_write ? "on" : "off",
- VTY_NEWLINE);
- }
-
- if (p->notify.code == BGP_NOTIFY_OPEN_ERR
- && p->notify.subcode == BGP_NOTIFY_OPEN_UNSUP_CAPBL)
- bgp_capability_vty_out (vty, p, use_json, json_neigh);
-
- if (!use_json)
- vty_out (vty, "%s", VTY_NEWLINE);
-
- /* BFD information. */
- bgp_bfd_show_info(vty, p, use_json, json_neigh);
-
- if (use_json)
- {
- if (p->conf_if) /* Configured interface name. */
- json_object_object_add(json, p->conf_if, json_neigh);
- else /* Configured IP address. */
- json_object_object_add(json, p->host, json_neigh);
- }
-}
-
-static int
-bgp_show_neighbor (struct vty *vty, struct bgp *bgp, enum show_type type,
- union sockunion *su, const char *conf_if, u_char use_json, json_object *json)
-{
- struct listnode *node, *nnode;
- struct peer *peer;
- int find = 0;
-
- for (ALL_LIST_ELEMENTS (bgp->peer, node, nnode, peer))
- {
- if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
- continue;
-
- switch (type)
- {
- case show_all:
- bgp_show_peer (vty, peer, use_json, json);
- break;
- case show_peer:
- if (conf_if)
- {
- if ((peer->conf_if && !strcmp(peer->conf_if, conf_if)) ||
- (peer->hostname && !strcmp(peer->hostname, conf_if)))
- {
- find = 1;
- bgp_show_peer (vty, peer, use_json, json);
- }
- }
- else
- {
- if (sockunion_same (&peer->su, su))
- {
- find = 1;
- bgp_show_peer (vty, peer, use_json, json);
- }
- }
- break;
- }
- }
-
- if (type == show_peer && ! find)
- {
- if (use_json)
- json_object_boolean_true_add(json, "bgpNoSuchNeighbor");
- else
- vty_out (vty, "%% No such neighbor%s", VTY_NEWLINE);
- }
-
- if (use_json)
- {
- vty_out (vty, "%s%s", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY), VTY_NEWLINE);
- json_object_free(json);
- }
- else
- {
- vty_out (vty, "%s", VTY_NEWLINE);
- }
-
- return CMD_SUCCESS;
-}
-
-static void
-bgp_show_all_instances_neighbors_vty (struct vty *vty, u_char use_json)
-{
- struct listnode *node, *nnode;
- struct bgp *bgp;
- json_object *json = NULL;
- int is_first = 1;
-
- if (use_json)
- vty_out (vty, "{%s", VTY_NEWLINE);
-
- for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
- {
- if (use_json)
- {
- if (!(json = json_object_new_object()))
- {
- zlog_err("Unable to allocate memory for JSON object");
- vty_out (vty,
- "{\"error\": {\"message:\": \"Unable to allocate memory for JSON object\"}}}%s",
- VTY_NEWLINE);
- return;
- }
-
- json_object_int_add(json, "vrfId",
- (bgp->vrf_id == VRF_UNKNOWN)
- ? -1 : bgp->vrf_id);
- json_object_string_add(json, "vrfName",
- (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- ? "Default" : bgp->name);
-
- if (! is_first)
- vty_out (vty, ",%s", VTY_NEWLINE);
- else
- is_first = 0;
-
- vty_out(vty, "\"%s\":", (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- ? "Default" : bgp->name);
- }
- else
- {
- vty_out (vty, "%sInstance %s:%s",
- VTY_NEWLINE,
- (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
- ? "Default" : bgp->name,
- VTY_NEWLINE);
- }
- bgp_show_neighbor (vty, bgp, show_all, NULL, NULL, use_json, json);
- }
-
- if (use_json)
- vty_out (vty, "}%s", VTY_NEWLINE);
-}
-
-static int
-bgp_show_neighbor_vty (struct vty *vty, const char *name,
- enum show_type type, const char *ip_str, u_char use_json)
-{
- int ret;
- struct bgp *bgp;
- union sockunion su;
- json_object *json = NULL;
-
- if (use_json)
- json = json_object_new_object();
-
- if (name)
- {
- if (strmatch(name, "all"))
- {
- bgp_show_all_instances_neighbors_vty (vty, use_json);
- return CMD_SUCCESS;
- }
- else
- {
- bgp = bgp_lookup_by_name (name);
- if (! bgp)
- {
- if (use_json)
- {
- json_object_boolean_true_add(json, "bgpNoSuchInstance");
- vty_out (vty, "%s%s", json_object_to_json_string_ext(json, JSON_C_TO_STRING_PRETTY), VTY_NEWLINE);
- json_object_free(json);
- }
- else
- vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
-
- return CMD_WARNING;
- }
- }
- }
- else
- {
- bgp = bgp_get_default ();
- }
-
- if (bgp)
- {
- if (ip_str)
- {
- ret = str2sockunion (ip_str, &su);
- if (ret < 0)
- bgp_show_neighbor (vty, bgp, type, NULL, ip_str, use_json, json);
- else
- bgp_show_neighbor (vty, bgp, type, &su, NULL, use_json, json);
- }
- else
- {
- bgp_show_neighbor (vty, bgp, type, NULL, NULL, use_json, json);
- }
- }
-
- return CMD_SUCCESS;
+ bgp = p->bgp;
+
+ if (use_json)
+ json_neigh = json_object_new_object();
+
+ memset(dn_flag, '\0', sizeof(dn_flag));
+ if (!p->conf_if && peer_dynamic_neighbor(p))
+ dn_flag[0] = '*';
+
+ if (!use_json) {
+ if (p->conf_if) /* Configured interface name. */
+ vty_out(vty, "BGP neighbor on %s: %s, ", p->conf_if,
+ BGP_PEER_SU_UNSPEC(p)
+ ? "None"
+ : sockunion2str(&p->su, buf,
+ SU_ADDRSTRLEN));
+ else /* Configured IP address. */
+ vty_out(vty, "BGP neighbor is %s%s, ", dn_flag,
+ p->host);
+ }
+
+ if (use_json) {
+ if (p->conf_if && BGP_PEER_SU_UNSPEC(p))
+ json_object_string_add(json_neigh, "bgpNeighborAddr",
+ "none");
+ else if (p->conf_if && !BGP_PEER_SU_UNSPEC(p))
+ json_object_string_add(
+ json_neigh, "bgpNeighborAddr",
+ sockunion2str(&p->su, buf, SU_ADDRSTRLEN));
+
+ json_object_int_add(json_neigh, "remoteAs", p->as);
+
+ if (p->change_local_as)
+ json_object_int_add(json_neigh, "localAs",
+ p->change_local_as);
+ else
+ json_object_int_add(json_neigh, "localAs", p->local_as);
+
+ if (CHECK_FLAG(p->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND))
+ json_object_boolean_true_add(json_neigh,
+ "localAsNoPrepend");
+
+ if (CHECK_FLAG(p->flags, PEER_FLAG_LOCAL_AS_REPLACE_AS))
+ json_object_boolean_true_add(json_neigh,
+ "localAsReplaceAs");
+ } else {
+ if ((p->as_type == AS_SPECIFIED) || (p->as_type == AS_EXTERNAL)
+ || (p->as_type == AS_INTERNAL))
+ vty_out(vty, "remote AS %u, ", p->as);
+ else
+ vty_out(vty, "remote AS Unspecified, ");
+ vty_out(vty, "local AS %u%s%s, ",
+ p->change_local_as ? p->change_local_as : p->local_as,
+ CHECK_FLAG(p->flags, PEER_FLAG_LOCAL_AS_NO_PREPEND)
+ ? " no-prepend"
+ : "",
+ CHECK_FLAG(p->flags, PEER_FLAG_LOCAL_AS_REPLACE_AS)
+ ? " replace-as"
+ : "");
+ }
+ /* peer type internal, external, confed-internal or confed-external */
+ if (p->as == p->local_as) {
+ if (use_json) {
+ if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION))
+ json_object_boolean_true_add(
+ json_neigh, "nbrConfedInternalLink");
+ else
+ json_object_boolean_true_add(json_neigh,
+ "nbrInternalLink");
+ } else {
+ if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION))
+ vty_out(vty, "confed-internal link%s",
+ VTY_NEWLINE);
+ else
+ vty_out(vty, "internal link%s", VTY_NEWLINE);
+ }
+ } else {
+ if (use_json) {
+ if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION))
+ json_object_boolean_true_add(
+ json_neigh, "nbrConfedExternalLink");
+ else
+ json_object_boolean_true_add(json_neigh,
+ "nbrExternalLink");
+ } else {
+ if (bgp_confederation_peers_check(bgp, p->as))
+ vty_out(vty, "confed-external link%s",
+ VTY_NEWLINE);
+ else
+ vty_out(vty, "external link%s", VTY_NEWLINE);
+ }
+ }
+
+ /* Description. */
+ if (p->desc) {
+ if (use_json)
+ json_object_string_add(json_neigh, "nbrDesc", p->desc);
+ else
+ vty_out(vty, " Description: %s%s", p->desc,
+ VTY_NEWLINE);
+ }
+
+ if (p->hostname) {
+ if (use_json) {
+ if (p->hostname)
+ json_object_string_add(json_neigh, "hostname",
+ p->hostname);
+
+ if (p->domainname)
+ json_object_string_add(json_neigh, "domainname",
+ p->domainname);
+ } else {
+ if (p->domainname && (p->domainname[0] != '\0'))
+ vty_out(vty, "Hostname: %s.%s%s", p->hostname,
+ p->domainname, VTY_NEWLINE);
+ else
+ vty_out(vty, "Hostname: %s%s", p->hostname,
+ VTY_NEWLINE);
+ }
+ }
+
+ /* Peer-group */
+ if (p->group) {
+ if (use_json) {
+ json_object_string_add(json_neigh, "peerGroup",
+ p->group->name);
+
+ if (dn_flag[0]) {
+ struct prefix prefix, *range = NULL;
+
+ sockunion2hostprefix(&(p->su), &prefix);
+ range = peer_group_lookup_dynamic_neighbor_range(
+ p->group, &prefix);
+
+ if (range) {
+ prefix2str(range, buf1, sizeof(buf1));
+ json_object_string_add(
+ json_neigh,
+ "peerSubnetRangeGroup", buf1);
+ }
+ }
+ } else {
+ vty_out(vty,
+ " Member of peer-group %s for session parameters%s",
+ p->group->name, VTY_NEWLINE);
+
+ if (dn_flag[0]) {
+ struct prefix prefix, *range = NULL;
+
+ sockunion2hostprefix(&(p->su), &prefix);
+ range = peer_group_lookup_dynamic_neighbor_range(
+ p->group, &prefix);
+
+ if (range) {
+ prefix2str(range, buf1, sizeof(buf1));
+ vty_out(vty,
+ " Belongs to the subnet range group: %s%s",
+ buf1, VTY_NEWLINE);
+ }
+ }
+ }
+ }
+
+ if (use_json) {
+ /* Administrative shutdown. */
+ if (CHECK_FLAG(p->flags, PEER_FLAG_SHUTDOWN))
+ json_object_boolean_true_add(json_neigh,
+ "adminShutDown");
+
+ /* BGP Version. */
+ json_object_int_add(json_neigh, "bgpVersion", 4);
+ json_object_string_add(
+ json_neigh, "remoteRouterId",
+ inet_ntop(AF_INET, &p->remote_id, buf1, sizeof(buf1)));
+
+ /* Confederation */
+ if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION)
+ && bgp_confederation_peers_check(bgp, p->as))
+ json_object_boolean_true_add(json_neigh,
+ "nbrCommonAdmin");
+
+ /* Status. */
+ json_object_string_add(
+ json_neigh, "bgpState",
+ lookup_msg(bgp_status_msg, p->status, NULL));
+
+ if (p->status == Established) {
+ time_t uptime;
+ struct tm *tm;
+
+ uptime = bgp_clock();
+ uptime -= p->uptime;
+ tm = gmtime(&uptime);
+ epoch_tbuf = time(NULL) - uptime;
+
+ json_object_int_add(json_neigh, "bgpTimerUp",
+ (tm->tm_sec * 1000)
+ + (tm->tm_min * 60000)
+ + (tm->tm_hour * 3600000));
+ json_object_string_add(json_neigh, "bgpTimerUpString",
+ peer_uptime(p->uptime, timebuf,
+ BGP_UPTIME_LEN, 0,
+ NULL));
+ json_object_int_add(json_neigh,
+ "bgpTimerUpEstablishedEpoch",
+ epoch_tbuf);
+ }
+
+ else if (p->status == Active) {
+ if (CHECK_FLAG(p->flags, PEER_FLAG_PASSIVE))
+ json_object_string_add(json_neigh, "bgpStateIs",
+ "passive");
+ else if (CHECK_FLAG(p->sflags, PEER_STATUS_NSF_WAIT))
+ json_object_string_add(json_neigh, "bgpStateIs",
+ "passiveNSF");
+ }
+
+ /* read timer */
+ time_t uptime;
+ struct tm *tm;
+
+ uptime = bgp_clock();
+ uptime -= p->readtime;
+ tm = gmtime(&uptime);
+ json_object_int_add(json_neigh, "bgpTimerLastRead",
+ (tm->tm_sec * 1000) + (tm->tm_min * 60000)
+ + (tm->tm_hour * 3600000));
+
+ uptime = bgp_clock();
+ uptime -= p->last_write;
+ tm = gmtime(&uptime);
+ json_object_int_add(json_neigh, "bgpTimerLastWrite",
+ (tm->tm_sec * 1000) + (tm->tm_min * 60000)
+ + (tm->tm_hour * 3600000));
+
+ uptime = bgp_clock();
+ uptime -= p->update_time;
+ tm = gmtime(&uptime);
+ json_object_int_add(json_neigh, "bgpInUpdateElapsedTimeMsecs",
+ (tm->tm_sec * 1000) + (tm->tm_min * 60000)
+ + (tm->tm_hour * 3600000));
+
+ /* Configured timer values. */
+ json_object_int_add(json_neigh, "bgpTimerHoldTimeMsecs",
+ p->v_holdtime * 1000);
+ json_object_int_add(json_neigh,
+ "bgpTimerKeepAliveIntervalMsecs",
+ p->v_keepalive * 1000);
+
+ if (CHECK_FLAG(p->config, PEER_CONFIG_TIMER)) {
+ json_object_int_add(json_neigh,
+ "bgpTimerConfiguredHoldTimeMsecs",
+ p->holdtime * 1000);
+ json_object_int_add(
+ json_neigh,
+ "bgpTimerConfiguredKeepAliveIntervalMsecs",
+ p->keepalive * 1000);
+ }
+ } else {
+ /* Administrative shutdown. */
+ if (CHECK_FLAG(p->flags, PEER_FLAG_SHUTDOWN))
+ vty_out(vty, " Administratively shut down%s",
+ VTY_NEWLINE);
+
+ /* BGP Version. */
+ vty_out(vty, " BGP version 4");
+ vty_out(vty, ", remote router ID %s%s",
+ inet_ntop(AF_INET, &p->remote_id, buf1, sizeof(buf1)),
+ VTY_NEWLINE);
+
+ /* Confederation */
+ if (CHECK_FLAG(bgp->config, BGP_CONFIG_CONFEDERATION)
+ && bgp_confederation_peers_check(bgp, p->as))
+ vty_out(vty, " Neighbor under common administration%s",
+ VTY_NEWLINE);
+
+ /* Status. */
+ vty_out(vty, " BGP state = %s",
+ lookup_msg(bgp_status_msg, p->status, NULL));
+
+ if (p->status == Established)
+ vty_out(vty, ", up for %8s",
+ peer_uptime(p->uptime, timebuf, BGP_UPTIME_LEN,
+ 0, NULL));
+
+ else if (p->status == Active) {
+ if (CHECK_FLAG(p->flags, PEER_FLAG_PASSIVE))
+ vty_out(vty, " (passive)");
+ else if (CHECK_FLAG(p->sflags, PEER_STATUS_NSF_WAIT))
+ vty_out(vty, " (NSF passive)");
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ /* read timer */
+ vty_out(vty, " Last read %s",
+ peer_uptime(p->readtime, timebuf, BGP_UPTIME_LEN, 0,
+ NULL));
+ vty_out(vty, ", Last write %s%s",
+ peer_uptime(p->last_write, timebuf, BGP_UPTIME_LEN, 0,
+ NULL),
+ VTY_NEWLINE);
+
+ /* Configured timer values. */
+ vty_out(vty,
+ " Hold time is %d, keepalive interval is %d seconds%s",
+ p->v_holdtime, p->v_keepalive, VTY_NEWLINE);
+ if (CHECK_FLAG(p->config, PEER_CONFIG_TIMER)) {
+ vty_out(vty, " Configured hold time is %d",
+ p->holdtime);
+ vty_out(vty, ", keepalive interval is %d seconds%s",
+ p->keepalive, VTY_NEWLINE);
+ }
+ }
+ /* Capability. */
+ if (p->status == Established) {
+ if (p->cap || p->afc_adv[AFI_IP][SAFI_UNICAST]
+ || p->afc_recv[AFI_IP][SAFI_UNICAST]
+ || p->afc_adv[AFI_IP][SAFI_MULTICAST]
+ || p->afc_recv[AFI_IP][SAFI_MULTICAST]
+ || p->afc_adv[AFI_IP6][SAFI_UNICAST]
+ || p->afc_recv[AFI_IP6][SAFI_UNICAST]
+ || p->afc_adv[AFI_IP6][SAFI_MULTICAST]
+ || p->afc_recv[AFI_IP6][SAFI_MULTICAST]
+ || p->afc_adv[AFI_IP6][SAFI_MPLS_VPN]
+ || p->afc_recv[AFI_IP6][SAFI_MPLS_VPN]
+ || p->afc_adv[AFI_IP6][SAFI_ENCAP]
+ || p->afc_recv[AFI_IP6][SAFI_ENCAP]
+ || p->afc_adv[AFI_IP][SAFI_ENCAP]
+ || p->afc_recv[AFI_IP][SAFI_ENCAP]
+ || p->afc_adv[AFI_IP][SAFI_MPLS_VPN]
+ || p->afc_recv[AFI_IP][SAFI_MPLS_VPN]) {
+ if (use_json) {
+ json_object *json_cap = NULL;
+
+ json_cap = json_object_new_object();
+
+ /* AS4 */
+ if (CHECK_FLAG(p->cap, PEER_CAP_AS4_RCV)
+ || CHECK_FLAG(p->cap, PEER_CAP_AS4_ADV)) {
+ if (CHECK_FLAG(p->cap, PEER_CAP_AS4_ADV)
+ && CHECK_FLAG(p->cap,
+ PEER_CAP_AS4_RCV))
+ json_object_string_add(
+ json_cap, "4byteAs",
+ "advertisedAndReceived");
+ else if (CHECK_FLAG(p->cap,
+ PEER_CAP_AS4_ADV))
+ json_object_string_add(
+ json_cap, "4byteAs",
+ "advertised");
+ else if (CHECK_FLAG(p->cap,
+ PEER_CAP_AS4_RCV))
+ json_object_string_add(
+ json_cap, "4byteAs",
+ "received");
+ }
+
+ /* AddPath */
+ if (CHECK_FLAG(p->cap, PEER_CAP_ADDPATH_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_ADDPATH_ADV)) {
+ json_object *json_add = NULL;
+ const char *print_store;
+
+ json_add = json_object_new_object();
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ json_object *json_sub =
+ NULL;
+ json_sub =
+ json_object_new_object();
+ print_store =
+ afi_safi_print(
+ afi,
+ safi);
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV)) {
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ && CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "txAdvertisedAndReceived");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV))
+ json_object_boolean_true_add(
+ json_sub,
+ "txAdvertised");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "txReceived");
+ }
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV)) {
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ && CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "rxAdvertisedAndReceived");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV))
+ json_object_boolean_true_add(
+ json_sub,
+ "rxAdvertised");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "rxReceived");
+ }
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
+ json_object_object_add(
+ json_add,
+ print_store,
+ json_sub);
+ else
+ json_object_free(
+ json_sub);
+ }
+
+ json_object_object_add(
+ json_cap, "addPath", json_add);
+ }
+
+ /* Dynamic */
+ if (CHECK_FLAG(p->cap, PEER_CAP_DYNAMIC_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_DYNAMIC_ADV)) {
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_DYNAMIC_ADV)
+ && CHECK_FLAG(p->cap,
+ PEER_CAP_DYNAMIC_RCV))
+ json_object_string_add(
+ json_cap, "dynamic",
+ "advertisedAndReceived");
+ else if (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_DYNAMIC_ADV))
+ json_object_string_add(
+ json_cap, "dynamic",
+ "advertised");
+ else if (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_DYNAMIC_RCV))
+ json_object_string_add(
+ json_cap, "dynamic",
+ "received");
+ }
+
+ /* Extended nexthop */
+ if (CHECK_FLAG(p->cap, PEER_CAP_ENHE_RCV)
+ || CHECK_FLAG(p->cap, PEER_CAP_ENHE_ADV)) {
+ json_object *json_nxt = NULL;
+ const char *print_store;
+
+
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_ADV)
+ && CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_RCV))
+ json_object_string_add(
+ json_cap,
+ "extendedNexthop",
+ "advertisedAndReceived");
+ else if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_ADV))
+ json_object_string_add(
+ json_cap,
+ "extendedNexthop",
+ "advertised");
+ else if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_RCV))
+ json_object_string_add(
+ json_cap,
+ "extendedNexthop",
+ "received");
+
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_RCV)) {
+ json_nxt =
+ json_object_new_object();
+
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (CHECK_FLAG(
+ p->af_cap
+ [AFI_IP]
+ [safi],
+ PEER_CAP_ENHE_AF_RCV)) {
+ print_store = afi_safi_print(
+ AFI_IP,
+ safi);
+ json_object_string_add(
+ json_nxt,
+ print_store,
+ "recieved");
+ }
+ }
+ json_object_object_add(
+ json_cap,
+ "extendedNexthopFamililesByPeer",
+ json_nxt);
+ }
+ }
+
+ /* Route Refresh */
+ if (CHECK_FLAG(p->cap, PEER_CAP_REFRESH_ADV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_NEW_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_OLD_RCV)) {
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_ADV)
+ && (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_NEW_RCV)
+ || CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV))) {
+ if (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV)
+ && CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_NEW_RCV))
+ json_object_string_add(
+ json_cap,
+ "routeRefresh",
+ "advertisedAndReceivedOldNew");
+ else {
+ if (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV))
+ json_object_string_add(
+ json_cap,
+ "routeRefresh",
+ "advertisedAndReceivedOld");
+ else
+ json_object_string_add(
+ json_cap,
+ "routeRefresh",
+ "advertisedAndReceivedNew");
+ }
+ } else if (
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_ADV))
+ json_object_string_add(
+ json_cap,
+ "routeRefresh",
+ "advertised");
+ else if (
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_NEW_RCV)
+ || CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV))
+ json_object_string_add(
+ json_cap,
+ "routeRefresh",
+ "received");
+ }
+
+ /* Multiprotocol Extensions */
+ json_object *json_multi = NULL;
+ json_multi = json_object_new_object();
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (p->afc_adv[afi][safi]
+ || p->afc_recv[afi][safi]) {
+ json_object
+ *json_exten =
+ NULL;
+ json_exten =
+ json_object_new_object();
+
+ if (p->afc_adv[afi]
+ [safi]
+ && p->afc_recv
+ [afi]
+ [safi])
+ json_object_boolean_true_add(
+ json_exten,
+ "advertisedAndReceived");
+ else if (p->afc_adv
+ [afi]
+ [safi])
+ json_object_boolean_true_add(
+ json_exten,
+ "advertised");
+ else if (p->afc_recv
+ [afi]
+ [safi])
+ json_object_boolean_true_add(
+ json_exten,
+ "received");
+
+ json_object_object_add(
+ json_multi,
+ afi_safi_print(
+ afi,
+ safi),
+ json_exten);
+ }
+ }
+ }
+ json_object_object_add(
+ json_cap, "multiprotocolExtensions",
+ json_multi);
+
+ /* Gracefull Restart */
+ if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_ADV)) {
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_ADV)
+ && CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_RCV))
+ json_object_string_add(
+ json_cap,
+ "gracefulRestart",
+ "advertisedAndReceived");
+ else if (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_RESTART_ADV))
+ json_object_string_add(
+ json_cap,
+ "gracefulRestartCapability",
+ "advertised");
+ else if (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_RESTART_RCV))
+ json_object_string_add(
+ json_cap,
+ "gracefulRestartCapability",
+ "received");
+
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_RCV)) {
+ int restart_af_count = 0;
+ json_object *json_restart =
+ NULL;
+ json_restart =
+ json_object_new_object();
+
+ json_object_int_add(
+ json_cap,
+ "gracefulRestartRemoteTimerMsecs",
+ p->v_gr_restart * 1000);
+
+ for (afi = AFI_IP;
+ afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX;
+ safi++) {
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_RCV)) {
+ json_object *json_sub =
+ NULL;
+ json_sub =
+ json_object_new_object();
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_PRESERVE_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "preserved");
+ restart_af_count++;
+ json_object_object_add(
+ json_restart,
+ afi_safi_print(
+ afi,
+ safi),
+ json_sub);
+ }
+ }
+ }
+ if (!restart_af_count) {
+ json_object_string_add(
+ json_cap,
+ "addressFamiliesByPeer",
+ "none");
+ json_object_free(
+ json_restart);
+ } else
+ json_object_object_add(
+ json_cap,
+ "addressFamiliesByPeer",
+ json_restart);
+ }
+ }
+ json_object_object_add(json_neigh,
+ "neighborCapabilities",
+ json_cap);
+ } else {
+ vty_out(vty, " Neighbor capabilities:%s",
+ VTY_NEWLINE);
+
+ /* AS4 */
+ if (CHECK_FLAG(p->cap, PEER_CAP_AS4_RCV)
+ || CHECK_FLAG(p->cap, PEER_CAP_AS4_ADV)) {
+ vty_out(vty, " 4 Byte AS:");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_AS4_ADV))
+ vty_out(vty, " advertised");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_AS4_RCV))
+ vty_out(vty, " %sreceived",
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_AS4_ADV)
+ ? "and "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ /* AddPath */
+ if (CHECK_FLAG(p->cap, PEER_CAP_ADDPATH_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_ADDPATH_ADV)) {
+ vty_out(vty, " AddPath:%s",
+ VTY_NEWLINE);
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV)) {
+ vty_out(vty,
+ " %s: TX ",
+ afi_safi_print(
+ afi,
+ safi));
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV))
+ vty_out(vty,
+ "advertised %s",
+ afi_safi_print(
+ afi,
+ safi));
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV))
+ vty_out(vty,
+ "%sreceived",
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ ? " and "
+ : "");
+
+ vty_out(vty,
+ "%s",
+ VTY_NEWLINE);
+ }
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ || CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV)) {
+ vty_out(vty,
+ " %s: RX ",
+ afi_safi_print(
+ afi,
+ safi));
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV))
+ vty_out(vty,
+ "advertised %s",
+ afi_safi_print(
+ afi,
+ safi));
+
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
+ vty_out(vty,
+ "%sreceived",
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ ? " and "
+ : "");
+
+ vty_out(vty,
+ "%s",
+ VTY_NEWLINE);
+ }
+ }
+ }
+
+ /* Dynamic */
+ if (CHECK_FLAG(p->cap, PEER_CAP_DYNAMIC_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_DYNAMIC_ADV)) {
+ vty_out(vty, " Dynamic:");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_DYNAMIC_ADV))
+ vty_out(vty, " advertised");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_DYNAMIC_RCV))
+ vty_out(vty, " %sreceived",
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_DYNAMIC_ADV)
+ ? "and "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ /* Extended nexthop */
+ if (CHECK_FLAG(p->cap, PEER_CAP_ENHE_RCV)
+ || CHECK_FLAG(p->cap, PEER_CAP_ENHE_ADV)) {
+ vty_out(vty, " Extended nexthop:");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_ADV))
+ vty_out(vty, " advertised");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_RCV))
+ vty_out(vty, " %sreceived",
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_ENHE_ADV)
+ ? "and "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_ENHE_RCV)) {
+ vty_out(vty,
+ " Address families by peer:%s ",
+ VTY_NEWLINE);
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++)
+ if (CHECK_FLAG(
+ p->af_cap
+ [AFI_IP]
+ [safi],
+ PEER_CAP_ENHE_AF_RCV))
+ vty_out(vty,
+ " %s%s",
+ afi_safi_print(
+ AFI_IP,
+ safi),
+ VTY_NEWLINE);
+ }
+ }
+
+ /* Route Refresh */
+ if (CHECK_FLAG(p->cap, PEER_CAP_REFRESH_ADV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_NEW_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_OLD_RCV)) {
+ vty_out(vty, " Route refresh:");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_ADV))
+ vty_out(vty, " advertised");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_REFRESH_NEW_RCV)
+ || CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV))
+ vty_out(vty, " %sreceived(%s)",
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_ADV)
+ ? "and "
+ : "",
+ (CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV)
+ && CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_NEW_RCV))
+ ? "old & new"
+ : CHECK_FLAG(
+ p->cap,
+ PEER_CAP_REFRESH_OLD_RCV)
+ ? "old"
+ : "new");
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ /* Multiprotocol Extensions */
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++)
+ if (p->afc_adv[afi][safi]
+ || p->afc_recv[afi][safi]) {
+ vty_out(vty,
+ " Address Family %s:",
+ afi_safi_print(
+ afi,
+ safi));
+ if (p->afc_adv[afi]
+ [safi])
+ vty_out(vty,
+ " advertised");
+ if (p->afc_recv[afi]
+ [safi])
+ vty_out(vty,
+ " %sreceived",
+ p->afc_adv[afi]
+ [safi]
+ ? "and "
+ : "");
+ vty_out(vty, "%s",
+ VTY_NEWLINE);
+ }
+
+ /* Hostname capability */
+ if (CHECK_FLAG(p->cap, PEER_CAP_HOSTNAME_ADV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_HOSTNAME_RCV)) {
+ vty_out(vty,
+ " Hostname Capability:");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_HOSTNAME_ADV))
+ vty_out(vty, " advertised");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_HOSTNAME_RCV))
+ vty_out(vty, " %sreceived",
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_HOSTNAME_ADV)
+ ? "and "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ /* Gracefull Restart */
+ if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_RCV)
+ || CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_ADV)) {
+ vty_out(vty,
+ " Graceful Restart Capabilty:");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_ADV))
+ vty_out(vty, " advertised");
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_RCV))
+ vty_out(vty, " %sreceived",
+ CHECK_FLAG(
+ p->cap,
+ PEER_CAP_RESTART_ADV)
+ ? "and "
+ : "");
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ if (CHECK_FLAG(p->cap,
+ PEER_CAP_RESTART_RCV)) {
+ int restart_af_count = 0;
+
+ vty_out(vty,
+ " Remote Restart timer is %d seconds%s",
+ p->v_gr_restart,
+ VTY_NEWLINE);
+ vty_out(vty,
+ " Address families by peer:%s ",
+ VTY_NEWLINE);
+
+ for (afi = AFI_IP;
+ afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX;
+ safi++)
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_RCV)) {
+ vty_out(vty,
+ "%s%s(%s)",
+ restart_af_count
+ ? ", "
+ : "",
+ afi_safi_print(
+ afi,
+ safi),
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_PRESERVE_RCV)
+ ? "preserved"
+ : "not preserved");
+ restart_af_count++;
+ }
+ if (!restart_af_count)
+ vty_out(vty, "none");
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ }
+ }
+ }
+ }
+
+ /* graceful restart information */
+ if (CHECK_FLAG(p->cap, PEER_CAP_RESTART_RCV) || p->t_gr_restart
+ || p->t_gr_stale) {
+ json_object *json_grace = NULL;
+ json_object *json_grace_send = NULL;
+ json_object *json_grace_recv = NULL;
+ int eor_send_af_count = 0;
+ int eor_receive_af_count = 0;
+
+ if (use_json) {
+ json_grace = json_object_new_object();
+ json_grace_send = json_object_new_object();
+ json_grace_recv = json_object_new_object();
+
+ if (p->status == Established) {
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (CHECK_FLAG(
+ p->af_sflags[afi]
+ [safi],
+ PEER_STATUS_EOR_SEND)) {
+ json_object_boolean_true_add(
+ json_grace_send,
+ afi_safi_print(
+ afi,
+ safi));
+ eor_send_af_count++;
+ }
+ }
+ }
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (CHECK_FLAG(
+ p->af_sflags[afi]
+ [safi],
+ PEER_STATUS_EOR_RECEIVED)) {
+ json_object_boolean_true_add(
+ json_grace_recv,
+ afi_safi_print(
+ afi,
+ safi));
+ eor_receive_af_count++;
+ }
+ }
+ }
+ }
+
+ json_object_object_add(json_grace, "endOfRibSend",
+ json_grace_send);
+ json_object_object_add(json_grace, "endOfRibRecv",
+ json_grace_recv);
+
+ if (p->t_gr_restart)
+ json_object_int_add(json_grace,
+ "gracefulRestartTimerMsecs",
+ thread_timer_remain_second(
+ p->t_gr_restart)
+ * 1000);
+
+ if (p->t_gr_stale)
+ json_object_int_add(
+ json_grace,
+ "gracefulStalepathTimerMsecs",
+ thread_timer_remain_second(
+ p->t_gr_stale)
+ * 1000);
+
+ json_object_object_add(
+ json_neigh, "gracefulRestartInfo", json_grace);
+ } else {
+ vty_out(vty, " Graceful restart informations:%s",
+ VTY_NEWLINE);
+ if (p->status == Established) {
+ vty_out(vty, " End-of-RIB send: ");
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (CHECK_FLAG(
+ p->af_sflags[afi]
+ [safi],
+ PEER_STATUS_EOR_SEND)) {
+ vty_out(vty, "%s%s",
+ eor_send_af_count
+ ? ", "
+ : "",
+ afi_safi_print(
+ afi,
+ safi));
+ eor_send_af_count++;
+ }
+ }
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
+ vty_out(vty, " End-of-RIB received: ");
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (safi = SAFI_UNICAST;
+ safi < SAFI_MAX; safi++) {
+ if (CHECK_FLAG(
+ p->af_sflags[afi]
+ [safi],
+ PEER_STATUS_EOR_RECEIVED)) {
+ vty_out(vty, "%s%s",
+ eor_receive_af_count
+ ? ", "
+ : "",
+ afi_safi_print(
+ afi,
+ safi));
+ eor_receive_af_count++;
+ }
+ }
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ if (p->t_gr_restart)
+ vty_out(vty,
+ " The remaining time of restart timer is %ld%s",
+ thread_timer_remain_second(
+ p->t_gr_restart),
+ VTY_NEWLINE);
+
+ if (p->t_gr_stale)
+ vty_out(vty,
+ " The remaining time of stalepath timer is %ld%s",
+ thread_timer_remain_second(
+ p->t_gr_stale),
+ VTY_NEWLINE);
+ }
+ }
+ if (use_json) {
+ json_object *json_stat = NULL;
+ json_stat = json_object_new_object();
+ /* Packet counts. */
+ json_object_int_add(json_stat, "depthInq", 0);
+ json_object_int_add(json_stat, "depthOutq",
+ (unsigned long)p->obuf->count);
+ json_object_int_add(json_stat, "opensSent", p->open_out);
+ json_object_int_add(json_stat, "opensRecv", p->open_in);
+ json_object_int_add(json_stat, "notificationsSent",
+ p->notify_out);
+ json_object_int_add(json_stat, "notificationsRecv",
+ p->notify_in);
+ json_object_int_add(json_stat, "updatesSent", p->update_out);
+ json_object_int_add(json_stat, "updatesRecv", p->update_in);
+ json_object_int_add(json_stat, "keepalivesSent",
+ p->keepalive_out);
+ json_object_int_add(json_stat, "keepalivesRecv",
+ p->keepalive_in);
+ json_object_int_add(json_stat, "routeRefreshSent",
+ p->refresh_out);
+ json_object_int_add(json_stat, "routeRefreshRecv",
+ p->refresh_in);
+ json_object_int_add(json_stat, "capabilitySent",
+ p->dynamic_cap_out);
+ json_object_int_add(json_stat, "capabilityRecv",
+ p->dynamic_cap_in);
+ json_object_int_add(json_stat, "totalSent",
+ p->open_out + p->notify_out + p->update_out
+ + p->keepalive_out + p->refresh_out
+ + p->dynamic_cap_out);
+ json_object_int_add(json_stat, "totalRecv",
+ p->open_in + p->notify_in + p->update_in
+ + p->keepalive_in + p->refresh_in
+ + p->dynamic_cap_in);
+ json_object_object_add(json_neigh, "messageStats", json_stat);
+ } else {
+ /* Packet counts. */
+ vty_out(vty, " Message statistics:%s", VTY_NEWLINE);
+ vty_out(vty, " Inq depth is 0%s", VTY_NEWLINE);
+ vty_out(vty, " Outq depth is %lu%s",
+ (unsigned long)p->obuf->count, VTY_NEWLINE);
+ vty_out(vty, " Sent Rcvd%s",
+ VTY_NEWLINE);
+ vty_out(vty, " Opens: %10d %10d%s", p->open_out,
+ p->open_in, VTY_NEWLINE);
+ vty_out(vty, " Notifications: %10d %10d%s", p->notify_out,
+ p->notify_in, VTY_NEWLINE);
+ vty_out(vty, " Updates: %10d %10d%s", p->update_out,
+ p->update_in, VTY_NEWLINE);
+ vty_out(vty, " Keepalives: %10d %10d%s", p->keepalive_out,
+ p->keepalive_in, VTY_NEWLINE);
+ vty_out(vty, " Route Refresh: %10d %10d%s", p->refresh_out,
+ p->refresh_in, VTY_NEWLINE);
+ vty_out(vty, " Capability: %10d %10d%s",
+ p->dynamic_cap_out, p->dynamic_cap_in, VTY_NEWLINE);
+ vty_out(vty, " Total: %10d %10d%s",
+ p->open_out + p->notify_out + p->update_out
+ + p->keepalive_out + p->refresh_out
+ + p->dynamic_cap_out,
+ p->open_in + p->notify_in + p->update_in
+ + p->keepalive_in + p->refresh_in
+ + p->dynamic_cap_in,
+ VTY_NEWLINE);
+ }
+
+ if (use_json) {
+ /* advertisement-interval */
+ json_object_int_add(json_neigh,
+ "minBtwnAdvertisementRunsTimerMsecs",
+ p->v_routeadv * 1000);
+
+ /* Update-source. */
+ if (p->update_if || p->update_source) {
+ if (p->update_if)
+ json_object_string_add(json_neigh,
+ "updateSource",
+ p->update_if);
+ else if (p->update_source)
+ json_object_string_add(
+ json_neigh, "updateSource",
+ sockunion2str(p->update_source, buf1,
+ SU_ADDRSTRLEN));
+ }
+ } else {
+ /* advertisement-interval */
+ vty_out(vty,
+ " Minimum time between advertisement runs is %d seconds%s",
+ p->v_routeadv, VTY_NEWLINE);
+
+ /* Update-source. */
+ if (p->update_if || p->update_source) {
+ vty_out(vty, " Update source is ");
+ if (p->update_if)
+ vty_out(vty, "%s", p->update_if);
+ else if (p->update_source)
+ vty_out(vty, "%s",
+ sockunion2str(p->update_source, buf1,
+ SU_ADDRSTRLEN));
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ /* Address Family Information */
+ json_object *json_hold = NULL;
+
+ if (use_json)
+ json_hold = json_object_new_object();
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
+ if (p->afc[afi][safi])
+ bgp_show_peer_afi(vty, p, afi, safi, use_json,
+ json_hold);
+
+ if (use_json) {
+ json_object_object_add(json_neigh, "addressFamilyInfo",
+ json_hold);
+ json_object_int_add(json_neigh, "connectionsEstablished",
+ p->established);
+ json_object_int_add(json_neigh, "connectionsDropped",
+ p->dropped);
+ } else
+ vty_out(vty, " Connections established %d; dropped %d%s",
+ p->established, p->dropped, VTY_NEWLINE);
+
+ if (!p->last_reset) {
+ if (use_json)
+ json_object_string_add(json_neigh, "lastReset",
+ "never");
+ else
+ vty_out(vty, " Last reset never%s", VTY_NEWLINE);
+ } else {
+ if (use_json) {
+ time_t uptime;
+ struct tm *tm;
+
+ uptime = bgp_clock();
+ uptime -= p->resettime;
+ tm = gmtime(&uptime);
+ json_object_int_add(json_neigh, "lastResetTimerMsecs",
+ (tm->tm_sec * 1000)
+ + (tm->tm_min * 60000)
+ + (tm->tm_hour * 3600000));
+ json_object_string_add(
+ json_neigh, "lastResetDueTo",
+ peer_down_str[(int)p->last_reset]);
+ if (p->last_reset == PEER_DOWN_NOTIFY_SEND
+ || p->last_reset == PEER_DOWN_NOTIFY_RECEIVED) {
+ char errorcodesubcode_hexstr[5];
+ char errorcodesubcode_str[256];
+
+ code_str = bgp_notify_code_str(p->notify.code);
+ subcode_str = bgp_notify_subcode_str(
+ p->notify.code, p->notify.subcode);
+
+ sprintf(errorcodesubcode_hexstr, "%02X%02X",
+ p->notify.code, p->notify.subcode);
+ json_object_string_add(json_neigh,
+ "lastErrorCodeSubcode",
+ errorcodesubcode_hexstr);
+ snprintf(errorcodesubcode_str, 255, "%s%s",
+ code_str, subcode_str);
+ json_object_string_add(json_neigh,
+ "lastNotificationReason",
+ errorcodesubcode_str);
+ if (p->last_reset == PEER_DOWN_NOTIFY_RECEIVED
+ && p->notify.code == BGP_NOTIFY_CEASE
+ && (p->notify.subcode
+ == BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN
+ || p->notify.subcode
+ == BGP_NOTIFY_CEASE_ADMIN_RESET)
+ && p->notify.length) {
+ char msgbuf[1024];
+ const char *msg_str;
+
+ msg_str = bgp_notify_admin_message(
+ msgbuf, sizeof(msgbuf),
+ (u_char *)p->notify.data,
+ p->notify.length);
+ if (msg_str)
+ json_object_string_add(
+ json_neigh,
+ "lastShutdownDescription",
+ msg_str);
+ }
+ }
+ } else {
+ vty_out(vty, " Last reset %s, ",
+ peer_uptime(p->resettime, timebuf,
+ BGP_UPTIME_LEN, 0, NULL));
+
+ if (p->last_reset == PEER_DOWN_NOTIFY_SEND
+ || p->last_reset == PEER_DOWN_NOTIFY_RECEIVED) {
+ code_str = bgp_notify_code_str(p->notify.code);
+ subcode_str = bgp_notify_subcode_str(
+ p->notify.code, p->notify.subcode);
+ vty_out(vty, "due to NOTIFICATION %s (%s%s)%s",
+ p->last_reset == PEER_DOWN_NOTIFY_SEND
+ ? "sent"
+ : "received",
+ code_str, subcode_str, VTY_NEWLINE);
+ if (p->last_reset == PEER_DOWN_NOTIFY_RECEIVED
+ && p->notify.code == BGP_NOTIFY_CEASE
+ && (p->notify.subcode
+ == BGP_NOTIFY_CEASE_ADMIN_SHUTDOWN
+ || p->notify.subcode
+ == BGP_NOTIFY_CEASE_ADMIN_RESET)
+ && p->notify.length) {
+ char msgbuf[1024];
+ const char *msg_str;
+
+ msg_str = bgp_notify_admin_message(
+ msgbuf, sizeof(msgbuf),
+ (u_char *)p->notify.data,
+ p->notify.length);
+ if (msg_str)
+ vty_out(vty,
+ " Message: \"%s\"%s",
+ msg_str, VTY_NEWLINE);
+ }
+ } else {
+ vty_out(vty, "due to %s%s",
+ peer_down_str[(int)p->last_reset],
+ VTY_NEWLINE);
+ }
+
+ if (p->last_reset_cause_size) {
+ msg = p->last_reset_cause;
+ vty_out(vty,
+ " Message received that caused BGP to send a NOTIFICATION:%s ",
+ VTY_NEWLINE);
+ for (i = 1; i <= p->last_reset_cause_size;
+ i++) {
+ vty_out(vty, "%02X", *msg++);
+
+ if (i != p->last_reset_cause_size) {
+ if (i % 16 == 0) {
+ vty_out(vty, "%s ",
+ VTY_NEWLINE);
+ } else if (i % 4 == 0) {
+ vty_out(vty, " ");
+ }
+ }
+ }
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ }
+ }
+
+ if (CHECK_FLAG(p->sflags, PEER_STATUS_PREFIX_OVERFLOW)) {
+ if (use_json)
+ json_object_boolean_true_add(json_neigh,
+ "prefixesConfigExceedMax");
+ else
+ vty_out(vty,
+ " Peer had exceeded the max. no. of prefixes configured.%s",
+ VTY_NEWLINE);
+
+ if (p->t_pmax_restart) {
+ if (use_json) {
+ json_object_boolean_true_add(
+ json_neigh, "reducePrefixNumFrom");
+ json_object_int_add(json_neigh,
+ "restartInTimerMsec",
+ thread_timer_remain_second(
+ p->t_pmax_restart)
+ * 1000);
+ } else
+ vty_out(vty,
+ " Reduce the no. of prefix from %s, will restart in %ld seconds%s",
+ p->host, thread_timer_remain_second(
+ p->t_pmax_restart),
+ VTY_NEWLINE);
+ } else {
+ if (use_json)
+ json_object_boolean_true_add(
+ json_neigh,
+ "reducePrefixNumAndClearIpBgp");
+ else
+ vty_out(vty,
+ " Reduce the no. of prefix and clear ip bgp %s to restore peering%s",
+ p->host, VTY_NEWLINE);
+ }
+ }
+
+ /* EBGP Multihop and GTSM */
+ if (p->sort != BGP_PEER_IBGP) {
+ if (use_json) {
+ if (p->gtsm_hops > 0)
+ json_object_int_add(json_neigh,
+ "externalBgpNbrMaxHopsAway",
+ p->gtsm_hops);
+ else if (p->ttl > 1)
+ json_object_int_add(json_neigh,
+ "externalBgpNbrMaxHopsAway",
+ p->ttl);
+ } else {
+ if (p->gtsm_hops > 0)
+ vty_out(vty,
+ " External BGP neighbor may be up to %d hops away.%s",
+ p->gtsm_hops, VTY_NEWLINE);
+ else if (p->ttl > 1)
+ vty_out(vty,
+ " External BGP neighbor may be up to %d hops away.%s",
+ p->ttl, VTY_NEWLINE);
+ }
+ } else {
+ if (p->gtsm_hops > 0) {
+ if (use_json)
+ json_object_int_add(json_neigh,
+ "internalBgpNbrMaxHopsAway",
+ p->gtsm_hops);
+ else
+ vty_out(vty,
+ " Internal BGP neighbor may be up to %d hops away.%s",
+ p->gtsm_hops, VTY_NEWLINE);
+ }
+ }
+
+ /* Local address. */
+ if (p->su_local) {
+ if (use_json) {
+ json_object_string_add(json_neigh, "hostLocal",
+ sockunion2str(p->su_local, buf1,
+ SU_ADDRSTRLEN));
+ json_object_int_add(json_neigh, "portLocal",
+ ntohs(p->su_local->sin.sin_port));
+ } else
+ vty_out(vty, "Local host: %s, Local port: %d%s",
+ sockunion2str(p->su_local, buf1, SU_ADDRSTRLEN),
+ ntohs(p->su_local->sin.sin_port), VTY_NEWLINE);
+ }
+
+ /* Remote address. */
+ if (p->su_remote) {
+ if (use_json) {
+ json_object_string_add(json_neigh, "hostForeign",
+ sockunion2str(p->su_remote, buf1,
+ SU_ADDRSTRLEN));
+ json_object_int_add(json_neigh, "portForeign",
+ ntohs(p->su_remote->sin.sin_port));
+ } else
+ vty_out(vty, "Foreign host: %s, Foreign port: %d%s",
+ sockunion2str(p->su_remote, buf1,
+ SU_ADDRSTRLEN),
+ ntohs(p->su_remote->sin.sin_port), VTY_NEWLINE);
+ }
+
+ /* Nexthop display. */
+ if (p->su_local) {
+ if (use_json) {
+ json_object_string_add(json_neigh, "nexthop",
+ inet_ntop(AF_INET,
+ &p->nexthop.v4, buf1,
+ sizeof(buf1)));
+ json_object_string_add(json_neigh, "nexthopGlobal",
+ inet_ntop(AF_INET6,
+ &p->nexthop.v6_global,
+ buf1, sizeof(buf1)));
+ json_object_string_add(json_neigh, "nexthopLocal",
+ inet_ntop(AF_INET6,
+ &p->nexthop.v6_local,
+ buf1, sizeof(buf1)));
+ if (p->shared_network)
+ json_object_string_add(json_neigh,
+ "bgpConnection",
+ "sharedNetwork");
+ else
+ json_object_string_add(json_neigh,
+ "bgpConnection",
+ "nonSharedNetwork");
+ } else {
+ vty_out(vty, "Nexthop: %s%s",
+ inet_ntop(AF_INET, &p->nexthop.v4, buf1,
+ sizeof(buf1)),
+ VTY_NEWLINE);
+ vty_out(vty, "Nexthop global: %s%s",
+ inet_ntop(AF_INET6, &p->nexthop.v6_global, buf1,
+ sizeof(buf1)),
+ VTY_NEWLINE);
+ vty_out(vty, "Nexthop local: %s%s",
+ inet_ntop(AF_INET6, &p->nexthop.v6_local, buf1,
+ sizeof(buf1)),
+ VTY_NEWLINE);
+ vty_out(vty, "BGP connection: %s%s",
+ p->shared_network ? "shared network"
+ : "non shared network",
+ VTY_NEWLINE);
+ }
+ }
+
+ /* Timer information. */
+ if (use_json) {
+ json_object_int_add(json_neigh, "connectRetryTimer",
+ p->v_connect);
+ if (p->status == Established && p->rtt)
+ json_object_int_add(json_neigh, "estimatedRttInMsecs",
+ p->rtt);
+ if (p->t_start)
+ json_object_int_add(
+ json_neigh, "nextStartTimerDueInMsecs",
+ thread_timer_remain_second(p->t_start) * 1000);
+ if (p->t_connect)
+ json_object_int_add(
+ json_neigh, "nextConnectTimerDueInMsecs",
+ thread_timer_remain_second(p->t_connect)
+ * 1000);
+ if (p->t_routeadv) {
+ json_object_int_add(json_neigh, "mraiInterval",
+ p->v_routeadv);
+ json_object_int_add(
+ json_neigh, "mraiTimerExpireInMsecs",
+ thread_timer_remain_second(p->t_routeadv)
+ * 1000);
+ }
+
+ if (p->t_read)
+ json_object_string_add(json_neigh, "readThread", "on");
+ else
+ json_object_string_add(json_neigh, "readThread", "off");
+ if (p->t_write)
+ json_object_string_add(json_neigh, "writeThread", "on");
+ else
+ json_object_string_add(json_neigh, "writeThread",
+ "off");
+ } else {
+ vty_out(vty, "BGP Connect Retry Timer in Seconds: %d%s",
+ p->v_connect, VTY_NEWLINE);
+ if (p->status == Established && p->rtt)
+ vty_out(vty, "Estimated round trip time: %d ms%s",
+ p->rtt, VTY_NEWLINE);
+ if (p->t_start)
+ vty_out(vty, "Next start timer due in %ld seconds%s",
+ thread_timer_remain_second(p->t_start),
+ VTY_NEWLINE);
+ if (p->t_connect)
+ vty_out(vty, "Next connect timer due in %ld seconds%s",
+ thread_timer_remain_second(p->t_connect),
+ VTY_NEWLINE);
+ if (p->t_routeadv)
+ vty_out(vty,
+ "MRAI (interval %u) timer expires in %ld seconds%s",
+ p->v_routeadv,
+ thread_timer_remain_second(p->t_routeadv),
+ VTY_NEWLINE);
+
+ vty_out(vty, "Read thread: %s Write thread: %s%s",
+ p->t_read ? "on" : "off", p->t_write ? "on" : "off",
+ VTY_NEWLINE);
+ }
+
+ if (p->notify.code == BGP_NOTIFY_OPEN_ERR
+ && p->notify.subcode == BGP_NOTIFY_OPEN_UNSUP_CAPBL)
+ bgp_capability_vty_out(vty, p, use_json, json_neigh);
+
+ if (!use_json)
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ /* BFD information. */
+ bgp_bfd_show_info(vty, p, use_json, json_neigh);
+
+ if (use_json) {
+ if (p->conf_if) /* Configured interface name. */
+ json_object_object_add(json, p->conf_if, json_neigh);
+ else /* Configured IP address. */
+ json_object_object_add(json, p->host, json_neigh);
+ }
+}
+
+static int bgp_show_neighbor(struct vty *vty, struct bgp *bgp,
+ enum show_type type, union sockunion *su,
+ const char *conf_if, u_char use_json,
+ json_object *json)
+{
+ struct listnode *node, *nnode;
+ struct peer *peer;
+ int find = 0;
+
+ for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
+ if (!CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
+ continue;
+
+ switch (type) {
+ case show_all:
+ bgp_show_peer(vty, peer, use_json, json);
+ break;
+ case show_peer:
+ if (conf_if) {
+ if ((peer->conf_if
+ && !strcmp(peer->conf_if, conf_if))
+ || (peer->hostname
+ && !strcmp(peer->hostname, conf_if))) {
+ find = 1;
+ bgp_show_peer(vty, peer, use_json,
+ json);
+ }
+ } else {
+ if (sockunion_same(&peer->su, su)) {
+ find = 1;
+ bgp_show_peer(vty, peer, use_json,
+ json);
+ }
+ }
+ break;
+ }
+ }
+
+ if (type == show_peer && !find) {
+ if (use_json)
+ json_object_boolean_true_add(json, "bgpNoSuchNeighbor");
+ else
+ vty_out(vty, "%% No such neighbor%s", VTY_NEWLINE);
+ }
+
+ if (use_json) {
+ vty_out(vty, "%s%s", json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY),
+ VTY_NEWLINE);
+ json_object_free(json);
+ } else {
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ return CMD_SUCCESS;
+}
+
+static void bgp_show_all_instances_neighbors_vty(struct vty *vty,
+ u_char use_json)
+{
+ struct listnode *node, *nnode;
+ struct bgp *bgp;
+ json_object *json = NULL;
+ int is_first = 1;
+
+ if (use_json)
+ vty_out(vty, "{%s", VTY_NEWLINE);
+
+ for (ALL_LIST_ELEMENTS(bm->bgp, node, nnode, bgp)) {
+ if (use_json) {
+ if (!(json = json_object_new_object())) {
+ zlog_err(
+ "Unable to allocate memory for JSON object");
+ vty_out(vty,
+ "{\"error\": {\"message:\": \"Unable to allocate memory for JSON object\"}}}%s",
+ VTY_NEWLINE);
+ return;
+ }
+
+ json_object_int_add(json, "vrfId",
+ (bgp->vrf_id == VRF_UNKNOWN)
+ ? -1
+ : bgp->vrf_id);
+ json_object_string_add(
+ json, "vrfName",
+ (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name);
+
+ if (!is_first)
+ vty_out(vty, ",%s", VTY_NEWLINE);
+ else
+ is_first = 0;
+
+ vty_out(vty, "\"%s\":",
+ (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name);
+ } else {
+ vty_out(vty, "%sInstance %s:%s", VTY_NEWLINE,
+ (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name,
+ VTY_NEWLINE);
+ }
+ bgp_show_neighbor(vty, bgp, show_all, NULL, NULL, use_json,
+ json);
+ }
+
+ if (use_json)
+ vty_out(vty, "}%s", VTY_NEWLINE);
+}
+
+static int bgp_show_neighbor_vty(struct vty *vty, const char *name,
+ enum show_type type, const char *ip_str,
+ u_char use_json)
+{
+ int ret;
+ struct bgp *bgp;
+ union sockunion su;
+ json_object *json = NULL;
+
+ if (use_json)
+ json = json_object_new_object();
+
+ if (name) {
+ if (strmatch(name, "all")) {
+ bgp_show_all_instances_neighbors_vty(vty, use_json);
+ return CMD_SUCCESS;
+ } else {
+ bgp = bgp_lookup_by_name(name);
+ if (!bgp) {
+ if (use_json) {
+ json_object_boolean_true_add(
+ json, "bgpNoSuchInstance");
+ vty_out(vty, "%s%s",
+ json_object_to_json_string_ext(
+ json,
+ JSON_C_TO_STRING_PRETTY),
+ VTY_NEWLINE);
+ json_object_free(json);
+ } else
+ vty_out(vty,
+ "%% No such BGP instance exist%s",
+ VTY_NEWLINE);
+
+ return CMD_WARNING;
+ }
+ }
+ } else {
+ bgp = bgp_get_default();
+ }
+
+ if (bgp) {
+ if (ip_str) {
+ ret = str2sockunion(ip_str, &su);
+ if (ret < 0)
+ bgp_show_neighbor(vty, bgp, type, NULL, ip_str,
+ use_json, json);
+ else
+ bgp_show_neighbor(vty, bgp, type, &su, NULL,
+ use_json, json);
+ } else {
+ bgp_show_neighbor(vty, bgp, type, NULL, NULL, use_json,
+ json);
+ }
+ }
+
+ return CMD_SUCCESS;
}
/* "show [ip] bgp neighbors" commands. */
@@ -8770,30 +9480,28 @@ DEFUN (show_ip_bgp_neighbors,
"Neighbor on BGP configured interface\n"
JSON_STR)
{
- char *vrf = NULL;
- char *sh_arg = NULL;
- enum show_type sh_type;
+ char *vrf = NULL;
+ char *sh_arg = NULL;
+ enum show_type sh_type;
- u_char uj = use_json(argc, argv);
+ u_char uj = use_json(argc, argv);
- int idx = 0;
+ int idx = 0;
- if (argv_find (argv, argc, "view", &idx) ||
- argv_find (argv, argc, "vrf", &idx))
- vrf = argv[idx+1]->arg;
+ if (argv_find(argv, argc, "view", &idx)
+ || argv_find(argv, argc, "vrf", &idx))
+ vrf = argv[idx + 1]->arg;
- idx++;
- if (argv_find (argv, argc, "A.B.C.D", &idx) ||
- argv_find (argv, argc, "X:X::X:X", &idx) ||
- argv_find (argv, argc, "WORD", &idx))
- {
- sh_type = show_peer;
- sh_arg = argv[idx]->arg;
- }
- else
- sh_type = show_all;
+ idx++;
+ if (argv_find(argv, argc, "A.B.C.D", &idx)
+ || argv_find(argv, argc, "X:X::X:X", &idx)
+ || argv_find(argv, argc, "WORD", &idx)) {
+ sh_type = show_peer;
+ sh_arg = argv[idx]->arg;
+ } else
+ sh_type = show_all;
- return bgp_show_neighbor_vty (vty, vrf, sh_type, sh_arg, uj);
+ return bgp_show_neighbor_vty(vty, vrf, sh_type, sh_arg, uj);
}
/* Show BGP's AS paths internal data. There are both `show [ip] bgp
@@ -8808,21 +9516,21 @@ DEFUN (show_ip_bgp_paths,
BGP_SAFI_HELP_STR
"Path information\n")
{
- vty_out (vty, "Address Refcnt Path%s", VTY_NEWLINE);
- aspath_print_all_vty (vty);
- return CMD_SUCCESS;
+ vty_out(vty, "Address Refcnt Path%s", VTY_NEWLINE);
+ aspath_print_all_vty(vty);
+ return CMD_SUCCESS;
}
#include "hash.h"
-static void
-community_show_all_iterator (struct hash_backet *backet, struct vty *vty)
+static void community_show_all_iterator(struct hash_backet *backet,
+ struct vty *vty)
{
- struct community *com;
+ struct community *com;
- com = (struct community *) backet->data;
- vty_out (vty, "[%p] (%ld) %s%s", (void *)backet, com->refcnt,
- community_str (com), VTY_NEWLINE);
+ com = (struct community *)backet->data;
+ vty_out(vty, "[%p] (%ld) %s%s", (void *)backet, com->refcnt,
+ community_str(com), VTY_NEWLINE);
}
/* Show BGP's community internal data. */
@@ -8834,24 +9542,24 @@ DEFUN (show_ip_bgp_community_info,
BGP_STR
"List all bgp community information\n")
{
- vty_out (vty, "Address Refcnt Community%s", VTY_NEWLINE);
+ vty_out(vty, "Address Refcnt Community%s", VTY_NEWLINE);
- hash_iterate (community_hash (),
- (void (*) (struct hash_backet *, void *))
- community_show_all_iterator,
- vty);
+ hash_iterate(community_hash(),
+ (void (*)(struct hash_backet *,
+ void *))community_show_all_iterator,
+ vty);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static void
-lcommunity_show_all_iterator (struct hash_backet *backet, struct vty *vty)
+static void lcommunity_show_all_iterator(struct hash_backet *backet,
+ struct vty *vty)
{
- struct lcommunity *lcom;
+ struct lcommunity *lcom;
- lcom = (struct lcommunity *) backet->data;
- vty_out (vty, "[%p] (%ld) %s%s", (void *)backet, lcom->refcnt,
- lcommunity_str (lcom), VTY_NEWLINE);
+ lcom = (struct lcommunity *)backet->data;
+ vty_out(vty, "[%p] (%ld) %s%s", (void *)backet, lcom->refcnt,
+ lcommunity_str(lcom), VTY_NEWLINE);
}
/* Show BGP's community internal data. */
@@ -8863,14 +9571,14 @@ DEFUN (show_ip_bgp_lcommunity_info,
BGP_STR
"List all bgp large-community information\n")
{
- vty_out (vty, "Address Refcnt Large-community%s", VTY_NEWLINE);
+ vty_out(vty, "Address Refcnt Large-community%s", VTY_NEWLINE);
- hash_iterate (lcommunity_hash (),
- (void (*) (struct hash_backet *, void *))
- lcommunity_show_all_iterator,
- vty);
+ hash_iterate(lcommunity_hash(),
+ (void (*)(struct hash_backet *,
+ void *))lcommunity_show_all_iterator,
+ vty);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
@@ -8882,53 +9590,45 @@ DEFUN (show_ip_bgp_attr_info,
BGP_STR
"List all bgp attribute information\n")
{
- attr_show_all (vty);
- return CMD_SUCCESS;
+ attr_show_all(vty);
+ return CMD_SUCCESS;
}
-static void
-bgp_show_all_instances_updgrps_vty (struct vty *vty, afi_t afi, safi_t safi)
+static void bgp_show_all_instances_updgrps_vty(struct vty *vty, afi_t afi,
+ safi_t safi)
{
- struct listnode *node, *nnode;
- struct bgp *bgp;
+ struct listnode *node, *nnode;
+ struct bgp *bgp;
- for (ALL_LIST_ELEMENTS (bm->bgp, node, nnode, bgp))
- {
- vty_out (vty, "%sInstance %s:%s",
- VTY_NEWLINE,
- (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT) ? "Default" : bgp->name,
- VTY_NEWLINE);
- update_group_show(bgp, afi, safi, vty, 0);
- }
+ for (ALL_LIST_ELEMENTS(bm->bgp, node, nnode, bgp)) {
+ vty_out(vty, "%sInstance %s:%s", VTY_NEWLINE,
+ (bgp->inst_type == BGP_INSTANCE_TYPE_DEFAULT)
+ ? "Default"
+ : bgp->name,
+ VTY_NEWLINE);
+ update_group_show(bgp, afi, safi, vty, 0);
+ }
}
-static int
-bgp_show_update_groups(struct vty *vty, const char *name,
- int afi, int safi,
- uint64_t subgrp_id)
+static int bgp_show_update_groups(struct vty *vty, const char *name, int afi,
+ int safi, uint64_t subgrp_id)
{
- struct bgp *bgp;
+ struct bgp *bgp;
- if (name)
- {
- if (strmatch (name, "all"))
- {
- bgp_show_all_instances_updgrps_vty (vty, afi, safi);
- return CMD_SUCCESS;
- }
- else
- {
- bgp = bgp_lookup_by_name (name);
- }
- }
- else
- {
- bgp = bgp_get_default ();
- }
+ if (name) {
+ if (strmatch(name, "all")) {
+ bgp_show_all_instances_updgrps_vty(vty, afi, safi);
+ return CMD_SUCCESS;
+ } else {
+ bgp = bgp_lookup_by_name(name);
+ }
+ } else {
+ bgp = bgp_get_default();
+ }
- if (bgp)
- update_group_show(bgp, afi, safi, vty, subgrp_id);
- return CMD_SUCCESS;
+ if (bgp)
+ update_group_show(bgp, afi, safi, vty, subgrp_id);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_updgrps,
@@ -8943,31 +9643,31 @@ DEFUN (show_ip_bgp_updgrps,
"Detailed info about dynamic update groups\n"
"Specific subgroup to display detailed info for\n")
{
- char *vrf = NULL;
- afi_t afi = AFI_IP6;
- safi_t safi = SAFI_UNICAST;
- uint64_t subgrp_id = 0;
-
- int idx = 0;
-
- /* show [ip] bgp */
- if (argv_find (argv, argc, "ip", &idx))
- afi = AFI_IP;
- /* [<view|vrf> WORD] */
- if (argv_find (argv, argc, "view", &idx) || argv_find (argv, argc, "vrf", &idx))
- vrf = argv[++idx]->arg;
- /* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
- if (argv_find_and_parse_afi (argv, argc, &idx, &afi))
- {
- argv_find_and_parse_safi (argv, argc, &idx, &safi);
- }
+ char *vrf = NULL;
+ afi_t afi = AFI_IP6;
+ safi_t safi = SAFI_UNICAST;
+ uint64_t subgrp_id = 0;
+
+ int idx = 0;
+
+ /* show [ip] bgp */
+ if (argv_find(argv, argc, "ip", &idx))
+ afi = AFI_IP;
+ /* [<view|vrf> WORD] */
+ if (argv_find(argv, argc, "view", &idx)
+ || argv_find(argv, argc, "vrf", &idx))
+ vrf = argv[++idx]->arg;
+ /* ["BGP_AFI_CMD_STR" ["BGP_SAFI_CMD_STR"]] */
+ if (argv_find_and_parse_afi(argv, argc, &idx, &afi)) {
+ argv_find_and_parse_safi(argv, argc, &idx, &safi);
+ }
- /* get subgroup id, if provided */
- idx = argc - 1;
- if (argv[idx]->type == VARIABLE_TKN)
- VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx]->arg);
+ /* get subgroup id, if provided */
+ idx = argc - 1;
+ if (argv[idx]->type == VARIABLE_TKN)
+ VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx]->arg);
- return (bgp_show_update_groups(vty, vrf, afi, safi, subgrp_id));
+ return (bgp_show_update_groups(vty, vrf, afi, safi, subgrp_id));
}
DEFUN (show_bgp_instance_all_ipv6_updgrps,
@@ -8979,8 +9679,8 @@ DEFUN (show_bgp_instance_all_ipv6_updgrps,
BGP_INSTANCE_ALL_HELP_STR
"Detailed info about dynamic update groups\n")
{
- bgp_show_all_instances_updgrps_vty (vty, AFI_IP6, SAFI_UNICAST);
- return CMD_SUCCESS;
+ bgp_show_all_instances_updgrps_vty(vty, AFI_IP6, SAFI_UNICAST);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_updgrps_stats,
@@ -8992,13 +9692,13 @@ DEFUN (show_bgp_updgrps_stats,
"Detailed info about dynamic update groups\n"
"Statistics\n")
{
- struct bgp *bgp;
+ struct bgp *bgp;
- bgp = bgp_get_default();
- if (bgp)
- update_group_show_stats(bgp, vty);
+ bgp = bgp_get_default();
+ if (bgp)
+ update_group_show_stats(bgp, vty);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_instance_updgrps_stats,
@@ -9011,37 +9711,38 @@ DEFUN (show_bgp_instance_updgrps_stats,
"Detailed info about dynamic update groups\n"
"Statistics\n")
{
- int idx_word = 3;
- struct bgp *bgp;
+ int idx_word = 3;
+ struct bgp *bgp;
- bgp = bgp_lookup_by_name (argv[idx_word]->arg);
- if (bgp)
- update_group_show_stats(bgp, vty);
+ bgp = bgp_lookup_by_name(argv[idx_word]->arg);
+ if (bgp)
+ update_group_show_stats(bgp, vty);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static void
-show_bgp_updgrps_adj_info_aux (struct vty *vty, const char *name,
- afi_t afi, safi_t safi,
- const char *what, uint64_t subgrp_id)
+static void show_bgp_updgrps_adj_info_aux(struct vty *vty, const char *name,
+ afi_t afi, safi_t safi,
+ const char *what, uint64_t subgrp_id)
{
- struct bgp *bgp;
+ struct bgp *bgp;
- if (name)
- bgp = bgp_lookup_by_name (name);
- else
- bgp = bgp_get_default ();
+ if (name)
+ bgp = bgp_lookup_by_name(name);
+ else
+ bgp = bgp_get_default();
- if (bgp)
- {
- if (!strcmp(what, "advertise-queue"))
- update_group_show_adj_queue(bgp, afi, safi, vty, subgrp_id);
- else if (!strcmp(what, "advertised-routes"))
- update_group_show_advertised(bgp, afi, safi, vty, subgrp_id);
- else if (!strcmp(what, "packet-queue"))
- update_group_show_packet_queue(bgp, afi, safi, vty, subgrp_id);
- }
+ if (bgp) {
+ if (!strcmp(what, "advertise-queue"))
+ update_group_show_adj_queue(bgp, afi, safi, vty,
+ subgrp_id);
+ else if (!strcmp(what, "advertised-routes"))
+ update_group_show_advertised(bgp, afi, safi, vty,
+ subgrp_id);
+ else if (!strcmp(what, "packet-queue"))
+ update_group_show_packet_queue(bgp, afi, safi, vty,
+ subgrp_id);
+ }
}
DEFUN (show_ip_bgp_updgrps_adj,
@@ -9054,11 +9755,11 @@ DEFUN (show_ip_bgp_updgrps_adj,
"Advertisement queue\n"
"Announced routes\n"
"Packet queue\n")
-
{
- int idx_type = 4;
- show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP, SAFI_UNICAST, argv[idx_type]->arg, 0);
- return CMD_SUCCESS;
+ int idx_type = 4;
+ show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP, SAFI_UNICAST,
+ argv[idx_type]->arg, 0);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_instance_updgrps_adj,
@@ -9072,12 +9773,12 @@ DEFUN (show_ip_bgp_instance_updgrps_adj,
"Advertisement queue\n"
"Announced routes\n"
"Packet queue\n")
-
{
- int idx_word = 4;
- int idx_type = 6;
- show_bgp_updgrps_adj_info_aux(vty, argv[idx_word]->arg, AFI_IP, SAFI_UNICAST, argv[idx_type]->arg, 0);
- return CMD_SUCCESS;
+ int idx_word = 4;
+ int idx_type = 6;
+ show_bgp_updgrps_adj_info_aux(vty, argv[idx_word]->arg, AFI_IP,
+ SAFI_UNICAST, argv[idx_type]->arg, 0);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_updgrps_afi_adj,
@@ -9093,14 +9794,14 @@ DEFUN (show_bgp_updgrps_afi_adj,
"Packet queue\n"
"Specific subgroup info wanted for\n")
{
- int idx_afi = 2;
- int idx_safi = 3;
- int idx_type = 5;
- show_bgp_updgrps_adj_info_aux(vty, NULL,
- bgp_vty_afi_from_arg(argv[idx_afi]->arg),
- bgp_vty_safi_from_arg(argv[idx_safi]->arg),
- argv[idx_type]->arg, 0);
- return CMD_SUCCESS;
+ int idx_afi = 2;
+ int idx_safi = 3;
+ int idx_type = 5;
+ show_bgp_updgrps_adj_info_aux(
+ vty, NULL, bgp_vty_afi_from_arg(argv[idx_afi]->arg),
+ bgp_vty_safi_from_arg(argv[idx_safi]->arg), argv[idx_type]->arg,
+ 0);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_updgrps_adj,
@@ -9114,9 +9815,10 @@ DEFUN (show_bgp_updgrps_adj,
"Announced routes\n"
"Packet queue\n")
{
- int idx_type = 3;
- show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP6, SAFI_UNICAST, argv[idx_type]->arg, 0);
- return CMD_SUCCESS;
+ int idx_type = 3;
+ show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP6, SAFI_UNICAST,
+ argv[idx_type]->arg, 0);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_instance_updgrps_adj,
@@ -9131,10 +9833,11 @@ DEFUN (show_bgp_instance_updgrps_adj,
"Announced routes\n"
"Packet queue\n")
{
- int idx_word = 3;
- int idx_type = 5;
- show_bgp_updgrps_adj_info_aux(vty, argv[idx_word]->arg, AFI_IP6, SAFI_UNICAST, argv[idx_type]->arg, 0);
- return CMD_SUCCESS;
+ int idx_word = 3;
+ int idx_type = 5;
+ show_bgp_updgrps_adj_info_aux(vty, argv[idx_word]->arg, AFI_IP6,
+ SAFI_UNICAST, argv[idx_type]->arg, 0);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_updgrps_adj_s,
@@ -9148,16 +9851,16 @@ DEFUN (show_ip_bgp_updgrps_adj_s,
"Advertisement queue\n"
"Announced routes\n"
"Packet queue\n")
-
{
- int idx_subgroup_id = 4;
- int idx_type = 5;
- uint64_t subgrp_id;
+ int idx_subgroup_id = 4;
+ int idx_type = 5;
+ uint64_t subgrp_id;
- VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
+ VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
- show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP, SAFI_UNICAST, argv[idx_type]->arg, subgrp_id);
- return CMD_SUCCESS;
+ show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP, SAFI_UNICAST,
+ argv[idx_type]->arg, subgrp_id);
+ return CMD_SUCCESS;
}
DEFUN (show_ip_bgp_instance_updgrps_adj_s,
@@ -9172,17 +9875,18 @@ DEFUN (show_ip_bgp_instance_updgrps_adj_s,
"Advertisement queue\n"
"Announced routes\n"
"Packet queue\n")
-
{
- int idx_vrf = 4;
- int idx_subgroup_id = 6;
- int idx_type = 7;
- uint64_t subgrp_id;
+ int idx_vrf = 4;
+ int idx_subgroup_id = 6;
+ int idx_type = 7;
+ uint64_t subgrp_id;
- VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
+ VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
- show_bgp_updgrps_adj_info_aux(vty, argv[idx_vrf]->arg, AFI_IP, SAFI_UNICAST, argv[idx_type]->arg, subgrp_id);
- return CMD_SUCCESS;
+ show_bgp_updgrps_adj_info_aux(vty, argv[idx_vrf]->arg, AFI_IP,
+ SAFI_UNICAST, argv[idx_type]->arg,
+ subgrp_id);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_updgrps_afi_adj_s,
@@ -9199,19 +9903,19 @@ DEFUN (show_bgp_updgrps_afi_adj_s,
"Packet queue\n"
"Specific subgroup info wanted for\n")
{
- int idx_afi = 2;
- int idx_safi = 3;
- int idx_subgroup_id = 5;
- int idx_type = 6;
- uint64_t subgrp_id;
+ int idx_afi = 2;
+ int idx_safi = 3;
+ int idx_subgroup_id = 5;
+ int idx_type = 6;
+ uint64_t subgrp_id;
- VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
+ VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
- show_bgp_updgrps_adj_info_aux(vty, NULL,
- bgp_vty_afi_from_arg(argv[idx_afi]->arg),
- bgp_vty_safi_from_arg(argv[idx_safi]->arg),
- argv[idx_type]->arg, subgrp_id);
- return CMD_SUCCESS;
+ show_bgp_updgrps_adj_info_aux(
+ vty, NULL, bgp_vty_afi_from_arg(argv[idx_afi]->arg),
+ bgp_vty_safi_from_arg(argv[idx_safi]->arg), argv[idx_type]->arg,
+ subgrp_id);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_updgrps_adj_s,
@@ -9226,14 +9930,15 @@ DEFUN (show_bgp_updgrps_adj_s,
"Announced routes\n"
"Packet queue\n")
{
- int idx_subgroup_id = 3;
- int idx_type = 4;
- uint64_t subgrp_id;
+ int idx_subgroup_id = 3;
+ int idx_type = 4;
+ uint64_t subgrp_id;
- VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
+ VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
- show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP6, SAFI_UNICAST, argv[idx_type]->arg, subgrp_id);
- return CMD_SUCCESS;
+ show_bgp_updgrps_adj_info_aux(vty, NULL, AFI_IP6, SAFI_UNICAST,
+ argv[idx_type]->arg, subgrp_id);
+ return CMD_SUCCESS;
}
DEFUN (show_bgp_instance_updgrps_adj_s,
@@ -9249,178 +9954,164 @@ DEFUN (show_bgp_instance_updgrps_adj_s,
"Announced routes\n"
"Packet queue\n")
{
- int idx_vrf = 3;
- int idx_subgroup_id = 5;
- int idx_type = 6;
- uint64_t subgrp_id;
-
- VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
-
- show_bgp_updgrps_adj_info_aux(vty, argv[idx_vrf]->arg, AFI_IP6, SAFI_UNICAST, argv[idx_type]->arg, subgrp_id);
- return CMD_SUCCESS;
-}
-
-
-
-static int
-bgp_show_one_peer_group (struct vty *vty, struct peer_group *group)
-{
- struct listnode *node, *nnode;
- struct prefix *range;
- struct peer *conf;
- struct peer *peer;
- char buf[PREFIX2STR_BUFFER];
- afi_t afi;
- safi_t safi;
- const char *peer_status;
- const char *af_str;
- int lr_count;
- int dynamic;
- int af_cfgd;
-
- conf = group->conf;
-
- if (conf->as_type == AS_SPECIFIED ||
- conf->as_type == AS_EXTERNAL) {
- vty_out (vty, "%sBGP peer-group %s, remote AS %d%s",
- VTY_NEWLINE, group->name, conf->as, VTY_NEWLINE);
- } else if (conf->as_type == AS_INTERNAL) {
- vty_out (vty, "%sBGP peer-group %s, remote AS %d%s",
- VTY_NEWLINE, group->name, group->bgp->as, VTY_NEWLINE);
- } else {
- vty_out (vty, "%sBGP peer-group %s%s",
- VTY_NEWLINE, group->name, VTY_NEWLINE);
- }
-
- if ((group->bgp->as == conf->as) || (conf->as_type == AS_INTERNAL))
- vty_out (vty, " Peer-group type is internal%s", VTY_NEWLINE);
- else
- vty_out (vty, " Peer-group type is external%s", VTY_NEWLINE);
-
- /* Display AFs configured. */
- vty_out (vty, " Configured address-families:");
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST ; safi < SAFI_MAX ; safi++)
- {
- if (conf->afc[afi][safi])
- {
- af_cfgd = 1;
- vty_out (vty, " %s;", afi_safi_print(afi, safi));
- }
- }
- if (!af_cfgd)
- vty_out (vty, " none%s", VTY_NEWLINE);
- else
- vty_out (vty, "%s", VTY_NEWLINE);
-
- /* Display listen ranges (for dynamic neighbors), if any */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- {
- if (afi == AFI_IP)
- af_str = "IPv4";
- else if (afi == AFI_IP6)
- af_str = "IPv6";
- else
- af_str = "???";
- lr_count = listcount(group->listen_range[afi]);
- if (lr_count)
- {
- vty_out(vty,
- " %d %s listen range(s)%s",
- lr_count, af_str, VTY_NEWLINE);
-
-
- for (ALL_LIST_ELEMENTS (group->listen_range[afi], node,
- nnode, range))
- {
- prefix2str(range, buf, sizeof(buf));
- vty_out(vty, " %s%s", buf, VTY_NEWLINE);
- }
- }
- }
-
- /* Display group members and their status */
- if (listcount(group->peer))
- {
- vty_out (vty, " Peer-group members:%s", VTY_NEWLINE);
- for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
- {
- if (CHECK_FLAG (peer->flags, PEER_FLAG_SHUTDOWN))
- peer_status = "Idle (Admin)";
- else if (CHECK_FLAG (peer->sflags, PEER_STATUS_PREFIX_OVERFLOW))
- peer_status = "Idle (PfxCt)";
- else
- peer_status = lookup_msg(bgp_status_msg, peer->status, NULL);
-
- dynamic = peer_dynamic_neighbor(peer);
- vty_out (vty, " %s %s %s %s",
- peer->host, dynamic ? "(dynamic)" : "",
- peer_status, VTY_NEWLINE);
- }
- }
-
- return CMD_SUCCESS;
-}
+ int idx_vrf = 3;
+ int idx_subgroup_id = 5;
+ int idx_type = 6;
+ uint64_t subgrp_id;
+
+ VTY_GET_ULL("subgroup-id", subgrp_id, argv[idx_subgroup_id]->arg);
+
+ show_bgp_updgrps_adj_info_aux(vty, argv[idx_vrf]->arg, AFI_IP6,
+ SAFI_UNICAST, argv[idx_type]->arg,
+ subgrp_id);
+ return CMD_SUCCESS;
+}
+
+
+static int bgp_show_one_peer_group(struct vty *vty, struct peer_group *group)
+{
+ struct listnode *node, *nnode;
+ struct prefix *range;
+ struct peer *conf;
+ struct peer *peer;
+ char buf[PREFIX2STR_BUFFER];
+ afi_t afi;
+ safi_t safi;
+ const char *peer_status;
+ const char *af_str;
+ int lr_count;
+ int dynamic;
+ int af_cfgd;
+
+ conf = group->conf;
+
+ if (conf->as_type == AS_SPECIFIED || conf->as_type == AS_EXTERNAL) {
+ vty_out(vty, "%sBGP peer-group %s, remote AS %d%s", VTY_NEWLINE,
+ group->name, conf->as, VTY_NEWLINE);
+ } else if (conf->as_type == AS_INTERNAL) {
+ vty_out(vty, "%sBGP peer-group %s, remote AS %d%s", VTY_NEWLINE,
+ group->name, group->bgp->as, VTY_NEWLINE);
+ } else {
+ vty_out(vty, "%sBGP peer-group %s%s", VTY_NEWLINE, group->name,
+ VTY_NEWLINE);
+ }
-/* Show BGP peer group's information. */
-enum show_group_type
-{
- show_all_groups,
- show_peer_group
-};
+ if ((group->bgp->as == conf->as) || (conf->as_type == AS_INTERNAL))
+ vty_out(vty, " Peer-group type is internal%s", VTY_NEWLINE);
+ else
+ vty_out(vty, " Peer-group type is external%s", VTY_NEWLINE);
+
+ /* Display AFs configured. */
+ vty_out(vty, " Configured address-families:");
+ for (afi = AFI_IP; afi < AFI_MAX; afi++)
+ for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
+ if (conf->afc[afi][safi]) {
+ af_cfgd = 1;
+ vty_out(vty, " %s;", afi_safi_print(afi, safi));
+ }
+ }
+ if (!af_cfgd)
+ vty_out(vty, " none%s", VTY_NEWLINE);
+ else
+ vty_out(vty, "%s", VTY_NEWLINE);
+
+ /* Display listen ranges (for dynamic neighbors), if any */
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ if (afi == AFI_IP)
+ af_str = "IPv4";
+ else if (afi == AFI_IP6)
+ af_str = "IPv6";
+ else
+ af_str = "???";
+ lr_count = listcount(group->listen_range[afi]);
+ if (lr_count) {
+ vty_out(vty, " %d %s listen range(s)%s", lr_count,
+ af_str, VTY_NEWLINE);
+
+
+ for (ALL_LIST_ELEMENTS(group->listen_range[afi], node,
+ nnode, range)) {
+ prefix2str(range, buf, sizeof(buf));
+ vty_out(vty, " %s%s", buf, VTY_NEWLINE);
+ }
+ }
+ }
-static int
-bgp_show_peer_group (struct vty *vty, struct bgp *bgp,
- enum show_group_type type, const char *group_name)
-{
- struct listnode *node, *nnode;
- struct peer_group *group;
- int find = 0;
+ /* Display group members and their status */
+ if (listcount(group->peer)) {
+ vty_out(vty, " Peer-group members:%s", VTY_NEWLINE);
+ for (ALL_LIST_ELEMENTS(group->peer, node, nnode, peer)) {
+ if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
+ peer_status = "Idle (Admin)";
+ else if (CHECK_FLAG(peer->sflags,
+ PEER_STATUS_PREFIX_OVERFLOW))
+ peer_status = "Idle (PfxCt)";
+ else
+ peer_status = lookup_msg(bgp_status_msg,
+ peer->status, NULL);
+
+ dynamic = peer_dynamic_neighbor(peer);
+ vty_out(vty, " %s %s %s %s", peer->host,
+ dynamic ? "(dynamic)" : "", peer_status,
+ VTY_NEWLINE);
+ }
+ }
- for (ALL_LIST_ELEMENTS (bgp->group, node, nnode, group))
- {
- switch (type)
- {
- case show_all_groups:
- bgp_show_one_peer_group (vty, group);
- break;
- case show_peer_group:
- if (group_name && (strcmp(group->name, group_name) == 0))
- {
- find = 1;
- bgp_show_one_peer_group (vty, group);
- }
- break;
+ return CMD_SUCCESS;
+}
+
+/* Show BGP peer group's information. */
+enum show_group_type { show_all_groups, show_peer_group };
+
+static int bgp_show_peer_group(struct vty *vty, struct bgp *bgp,
+ enum show_group_type type,
+ const char *group_name)
+{
+ struct listnode *node, *nnode;
+ struct peer_group *group;
+ int find = 0;
+
+ for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
+ switch (type) {
+ case show_all_groups:
+ bgp_show_one_peer_group(vty, group);
+ break;
+ case show_peer_group:
+ if (group_name
+ && (strcmp(group->name, group_name) == 0)) {
+ find = 1;
+ bgp_show_one_peer_group(vty, group);
+ }
+ break;
+ }
}
- }
- if (type == show_peer_group && ! find)
- vty_out (vty, "%% No such peer-group%s", VTY_NEWLINE);
+ if (type == show_peer_group && !find)
+ vty_out(vty, "%% No such peer-group%s", VTY_NEWLINE);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static int
-bgp_show_peer_group_vty (struct vty *vty, const char *name,
- enum show_group_type type, const char *group_name)
+static int bgp_show_peer_group_vty(struct vty *vty, const char *name,
+ enum show_group_type type,
+ const char *group_name)
{
- struct bgp *bgp;
- int ret = CMD_SUCCESS;
+ struct bgp *bgp;
+ int ret = CMD_SUCCESS;
- if (name)
- bgp = bgp_lookup_by_name (name);
- else
- bgp = bgp_get_default ();
+ if (name)
+ bgp = bgp_lookup_by_name(name);
+ else
+ bgp = bgp_get_default();
- if (! bgp)
- {
- vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ if (!bgp) {
+ vty_out(vty, "%% No such BGP instance exist%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- ret = bgp_show_peer_group (vty, bgp, type, group_name);
+ ret = bgp_show_peer_group(vty, bgp, type, group_name);
- return ret;
+ return ret;
}
DEFUN (show_ip_bgp_peer_groups,
@@ -9433,14 +10124,14 @@ DEFUN (show_ip_bgp_peer_groups,
"Detailed information on BGP peer groups\n"
"Peer group name\n")
{
- char *vrf, *pg;
- vrf = pg = NULL;
- int idx = 0;
+ char *vrf, *pg;
+ vrf = pg = NULL;
+ int idx = 0;
- vrf = argv_find (argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
- pg = argv_find (argv, argc, "PGNAME", &idx) ? argv[idx]->arg : NULL;
+ vrf = argv_find(argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
+ pg = argv_find(argv, argc, "PGNAME", &idx) ? argv[idx]->arg : NULL;
- return bgp_show_peer_group_vty (vty, vrf, show_all_groups, pg);
+ return bgp_show_peer_group_vty(vty, vrf, show_all_groups, pg);
}
@@ -9452,18 +10143,17 @@ DEFUN (bgp_redistribute_ipv4,
"Redistribute information from another routing protocol\n"
FRR_IP_REDIST_HELP_STR_BGPD)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int type;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int type;
- type = proto_redistnum (AFI_IP, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- bgp_redist_add(bgp, AFI_IP, type, 0);
- return bgp_redistribute_set (bgp, AFI_IP, type, 0);
+ type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ bgp_redist_add(bgp, AFI_IP, type, 0);
+ return bgp_redistribute_set(bgp, AFI_IP, type, 0);
}
DEFUN (bgp_redistribute_ipv4_rmap,
@@ -9474,22 +10164,21 @@ DEFUN (bgp_redistribute_ipv4_rmap,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_word = 3;
- int type;
- struct bgp_redist *red;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_word = 3;
+ int type;
+ struct bgp_redist *red;
- type = proto_redistnum (AFI_IP, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- red = bgp_redist_add(bgp, AFI_IP, type, 0);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- return bgp_redistribute_set (bgp, AFI_IP, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP, type, 0);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ return bgp_redistribute_set(bgp, AFI_IP, type, 0);
}
DEFUN (bgp_redistribute_ipv4_metric,
@@ -9500,24 +10189,23 @@ DEFUN (bgp_redistribute_ipv4_metric,
"Metric for redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_number = 3;
- int type;
- u_int32_t metric;
- struct bgp_redist *red;
-
- type = proto_redistnum (AFI_IP, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("metric", metric, argv[idx_number]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_number = 3;
+ int type;
+ u_int32_t metric;
+ struct bgp_redist *red;
+
+ type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ VTY_GET_INTEGER("metric", metric, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP, type, 0);
- bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
- return bgp_redistribute_set (bgp, AFI_IP, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP, type, 0);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
+ return bgp_redistribute_set(bgp, AFI_IP, type, 0);
}
DEFUN (bgp_redistribute_ipv4_rmap_metric,
@@ -9530,26 +10218,25 @@ DEFUN (bgp_redistribute_ipv4_rmap_metric,
"Metric for redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_word = 3;
- int idx_number = 5;
- int type;
- u_int32_t metric;
- struct bgp_redist *red;
-
- type = proto_redistnum (AFI_IP, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("metric", metric, argv[idx_number]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_word = 3;
+ int idx_number = 5;
+ int type;
+ u_int32_t metric;
+ struct bgp_redist *red;
+
+ type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ VTY_GET_INTEGER("metric", metric, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP, type, 0);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
- return bgp_redistribute_set (bgp, AFI_IP, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP, type, 0);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
+ return bgp_redistribute_set(bgp, AFI_IP, type, 0);
}
DEFUN (bgp_redistribute_ipv4_metric_rmap,
@@ -9562,26 +10249,25 @@ DEFUN (bgp_redistribute_ipv4_metric_rmap,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_number = 3;
- int idx_word = 5;
- int type;
- u_int32_t metric;
- struct bgp_redist *red;
-
- type = proto_redistnum (AFI_IP, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("metric", metric, argv[idx_number]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_number = 3;
+ int idx_word = 5;
+ int type;
+ u_int32_t metric;
+ struct bgp_redist *red;
+
+ type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ VTY_GET_INTEGER("metric", metric, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP, type, 0);
- bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- return bgp_redistribute_set (bgp, AFI_IP, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP, type, 0);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP, type, metric);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ return bgp_redistribute_set(bgp, AFI_IP, type, 0);
}
DEFUN (bgp_redistribute_ipv4_ospf,
@@ -9592,21 +10278,21 @@ DEFUN (bgp_redistribute_ipv4_ospf,
"Non-main Kernel Routing Table\n"
"Instance ID/Table ID\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ospf_table = 1;
- int idx_number = 2;
- u_short instance;
- u_short protocol;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ospf_table = 1;
+ int idx_number = 2;
+ u_short instance;
+ u_short protocol;
- VTY_GET_INTEGER ("Instance ID", instance, argv[idx_number]->arg);
+ VTY_GET_INTEGER("Instance ID", instance, argv[idx_number]->arg);
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- protocol = ZEBRA_ROUTE_OSPF;
- else
- protocol = ZEBRA_ROUTE_TABLE;
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ protocol = ZEBRA_ROUTE_OSPF;
+ else
+ protocol = ZEBRA_ROUTE_TABLE;
- bgp_redist_add(bgp, AFI_IP, protocol, instance);
- return bgp_redistribute_set (bgp, AFI_IP, protocol, instance);
+ bgp_redist_add(bgp, AFI_IP, protocol, instance);
+ return bgp_redistribute_set(bgp, AFI_IP, protocol, instance);
}
DEFUN (bgp_redistribute_ipv4_ospf_rmap,
@@ -9619,23 +10305,23 @@ DEFUN (bgp_redistribute_ipv4_ospf_rmap,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ospf_table = 1;
- int idx_number = 2;
- int idx_word = 4;
- struct bgp_redist *red;
- u_short instance;
- int protocol;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ospf_table = 1;
+ int idx_number = 2;
+ int idx_word = 4;
+ struct bgp_redist *red;
+ u_short instance;
+ int protocol;
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- protocol = ZEBRA_ROUTE_OSPF;
- else
- protocol = ZEBRA_ROUTE_TABLE;
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ protocol = ZEBRA_ROUTE_OSPF;
+ else
+ protocol = ZEBRA_ROUTE_TABLE;
- VTY_GET_INTEGER ("Instance ID", instance, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- return bgp_redistribute_set (bgp, AFI_IP, protocol, instance);
+ VTY_GET_INTEGER("Instance ID", instance, argv[idx_number]->arg);
+ red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ return bgp_redistribute_set(bgp, AFI_IP, protocol, instance);
}
DEFUN (bgp_redistribute_ipv4_ospf_metric,
@@ -9648,26 +10334,26 @@ DEFUN (bgp_redistribute_ipv4_ospf_metric,
"Metric for redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ospf_table = 1;
- int idx_number = 2;
- int idx_number_2 = 4;
- u_int32_t metric;
- struct bgp_redist *red;
- u_short instance;
- int protocol;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ospf_table = 1;
+ int idx_number = 2;
+ int idx_number_2 = 4;
+ u_int32_t metric;
+ struct bgp_redist *red;
+ u_short instance;
+ int protocol;
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- protocol = ZEBRA_ROUTE_OSPF;
- else
- protocol = ZEBRA_ROUTE_TABLE;
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ protocol = ZEBRA_ROUTE_OSPF;
+ else
+ protocol = ZEBRA_ROUTE_TABLE;
- VTY_GET_INTEGER ("Instance ID", instance, argv[idx_number]->arg);
- VTY_GET_INTEGER ("metric", metric, argv[idx_number_2]->arg);
+ VTY_GET_INTEGER("Instance ID", instance, argv[idx_number]->arg);
+ VTY_GET_INTEGER("metric", metric, argv[idx_number_2]->arg);
- red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
- bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol, metric);
- return bgp_redistribute_set (bgp, AFI_IP, protocol, instance);
+ red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol, metric);
+ return bgp_redistribute_set(bgp, AFI_IP, protocol, instance);
}
DEFUN (bgp_redistribute_ipv4_ospf_rmap_metric,
@@ -9682,28 +10368,28 @@ DEFUN (bgp_redistribute_ipv4_ospf_rmap_metric,
"Metric for redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ospf_table = 1;
- int idx_number = 2;
- int idx_word = 4;
- int idx_number_2 = 6;
- u_int32_t metric;
- struct bgp_redist *red;
- u_short instance;
- int protocol;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ospf_table = 1;
+ int idx_number = 2;
+ int idx_word = 4;
+ int idx_number_2 = 6;
+ u_int32_t metric;
+ struct bgp_redist *red;
+ u_short instance;
+ int protocol;
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- protocol = ZEBRA_ROUTE_OSPF;
- else
- protocol = ZEBRA_ROUTE_TABLE;
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ protocol = ZEBRA_ROUTE_OSPF;
+ else
+ protocol = ZEBRA_ROUTE_TABLE;
- VTY_GET_INTEGER ("Instance ID", instance, argv[idx_number]->arg);
- VTY_GET_INTEGER ("metric", metric, argv[idx_number_2]->arg);
+ VTY_GET_INTEGER("Instance ID", instance, argv[idx_number]->arg);
+ VTY_GET_INTEGER("metric", metric, argv[idx_number_2]->arg);
- red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol, metric);
- return bgp_redistribute_set (bgp, AFI_IP, protocol, instance);
+ red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol, metric);
+ return bgp_redistribute_set(bgp, AFI_IP, protocol, instance);
}
DEFUN (bgp_redistribute_ipv4_ospf_metric_rmap,
@@ -9718,28 +10404,28 @@ DEFUN (bgp_redistribute_ipv4_ospf_metric_rmap,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ospf_table = 1;
- int idx_number = 2;
- int idx_number_2 = 4;
- int idx_word = 6;
- u_int32_t metric;
- struct bgp_redist *red;
- u_short instance;
- int protocol;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ospf_table = 1;
+ int idx_number = 2;
+ int idx_number_2 = 4;
+ int idx_word = 6;
+ u_int32_t metric;
+ struct bgp_redist *red;
+ u_short instance;
+ int protocol;
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- protocol = ZEBRA_ROUTE_OSPF;
- else
- protocol = ZEBRA_ROUTE_TABLE;
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ protocol = ZEBRA_ROUTE_OSPF;
+ else
+ protocol = ZEBRA_ROUTE_TABLE;
- VTY_GET_INTEGER ("Instance ID", instance, argv[idx_number]->arg);
- VTY_GET_INTEGER ("metric", metric, argv[idx_number_2]->arg);
+ VTY_GET_INTEGER("Instance ID", instance, argv[idx_number]->arg);
+ VTY_GET_INTEGER("metric", metric, argv[idx_number_2]->arg);
- red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
- bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol, metric);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- return bgp_redistribute_set (bgp, AFI_IP, protocol, instance);
+ red = bgp_redist_add(bgp, AFI_IP, protocol, instance);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP, protocol, metric);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ return bgp_redistribute_set(bgp, AFI_IP, protocol, instance);
}
DEFUN (no_bgp_redistribute_ipv4_ospf,
@@ -9755,19 +10441,19 @@ DEFUN (no_bgp_redistribute_ipv4_ospf,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_ospf_table = 2;
- int idx_number = 3;
- u_short instance;
- int protocol;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_ospf_table = 2;
+ int idx_number = 3;
+ u_short instance;
+ int protocol;
- if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
- protocol = ZEBRA_ROUTE_OSPF;
- else
- protocol = ZEBRA_ROUTE_TABLE;
+ if (strncmp(argv[idx_ospf_table]->arg, "o", 1) == 0)
+ protocol = ZEBRA_ROUTE_OSPF;
+ else
+ protocol = ZEBRA_ROUTE_TABLE;
- VTY_GET_INTEGER ("Instance ID", instance, argv[idx_number]->arg);
- return bgp_redistribute_unset (bgp, AFI_IP, protocol, instance);
+ VTY_GET_INTEGER("Instance ID", instance, argv[idx_number]->arg);
+ return bgp_redistribute_unset(bgp, AFI_IP, protocol, instance);
}
DEFUN (no_bgp_redistribute_ipv4,
@@ -9781,17 +10467,16 @@ DEFUN (no_bgp_redistribute_ipv4,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 2;
- int type;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 2;
+ int type;
- type = proto_redistnum (AFI_IP, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- return bgp_redistribute_unset (bgp, AFI_IP, type, 0);
+ type = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ return bgp_redistribute_unset(bgp, AFI_IP, type, 0);
}
DEFUN (bgp_redistribute_ipv6,
@@ -9800,19 +10485,18 @@ DEFUN (bgp_redistribute_ipv6,
"Redistribute information from another routing protocol\n"
FRR_IP6_REDIST_HELP_STR_BGPD)
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int type;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int type;
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- bgp_redist_add(bgp, AFI_IP6, type, 0);
- return bgp_redistribute_set (bgp, AFI_IP6, type, 0);
+ bgp_redist_add(bgp, AFI_IP6, type, 0);
+ return bgp_redistribute_set(bgp, AFI_IP6, type, 0);
}
DEFUN (bgp_redistribute_ipv6_rmap,
@@ -9823,22 +10507,21 @@ DEFUN (bgp_redistribute_ipv6_rmap,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_word = 3;
- int type;
- struct bgp_redist *red;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_word = 3;
+ int type;
+ struct bgp_redist *red;
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- red = bgp_redist_add(bgp, AFI_IP6, type, 0);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- return bgp_redistribute_set (bgp, AFI_IP6, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP6, type, 0);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ return bgp_redistribute_set(bgp, AFI_IP6, type, 0);
}
DEFUN (bgp_redistribute_ipv6_metric,
@@ -9849,24 +10532,23 @@ DEFUN (bgp_redistribute_ipv6_metric,
"Metric for redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_number = 3;
- int type;
- u_int32_t metric;
- struct bgp_redist *red;
-
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("metric", metric, argv[idx_number]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_number = 3;
+ int type;
+ u_int32_t metric;
+ struct bgp_redist *red;
+
+ type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ VTY_GET_INTEGER("metric", metric, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP6, type, 0);
- bgp_redistribute_metric_set(bgp, red, AFI_IP6, type, metric);
- return bgp_redistribute_set (bgp, AFI_IP6, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP6, type, 0);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP6, type, metric);
+ return bgp_redistribute_set(bgp, AFI_IP6, type, 0);
}
DEFUN (bgp_redistribute_ipv6_rmap_metric,
@@ -9879,26 +10561,25 @@ DEFUN (bgp_redistribute_ipv6_rmap_metric,
"Metric for redistributed routes\n"
"Default metric\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_word = 3;
- int idx_number = 5;
- int type;
- u_int32_t metric;
- struct bgp_redist *red;
-
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("metric", metric, argv[idx_number]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_word = 3;
+ int idx_number = 5;
+ int type;
+ u_int32_t metric;
+ struct bgp_redist *red;
+
+ type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ VTY_GET_INTEGER("metric", metric, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP6, type, 0);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- bgp_redistribute_metric_set(bgp, red, AFI_IP6, type, metric);
- return bgp_redistribute_set (bgp, AFI_IP6, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP6, type, 0);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP6, type, metric);
+ return bgp_redistribute_set(bgp, AFI_IP6, type, 0);
}
DEFUN (bgp_redistribute_ipv6_metric_rmap,
@@ -9911,26 +10592,25 @@ DEFUN (bgp_redistribute_ipv6_metric_rmap,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 1;
- int idx_number = 3;
- int idx_word = 5;
- int type;
- u_int32_t metric;
- struct bgp_redist *red;
-
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
- VTY_GET_INTEGER ("metric", metric, argv[idx_number]->arg);
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 1;
+ int idx_number = 3;
+ int idx_word = 5;
+ int type;
+ u_int32_t metric;
+ struct bgp_redist *red;
+
+ type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ VTY_GET_INTEGER("metric", metric, argv[idx_number]->arg);
- red = bgp_redist_add(bgp, AFI_IP6, type, 0);
- bgp_redistribute_metric_set(bgp, red, AFI_IP6, SAFI_UNICAST, metric);
- bgp_redistribute_rmap_set (red, argv[idx_word]->arg);
- return bgp_redistribute_set (bgp, AFI_IP6, type, 0);
+ red = bgp_redist_add(bgp, AFI_IP6, type, 0);
+ bgp_redistribute_metric_set(bgp, red, AFI_IP6, SAFI_UNICAST, metric);
+ bgp_redistribute_rmap_set(red, argv[idx_word]->arg);
+ return bgp_redistribute_set(bgp, AFI_IP6, type, 0);
}
DEFUN (no_bgp_redistribute_ipv6,
@@ -9944,998 +10624,1036 @@ DEFUN (no_bgp_redistribute_ipv6,
"Route map reference\n"
"Pointer to route-map entries\n")
{
- VTY_DECLVAR_CONTEXT(bgp, bgp);
- int idx_protocol = 2;
- int type;
-
- type = proto_redistnum (AFI_IP6, argv[idx_protocol]->text);
- if (type < 0)
- {
- vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- return bgp_redistribute_unset (bgp, AFI_IP6, type, 0);
-}
-
-int
-bgp_config_write_redistribute (struct vty *vty, struct bgp *bgp, afi_t afi,
- safi_t safi, int *write)
-{
- int i;
+ VTY_DECLVAR_CONTEXT(bgp, bgp);
+ int idx_protocol = 2;
+ int type;
- /* Unicast redistribution only. */
- if (safi != SAFI_UNICAST)
- return 0;
+ type = proto_redistnum(AFI_IP6, argv[idx_protocol]->text);
+ if (type < 0) {
+ vty_out(vty, "%% Invalid route type%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
- {
- /* Redistribute BGP does not make sense. */
- if (i != ZEBRA_ROUTE_BGP)
- {
- struct list *red_list;
- struct listnode *node;
- struct bgp_redist *red;
-
- red_list = bgp->redist[afi][i];
- if (!red_list)
- continue;
-
- for (ALL_LIST_ELEMENTS_RO(red_list, node, red))
- {
- /* Display "address-family" when it is not yet diplayed. */
- bgp_config_write_family_header (vty, afi, safi, write);
-
- /* "redistribute" configuration. */
- vty_out (vty, " redistribute %s", zebra_route_string(i));
- if (red->instance)
- vty_out (vty, " %d", red->instance);
- if (red->redist_metric_flag)
- vty_out (vty, " metric %u", red->redist_metric);
- if (red->rmap.name)
- vty_out (vty, " route-map %s", red->rmap.name);
- vty_out (vty, "%s", VTY_NEWLINE);
- }
- }
- }
- return *write;
+ return bgp_redistribute_unset(bgp, AFI_IP6, type, 0);
+}
+
+int bgp_config_write_redistribute(struct vty *vty, struct bgp *bgp, afi_t afi,
+ safi_t safi, int *write)
+{
+ int i;
+
+ /* Unicast redistribution only. */
+ if (safi != SAFI_UNICAST)
+ return 0;
+
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+ /* Redistribute BGP does not make sense. */
+ if (i != ZEBRA_ROUTE_BGP) {
+ struct list *red_list;
+ struct listnode *node;
+ struct bgp_redist *red;
+
+ red_list = bgp->redist[afi][i];
+ if (!red_list)
+ continue;
+
+ for (ALL_LIST_ELEMENTS_RO(red_list, node, red)) {
+ /* Display "address-family" when it is not yet
+ * diplayed. */
+ bgp_config_write_family_header(vty, afi, safi,
+ write);
+
+ /* "redistribute" configuration. */
+ vty_out(vty, " redistribute %s",
+ zebra_route_string(i));
+ if (red->instance)
+ vty_out(vty, " %d", red->instance);
+ if (red->redist_metric_flag)
+ vty_out(vty, " metric %u",
+ red->redist_metric);
+ if (red->rmap.name)
+ vty_out(vty, " route-map %s",
+ red->rmap.name);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ }
+ }
+ return *write;
}
/* BGP node structure. */
-static struct cmd_node bgp_node =
-{
- BGP_NODE,
- "%s(config-router)# ",
- 1,
-};
-
-static struct cmd_node bgp_ipv4_unicast_node =
-{
- BGP_IPV4_NODE,
- "%s(config-router-af)# ",
- 1,
-};
-
-static struct cmd_node bgp_ipv4_multicast_node =
-{
- BGP_IPV4M_NODE,
- "%s(config-router-af)# ",
- 1,
+static struct cmd_node bgp_node = {
+ BGP_NODE, "%s(config-router)# ", 1,
};
-static struct cmd_node bgp_ipv6_unicast_node =
-{
- BGP_IPV6_NODE,
- "%s(config-router-af)# ",
- 1,
+static struct cmd_node bgp_ipv4_unicast_node = {
+ BGP_IPV4_NODE, "%s(config-router-af)# ", 1,
};
-static struct cmd_node bgp_ipv6_multicast_node =
-{
- BGP_IPV6M_NODE,
- "%s(config-router-af)# ",
- 1,
+static struct cmd_node bgp_ipv4_multicast_node = {
+ BGP_IPV4M_NODE, "%s(config-router-af)# ", 1,
};
-static struct cmd_node bgp_vpnv4_node =
-{
- BGP_VPNV4_NODE,
- "%s(config-router-af)# ",
- 1
+static struct cmd_node bgp_ipv6_unicast_node = {
+ BGP_IPV6_NODE, "%s(config-router-af)# ", 1,
};
-static struct cmd_node bgp_vpnv6_node =
-{
- BGP_VPNV6_NODE,
- "%s(config-router-af-vpnv6)# ",
- 1
-};
-
-static struct cmd_node bgp_evpn_node =
-{
- BGP_EVPN_NODE,
- "%s(config-router-evpn)# ",
- 1
+static struct cmd_node bgp_ipv6_multicast_node = {
+ BGP_IPV6M_NODE, "%s(config-router-af)# ", 1,
};
-static void community_list_vty (void);
-
-void
-bgp_vty_init (void)
-{
- /* Install bgp top node. */
- install_node (&bgp_node, bgp_config_write);
- install_node (&bgp_ipv4_unicast_node, NULL);
- install_node (&bgp_ipv4_multicast_node, NULL);
- install_node (&bgp_ipv6_unicast_node, NULL);
- install_node (&bgp_ipv6_multicast_node, NULL);
- install_node (&bgp_vpnv4_node, NULL);
- install_node (&bgp_vpnv6_node, NULL);
- install_node (&bgp_evpn_node, NULL);
-
- /* Install default VTY commands to new nodes. */
- install_default (BGP_NODE);
- install_default (BGP_IPV4_NODE);
- install_default (BGP_IPV4M_NODE);
- install_default (BGP_IPV6_NODE);
- install_default (BGP_IPV6M_NODE);
- install_default (BGP_VPNV4_NODE);
- install_default (BGP_VPNV6_NODE);
- install_default (BGP_EVPN_NODE);
-
- /* "bgp multiple-instance" commands. */
- install_element (CONFIG_NODE, &bgp_multiple_instance_cmd);
- install_element (CONFIG_NODE, &no_bgp_multiple_instance_cmd);
-
- /* "bgp config-type" commands. */
- install_element (CONFIG_NODE, &bgp_config_type_cmd);
- install_element (CONFIG_NODE, &no_bgp_config_type_cmd);
-
- /* bgp route-map delay-timer commands. */
- install_element (CONFIG_NODE, &bgp_set_route_map_delay_timer_cmd);
- install_element (CONFIG_NODE, &no_bgp_set_route_map_delay_timer_cmd);
-
- /* Dummy commands (Currently not supported) */
- install_element (BGP_NODE, &no_synchronization_cmd);
- install_element (BGP_NODE, &no_auto_summary_cmd);
-
- /* "router bgp" commands. */
- install_element (CONFIG_NODE, &router_bgp_cmd);
-
- /* "no router bgp" commands. */
- install_element (CONFIG_NODE, &no_router_bgp_cmd);
-
- /* "bgp router-id" commands. */
- install_element (BGP_NODE, &bgp_router_id_cmd);
- install_element (BGP_NODE, &no_bgp_router_id_cmd);
-
- /* "bgp cluster-id" commands. */
- install_element (BGP_NODE, &bgp_cluster_id_cmd);
- install_element (BGP_NODE, &no_bgp_cluster_id_cmd);
-
- /* "bgp confederation" commands. */
- install_element (BGP_NODE, &bgp_confederation_identifier_cmd);
- install_element (BGP_NODE, &no_bgp_confederation_identifier_cmd);
-
- /* "bgp confederation peers" commands. */
- install_element (BGP_NODE, &bgp_confederation_peers_cmd);
- install_element (BGP_NODE, &no_bgp_confederation_peers_cmd);
-
- /* bgp max-med command */
- install_element (BGP_NODE, &bgp_maxmed_admin_cmd);
- install_element (BGP_NODE, &no_bgp_maxmed_admin_cmd);
- install_element (BGP_NODE, &bgp_maxmed_admin_medv_cmd);
- install_element (BGP_NODE, &bgp_maxmed_onstartup_cmd);
- install_element (BGP_NODE, &no_bgp_maxmed_onstartup_cmd);
- install_element (BGP_NODE, &bgp_maxmed_onstartup_medv_cmd);
-
- /* bgp disable-ebgp-connected-nh-check */
- install_element (BGP_NODE, &bgp_disable_connected_route_check_cmd);
- install_element (BGP_NODE, &no_bgp_disable_connected_route_check_cmd);
-
- /* bgp update-delay command */
- install_element (BGP_NODE, &bgp_update_delay_cmd);
- install_element (BGP_NODE, &no_bgp_update_delay_cmd);
- install_element (BGP_NODE, &bgp_update_delay_establish_wait_cmd);
-
- install_element (BGP_NODE, &bgp_wpkt_quanta_cmd);
- install_element (BGP_NODE, &no_bgp_wpkt_quanta_cmd);
-
- install_element (BGP_NODE, &bgp_coalesce_time_cmd);
- install_element (BGP_NODE, &no_bgp_coalesce_time_cmd);
-
- /* "maximum-paths" commands. */
- install_element (BGP_NODE, &bgp_maxpaths_cmd);
- install_element (BGP_NODE, &no_bgp_maxpaths_cmd);
- install_element (BGP_IPV4_NODE, &bgp_maxpaths_cmd);
- install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_cmd);
- install_element (BGP_IPV6_NODE, &bgp_maxpaths_cmd);
- install_element (BGP_IPV6_NODE, &no_bgp_maxpaths_cmd);
- install_element (BGP_NODE, &bgp_maxpaths_ibgp_cmd);
- install_element(BGP_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
- install_element (BGP_NODE, &no_bgp_maxpaths_ibgp_cmd);
- install_element (BGP_IPV4_NODE, &bgp_maxpaths_ibgp_cmd);
- install_element(BGP_IPV4_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
- install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_ibgp_cmd);
- install_element (BGP_IPV6_NODE, &bgp_maxpaths_ibgp_cmd);
- install_element(BGP_IPV6_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
- install_element (BGP_IPV6_NODE, &no_bgp_maxpaths_ibgp_cmd);
-
- /* "timers bgp" commands. */
- install_element (BGP_NODE, &bgp_timers_cmd);
- install_element (BGP_NODE, &no_bgp_timers_cmd);
-
- /* route-map delay-timer commands - per instance for backwards compat. */
- install_element (BGP_NODE, &bgp_set_route_map_delay_timer_cmd);
- install_element (BGP_NODE, &no_bgp_set_route_map_delay_timer_cmd);
-
- /* "bgp client-to-client reflection" commands */
- install_element (BGP_NODE, &no_bgp_client_to_client_reflection_cmd);
- install_element (BGP_NODE, &bgp_client_to_client_reflection_cmd);
-
- /* "bgp always-compare-med" commands */
- install_element (BGP_NODE, &bgp_always_compare_med_cmd);
- install_element (BGP_NODE, &no_bgp_always_compare_med_cmd);
-
- /* "bgp deterministic-med" commands */
- install_element (BGP_NODE, &bgp_deterministic_med_cmd);
- install_element (BGP_NODE, &no_bgp_deterministic_med_cmd);
-
- /* "bgp graceful-restart" commands */
- install_element (BGP_NODE, &bgp_graceful_restart_cmd);
- install_element (BGP_NODE, &no_bgp_graceful_restart_cmd);
- install_element (BGP_NODE, &bgp_graceful_restart_stalepath_time_cmd);
- install_element (BGP_NODE, &no_bgp_graceful_restart_stalepath_time_cmd);
- install_element (BGP_NODE, &bgp_graceful_restart_restart_time_cmd);
- install_element (BGP_NODE, &no_bgp_graceful_restart_restart_time_cmd);
-
- install_element (BGP_NODE, &bgp_graceful_restart_preserve_fw_cmd);
- install_element (BGP_NODE, &no_bgp_graceful_restart_preserve_fw_cmd);
-
- /* "bgp fast-external-failover" commands */
- install_element (BGP_NODE, &bgp_fast_external_failover_cmd);
- install_element (BGP_NODE, &no_bgp_fast_external_failover_cmd);
-
- /* "bgp enforce-first-as" commands */
- install_element (BGP_NODE, &bgp_enforce_first_as_cmd);
- install_element (BGP_NODE, &no_bgp_enforce_first_as_cmd);
-
- /* "bgp bestpath compare-routerid" commands */
- install_element (BGP_NODE, &bgp_bestpath_compare_router_id_cmd);
- install_element (BGP_NODE, &no_bgp_bestpath_compare_router_id_cmd);
-
- /* "bgp bestpath as-path ignore" commands */
- install_element (BGP_NODE, &bgp_bestpath_aspath_ignore_cmd);
- install_element (BGP_NODE, &no_bgp_bestpath_aspath_ignore_cmd);
-
- /* "bgp bestpath as-path confed" commands */
- install_element (BGP_NODE, &bgp_bestpath_aspath_confed_cmd);
- install_element (BGP_NODE, &no_bgp_bestpath_aspath_confed_cmd);
-
- /* "bgp bestpath as-path multipath-relax" commands */
- install_element (BGP_NODE, &bgp_bestpath_aspath_multipath_relax_cmd);
- install_element (BGP_NODE, &no_bgp_bestpath_aspath_multipath_relax_cmd);
-
- /* "bgp log-neighbor-changes" commands */
- install_element (BGP_NODE, &bgp_log_neighbor_changes_cmd);
- install_element (BGP_NODE, &no_bgp_log_neighbor_changes_cmd);
-
- /* "bgp bestpath med" commands */
- install_element (BGP_NODE, &bgp_bestpath_med_cmd);
- install_element (BGP_NODE, &no_bgp_bestpath_med_cmd);
-
- /* "no bgp default ipv4-unicast" commands. */
- install_element (BGP_NODE, &no_bgp_default_ipv4_unicast_cmd);
- install_element (BGP_NODE, &bgp_default_ipv4_unicast_cmd);
-
- /* "bgp network import-check" commands. */
- install_element (BGP_NODE, &bgp_network_import_check_cmd);
- install_element (BGP_NODE, &bgp_network_import_check_exact_cmd);
- install_element (BGP_NODE, &no_bgp_network_import_check_cmd);
-
- /* "bgp default local-preference" commands. */
- install_element (BGP_NODE, &bgp_default_local_preference_cmd);
- install_element (BGP_NODE, &no_bgp_default_local_preference_cmd);
-
- /* bgp default show-hostname */
- install_element (BGP_NODE, &bgp_default_show_hostname_cmd);
- install_element (BGP_NODE, &no_bgp_default_show_hostname_cmd);
-
- /* "bgp default subgroup-pkt-queue-max" commands. */
- install_element (BGP_NODE, &bgp_default_subgroup_pkt_queue_max_cmd);
- install_element (BGP_NODE, &no_bgp_default_subgroup_pkt_queue_max_cmd);
-
- /* bgp ibgp-allow-policy-mods command */
- install_element (BGP_NODE, &bgp_rr_allow_outbound_policy_cmd);
- install_element (BGP_NODE, &no_bgp_rr_allow_outbound_policy_cmd);
-
- /* "bgp listen limit" commands. */
- install_element (BGP_NODE, &bgp_listen_limit_cmd);
- install_element (BGP_NODE, &no_bgp_listen_limit_cmd);
-
- /* "bgp listen range" commands. */
- install_element (BGP_NODE, &bgp_listen_range_cmd);
- install_element (BGP_NODE, &no_bgp_listen_range_cmd);
-
- /* "neighbor remote-as" commands. */
- install_element (BGP_NODE, &neighbor_remote_as_cmd);
- install_element (BGP_NODE, &neighbor_interface_config_cmd);
- install_element (BGP_NODE, &neighbor_interface_config_v6only_cmd);
- install_element (BGP_NODE, &neighbor_interface_config_remote_as_cmd);
- install_element (BGP_NODE, &neighbor_interface_v6only_config_remote_as_cmd);
- install_element (BGP_NODE, &no_neighbor_cmd);
- install_element (BGP_NODE, &no_neighbor_interface_config_cmd);
-
- /* "neighbor peer-group" commands. */
- install_element (BGP_NODE, &neighbor_peer_group_cmd);
- install_element (BGP_NODE, &no_neighbor_peer_group_cmd);
- install_element (BGP_NODE, &no_neighbor_interface_peer_group_remote_as_cmd);
-
- /* "neighbor local-as" commands. */
- install_element (BGP_NODE, &neighbor_local_as_cmd);
- install_element (BGP_NODE, &neighbor_local_as_no_prepend_cmd);
- install_element (BGP_NODE, &neighbor_local_as_no_prepend_replace_as_cmd);
- install_element (BGP_NODE, &no_neighbor_local_as_cmd);
-
- /* "neighbor solo" commands. */
- install_element (BGP_NODE, &neighbor_solo_cmd);
- install_element (BGP_NODE, &no_neighbor_solo_cmd);
-
- /* "neighbor password" commands. */
- install_element (BGP_NODE, &neighbor_password_cmd);
- install_element (BGP_NODE, &no_neighbor_password_cmd);
-
- /* "neighbor activate" commands. */
- install_element (BGP_NODE, &neighbor_activate_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_activate_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_activate_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_activate_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_activate_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_activate_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_activate_cmd);
- install_element (BGP_EVPN_NODE, &neighbor_activate_cmd);
-
- /* "no neighbor activate" commands. */
- install_element (BGP_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_activate_cmd);
- install_element (BGP_EVPN_NODE, &no_neighbor_activate_cmd);
-
- /* "neighbor peer-group" set commands.
- * Long term we should only accept this command under BGP_NODE and not all of
- * the afi/safi sub-contexts. For now though we need to accept it for backwards
- * compatibility. This changed when we stopped requiring that peers be assigned
- * to their peer-group under each address-family sub-context.
- */
- install_element (BGP_NODE, &neighbor_set_peer_group_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_set_peer_group_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_set_peer_group_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_set_peer_group_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_set_peer_group_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_set_peer_group_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_set_peer_group_cmd);
-
- /* "no neighbor peer-group unset" commands. */
- install_element (BGP_NODE, &no_neighbor_set_peer_group_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_set_peer_group_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_set_peer_group_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_set_peer_group_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_set_peer_group_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_set_peer_group_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_set_peer_group_cmd);
-
- /* "neighbor softreconfiguration inbound" commands.*/
- install_element (BGP_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_NODE, &no_neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_soft_reconfiguration_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_soft_reconfiguration_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
-
- /* "neighbor attribute-unchanged" commands. */
- install_element (BGP_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_NODE, &no_neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_attr_unchanged_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_attr_unchanged_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_attr_unchanged_cmd);
-
- install_element (BGP_EVPN_NODE, &neighbor_attr_unchanged_cmd);
- install_element (BGP_EVPN_NODE, &no_neighbor_attr_unchanged_cmd);
-
- /* "nexthop-local unchanged" commands */
- install_element (BGP_IPV6_NODE, &neighbor_nexthop_local_unchanged_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_local_unchanged_cmd);
-
- /* "neighbor next-hop-self" commands. */
- install_element (BGP_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_NODE, &no_neighbor_nexthop_self_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_nexthop_self_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_nexthop_self_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_self_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_nexthop_self_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_nexthop_self_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_nexthop_self_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_nexthop_self_cmd);
-
- /* "neighbor next-hop-self force" commands. */
- install_element (BGP_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_NODE, &no_neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_nexthop_self_force_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_nexthop_self_force_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_nexthop_self_force_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_nexthop_self_force_cmd);
-
- /* "neighbor as-override" commands. */
- install_element (BGP_NODE, &neighbor_as_override_cmd);
- install_element (BGP_NODE, &no_neighbor_as_override_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_as_override_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_as_override_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_as_override_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_as_override_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_as_override_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_as_override_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_as_override_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_as_override_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_as_override_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_as_override_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_as_override_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_as_override_cmd);
-
- /* "neighbor remove-private-AS" commands. */
- install_element (BGP_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_remove_private_as_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_remove_private_as_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_remove_private_as_all_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_remove_private_as_all_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_remove_private_as_replace_as_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_remove_private_as_all_replace_as_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_remove_private_as_all_replace_as_cmd);
-
- /* "neighbor send-community" commands.*/
- install_element (BGP_NODE, &neighbor_send_community_cmd);
- install_element (BGP_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_NODE, &no_neighbor_send_community_type_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_send_community_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_send_community_type_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_send_community_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_send_community_type_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_send_community_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_send_community_type_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_send_community_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_send_community_type_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_send_community_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_send_community_type_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_send_community_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_send_community_type_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_send_community_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_send_community_type_cmd);
-
- /* "neighbor route-reflector" commands.*/
- install_element (BGP_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_NODE, &no_neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_route_reflector_client_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_route_reflector_client_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_route_reflector_client_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_route_reflector_client_cmd);
-
- /* "neighbor route-server" commands.*/
- install_element (BGP_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_NODE, &no_neighbor_route_server_client_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_route_server_client_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_route_server_client_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_route_server_client_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_route_server_client_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_route_server_client_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_route_server_client_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_route_server_client_cmd);
-
- /* "neighbor addpath-tx-all-paths" commands.*/
- install_element (BGP_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_addpath_tx_all_paths_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
-
- /* "neighbor addpath-tx-bestpath-per-AS" commands.*/
- install_element (BGP_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
-
- /* "neighbor passive" commands. */
- install_element (BGP_NODE, &neighbor_passive_cmd);
- install_element (BGP_NODE, &no_neighbor_passive_cmd);
-
-
- /* "neighbor shutdown" commands. */
- install_element (BGP_NODE, &neighbor_shutdown_cmd);
- install_element (BGP_NODE, &no_neighbor_shutdown_cmd);
- install_element (BGP_NODE, &neighbor_shutdown_msg_cmd);
- install_element (BGP_NODE, &no_neighbor_shutdown_msg_cmd);
-
- /* "neighbor capability extended-nexthop" commands.*/
- install_element (BGP_NODE, &neighbor_capability_enhe_cmd);
- install_element (BGP_NODE, &no_neighbor_capability_enhe_cmd);
-
- /* "neighbor capability orf prefix-list" commands.*/
- install_element (BGP_NODE, &neighbor_capability_orf_prefix_cmd);
- install_element (BGP_NODE, &no_neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_capability_orf_prefix_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_capability_orf_prefix_cmd);
-
- /* "neighbor capability dynamic" commands.*/
- install_element (BGP_NODE, &neighbor_capability_dynamic_cmd);
- install_element (BGP_NODE, &no_neighbor_capability_dynamic_cmd);
-
- /* "neighbor dont-capability-negotiate" commands. */
- install_element (BGP_NODE, &neighbor_dont_capability_negotiate_cmd);
- install_element (BGP_NODE, &no_neighbor_dont_capability_negotiate_cmd);
-
- /* "neighbor ebgp-multihop" commands. */
- install_element (BGP_NODE, &neighbor_ebgp_multihop_cmd);
- install_element (BGP_NODE, &neighbor_ebgp_multihop_ttl_cmd);
- install_element (BGP_NODE, &no_neighbor_ebgp_multihop_cmd);
-
- /* "neighbor disable-connected-check" commands. */
- install_element (BGP_NODE, &neighbor_disable_connected_check_cmd);
- install_element (BGP_NODE, &no_neighbor_disable_connected_check_cmd);
-
- /* "neighbor description" commands. */
- install_element (BGP_NODE, &neighbor_description_cmd);
- install_element (BGP_NODE, &no_neighbor_description_cmd);
-
- /* "neighbor update-source" commands. "*/
- install_element (BGP_NODE, &neighbor_update_source_cmd);
- install_element (BGP_NODE, &no_neighbor_update_source_cmd);
-
- /* "neighbor default-originate" commands. */
- install_element (BGP_NODE, &neighbor_default_originate_cmd);
- install_element (BGP_NODE, &neighbor_default_originate_rmap_cmd);
- install_element (BGP_NODE, &no_neighbor_default_originate_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_default_originate_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_default_originate_rmap_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_default_originate_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_default_originate_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_default_originate_rmap_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_default_originate_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_default_originate_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_default_originate_rmap_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_default_originate_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_default_originate_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_default_originate_rmap_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_default_originate_cmd);
-
- /* "neighbor port" commands. */
- install_element (BGP_NODE, &neighbor_port_cmd);
- install_element (BGP_NODE, &no_neighbor_port_cmd);
-
- /* "neighbor weight" commands. */
- install_element (BGP_NODE, &neighbor_weight_cmd);
- install_element (BGP_NODE, &no_neighbor_weight_cmd);
-
- install_element (BGP_IPV4_NODE, &neighbor_weight_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_weight_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_weight_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_weight_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_weight_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_weight_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_weight_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_weight_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_weight_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_weight_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_weight_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_weight_cmd);
-
- /* "neighbor override-capability" commands. */
- install_element (BGP_NODE, &neighbor_override_capability_cmd);
- install_element (BGP_NODE, &no_neighbor_override_capability_cmd);
-
- /* "neighbor strict-capability-match" commands. */
- install_element (BGP_NODE, &neighbor_strict_capability_cmd);
- install_element (BGP_NODE, &no_neighbor_strict_capability_cmd);
-
- /* "neighbor timers" commands. */
- install_element (BGP_NODE, &neighbor_timers_cmd);
- install_element (BGP_NODE, &no_neighbor_timers_cmd);
-
- /* "neighbor timers connect" commands. */
- install_element (BGP_NODE, &neighbor_timers_connect_cmd);
- install_element (BGP_NODE, &no_neighbor_timers_connect_cmd);
-
- /* "neighbor advertisement-interval" commands. */
- install_element (BGP_NODE, &neighbor_advertise_interval_cmd);
- install_element (BGP_NODE, &no_neighbor_advertise_interval_cmd);
-
- /* "neighbor interface" commands. */
- install_element (BGP_NODE, &neighbor_interface_cmd);
- install_element (BGP_NODE, &no_neighbor_interface_cmd);
-
- /* "neighbor distribute" commands. */
- install_element (BGP_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_NODE, &no_neighbor_distribute_list_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_distribute_list_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_distribute_list_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_distribute_list_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_distribute_list_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_distribute_list_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_distribute_list_cmd);
-
- /* "neighbor prefix-list" commands. */
- install_element (BGP_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_NODE, &no_neighbor_prefix_list_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_prefix_list_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_prefix_list_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_prefix_list_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_prefix_list_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_prefix_list_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_prefix_list_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_prefix_list_cmd);
-
- /* "neighbor filter-list" commands. */
- install_element (BGP_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_NODE, &no_neighbor_filter_list_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_filter_list_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_filter_list_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_filter_list_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_filter_list_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_filter_list_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_filter_list_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_filter_list_cmd);
-
- /* "neighbor route-map" commands. */
- install_element (BGP_NODE, &neighbor_route_map_cmd);
- install_element (BGP_NODE, &no_neighbor_route_map_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_route_map_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_route_map_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_route_map_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_route_map_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_route_map_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_route_map_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_route_map_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_route_map_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_route_map_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_route_map_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_route_map_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_route_map_cmd);
-
- /* "neighbor unsuppress-map" commands. */
- install_element (BGP_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_NODE, &no_neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_unsuppress_map_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_unsuppress_map_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_unsuppress_map_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_unsuppress_map_cmd);
-
- /* "neighbor maximum-prefix" commands. */
- install_element (BGP_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_NODE, &no_neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_maximum_prefix_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_maximum_prefix_warning_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_maximum_prefix_threshold_warning_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_maximum_prefix_restart_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_maximum_prefix_threshold_restart_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_maximum_prefix_cmd);
-
- /* "neighbor allowas-in" */
- install_element (BGP_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_NODE, &no_neighbor_allowas_in_cmd);
- install_element (BGP_IPV4_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_IPV4_NODE, &no_neighbor_allowas_in_cmd);
- install_element (BGP_IPV4M_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_IPV4M_NODE, &no_neighbor_allowas_in_cmd);
- install_element (BGP_IPV6_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_IPV6_NODE, &no_neighbor_allowas_in_cmd);
- install_element (BGP_IPV6M_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_IPV6M_NODE, &no_neighbor_allowas_in_cmd);
- install_element (BGP_VPNV4_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_VPNV4_NODE, &no_neighbor_allowas_in_cmd);
- install_element (BGP_VPNV6_NODE, &neighbor_allowas_in_cmd);
- install_element (BGP_VPNV6_NODE, &no_neighbor_allowas_in_cmd);
-
- /* address-family commands. */
- install_element (BGP_NODE, &address_family_ipv4_safi_cmd);
- install_element (BGP_NODE, &address_family_ipv6_safi_cmd);
+static struct cmd_node bgp_vpnv4_node = {BGP_VPNV4_NODE,
+ "%s(config-router-af)# ", 1};
+
+static struct cmd_node bgp_vpnv6_node = {BGP_VPNV6_NODE,
+ "%s(config-router-af-vpnv6)# ", 1};
+
+static struct cmd_node bgp_evpn_node = {BGP_EVPN_NODE,
+ "%s(config-router-evpn)# ", 1};
+
+static void community_list_vty(void);
+
+void bgp_vty_init(void)
+{
+ /* Install bgp top node. */
+ install_node(&bgp_node, bgp_config_write);
+ install_node(&bgp_ipv4_unicast_node, NULL);
+ install_node(&bgp_ipv4_multicast_node, NULL);
+ install_node(&bgp_ipv6_unicast_node, NULL);
+ install_node(&bgp_ipv6_multicast_node, NULL);
+ install_node(&bgp_vpnv4_node, NULL);
+ install_node(&bgp_vpnv6_node, NULL);
+ install_node(&bgp_evpn_node, NULL);
+
+ /* Install default VTY commands to new nodes. */
+ install_default(BGP_NODE);
+ install_default(BGP_IPV4_NODE);
+ install_default(BGP_IPV4M_NODE);
+ install_default(BGP_IPV6_NODE);
+ install_default(BGP_IPV6M_NODE);
+ install_default(BGP_VPNV4_NODE);
+ install_default(BGP_VPNV6_NODE);
+ install_default(BGP_EVPN_NODE);
+
+ /* "bgp multiple-instance" commands. */
+ install_element(CONFIG_NODE, &bgp_multiple_instance_cmd);
+ install_element(CONFIG_NODE, &no_bgp_multiple_instance_cmd);
+
+ /* "bgp config-type" commands. */
+ install_element(CONFIG_NODE, &bgp_config_type_cmd);
+ install_element(CONFIG_NODE, &no_bgp_config_type_cmd);
+
+ /* bgp route-map delay-timer commands. */
+ install_element(CONFIG_NODE, &bgp_set_route_map_delay_timer_cmd);
+ install_element(CONFIG_NODE, &no_bgp_set_route_map_delay_timer_cmd);
+
+ /* Dummy commands (Currently not supported) */
+ install_element(BGP_NODE, &no_synchronization_cmd);
+ install_element(BGP_NODE, &no_auto_summary_cmd);
+
+ /* "router bgp" commands. */
+ install_element(CONFIG_NODE, &router_bgp_cmd);
+
+ /* "no router bgp" commands. */
+ install_element(CONFIG_NODE, &no_router_bgp_cmd);
+
+ /* "bgp router-id" commands. */
+ install_element(BGP_NODE, &bgp_router_id_cmd);
+ install_element(BGP_NODE, &no_bgp_router_id_cmd);
+
+ /* "bgp cluster-id" commands. */
+ install_element(BGP_NODE, &bgp_cluster_id_cmd);
+ install_element(BGP_NODE, &no_bgp_cluster_id_cmd);
+
+ /* "bgp confederation" commands. */
+ install_element(BGP_NODE, &bgp_confederation_identifier_cmd);
+ install_element(BGP_NODE, &no_bgp_confederation_identifier_cmd);
+
+ /* "bgp confederation peers" commands. */
+ install_element(BGP_NODE, &bgp_confederation_peers_cmd);
+ install_element(BGP_NODE, &no_bgp_confederation_peers_cmd);
+
+ /* bgp max-med command */
+ install_element(BGP_NODE, &bgp_maxmed_admin_cmd);
+ install_element(BGP_NODE, &no_bgp_maxmed_admin_cmd);
+ install_element(BGP_NODE, &bgp_maxmed_admin_medv_cmd);
+ install_element(BGP_NODE, &bgp_maxmed_onstartup_cmd);
+ install_element(BGP_NODE, &no_bgp_maxmed_onstartup_cmd);
+ install_element(BGP_NODE, &bgp_maxmed_onstartup_medv_cmd);
+
+ /* bgp disable-ebgp-connected-nh-check */
+ install_element(BGP_NODE, &bgp_disable_connected_route_check_cmd);
+ install_element(BGP_NODE, &no_bgp_disable_connected_route_check_cmd);
+
+ /* bgp update-delay command */
+ install_element(BGP_NODE, &bgp_update_delay_cmd);
+ install_element(BGP_NODE, &no_bgp_update_delay_cmd);
+ install_element(BGP_NODE, &bgp_update_delay_establish_wait_cmd);
+
+ install_element(BGP_NODE, &bgp_wpkt_quanta_cmd);
+ install_element(BGP_NODE, &no_bgp_wpkt_quanta_cmd);
+
+ install_element(BGP_NODE, &bgp_coalesce_time_cmd);
+ install_element(BGP_NODE, &no_bgp_coalesce_time_cmd);
+
+ /* "maximum-paths" commands. */
+ install_element(BGP_NODE, &bgp_maxpaths_cmd);
+ install_element(BGP_NODE, &no_bgp_maxpaths_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_maxpaths_cmd);
+ install_element(BGP_IPV4_NODE, &no_bgp_maxpaths_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_maxpaths_cmd);
+ install_element(BGP_IPV6_NODE, &no_bgp_maxpaths_cmd);
+ install_element(BGP_NODE, &bgp_maxpaths_ibgp_cmd);
+ install_element(BGP_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
+ install_element(BGP_NODE, &no_bgp_maxpaths_ibgp_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_maxpaths_ibgp_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
+ install_element(BGP_IPV4_NODE, &no_bgp_maxpaths_ibgp_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_maxpaths_ibgp_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_maxpaths_ibgp_cluster_cmd);
+ install_element(BGP_IPV6_NODE, &no_bgp_maxpaths_ibgp_cmd);
+
+ /* "timers bgp" commands. */
+ install_element(BGP_NODE, &bgp_timers_cmd);
+ install_element(BGP_NODE, &no_bgp_timers_cmd);
+
+ /* route-map delay-timer commands - per instance for backwards compat.
+ */
+ install_element(BGP_NODE, &bgp_set_route_map_delay_timer_cmd);
+ install_element(BGP_NODE, &no_bgp_set_route_map_delay_timer_cmd);
+
+ /* "bgp client-to-client reflection" commands */
+ install_element(BGP_NODE, &no_bgp_client_to_client_reflection_cmd);
+ install_element(BGP_NODE, &bgp_client_to_client_reflection_cmd);
+
+ /* "bgp always-compare-med" commands */
+ install_element(BGP_NODE, &bgp_always_compare_med_cmd);
+ install_element(BGP_NODE, &no_bgp_always_compare_med_cmd);
+
+ /* "bgp deterministic-med" commands */
+ install_element(BGP_NODE, &bgp_deterministic_med_cmd);
+ install_element(BGP_NODE, &no_bgp_deterministic_med_cmd);
+
+ /* "bgp graceful-restart" commands */
+ install_element(BGP_NODE, &bgp_graceful_restart_cmd);
+ install_element(BGP_NODE, &no_bgp_graceful_restart_cmd);
+ install_element(BGP_NODE, &bgp_graceful_restart_stalepath_time_cmd);
+ install_element(BGP_NODE, &no_bgp_graceful_restart_stalepath_time_cmd);
+ install_element(BGP_NODE, &bgp_graceful_restart_restart_time_cmd);
+ install_element(BGP_NODE, &no_bgp_graceful_restart_restart_time_cmd);
+
+ install_element(BGP_NODE, &bgp_graceful_restart_preserve_fw_cmd);
+ install_element(BGP_NODE, &no_bgp_graceful_restart_preserve_fw_cmd);
+
+ /* "bgp fast-external-failover" commands */
+ install_element(BGP_NODE, &bgp_fast_external_failover_cmd);
+ install_element(BGP_NODE, &no_bgp_fast_external_failover_cmd);
+
+ /* "bgp enforce-first-as" commands */
+ install_element(BGP_NODE, &bgp_enforce_first_as_cmd);
+ install_element(BGP_NODE, &no_bgp_enforce_first_as_cmd);
+
+ /* "bgp bestpath compare-routerid" commands */
+ install_element(BGP_NODE, &bgp_bestpath_compare_router_id_cmd);
+ install_element(BGP_NODE, &no_bgp_bestpath_compare_router_id_cmd);
+
+ /* "bgp bestpath as-path ignore" commands */
+ install_element(BGP_NODE, &bgp_bestpath_aspath_ignore_cmd);
+ install_element(BGP_NODE, &no_bgp_bestpath_aspath_ignore_cmd);
+
+ /* "bgp bestpath as-path confed" commands */
+ install_element(BGP_NODE, &bgp_bestpath_aspath_confed_cmd);
+ install_element(BGP_NODE, &no_bgp_bestpath_aspath_confed_cmd);
+
+ /* "bgp bestpath as-path multipath-relax" commands */
+ install_element(BGP_NODE, &bgp_bestpath_aspath_multipath_relax_cmd);
+ install_element(BGP_NODE, &no_bgp_bestpath_aspath_multipath_relax_cmd);
+
+ /* "bgp log-neighbor-changes" commands */
+ install_element(BGP_NODE, &bgp_log_neighbor_changes_cmd);
+ install_element(BGP_NODE, &no_bgp_log_neighbor_changes_cmd);
+
+ /* "bgp bestpath med" commands */
+ install_element(BGP_NODE, &bgp_bestpath_med_cmd);
+ install_element(BGP_NODE, &no_bgp_bestpath_med_cmd);
+
+ /* "no bgp default ipv4-unicast" commands. */
+ install_element(BGP_NODE, &no_bgp_default_ipv4_unicast_cmd);
+ install_element(BGP_NODE, &bgp_default_ipv4_unicast_cmd);
+
+ /* "bgp network import-check" commands. */
+ install_element(BGP_NODE, &bgp_network_import_check_cmd);
+ install_element(BGP_NODE, &bgp_network_import_check_exact_cmd);
+ install_element(BGP_NODE, &no_bgp_network_import_check_cmd);
+
+ /* "bgp default local-preference" commands. */
+ install_element(BGP_NODE, &bgp_default_local_preference_cmd);
+ install_element(BGP_NODE, &no_bgp_default_local_preference_cmd);
+
+ /* bgp default show-hostname */
+ install_element(BGP_NODE, &bgp_default_show_hostname_cmd);
+ install_element(BGP_NODE, &no_bgp_default_show_hostname_cmd);
+
+ /* "bgp default subgroup-pkt-queue-max" commands. */
+ install_element(BGP_NODE, &bgp_default_subgroup_pkt_queue_max_cmd);
+ install_element(BGP_NODE, &no_bgp_default_subgroup_pkt_queue_max_cmd);
+
+ /* bgp ibgp-allow-policy-mods command */
+ install_element(BGP_NODE, &bgp_rr_allow_outbound_policy_cmd);
+ install_element(BGP_NODE, &no_bgp_rr_allow_outbound_policy_cmd);
+
+ /* "bgp listen limit" commands. */
+ install_element(BGP_NODE, &bgp_listen_limit_cmd);
+ install_element(BGP_NODE, &no_bgp_listen_limit_cmd);
+
+ /* "bgp listen range" commands. */
+ install_element(BGP_NODE, &bgp_listen_range_cmd);
+ install_element(BGP_NODE, &no_bgp_listen_range_cmd);
+
+ /* "neighbor remote-as" commands. */
+ install_element(BGP_NODE, &neighbor_remote_as_cmd);
+ install_element(BGP_NODE, &neighbor_interface_config_cmd);
+ install_element(BGP_NODE, &neighbor_interface_config_v6only_cmd);
+ install_element(BGP_NODE, &neighbor_interface_config_remote_as_cmd);
+ install_element(BGP_NODE,
+ &neighbor_interface_v6only_config_remote_as_cmd);
+ install_element(BGP_NODE, &no_neighbor_cmd);
+ install_element(BGP_NODE, &no_neighbor_interface_config_cmd);
+
+ /* "neighbor peer-group" commands. */
+ install_element(BGP_NODE, &neighbor_peer_group_cmd);
+ install_element(BGP_NODE, &no_neighbor_peer_group_cmd);
+ install_element(BGP_NODE,
+ &no_neighbor_interface_peer_group_remote_as_cmd);
+
+ /* "neighbor local-as" commands. */
+ install_element(BGP_NODE, &neighbor_local_as_cmd);
+ install_element(BGP_NODE, &neighbor_local_as_no_prepend_cmd);
+ install_element(BGP_NODE, &neighbor_local_as_no_prepend_replace_as_cmd);
+ install_element(BGP_NODE, &no_neighbor_local_as_cmd);
+
+ /* "neighbor solo" commands. */
+ install_element(BGP_NODE, &neighbor_solo_cmd);
+ install_element(BGP_NODE, &no_neighbor_solo_cmd);
+
+ /* "neighbor password" commands. */
+ install_element(BGP_NODE, &neighbor_password_cmd);
+ install_element(BGP_NODE, &no_neighbor_password_cmd);
+
+ /* "neighbor activate" commands. */
+ install_element(BGP_NODE, &neighbor_activate_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_activate_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_activate_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_activate_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_activate_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_activate_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_activate_cmd);
+ install_element(BGP_EVPN_NODE, &neighbor_activate_cmd);
+
+ /* "no neighbor activate" commands. */
+ install_element(BGP_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_activate_cmd);
+ install_element(BGP_EVPN_NODE, &no_neighbor_activate_cmd);
+
+ /* "neighbor peer-group" set commands.
+ * Long term we should only accept this command under BGP_NODE and not
+ * all of
+ * the afi/safi sub-contexts. For now though we need to accept it for
+ * backwards
+ * compatibility. This changed when we stopped requiring that peers be
+ * assigned
+ * to their peer-group under each address-family sub-context.
+ */
+ install_element(BGP_NODE, &neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_set_peer_group_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_set_peer_group_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_set_peer_group_cmd);
+
+ /* "no neighbor peer-group unset" commands. */
+ install_element(BGP_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_set_peer_group_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_set_peer_group_cmd);
+
+ /* "neighbor softreconfiguration inbound" commands.*/
+ install_element(BGP_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_soft_reconfiguration_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_soft_reconfiguration_cmd);
+
+ /* "neighbor attribute-unchanged" commands. */
+ install_element(BGP_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_attr_unchanged_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_attr_unchanged_cmd);
+
+ install_element(BGP_EVPN_NODE, &neighbor_attr_unchanged_cmd);
+ install_element(BGP_EVPN_NODE, &no_neighbor_attr_unchanged_cmd);
+
+ /* "nexthop-local unchanged" commands */
+ install_element(BGP_IPV6_NODE, &neighbor_nexthop_local_unchanged_cmd);
+ install_element(BGP_IPV6_NODE,
+ &no_neighbor_nexthop_local_unchanged_cmd);
+
+ /* "neighbor next-hop-self" commands. */
+ install_element(BGP_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_nexthop_self_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_nexthop_self_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_nexthop_self_cmd);
+
+ /* "neighbor next-hop-self force" commands. */
+ install_element(BGP_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_NODE, &no_neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_nexthop_self_force_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_nexthop_self_force_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_nexthop_self_force_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_nexthop_self_force_cmd);
+
+ /* "neighbor as-override" commands. */
+ install_element(BGP_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_NODE, &no_neighbor_as_override_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_as_override_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_as_override_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_as_override_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_as_override_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_as_override_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_as_override_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_as_override_cmd);
+
+ /* "neighbor remove-private-AS" commands. */
+ install_element(BGP_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_NODE, &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV4_NODE,
+ &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV4_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV4_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV4_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV6_NODE,
+ &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV6_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV6_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV6_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_remove_private_as_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_remove_private_as_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_remove_private_as_all_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_remove_private_as_all_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &no_neighbor_remove_private_as_replace_as_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &neighbor_remove_private_as_all_replace_as_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &no_neighbor_remove_private_as_all_replace_as_cmd);
+
+ /* "neighbor send-community" commands.*/
+ install_element(BGP_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_NODE, &no_neighbor_send_community_type_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_send_community_type_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_send_community_type_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_send_community_type_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_send_community_type_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_send_community_type_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_send_community_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_send_community_type_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_send_community_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_send_community_type_cmd);
+
+ /* "neighbor route-reflector" commands.*/
+ install_element(BGP_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_NODE, &no_neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &no_neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &no_neighbor_route_reflector_client_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &no_neighbor_route_reflector_client_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_route_reflector_client_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &no_neighbor_route_reflector_client_cmd);
+
+ /* "neighbor route-server" commands.*/
+ install_element(BGP_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_NODE, &no_neighbor_route_server_client_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_route_server_client_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_route_server_client_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_route_server_client_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_route_server_client_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_route_server_client_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_route_server_client_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_route_server_client_cmd);
+
+ /* "neighbor addpath-tx-all-paths" commands.*/
+ install_element(BGP_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_addpath_tx_all_paths_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_addpath_tx_all_paths_cmd);
+
+ /* "neighbor addpath-tx-bestpath-per-AS" commands.*/
+ install_element(BGP_NODE, &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_NODE, &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV4_NODE,
+ &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV4_NODE,
+ &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV6_NODE,
+ &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV6_NODE,
+ &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &neighbor_addpath_tx_bestpath_per_as_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &no_neighbor_addpath_tx_bestpath_per_as_cmd);
+
+ /* "neighbor passive" commands. */
+ install_element(BGP_NODE, &neighbor_passive_cmd);
+ install_element(BGP_NODE, &no_neighbor_passive_cmd);
+
+
+ /* "neighbor shutdown" commands. */
+ install_element(BGP_NODE, &neighbor_shutdown_cmd);
+ install_element(BGP_NODE, &no_neighbor_shutdown_cmd);
+ install_element(BGP_NODE, &neighbor_shutdown_msg_cmd);
+ install_element(BGP_NODE, &no_neighbor_shutdown_msg_cmd);
+
+ /* "neighbor capability extended-nexthop" commands.*/
+ install_element(BGP_NODE, &neighbor_capability_enhe_cmd);
+ install_element(BGP_NODE, &no_neighbor_capability_enhe_cmd);
+
+ /* "neighbor capability orf prefix-list" commands.*/
+ install_element(BGP_NODE, &neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_NODE, &no_neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_capability_orf_prefix_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_capability_orf_prefix_cmd);
+
+ /* "neighbor capability dynamic" commands.*/
+ install_element(BGP_NODE, &neighbor_capability_dynamic_cmd);
+ install_element(BGP_NODE, &no_neighbor_capability_dynamic_cmd);
+
+ /* "neighbor dont-capability-negotiate" commands. */
+ install_element(BGP_NODE, &neighbor_dont_capability_negotiate_cmd);
+ install_element(BGP_NODE, &no_neighbor_dont_capability_negotiate_cmd);
+
+ /* "neighbor ebgp-multihop" commands. */
+ install_element(BGP_NODE, &neighbor_ebgp_multihop_cmd);
+ install_element(BGP_NODE, &neighbor_ebgp_multihop_ttl_cmd);
+ install_element(BGP_NODE, &no_neighbor_ebgp_multihop_cmd);
+
+ /* "neighbor disable-connected-check" commands. */
+ install_element(BGP_NODE, &neighbor_disable_connected_check_cmd);
+ install_element(BGP_NODE, &no_neighbor_disable_connected_check_cmd);
+
+ /* "neighbor description" commands. */
+ install_element(BGP_NODE, &neighbor_description_cmd);
+ install_element(BGP_NODE, &no_neighbor_description_cmd);
+
+ /* "neighbor update-source" commands. "*/
+ install_element(BGP_NODE, &neighbor_update_source_cmd);
+ install_element(BGP_NODE, &no_neighbor_update_source_cmd);
+
+ /* "neighbor default-originate" commands. */
+ install_element(BGP_NODE, &neighbor_default_originate_cmd);
+ install_element(BGP_NODE, &neighbor_default_originate_rmap_cmd);
+ install_element(BGP_NODE, &no_neighbor_default_originate_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_default_originate_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_default_originate_rmap_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_default_originate_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_default_originate_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_default_originate_rmap_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_default_originate_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_default_originate_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_default_originate_rmap_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_default_originate_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_default_originate_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_default_originate_rmap_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_default_originate_cmd);
+
+ /* "neighbor port" commands. */
+ install_element(BGP_NODE, &neighbor_port_cmd);
+ install_element(BGP_NODE, &no_neighbor_port_cmd);
+
+ /* "neighbor weight" commands. */
+ install_element(BGP_NODE, &neighbor_weight_cmd);
+ install_element(BGP_NODE, &no_neighbor_weight_cmd);
+
+ install_element(BGP_IPV4_NODE, &neighbor_weight_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_weight_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_weight_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_weight_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_weight_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_weight_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_weight_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_weight_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_weight_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_weight_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_weight_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_weight_cmd);
+
+ /* "neighbor override-capability" commands. */
+ install_element(BGP_NODE, &neighbor_override_capability_cmd);
+ install_element(BGP_NODE, &no_neighbor_override_capability_cmd);
+
+ /* "neighbor strict-capability-match" commands. */
+ install_element(BGP_NODE, &neighbor_strict_capability_cmd);
+ install_element(BGP_NODE, &no_neighbor_strict_capability_cmd);
+
+ /* "neighbor timers" commands. */
+ install_element(BGP_NODE, &neighbor_timers_cmd);
+ install_element(BGP_NODE, &no_neighbor_timers_cmd);
+
+ /* "neighbor timers connect" commands. */
+ install_element(BGP_NODE, &neighbor_timers_connect_cmd);
+ install_element(BGP_NODE, &no_neighbor_timers_connect_cmd);
+
+ /* "neighbor advertisement-interval" commands. */
+ install_element(BGP_NODE, &neighbor_advertise_interval_cmd);
+ install_element(BGP_NODE, &no_neighbor_advertise_interval_cmd);
+
+ /* "neighbor interface" commands. */
+ install_element(BGP_NODE, &neighbor_interface_cmd);
+ install_element(BGP_NODE, &no_neighbor_interface_cmd);
+
+ /* "neighbor distribute" commands. */
+ install_element(BGP_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_NODE, &no_neighbor_distribute_list_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_distribute_list_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_distribute_list_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_distribute_list_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_distribute_list_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_distribute_list_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_distribute_list_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_distribute_list_cmd);
+
+ /* "neighbor prefix-list" commands. */
+ install_element(BGP_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_NODE, &no_neighbor_prefix_list_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_prefix_list_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_prefix_list_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_prefix_list_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_prefix_list_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_prefix_list_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_prefix_list_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_prefix_list_cmd);
+
+ /* "neighbor filter-list" commands. */
+ install_element(BGP_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_NODE, &no_neighbor_filter_list_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_filter_list_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_filter_list_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_filter_list_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_filter_list_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_filter_list_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_filter_list_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_filter_list_cmd);
+
+ /* "neighbor route-map" commands. */
+ install_element(BGP_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_NODE, &no_neighbor_route_map_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_route_map_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_route_map_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_route_map_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_route_map_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_route_map_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_route_map_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_route_map_cmd);
+
+ /* "neighbor unsuppress-map" commands. */
+ install_element(BGP_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_unsuppress_map_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_unsuppress_map_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_unsuppress_map_cmd);
+
+ /* "neighbor maximum-prefix" commands. */
+ install_element(BGP_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_IPV4_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_IPV4_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_IPV4M_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_IPV6_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_IPV6_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_IPV6M_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_VPNV4_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_maximum_prefix_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_maximum_prefix_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_maximum_prefix_threshold_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_maximum_prefix_warning_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &neighbor_maximum_prefix_threshold_warning_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_maximum_prefix_restart_cmd);
+ install_element(BGP_VPNV6_NODE,
+ &neighbor_maximum_prefix_threshold_restart_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_maximum_prefix_cmd);
+
+ /* "neighbor allowas-in" */
+ install_element(BGP_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_NODE, &no_neighbor_allowas_in_cmd);
+ install_element(BGP_IPV4_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_IPV4_NODE, &no_neighbor_allowas_in_cmd);
+ install_element(BGP_IPV4M_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_IPV4M_NODE, &no_neighbor_allowas_in_cmd);
+ install_element(BGP_IPV6_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_IPV6_NODE, &no_neighbor_allowas_in_cmd);
+ install_element(BGP_IPV6M_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_IPV6M_NODE, &no_neighbor_allowas_in_cmd);
+ install_element(BGP_VPNV4_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_VPNV4_NODE, &no_neighbor_allowas_in_cmd);
+ install_element(BGP_VPNV6_NODE, &neighbor_allowas_in_cmd);
+ install_element(BGP_VPNV6_NODE, &no_neighbor_allowas_in_cmd);
+
+ /* address-family commands. */
+ install_element(BGP_NODE, &address_family_ipv4_safi_cmd);
+ install_element(BGP_NODE, &address_family_ipv6_safi_cmd);
#ifdef KEEP_OLD_VPN_COMMANDS
- install_element (BGP_NODE, &address_family_vpnv4_cmd);
- install_element (BGP_NODE, &address_family_vpnv6_cmd);
+ install_element(BGP_NODE, &address_family_vpnv4_cmd);
+ install_element(BGP_NODE, &address_family_vpnv6_cmd);
#endif /* KEEP_OLD_VPN_COMMANDS */
- install_element (BGP_NODE, &address_family_evpn_cmd);
-
- /* "exit-address-family" command. */
- install_element (BGP_IPV4_NODE, &exit_address_family_cmd);
- install_element (BGP_IPV4M_NODE, &exit_address_family_cmd);
- install_element (BGP_IPV6_NODE, &exit_address_family_cmd);
- install_element (BGP_IPV6M_NODE, &exit_address_family_cmd);
- install_element (BGP_VPNV4_NODE, &exit_address_family_cmd);
- install_element (BGP_VPNV6_NODE, &exit_address_family_cmd);
- install_element (BGP_EVPN_NODE, &exit_address_family_cmd);
-
- /* "clear ip bgp commands" */
- install_element (ENABLE_NODE, &clear_ip_bgp_all_cmd);
-
- /* clear ip bgp prefix */
- install_element (ENABLE_NODE, &clear_ip_bgp_prefix_cmd);
- install_element (ENABLE_NODE, &clear_bgp_ipv6_safi_prefix_cmd);
- install_element (ENABLE_NODE, &clear_bgp_instance_ipv6_safi_prefix_cmd);
-
- /* "show [ip] bgp summary" commands. */
- install_element (VIEW_NODE, &show_bgp_instance_all_ipv6_updgrps_cmd);
- install_element (VIEW_NODE, &show_bgp_instance_updgrps_adj_cmd);
- install_element (VIEW_NODE, &show_bgp_instance_updgrps_adj_s_cmd);
- install_element (VIEW_NODE, &show_bgp_instance_updgrps_stats_cmd);
- install_element (VIEW_NODE, &show_bgp_updgrps_adj_cmd);
- install_element (VIEW_NODE, &show_bgp_updgrps_adj_s_cmd);
- install_element (VIEW_NODE, &show_bgp_updgrps_afi_adj_cmd);
- install_element (VIEW_NODE, &show_bgp_updgrps_afi_adj_s_cmd);
- install_element (VIEW_NODE, &show_bgp_updgrps_stats_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_instance_updgrps_adj_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_instance_updgrps_adj_s_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_summary_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_updgrps_adj_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_updgrps_adj_s_cmd);
- install_element (VIEW_NODE, &show_ip_bgp_updgrps_cmd);
-
- /* "show [ip] bgp neighbors" commands. */
- install_element (VIEW_NODE, &show_ip_bgp_neighbors_cmd);
-
- /* "show [ip] bgp peer-group" commands. */
- install_element (VIEW_NODE, &show_ip_bgp_peer_groups_cmd);
-
- /* "show [ip] bgp paths" commands. */
- install_element (VIEW_NODE, &show_ip_bgp_paths_cmd);
-
- /* "show [ip] bgp community" commands. */
- install_element (VIEW_NODE, &show_ip_bgp_community_info_cmd);
-
- /* "show ip bgp large-community" commands. */
- install_element (VIEW_NODE, &show_ip_bgp_lcommunity_info_cmd);
- /* "show [ip] bgp attribute-info" commands. */
- install_element (VIEW_NODE, &show_ip_bgp_attr_info_cmd);
-
- /* "redistribute" commands. */
- install_element (BGP_NODE, &bgp_redistribute_ipv4_cmd);
- install_element (BGP_NODE, &no_bgp_redistribute_ipv4_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_ospf_cmd);
- install_element (BGP_NODE, &no_bgp_redistribute_ipv4_ospf_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_ospf_rmap_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_ospf_metric_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_ospf_rmap_metric_cmd);
- install_element (BGP_NODE, &bgp_redistribute_ipv4_ospf_metric_rmap_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_cmd);
- install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_rmap_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_metric_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_cmd);
- install_element (BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_ospf_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_rmap_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_metric_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_rmap_metric_cmd);
- install_element (BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_metric_rmap_cmd);
- install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_cmd);
- install_element (BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_cmd);
- install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_cmd);
- install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_cmd);
- install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_metric_cmd);
- install_element (BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_rmap_cmd);
-
- /* ttl_security commands */
- install_element (BGP_NODE, &neighbor_ttl_security_cmd);
- install_element (BGP_NODE, &no_neighbor_ttl_security_cmd);
-
- /* "show [ip] bgp memory" commands. */
- install_element (VIEW_NODE, &show_bgp_memory_cmd);
-
- /* "show [ip] bgp views" commands. */
- install_element (VIEW_NODE, &show_bgp_views_cmd);
-
- /* "show [ip] bgp vrfs" commands. */
- install_element (VIEW_NODE, &show_bgp_vrfs_cmd);
-
- /* Community-list. */
- community_list_vty ();
+ install_element(BGP_NODE, &address_family_evpn_cmd);
+
+ /* "exit-address-family" command. */
+ install_element(BGP_IPV4_NODE, &exit_address_family_cmd);
+ install_element(BGP_IPV4M_NODE, &exit_address_family_cmd);
+ install_element(BGP_IPV6_NODE, &exit_address_family_cmd);
+ install_element(BGP_IPV6M_NODE, &exit_address_family_cmd);
+ install_element(BGP_VPNV4_NODE, &exit_address_family_cmd);
+ install_element(BGP_VPNV6_NODE, &exit_address_family_cmd);
+ install_element(BGP_EVPN_NODE, &exit_address_family_cmd);
+
+ /* "clear ip bgp commands" */
+ install_element(ENABLE_NODE, &clear_ip_bgp_all_cmd);
+
+ /* clear ip bgp prefix */
+ install_element(ENABLE_NODE, &clear_ip_bgp_prefix_cmd);
+ install_element(ENABLE_NODE, &clear_bgp_ipv6_safi_prefix_cmd);
+ install_element(ENABLE_NODE, &clear_bgp_instance_ipv6_safi_prefix_cmd);
+
+ /* "show [ip] bgp summary" commands. */
+ install_element(VIEW_NODE, &show_bgp_instance_all_ipv6_updgrps_cmd);
+ install_element(VIEW_NODE, &show_bgp_instance_updgrps_adj_cmd);
+ install_element(VIEW_NODE, &show_bgp_instance_updgrps_adj_s_cmd);
+ install_element(VIEW_NODE, &show_bgp_instance_updgrps_stats_cmd);
+ install_element(VIEW_NODE, &show_bgp_updgrps_adj_cmd);
+ install_element(VIEW_NODE, &show_bgp_updgrps_adj_s_cmd);
+ install_element(VIEW_NODE, &show_bgp_updgrps_afi_adj_cmd);
+ install_element(VIEW_NODE, &show_bgp_updgrps_afi_adj_s_cmd);
+ install_element(VIEW_NODE, &show_bgp_updgrps_stats_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_instance_updgrps_adj_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_instance_updgrps_adj_s_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_summary_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_updgrps_adj_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_updgrps_adj_s_cmd);
+ install_element(VIEW_NODE, &show_ip_bgp_updgrps_cmd);
+
+ /* "show [ip] bgp neighbors" commands. */
+ install_element(VIEW_NODE, &show_ip_bgp_neighbors_cmd);
+
+ /* "show [ip] bgp peer-group" commands. */
+ install_element(VIEW_NODE, &show_ip_bgp_peer_groups_cmd);
+
+ /* "show [ip] bgp paths" commands. */
+ install_element(VIEW_NODE, &show_ip_bgp_paths_cmd);
+
+ /* "show [ip] bgp community" commands. */
+ install_element(VIEW_NODE, &show_ip_bgp_community_info_cmd);
+
+ /* "show ip bgp large-community" commands. */
+ install_element(VIEW_NODE, &show_ip_bgp_lcommunity_info_cmd);
+ /* "show [ip] bgp attribute-info" commands. */
+ install_element(VIEW_NODE, &show_ip_bgp_attr_info_cmd);
+
+ /* "redistribute" commands. */
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_cmd);
+ install_element(BGP_NODE, &no_bgp_redistribute_ipv4_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_rmap_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_metric_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_ospf_cmd);
+ install_element(BGP_NODE, &no_bgp_redistribute_ipv4_ospf_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_ospf_rmap_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_ospf_metric_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_ospf_rmap_metric_cmd);
+ install_element(BGP_NODE, &bgp_redistribute_ipv4_ospf_metric_rmap_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_cmd);
+ install_element(BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_rmap_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_metric_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_rmap_metric_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_metric_rmap_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_cmd);
+ install_element(BGP_IPV4_NODE, &no_bgp_redistribute_ipv4_ospf_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_rmap_cmd);
+ install_element(BGP_IPV4_NODE, &bgp_redistribute_ipv4_ospf_metric_cmd);
+ install_element(BGP_IPV4_NODE,
+ &bgp_redistribute_ipv4_ospf_rmap_metric_cmd);
+ install_element(BGP_IPV4_NODE,
+ &bgp_redistribute_ipv4_ospf_metric_rmap_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_redistribute_ipv6_cmd);
+ install_element(BGP_IPV6_NODE, &no_bgp_redistribute_ipv6_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_redistribute_ipv6_rmap_metric_cmd);
+ install_element(BGP_IPV6_NODE, &bgp_redistribute_ipv6_metric_rmap_cmd);
+
+ /* ttl_security commands */
+ install_element(BGP_NODE, &neighbor_ttl_security_cmd);
+ install_element(BGP_NODE, &no_neighbor_ttl_security_cmd);
+
+ /* "show [ip] bgp memory" commands. */
+ install_element(VIEW_NODE, &show_bgp_memory_cmd);
+
+ /* "show [ip] bgp views" commands. */
+ install_element(VIEW_NODE, &show_bgp_views_cmd);
+
+ /* "show [ip] bgp vrfs" commands. */
+ install_element(VIEW_NODE, &show_bgp_vrfs_cmd);
+
+ /* Community-list. */
+ community_list_vty();
}
#include "memory.h"
@@ -10946,45 +11664,45 @@ bgp_vty_init (void)
/* VTY functions. */
/* Direction value to string conversion. */
-static const char *
-community_direct_str (int direct)
-{
- switch (direct)
- {
- case COMMUNITY_DENY:
- return "deny";
- case COMMUNITY_PERMIT:
- return "permit";
- default:
- return "unknown";
- }
+static const char *community_direct_str(int direct)
+{
+ switch (direct) {
+ case COMMUNITY_DENY:
+ return "deny";
+ case COMMUNITY_PERMIT:
+ return "permit";
+ default:
+ return "unknown";
+ }
}
/* Display error string. */
-static void
-community_list_perror (struct vty *vty, int ret)
-{
- switch (ret)
- {
- case COMMUNITY_LIST_ERR_CANT_FIND_LIST:
- vty_out (vty, "%% Can't find community-list%s", VTY_NEWLINE);
- break;
- case COMMUNITY_LIST_ERR_MALFORMED_VAL:
- vty_out (vty, "%% Malformed community-list value%s", VTY_NEWLINE);
- break;
- case COMMUNITY_LIST_ERR_STANDARD_CONFLICT:
- vty_out (vty, "%% Community name conflict, previously defined as standard community%s", VTY_NEWLINE);
- break;
- case COMMUNITY_LIST_ERR_EXPANDED_CONFLICT:
- vty_out (vty, "%% Community name conflict, previously defined as expanded community%s", VTY_NEWLINE);
- break;
- }
+static void community_list_perror(struct vty *vty, int ret)
+{
+ switch (ret) {
+ case COMMUNITY_LIST_ERR_CANT_FIND_LIST:
+ vty_out(vty, "%% Can't find community-list%s", VTY_NEWLINE);
+ break;
+ case COMMUNITY_LIST_ERR_MALFORMED_VAL:
+ vty_out(vty, "%% Malformed community-list value%s",
+ VTY_NEWLINE);
+ break;
+ case COMMUNITY_LIST_ERR_STANDARD_CONFLICT:
+ vty_out(vty,
+ "%% Community name conflict, previously defined as standard community%s",
+ VTY_NEWLINE);
+ break;
+ case COMMUNITY_LIST_ERR_EXPANDED_CONFLICT:
+ vty_out(vty,
+ "%% Community name conflict, previously defined as expanded community%s",
+ VTY_NEWLINE);
+ break;
+ }
}
/* "community-list" keyword help string. */
#define COMMUNITY_LIST_STR "Add a community list entry\n"
-
/* ip community-list standard */
DEFUN (ip_community_list_standard,
ip_community_list_standard_cmd,
@@ -10998,30 +11716,31 @@ DEFUN (ip_community_list_standard,
"Specify community to accept\n"
COMMUNITY_VAL_STR)
{
- char *cl_name_or_number = NULL;
- int direct = 0;
- int style = COMMUNITY_LIST_STANDARD;
+ char *cl_name_or_number = NULL;
+ int direct = 0;
+ int style = COMMUNITY_LIST_STANDARD;
- int idx = 0;
- argv_find (argv, argc, "(1-99)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_name_or_number = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "AA:NN", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(1-99)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_name_or_number = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "AA:NN", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = community_list_set (bgp_clist, cl_name_or_number, str, direct, style);
+ int ret = community_list_set(bgp_clist, cl_name_or_number, str, direct,
+ style);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- /* Display error string. */
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ /* Display error string. */
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_community_list_standard_all,
@@ -11037,31 +11756,32 @@ DEFUN (no_ip_community_list_standard_all,
"Specify community to accept\n"
COMMUNITY_VAL_STR)
{
- int delete_all = 0;
+ int delete_all = 0;
- char *cl_name_or_number = NULL;
- int direct = 0;
- int style = COMMUNITY_LIST_STANDARD;
+ char *cl_name_or_number = NULL;
+ int direct = 0;
+ int style = COMMUNITY_LIST_STANDARD;
- int idx = 0;
- argv_find (argv, argc, "(1-99)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_name_or_number = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "AA:NN", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(1-99)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_name_or_number = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "AA:NN", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = community_list_unset (bgp_clist, cl_name_or_number, str, direct, style, delete_all);
+ int ret = community_list_unset(bgp_clist, cl_name_or_number, str,
+ direct, style, delete_all);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* ip community-list expanded */
@@ -11077,30 +11797,31 @@ DEFUN (ip_community_list_expanded_all,
"Specify community to accept\n"
COMMUNITY_VAL_STR)
{
- char *cl_name_or_number = NULL;
- int direct = 0;
- int style = COMMUNITY_LIST_EXPANDED;
+ char *cl_name_or_number = NULL;
+ int direct = 0;
+ int style = COMMUNITY_LIST_EXPANDED;
- int idx = 0;
- argv_find (argv, argc, "(100-500)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_name_or_number = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "AA:NN", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(100-500)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_name_or_number = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "AA:NN", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = community_list_set (bgp_clist, cl_name_or_number, str, direct, style);
+ int ret = community_list_set(bgp_clist, cl_name_or_number, str, direct,
+ style);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- /* Display error string. */
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ /* Display error string. */
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_community_list_expanded_all,
@@ -11116,63 +11837,65 @@ DEFUN (no_ip_community_list_expanded_all,
"Specify community to accept\n"
COMMUNITY_VAL_STR)
{
- int delete_all = 0;
+ int delete_all = 0;
- char *cl_name_or_number = NULL;
- int direct = 0;
- int style = COMMUNITY_LIST_EXPANDED;
+ char *cl_name_or_number = NULL;
+ int direct = 0;
+ int style = COMMUNITY_LIST_EXPANDED;
- int idx = 0;
- argv_find (argv, argc, "(100-500)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_name_or_number = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "AA:NN", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(100-500)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_name_or_number = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "AA:NN", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = community_list_unset (bgp_clist, cl_name_or_number, str, direct, style, delete_all);
+ int ret = community_list_unset(bgp_clist, cl_name_or_number, str,
+ direct, style, delete_all);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static void
-community_list_show (struct vty *vty, struct community_list *list)
+static void community_list_show(struct vty *vty, struct community_list *list)
{
- struct community_entry *entry;
+ struct community_entry *entry;
- for (entry = list->head; entry; entry = entry->next)
- {
- if (entry == list->head)
- {
- if (all_digit (list->name))
- vty_out (vty, "Community %s list %s%s",
- entry->style == COMMUNITY_LIST_STANDARD ?
- "standard" : "(expanded) access",
- list->name, VTY_NEWLINE);
- else
- vty_out (vty, "Named Community %s list %s%s",
- entry->style == COMMUNITY_LIST_STANDARD ?
- "standard" : "expanded",
- list->name, VTY_NEWLINE);
- }
- if (entry->any)
- vty_out (vty, " %s%s",
- community_direct_str (entry->direct), VTY_NEWLINE);
- else
- vty_out (vty, " %s %s%s",
- community_direct_str (entry->direct),
- entry->style == COMMUNITY_LIST_STANDARD
- ? community_str (entry->u.com) : entry->config,
- VTY_NEWLINE);
- }
+ for (entry = list->head; entry; entry = entry->next) {
+ if (entry == list->head) {
+ if (all_digit(list->name))
+ vty_out(vty, "Community %s list %s%s",
+ entry->style == COMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "(expanded) access",
+ list->name, VTY_NEWLINE);
+ else
+ vty_out(vty, "Named Community %s list %s%s",
+ entry->style == COMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "expanded",
+ list->name, VTY_NEWLINE);
+ }
+ if (entry->any)
+ vty_out(vty, " %s%s",
+ community_direct_str(entry->direct),
+ VTY_NEWLINE);
+ else
+ vty_out(vty, " %s %s%s",
+ community_direct_str(entry->direct),
+ entry->style == COMMUNITY_LIST_STANDARD
+ ? community_str(entry->u.com)
+ : entry->config,
+ VTY_NEWLINE);
+ }
}
DEFUN (show_ip_community_list,
@@ -11182,20 +11905,20 @@ DEFUN (show_ip_community_list,
IP_STR
"List community-list\n")
{
- struct community_list *list;
- struct community_list_master *cm;
+ struct community_list *list;
+ struct community_list_master *cm;
- cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
- if (! cm)
- return CMD_SUCCESS;
+ cm = community_list_master_lookup(bgp_clist, COMMUNITY_LIST_MASTER);
+ if (!cm)
+ return CMD_SUCCESS;
- for (list = cm->num.head; list; list = list->next)
- community_list_show (vty, list);
+ for (list = cm->num.head; list; list = list->next)
+ community_list_show(vty, list);
- for (list = cm->str.head; list; list = list->next)
- community_list_show (vty, list);
+ for (list = cm->str.head; list; list = list->next)
+ community_list_show(vty, list);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_community_list_arg,
@@ -11207,119 +11930,117 @@ DEFUN (show_ip_community_list_arg,
"Community-list number\n"
"Community-list name\n")
{
- int idx_comm_list = 3;
- struct community_list *list;
+ int idx_comm_list = 3;
+ struct community_list *list;
- list = community_list_lookup (bgp_clist, argv[idx_comm_list]->arg, COMMUNITY_LIST_MASTER);
- if (! list)
- {
- vty_out (vty, "%% Can't find community-list%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ list = community_list_lookup(bgp_clist, argv[idx_comm_list]->arg,
+ COMMUNITY_LIST_MASTER);
+ if (!list) {
+ vty_out(vty, "%% Can't find community-list%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- community_list_show (vty, list);
+ community_list_show(vty, list);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/*
* Large Community code.
*/
-static int
-lcommunity_list_set_vty (struct vty *vty, int argc, struct cmd_token **argv,
- int style, int reject_all_digit_name)
-{
- int ret;
- int direct;
- char *str;
- int idx = 0;
- char *cl_name;
-
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
-
- /* All digit name check. */
- idx = 0;
- argv_find (argv, argc, "WORD", &idx);
- argv_find (argv, argc, "(1-99)", &idx);
- argv_find (argv, argc, "(100-500)", &idx);
- cl_name = argv[idx]->arg;
- if (reject_all_digit_name && all_digit (cl_name))
- {
- vty_out (vty, "%% Community name cannot have all digits%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
-
- idx = 0;
- argv_find (argv, argc, "AA:BB:CC", &idx);
- argv_find (argv, argc, "LINE", &idx);
- /* Concat community string argument. */
- if (idx)
- str = argv_concat (argv, argc, idx);
- else
- str = NULL;
-
- ret = lcommunity_list_set (bgp_clist, cl_name, str, direct, style);
-
- /* Free temporary community list string allocated by
- argv_concat(). */
- if (str)
- XFREE (MTYPE_TMP, str);
-
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
- return CMD_SUCCESS;
-}
-
-static int
-lcommunity_list_unset_vty (struct vty *vty, int argc, struct cmd_token **argv,
- int style)
-{
- int ret;
- int direct = 0;
- char *str = NULL;
- int idx = 0;
-
- argv_find (argv, argc, "permit", &idx);
- argv_find (argv, argc, "deny", &idx);
-
- if (idx)
- {
- /* Check the list direct. */
- if (strncmp (argv[idx]->arg, "p", 1) == 0)
- direct = COMMUNITY_PERMIT;
- else
- direct = COMMUNITY_DENY;
-
- idx = 0;
- argv_find (argv, argc, "LINE", &idx);
- argv_find (argv, argc, "AA:AA:NN", &idx);
- /* Concat community string argument. */
- str = argv_concat (argv, argc, idx);
- }
-
- idx = 0;
- argv_find (argv, argc, "(1-99)", &idx);
- argv_find (argv, argc, "(100-500)", &idx);
- argv_find (argv, argc, "WORD", &idx);
-
- /* Unset community list. */
- ret = lcommunity_list_unset (bgp_clist, argv[idx]->arg, str, direct, style);
-
- /* Free temporary community list string allocated by
- argv_concat(). */
- if (str)
- XFREE (MTYPE_TMP, str);
-
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
-
- return CMD_SUCCESS;
+static int lcommunity_list_set_vty(struct vty *vty, int argc,
+ struct cmd_token **argv, int style,
+ int reject_all_digit_name)
+{
+ int ret;
+ int direct;
+ char *str;
+ int idx = 0;
+ char *cl_name;
+
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+
+ /* All digit name check. */
+ idx = 0;
+ argv_find(argv, argc, "WORD", &idx);
+ argv_find(argv, argc, "(1-99)", &idx);
+ argv_find(argv, argc, "(100-500)", &idx);
+ cl_name = argv[idx]->arg;
+ if (reject_all_digit_name && all_digit(cl_name)) {
+ vty_out(vty, "%% Community name cannot have all digits%s",
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ idx = 0;
+ argv_find(argv, argc, "AA:BB:CC", &idx);
+ argv_find(argv, argc, "LINE", &idx);
+ /* Concat community string argument. */
+ if (idx)
+ str = argv_concat(argv, argc, idx);
+ else
+ str = NULL;
+
+ ret = lcommunity_list_set(bgp_clist, cl_name, str, direct, style);
+
+ /* Free temporary community list string allocated by
+ argv_concat(). */
+ if (str)
+ XFREE(MTYPE_TMP, str);
+
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
+}
+
+static int lcommunity_list_unset_vty(struct vty *vty, int argc,
+ struct cmd_token **argv, int style)
+{
+ int ret;
+ int direct = 0;
+ char *str = NULL;
+ int idx = 0;
+
+ argv_find(argv, argc, "permit", &idx);
+ argv_find(argv, argc, "deny", &idx);
+
+ if (idx) {
+ /* Check the list direct. */
+ if (strncmp(argv[idx]->arg, "p", 1) == 0)
+ direct = COMMUNITY_PERMIT;
+ else
+ direct = COMMUNITY_DENY;
+
+ idx = 0;
+ argv_find(argv, argc, "LINE", &idx);
+ argv_find(argv, argc, "AA:AA:NN", &idx);
+ /* Concat community string argument. */
+ str = argv_concat(argv, argc, idx);
+ }
+
+ idx = 0;
+ argv_find(argv, argc, "(1-99)", &idx);
+ argv_find(argv, argc, "(100-500)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+
+ /* Unset community list. */
+ ret = lcommunity_list_unset(bgp_clist, argv[idx]->arg, str, direct,
+ style);
+
+ /* Free temporary community list string allocated by
+ argv_concat(). */
+ if (str)
+ XFREE(MTYPE_TMP, str);
+
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
+
+ return CMD_SUCCESS;
}
/* "large-community-list" keyword help string. */
@@ -11336,7 +12057,8 @@ DEFUN (ip_lcommunity_list_standard,
"Specify large community to accept\n"
LCOMMUNITY_VAL_STR)
{
- return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD, 0);
+ return lcommunity_list_set_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD, 0);
}
DEFUN (ip_lcommunity_list_standard1,
@@ -11349,7 +12071,8 @@ DEFUN (ip_lcommunity_list_standard1,
"Specify large community to accept\n"
LCOMMUNITY_VAL_STR)
{
- return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD, 0);
+ return lcommunity_list_set_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD, 0);
}
DEFUN (ip_lcommunity_list_expanded,
@@ -11362,7 +12085,8 @@ DEFUN (ip_lcommunity_list_expanded,
"Specify large community to accept\n"
"An ordered list as a regular-expression\n")
{
- return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_EXPANDED, 0);
+ return lcommunity_list_set_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_EXPANDED, 0);
}
DEFUN (ip_lcommunity_list_name_standard,
@@ -11375,7 +12099,8 @@ DEFUN (ip_lcommunity_list_name_standard,
"Specify large community to reject\n"
"Specify large community to accept\n")
{
- return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD, 1);
+ return lcommunity_list_set_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD, 1);
}
DEFUN (ip_lcommunity_list_name_standard1,
@@ -11389,7 +12114,8 @@ DEFUN (ip_lcommunity_list_name_standard1,
"Specify large community to accept\n"
LCOMMUNITY_VAL_STR)
{
- return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD, 1);
+ return lcommunity_list_set_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD, 1);
}
DEFUN (ip_lcommunity_list_name_expanded,
@@ -11403,7 +12129,8 @@ DEFUN (ip_lcommunity_list_name_expanded,
"Specify large community to accept\n"
"An ordered list as a regular-expression\n")
{
- return lcommunity_list_set_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_EXPANDED, 1);
+ return lcommunity_list_set_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_EXPANDED, 1);
}
DEFUN (no_ip_lcommunity_list_standard_all,
@@ -11416,7 +12143,8 @@ DEFUN (no_ip_lcommunity_list_standard_all,
"Large Community list number (expanded)\n"
"Large Community list name\n")
{
- return lcommunity_list_unset_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD);
+ return lcommunity_list_unset_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD);
}
DEFUN (no_ip_lcommunity_list_name_expanded_all,
@@ -11428,7 +12156,8 @@ DEFUN (no_ip_lcommunity_list_name_expanded_all,
"Specify expanded large-community-list\n"
"Large Community list name\n")
{
- return lcommunity_list_unset_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_EXPANDED);
+ return lcommunity_list_unset_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_EXPANDED);
}
DEFUN (no_ip_lcommunity_list_standard,
@@ -11442,7 +12171,8 @@ DEFUN (no_ip_lcommunity_list_standard,
"Specify large community to accept\n"
LCOMMUNITY_VAL_STR)
{
- return lcommunity_list_unset_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD);
+ return lcommunity_list_unset_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD);
}
DEFUN (no_ip_lcommunity_list_expanded,
@@ -11456,7 +12186,8 @@ DEFUN (no_ip_lcommunity_list_expanded,
"Specify large community to accept\n"
"An ordered list as a regular-expression\n")
{
- return lcommunity_list_unset_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_EXPANDED);
+ return lcommunity_list_unset_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_EXPANDED);
}
DEFUN (no_ip_lcommunity_list_name_standard,
@@ -11471,7 +12202,8 @@ DEFUN (no_ip_lcommunity_list_name_standard,
"Specify large community to accept\n"
LCOMMUNITY_VAL_STR)
{
- return lcommunity_list_unset_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_STANDARD);
+ return lcommunity_list_unset_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_STANDARD);
}
DEFUN (no_ip_lcommunity_list_name_expanded,
@@ -11486,39 +12218,42 @@ DEFUN (no_ip_lcommunity_list_name_expanded,
"Specify large community to accept\n"
"An ordered list as a regular-expression\n")
{
- return lcommunity_list_unset_vty (vty, argc, argv, LARGE_COMMUNITY_LIST_EXPANDED);
-}
-
-static void
-lcommunity_list_show (struct vty *vty, struct community_list *list)
-{
- struct community_entry *entry;
-
- for (entry = list->head; entry; entry = entry->next)
- {
- if (entry == list->head)
- {
- if (all_digit (list->name))
- vty_out (vty, "Large community %s list %s%s",
- entry->style == EXTCOMMUNITY_LIST_STANDARD ?
- "standard" : "(expanded) access",
- list->name, VTY_NEWLINE);
- else
- vty_out (vty, "Named large community %s list %s%s",
- entry->style == EXTCOMMUNITY_LIST_STANDARD ?
- "standard" : "expanded",
- list->name, VTY_NEWLINE);
- }
- if (entry->any)
- vty_out (vty, " %s%s",
- community_direct_str (entry->direct), VTY_NEWLINE);
- else
- vty_out (vty, " %s %s%s",
- community_direct_str (entry->direct),
- entry->style == EXTCOMMUNITY_LIST_STANDARD ?
- entry->u.ecom->str : entry->config,
- VTY_NEWLINE);
- }
+ return lcommunity_list_unset_vty(vty, argc, argv,
+ LARGE_COMMUNITY_LIST_EXPANDED);
+}
+
+static void lcommunity_list_show(struct vty *vty, struct community_list *list)
+{
+ struct community_entry *entry;
+
+ for (entry = list->head; entry; entry = entry->next) {
+ if (entry == list->head) {
+ if (all_digit(list->name))
+ vty_out(vty, "Large community %s list %s%s",
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "(expanded) access",
+ list->name, VTY_NEWLINE);
+ else
+ vty_out(vty,
+ "Named large community %s list %s%s",
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "expanded",
+ list->name, VTY_NEWLINE);
+ }
+ if (entry->any)
+ vty_out(vty, " %s%s",
+ community_direct_str(entry->direct),
+ VTY_NEWLINE);
+ else
+ vty_out(vty, " %s %s%s",
+ community_direct_str(entry->direct),
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? entry->u.ecom->str
+ : entry->config,
+ VTY_NEWLINE);
+ }
}
DEFUN (show_ip_lcommunity_list,
@@ -11528,20 +12263,21 @@ DEFUN (show_ip_lcommunity_list,
IP_STR
"List large-community list\n")
{
- struct community_list *list;
- struct community_list_master *cm;
+ struct community_list *list;
+ struct community_list_master *cm;
- cm = community_list_master_lookup (bgp_clist, LARGE_COMMUNITY_LIST_MASTER);
- if (! cm)
- return CMD_SUCCESS;
+ cm = community_list_master_lookup(bgp_clist,
+ LARGE_COMMUNITY_LIST_MASTER);
+ if (!cm)
+ return CMD_SUCCESS;
- for (list = cm->num.head; list; list = list->next)
- lcommunity_list_show (vty, list);
+ for (list = cm->num.head; list; list = list->next)
+ lcommunity_list_show(vty, list);
- for (list = cm->str.head; list; list = list->next)
- lcommunity_list_show (vty, list);
+ for (list = cm->str.head; list; list = list->next)
+ lcommunity_list_show(vty, list);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_lcommunity_list_arg,
@@ -11553,18 +12289,18 @@ DEFUN (show_ip_lcommunity_list_arg,
"large-community-list number\n"
"large-community-list name\n")
{
- struct community_list *list;
+ struct community_list *list;
- list = community_list_lookup (bgp_clist, argv[3]->arg, LARGE_COMMUNITY_LIST_MASTER);
- if (! list)
- {
- vty_out (vty, "%% Can't find extcommunity-list%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ list = community_list_lookup(bgp_clist, argv[3]->arg,
+ LARGE_COMMUNITY_LIST_MASTER);
+ if (!list) {
+ vty_out(vty, "%% Can't find extcommunity-list%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- lcommunity_list_show (vty, list);
+ lcommunity_list_show(vty, list);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* "extcommunity-list" keyword help string. */
@@ -11583,29 +12319,30 @@ DEFUN (ip_extcommunity_list_standard,
"Specify community to accept\n"
EXTCOMMUNITY_VAL_STR)
{
- int style = EXTCOMMUNITY_LIST_STANDARD;
- int direct = 0;
- char *cl_number_or_name = NULL;
+ int style = EXTCOMMUNITY_LIST_STANDARD;
+ int direct = 0;
+ char *cl_number_or_name = NULL;
- int idx = 0;
- argv_find (argv, argc, "(1-99)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_number_or_name = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "AA:NN", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(1-99)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_number_or_name = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "AA:NN", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = extcommunity_list_set (bgp_clist, cl_number_or_name, str, direct, style);
+ int ret = extcommunity_list_set(bgp_clist, cl_number_or_name, str,
+ direct, style);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (ip_extcommunity_list_name_expanded,
@@ -11620,29 +12357,30 @@ DEFUN (ip_extcommunity_list_name_expanded,
"Specify community to accept\n"
"An ordered list as a regular-expression\n")
{
- int style = EXTCOMMUNITY_LIST_EXPANDED;
- int direct = 0;
- char *cl_number_or_name = NULL;
+ int style = EXTCOMMUNITY_LIST_EXPANDED;
+ int direct = 0;
+ char *cl_number_or_name = NULL;
- int idx = 0;
- argv_find (argv, argc, "(100-500)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_number_or_name = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "LINE", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(100-500)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_number_or_name = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "LINE", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = extcommunity_list_set (bgp_clist, cl_number_or_name, str, direct, style);
+ int ret = extcommunity_list_set(bgp_clist, cl_number_or_name, str,
+ direct, style);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_extcommunity_list_standard_all,
@@ -11658,31 +12396,32 @@ DEFUN (no_ip_extcommunity_list_standard_all,
"Specify community to accept\n"
EXTCOMMUNITY_VAL_STR)
{
- int deleteall = 0;
+ int deleteall = 0;
- int style = EXTCOMMUNITY_LIST_STANDARD;
- int direct = 0;
- char *cl_number_or_name = NULL;
+ int style = EXTCOMMUNITY_LIST_STANDARD;
+ int direct = 0;
+ char *cl_number_or_name = NULL;
- int idx = 0;
- argv_find (argv, argc, "(1-99)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_number_or_name = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "AA:NN", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(1-99)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_number_or_name = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "AA:NN", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = extcommunity_list_unset (bgp_clist, cl_number_or_name, str, direct, style, deleteall);
+ int ret = extcommunity_list_unset(bgp_clist, cl_number_or_name, str,
+ direct, style, deleteall);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (no_ip_extcommunity_list_expanded_all,
@@ -11698,63 +12437,66 @@ DEFUN (no_ip_extcommunity_list_expanded_all,
"Specify community to accept\n"
"An ordered list as a regular-expression\n")
{
- int deleteall = 0;
+ int deleteall = 0;
- int style = EXTCOMMUNITY_LIST_EXPANDED;
- int direct = 0;
- char *cl_number_or_name = NULL;
+ int style = EXTCOMMUNITY_LIST_EXPANDED;
+ int direct = 0;
+ char *cl_number_or_name = NULL;
- int idx = 0;
- argv_find (argv, argc, "(100-500)", &idx);
- argv_find (argv, argc, "WORD", &idx);
- cl_number_or_name = argv[idx]->arg;
- direct = argv_find (argv, argc, "permit", &idx) ? COMMUNITY_PERMIT : COMMUNITY_DENY;
- argv_find (argv, argc, "LINE", &idx);
- char *str = argv_concat (argv, argc, idx);
+ int idx = 0;
+ argv_find(argv, argc, "(100-500)", &idx);
+ argv_find(argv, argc, "WORD", &idx);
+ cl_number_or_name = argv[idx]->arg;
+ direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT
+ : COMMUNITY_DENY;
+ argv_find(argv, argc, "LINE", &idx);
+ char *str = argv_concat(argv, argc, idx);
- int ret = extcommunity_list_unset (bgp_clist, cl_number_or_name, str, direct, style, deleteall);
+ int ret = extcommunity_list_unset(bgp_clist, cl_number_or_name, str,
+ direct, style, deleteall);
- XFREE (MTYPE_TMP, str);
+ XFREE(MTYPE_TMP, str);
- if (ret < 0)
- {
- community_list_perror (vty, ret);
- return CMD_WARNING;
- }
+ if (ret < 0) {
+ community_list_perror(vty, ret);
+ return CMD_WARNING;
+ }
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
-static void
-extcommunity_list_show (struct vty *vty, struct community_list *list)
+static void extcommunity_list_show(struct vty *vty, struct community_list *list)
{
- struct community_entry *entry;
+ struct community_entry *entry;
- for (entry = list->head; entry; entry = entry->next)
- {
- if (entry == list->head)
- {
- if (all_digit (list->name))
- vty_out (vty, "Extended community %s list %s%s",
- entry->style == EXTCOMMUNITY_LIST_STANDARD ?
- "standard" : "(expanded) access",
- list->name, VTY_NEWLINE);
- else
- vty_out (vty, "Named extended community %s list %s%s",
- entry->style == EXTCOMMUNITY_LIST_STANDARD ?
- "standard" : "expanded",
- list->name, VTY_NEWLINE);
- }
- if (entry->any)
- vty_out (vty, " %s%s",
- community_direct_str (entry->direct), VTY_NEWLINE);
- else
- vty_out (vty, " %s %s%s",
- community_direct_str (entry->direct),
- entry->style == EXTCOMMUNITY_LIST_STANDARD ?
- entry->u.ecom->str : entry->config,
- VTY_NEWLINE);
- }
+ for (entry = list->head; entry; entry = entry->next) {
+ if (entry == list->head) {
+ if (all_digit(list->name))
+ vty_out(vty, "Extended community %s list %s%s",
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "(expanded) access",
+ list->name, VTY_NEWLINE);
+ else
+ vty_out(vty,
+ "Named extended community %s list %s%s",
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "expanded",
+ list->name, VTY_NEWLINE);
+ }
+ if (entry->any)
+ vty_out(vty, " %s%s",
+ community_direct_str(entry->direct),
+ VTY_NEWLINE);
+ else
+ vty_out(vty, " %s %s%s",
+ community_direct_str(entry->direct),
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? entry->u.ecom->str
+ : entry->config,
+ VTY_NEWLINE);
+ }
}
DEFUN (show_ip_extcommunity_list,
@@ -11764,20 +12506,20 @@ DEFUN (show_ip_extcommunity_list,
IP_STR
"List extended-community list\n")
{
- struct community_list *list;
- struct community_list_master *cm;
+ struct community_list *list;
+ struct community_list_master *cm;
- cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
- if (! cm)
- return CMD_SUCCESS;
+ cm = community_list_master_lookup(bgp_clist, EXTCOMMUNITY_LIST_MASTER);
+ if (!cm)
+ return CMD_SUCCESS;
- for (list = cm->num.head; list; list = list->next)
- extcommunity_list_show (vty, list);
+ for (list = cm->num.head; list; list = list->next)
+ extcommunity_list_show(vty, list);
- for (list = cm->str.head; list; list = list->next)
- extcommunity_list_show (vty, list);
+ for (list = cm->str.head; list; list = list->next)
+ extcommunity_list_show(vty, list);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
DEFUN (show_ip_extcommunity_list_arg,
@@ -11789,161 +12531,151 @@ DEFUN (show_ip_extcommunity_list_arg,
"Extcommunity-list number\n"
"Extcommunity-list name\n")
{
- int idx_comm_list = 3;
- struct community_list *list;
+ int idx_comm_list = 3;
+ struct community_list *list;
- list = community_list_lookup (bgp_clist, argv[idx_comm_list]->arg, EXTCOMMUNITY_LIST_MASTER);
- if (! list)
- {
- vty_out (vty, "%% Can't find extcommunity-list%s", VTY_NEWLINE);
- return CMD_WARNING;
- }
+ list = community_list_lookup(bgp_clist, argv[idx_comm_list]->arg,
+ EXTCOMMUNITY_LIST_MASTER);
+ if (!list) {
+ vty_out(vty, "%% Can't find extcommunity-list%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
- extcommunity_list_show (vty, list);
+ extcommunity_list_show(vty, list);
- return CMD_SUCCESS;
+ return CMD_SUCCESS;
}
/* Return configuration string of community-list entry. */
-static const char *
-community_list_config_str (struct community_entry *entry)
+static const char *community_list_config_str(struct community_entry *entry)
{
- const char *str;
+ const char *str;
- if (entry->any)
- str = "";
- else
- {
- if (entry->style == COMMUNITY_LIST_STANDARD)
- str = community_str (entry->u.com);
- else
- str = entry->config;
- }
- return str;
+ if (entry->any)
+ str = "";
+ else {
+ if (entry->style == COMMUNITY_LIST_STANDARD)
+ str = community_str(entry->u.com);
+ else
+ str = entry->config;
+ }
+ return str;
}
/* Display community-list and extcommunity-list configuration. */
-static int
-community_list_config_write (struct vty *vty)
-{
- struct community_list *list;
- struct community_entry *entry;
- struct community_list_master *cm;
- int write = 0;
-
- /* Community-list. */
- cm = community_list_master_lookup (bgp_clist, COMMUNITY_LIST_MASTER);
-
- for (list = cm->num.head; list; list = list->next)
- for (entry = list->head; entry; entry = entry->next)
- {
- vty_out (vty, "ip community-list %s %s %s%s",
- list->name, community_direct_str (entry->direct),
- community_list_config_str (entry),
- VTY_NEWLINE);
- write++;
- }
- for (list = cm->str.head; list; list = list->next)
- for (entry = list->head; entry; entry = entry->next)
- {
- vty_out (vty, "ip community-list %s %s %s %s%s",
- entry->style == COMMUNITY_LIST_STANDARD
- ? "standard" : "expanded",
- list->name, community_direct_str (entry->direct),
- community_list_config_str (entry),
- VTY_NEWLINE);
- write++;
- }
-
- /* Extcommunity-list. */
- cm = community_list_master_lookup (bgp_clist, EXTCOMMUNITY_LIST_MASTER);
-
- for (list = cm->num.head; list; list = list->next)
- for (entry = list->head; entry; entry = entry->next)
- {
- vty_out (vty, "ip extcommunity-list %s %s %s%s",
- list->name, community_direct_str (entry->direct),
- community_list_config_str (entry), VTY_NEWLINE);
- write++;
- }
- for (list = cm->str.head; list; list = list->next)
- for (entry = list->head; entry; entry = entry->next)
- {
- vty_out (vty, "ip extcommunity-list %s %s %s %s%s",
- entry->style == EXTCOMMUNITY_LIST_STANDARD
- ? "standard" : "expanded",
- list->name, community_direct_str (entry->direct),
- community_list_config_str (entry), VTY_NEWLINE);
- write++;
- }
-
-
- /* lcommunity-list. */
- cm = community_list_master_lookup (bgp_clist, LARGE_COMMUNITY_LIST_MASTER);
-
- for (list = cm->num.head; list; list = list->next)
- for (entry = list->head; entry; entry = entry->next)
- {
- vty_out (vty, "ip large-community-list %s %s %s%s",
- list->name, community_direct_str (entry->direct),
- community_list_config_str (entry), VTY_NEWLINE);
- write++;
- }
- for (list = cm->str.head; list; list = list->next)
- for (entry = list->head; entry; entry = entry->next)
- {
- vty_out (vty, "ip large-community-list %s %s %s %s%s",
- entry->style == LARGE_COMMUNITY_LIST_STANDARD
- ? "standard" : "expanded",
- list->name, community_direct_str (entry->direct),
- community_list_config_str (entry), VTY_NEWLINE);
- write++;
- }
-
- return write;
-}
-
-static struct cmd_node community_list_node =
-{
- COMMUNITY_LIST_NODE,
- "",
- 1 /* Export to vtysh. */
+static int community_list_config_write(struct vty *vty)
+{
+ struct community_list *list;
+ struct community_entry *entry;
+ struct community_list_master *cm;
+ int write = 0;
+
+ /* Community-list. */
+ cm = community_list_master_lookup(bgp_clist, COMMUNITY_LIST_MASTER);
+
+ for (list = cm->num.head; list; list = list->next)
+ for (entry = list->head; entry; entry = entry->next) {
+ vty_out(vty, "ip community-list %s %s %s%s", list->name,
+ community_direct_str(entry->direct),
+ community_list_config_str(entry), VTY_NEWLINE);
+ write++;
+ }
+ for (list = cm->str.head; list; list = list->next)
+ for (entry = list->head; entry; entry = entry->next) {
+ vty_out(vty, "ip community-list %s %s %s %s%s",
+ entry->style == COMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "expanded",
+ list->name, community_direct_str(entry->direct),
+ community_list_config_str(entry), VTY_NEWLINE);
+ write++;
+ }
+
+ /* Extcommunity-list. */
+ cm = community_list_master_lookup(bgp_clist, EXTCOMMUNITY_LIST_MASTER);
+
+ for (list = cm->num.head; list; list = list->next)
+ for (entry = list->head; entry; entry = entry->next) {
+ vty_out(vty, "ip extcommunity-list %s %s %s%s",
+ list->name, community_direct_str(entry->direct),
+ community_list_config_str(entry), VTY_NEWLINE);
+ write++;
+ }
+ for (list = cm->str.head; list; list = list->next)
+ for (entry = list->head; entry; entry = entry->next) {
+ vty_out(vty, "ip extcommunity-list %s %s %s %s%s",
+ entry->style == EXTCOMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "expanded",
+ list->name, community_direct_str(entry->direct),
+ community_list_config_str(entry), VTY_NEWLINE);
+ write++;
+ }
+
+
+ /* lcommunity-list. */
+ cm = community_list_master_lookup(bgp_clist,
+ LARGE_COMMUNITY_LIST_MASTER);
+
+ for (list = cm->num.head; list; list = list->next)
+ for (entry = list->head; entry; entry = entry->next) {
+ vty_out(vty, "ip large-community-list %s %s %s%s",
+ list->name, community_direct_str(entry->direct),
+ community_list_config_str(entry), VTY_NEWLINE);
+ write++;
+ }
+ for (list = cm->str.head; list; list = list->next)
+ for (entry = list->head; entry; entry = entry->next) {
+ vty_out(vty, "ip large-community-list %s %s %s %s%s",
+ entry->style == LARGE_COMMUNITY_LIST_STANDARD
+ ? "standard"
+ : "expanded",
+ list->name, community_direct_str(entry->direct),
+ community_list_config_str(entry), VTY_NEWLINE);
+ write++;
+ }
+
+ return write;
+}
+
+static struct cmd_node community_list_node = {
+ COMMUNITY_LIST_NODE, "", 1 /* Export to vtysh. */
};
-static void
-community_list_vty (void)
-{
- install_node (&community_list_node, community_list_config_write);
-
- /* Community-list. */
- install_element (CONFIG_NODE, &ip_community_list_standard_cmd);
- install_element (CONFIG_NODE, &ip_community_list_expanded_all_cmd);
- install_element (CONFIG_NODE, &no_ip_community_list_standard_all_cmd);
- install_element (CONFIG_NODE, &no_ip_community_list_expanded_all_cmd);
- install_element (VIEW_NODE, &show_ip_community_list_cmd);
- install_element (VIEW_NODE, &show_ip_community_list_arg_cmd);
-
- /* Extcommunity-list. */
- install_element (CONFIG_NODE, &ip_extcommunity_list_standard_cmd);
- install_element (CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
- install_element (CONFIG_NODE, &no_ip_extcommunity_list_standard_all_cmd);
- install_element (CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_cmd);
- install_element (VIEW_NODE, &show_ip_extcommunity_list_cmd);
- install_element (VIEW_NODE, &show_ip_extcommunity_list_arg_cmd);
-
- /* Large Community List */
- install_element (CONFIG_NODE, &ip_lcommunity_list_standard_cmd);
- install_element (CONFIG_NODE, &ip_lcommunity_list_standard1_cmd);
- install_element (CONFIG_NODE, &ip_lcommunity_list_expanded_cmd);
- install_element (CONFIG_NODE, &ip_lcommunity_list_name_standard_cmd);
- install_element (CONFIG_NODE, &ip_lcommunity_list_name_standard1_cmd);
- install_element (CONFIG_NODE, &ip_lcommunity_list_name_expanded_cmd);
- install_element (CONFIG_NODE, &no_ip_lcommunity_list_standard_all_cmd);
- install_element (CONFIG_NODE, &no_ip_lcommunity_list_name_expanded_all_cmd);
- install_element (CONFIG_NODE, &no_ip_lcommunity_list_standard_cmd);
- install_element (CONFIG_NODE, &no_ip_lcommunity_list_expanded_cmd);
- install_element (CONFIG_NODE, &no_ip_lcommunity_list_name_standard_cmd);
- install_element (CONFIG_NODE, &no_ip_lcommunity_list_name_expanded_cmd);
- install_element (VIEW_NODE, &show_ip_lcommunity_list_cmd);
- install_element (VIEW_NODE, &show_ip_lcommunity_list_arg_cmd);
+static void community_list_vty(void)
+{
+ install_node(&community_list_node, community_list_config_write);
+
+ /* Community-list. */
+ install_element(CONFIG_NODE, &ip_community_list_standard_cmd);
+ install_element(CONFIG_NODE, &ip_community_list_expanded_all_cmd);
+ install_element(CONFIG_NODE, &no_ip_community_list_standard_all_cmd);
+ install_element(CONFIG_NODE, &no_ip_community_list_expanded_all_cmd);
+ install_element(VIEW_NODE, &show_ip_community_list_cmd);
+ install_element(VIEW_NODE, &show_ip_community_list_arg_cmd);
+
+ /* Extcommunity-list. */
+ install_element(CONFIG_NODE, &ip_extcommunity_list_standard_cmd);
+ install_element(CONFIG_NODE, &ip_extcommunity_list_name_expanded_cmd);
+ install_element(CONFIG_NODE, &no_ip_extcommunity_list_standard_all_cmd);
+ install_element(CONFIG_NODE, &no_ip_extcommunity_list_expanded_all_cmd);
+ install_element(VIEW_NODE, &show_ip_extcommunity_list_cmd);
+ install_element(VIEW_NODE, &show_ip_extcommunity_list_arg_cmd);
+
+ /* Large Community List */
+ install_element(CONFIG_NODE, &ip_lcommunity_list_standard_cmd);
+ install_element(CONFIG_NODE, &ip_lcommunity_list_standard1_cmd);
+ install_element(CONFIG_NODE, &ip_lcommunity_list_expanded_cmd);
+ install_element(CONFIG_NODE, &ip_lcommunity_list_name_standard_cmd);
+ install_element(CONFIG_NODE, &ip_lcommunity_list_name_standard1_cmd);
+ install_element(CONFIG_NODE, &ip_lcommunity_list_name_expanded_cmd);
+ install_element(CONFIG_NODE, &no_ip_lcommunity_list_standard_all_cmd);
+ install_element(CONFIG_NODE,
+ &no_ip_lcommunity_list_name_expanded_all_cmd);
+ install_element(CONFIG_NODE, &no_ip_lcommunity_list_standard_cmd);
+ install_element(CONFIG_NODE, &no_ip_lcommunity_list_expanded_cmd);
+ install_element(CONFIG_NODE, &no_ip_lcommunity_list_name_standard_cmd);
+ install_element(CONFIG_NODE, &no_ip_lcommunity_list_name_expanded_cmd);
+ install_element(VIEW_NODE, &show_ip_lcommunity_list_cmd);
+ install_element(VIEW_NODE, &show_ip_lcommunity_list_arg_cmd);
}