diff options
Diffstat (limited to 'bgpd/bgp_vty.c')
-rw-r--r-- | bgpd/bgp_vty.c | 1921 |
1 files changed, 1429 insertions, 492 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 6db3dcb1..5476a669 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -50,6 +50,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "bgpd/bgp_table.h" #include "bgpd/bgp_vty.h" #include "bgpd/bgp_mpath.h" +#include "bgpd/bgp_packet.h" extern struct in_addr router_id_zebra; @@ -166,15 +167,22 @@ peer_lookup_vty (struct vty *vty, const char *ip_str) ret = str2sockunion (ip_str, &su); if (ret < 0) { - vty_out (vty, "%% Malformed address: %s%s", ip_str, VTY_NEWLINE); - return NULL; + peer = peer_lookup_by_conf_if (bgp, ip_str); + if (!peer) + { + vty_out (vty, "%% Malformed address or name: %s%s", ip_str, VTY_NEWLINE); + return NULL; + } } - - peer = peer_lookup (bgp, &su); - if (! peer) + else { - vty_out (vty, "%% Specify remote-as or peer-group commands first%s", VTY_NEWLINE); - return NULL; + peer = peer_lookup (bgp, &su); + if (! peer) + { + vty_out (vty, "%% Specify remote-as or peer-group commands first%s", + VTY_NEWLINE); + return NULL; + } } return peer; } @@ -200,6 +208,10 @@ peer_and_group_lookup_vty (struct vty *vty, const char *peer_str) } else { + peer = peer_lookup_by_conf_if (bgp, peer_str); + if (peer) + return peer; + group = peer_group_lookup (bgp, peer_str); if (group) return group->conf; @@ -264,7 +276,7 @@ bgp_vty_return (struct vty *vty, int ret) str = "Invalid command. Not an internal neighbor"; break; case BGP_ERR_REMOVE_PRIVATE_AS: - str = "Private AS cannot be removed for IBGP peers"; + 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"; @@ -281,6 +293,9 @@ bgp_vty_return (struct vty *vty, int ret) 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; } if (str) { @@ -712,87 +727,408 @@ DEFUN (no_bgp_confederation_peers, return CMD_SUCCESS; } -/* Maximum-paths configuration */ -DEFUN (bgp_maxpaths, - bgp_maxpaths_cmd, - "maximum-paths " CMD_RANGE_STR(1, MULTIPATH_NUM), - "Forward packets over multiple paths\n" - "Number of paths\n") +/** + * Central routine for maximum-paths configuration. + * @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) { struct bgp *bgp; - u_int16_t maxpaths; + u_int16_t maxpaths = 0; int ret; + afi_t afi; + safi_t safi; bgp = vty->index; + afi = bgp_node_afi (vty); + safi = bgp_node_safi (vty); - VTY_GET_INTEGER_RANGE ("maximum-paths", maxpaths, argv[0], 1, 255); + if (set) + { + VTY_GET_INTEGER_RANGE ("maximum-paths", maxpaths, mpaths, 1, + BGP_MAXIMUM_MAXPATHS); + ret = bgp_maximum_paths_set (bgp, afi, safi, peer_type, maxpaths, + options); + } + else + ret = bgp_maximum_paths_unset (bgp, afi, safi, peer_type); - ret = bgp_maximum_paths_set (bgp, bgp_node_afi (vty), bgp_node_safi(vty), - BGP_PEER_EBGP, maxpaths); if (ret < 0) { vty_out (vty, - "%% Failed to set maximum-paths %u for afi %u, safi %u%s", - maxpaths, bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE); + "%% 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; } return CMD_SUCCESS; } -DEFUN (bgp_maxpaths_ibgp, - bgp_maxpaths_ibgp_cmd, - "maximum-paths ibgp " CMD_RANGE_STR(1, MULTIPATH_NUM), - "Forward packets over multiple paths\n" - "iBGP-multipath\n" - "Number of paths\n") +DEFUN (bgp_maxmed_admin, + bgp_maxmed_admin_cmd, + "bgp max-med administrative ", + BGP_STR + "Advertise routes with max-med\n" + "Administratively applied, for an indefinite period\n") { struct bgp *bgp; - u_int16_t maxpaths; - int ret; bgp = vty->index; - VTY_GET_INTEGER_RANGE ("maximum-paths", maxpaths, argv[0], 1, 255); + bgp->v_maxmed_admin = 1; + bgp->maxmed_admin_value = BGP_MAXMED_VALUE_DEFAULT; - ret = bgp_maximum_paths_set (bgp, bgp_node_afi (vty), bgp_node_safi(vty), - BGP_PEER_IBGP, maxpaths); - if (ret < 0) + bgp_maxmed_update(bgp); + + return CMD_SUCCESS; +} + +DEFUN (bgp_maxmed_admin_medv, + bgp_maxmed_admin_medv_cmd, + "bgp max-med administrative <0-4294967294>", + BGP_STR + "Advertise routes with max-med\n" + "Administratively applied, for an indefinite period\n" + "Max MED value to be used\n") +{ + struct bgp *bgp; + + bgp = vty->index; + + bgp->v_maxmed_admin = 1; + VTY_GET_INTEGER ("max-med admin med-value", bgp->maxmed_admin_value, argv[0]); + + bgp_maxmed_update(bgp); + + return CMD_SUCCESS; +} + +DEFUN (no_bgp_maxmed_admin, + no_bgp_maxmed_admin_cmd, + "no bgp max-med administrative", + NO_STR + BGP_STR + "Advertise routes with max-med\n" + "Administratively applied, for an indefinite period\n") +{ + struct bgp *bgp; + + bgp = vty->index; + + bgp->v_maxmed_admin = BGP_MAXMED_ADMIN_UNCONFIGURED; + bgp->maxmed_admin_value = BGP_MAXMED_VALUE_DEFAULT; + + bgp_maxmed_update(bgp); + + return CMD_SUCCESS; +} + +ALIAS (no_bgp_maxmed_admin, + no_bgp_maxmed_admin_medv_cmd, + "no bgp max-med administrative <0-4294967294>", + NO_STR + BGP_STR + "Advertise routes with max-med\n" + "Administratively applied, for an indefinite period\n" + "Max MED value to be used\n") + + +DEFUN (bgp_maxmed_onstartup, + bgp_maxmed_onstartup_cmd, + "bgp max-med on-startup <5-86400>", + BGP_STR + "Advertise routes with max-med\n" + "Effective on a startup\n" + "Time (seconds) period for max-med\n") +{ + struct bgp *bgp; + + bgp = vty->index; + + if (argc != 1) { - vty_out (vty, - "%% Failed to set maximum-paths ibgp %u for afi %u, safi %u%s", - maxpaths, bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE); + vty_out (vty, "%% Must supply max-med on-startup period"); return CMD_WARNING; } + VTY_GET_INTEGER ("max-med on-startup period", bgp->v_maxmed_onstartup, argv[0]); + bgp->maxmed_onstartup_value = BGP_MAXMED_VALUE_DEFAULT; + + bgp_maxmed_update(bgp); + return CMD_SUCCESS; } -DEFUN (no_bgp_maxpaths, - no_bgp_maxpaths_cmd, - "no maximum-paths", +DEFUN (bgp_maxmed_onstartup_medv, + bgp_maxmed_onstartup_medv_cmd, + "bgp max-med on-startup <5-86400> <0-4294967294>", + BGP_STR + "Advertise routes with max-med\n" + "Effective on a startup\n" + "Time (seconds) period for max-med\n" + "Max MED value to be used\n") +{ + struct bgp *bgp; + + bgp = vty->index; + + if (argc != 2) + { + vty_out (vty, "%% Must supply max-med on-startup period and med value"); + return CMD_WARNING; + } + + VTY_GET_INTEGER ("max-med on-startup period", bgp->v_maxmed_onstartup, argv[0]); + VTY_GET_INTEGER ("max-med on-startup med-value", bgp->maxmed_onstartup_value, argv[1]); + + bgp_maxmed_update(bgp); + + return CMD_SUCCESS; +} + +DEFUN (no_bgp_maxmed_onstartup, + no_bgp_maxmed_onstartup_cmd, + "no bgp max-med on-startup", NO_STR - "Forward packets over multiple paths\n" - "Number of paths\n") + BGP_STR + "Advertise routes with max-med\n" + "Effective on a startup\n") { struct bgp *bgp; - int ret; bgp = vty->index; - ret = bgp_maximum_paths_unset (bgp, bgp_node_afi (vty), bgp_node_safi(vty), - BGP_PEER_EBGP); - if (ret < 0) + /* Cancel max-med onstartup if its on */ + if (bgp->t_maxmed_onstartup) { - vty_out (vty, - "%% Failed to unset maximum-paths for afi %u, safi %u%s", - bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE); + 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_maxmed_update(bgp); + + return CMD_SUCCESS; +} + +ALIAS (no_bgp_maxmed_onstartup, + no_bgp_maxmed_onstartup_period_cmd, + "no bgp max-med on-startup <5-86400>", + NO_STR + BGP_STR + "Advertise routes with max-med\n" + "Effective on a startup\n" + "Time (seconds) period for max-med\n") + +ALIAS (no_bgp_maxmed_onstartup, + no_bgp_maxmed_onstartup_period_medv_cmd, + "no bgp max-med on-startup <5-86400> <0-4294967294>", + NO_STR + BGP_STR + "Advertise routes with max-med\n" + "Effective on a startup\n" + "Time (seconds) period for max-med\n" + "Max MED value to be used\n") + +static int +bgp_update_delay_config_vty (struct vty *vty, const char *delay, + const char *wait) +{ + struct bgp *bgp; + u_int16_t update_delay; + u_int16_t establish_wait; + + + bgp = vty->index; + + 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; + } + + /* 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; + + return CMD_SUCCESS; +} + +static int +bgp_update_delay_deconfig_vty (struct vty *vty) +{ + struct bgp *bgp; + + bgp = vty->index; + + bgp->v_update_delay = BGP_UPDATE_DELAY_DEF; + bgp->v_establish_wait = bgp->v_update_delay; + + return CMD_SUCCESS; +} + +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); + } + + return 0; +} + + +/* Update-delay configuration */ +DEFUN (bgp_update_delay, + bgp_update_delay_cmd, + "update-delay <0-3600>", + "Force initial delay for best-path and updates\n" + "Seconds\n") +{ + return bgp_update_delay_config_vty(vty, argv[0], NULL); +} + +DEFUN (bgp_update_delay_establish_wait, + bgp_update_delay_establish_wait_cmd, + "update-delay <0-3600> <1-3600>", + "Force initial delay for best-path and updates\n" + "Seconds\n" + "Wait for peers to be established\n" + "Seconds\n") +{ + return bgp_update_delay_config_vty(vty, argv[0], argv[1]); +} + +/* Update-delay deconfiguration */ +DEFUN (no_bgp_update_delay, + no_bgp_update_delay_cmd, + "no update-delay <0-3600>", + "Force initial delay for best-path and updates\n" + "Seconds\n") +{ + return bgp_update_delay_deconfig_vty(vty); +} + +ALIAS (no_bgp_update_delay, + no_bgp_update_delay_establish_wait_cmd, + "no update-delay <0-3600> <1-3600>", + "Force initial delay for best-path and updates\n" + "Seconds\n" + "Wait for peers to be established\n" + "Seconds\n") + +static int +bgp_wpkt_quanta_config_vty (struct vty *vty, const char *num, char set) +{ + struct bgp *bgp; + + bgp = vty->index; + + 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; } +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); + + return 0; +} + + +/* Update-delay configuration */ +DEFUN (bgp_wpkt_quanta, + bgp_wpkt_quanta_cmd, + "write-quanta <1-10000>", + "How many packets to write to peer socket per run\n" + "Number of packets\n") +{ + return bgp_wpkt_quanta_config_vty(vty, argv[0], 1); +} + +/* Update-delay deconfiguration */ +DEFUN (no_bgp_wpkt_quanta, + no_bgp_wpkt_quanta_cmd, + "no write-quanta <1-10000>", + "How many packets to write to peer socket per run\n" + "Number of packets\n") +{ + return bgp_wpkt_quanta_config_vty(vty, argv[0], 0); +} + +/* Maximum-paths configuration */ +DEFUN (bgp_maxpaths, + bgp_maxpaths_cmd, + "maximum-paths " CMD_RANGE_STR(1, MULTIPATH_NUM), + "Forward packets over multiple paths\n" + "Number of paths\n") +{ + return bgp_maxpaths_config_vty(vty, BGP_PEER_EBGP, argv[0], 0, 1); +} + +DEFUN (bgp_maxpaths_ibgp, + bgp_maxpaths_ibgp_cmd, + "maximum-paths ibgp " CMD_RANGE_STR(1, MULTIPATH_NUM), + "Forward packets over multiple paths\n" + "iBGP-multipath\n" + "Number of paths\n") +{ + return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, argv[0], 0, 1); +} + +DEFUN (bgp_maxpaths_ibgp_cluster, + bgp_maxpaths_ibgp_cluster_cmd, + "maximum-paths ibgp " CMD_RANGE_STR(1, MULTIPATH_NUM) " equal-cluster-length", + "Forward packets over multiple paths\n" + "iBGP-multipath\n" + "Number of paths\n" + "Match the cluster length\n") +{ + return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, argv[0], + BGP_FLAG_IBGP_MULTIPATH_SAME_CLUSTERLEN, 1); +} + +DEFUN (no_bgp_maxpaths, + no_bgp_maxpaths_cmd, + "no maximum-paths", + NO_STR + "Forward packets over multiple paths\n" + "Number of paths\n") +{ + return bgp_maxpaths_config_vty(vty, BGP_PEER_EBGP, NULL, 0, 0); +} + ALIAS (no_bgp_maxpaths, no_bgp_maxpaths_arg_cmd, "no maximum-paths " CMD_RANGE_STR(1, MULTIPATH_NUM), @@ -808,22 +1144,7 @@ DEFUN (no_bgp_maxpaths_ibgp, "iBGP-multipath\n" "Number of paths\n") { - struct bgp *bgp; - int ret; - - bgp = vty->index; - - ret = bgp_maximum_paths_unset (bgp, bgp_node_afi (vty), bgp_node_safi(vty), - BGP_PEER_IBGP); - if (ret < 0) - { - vty_out (vty, - "%% Failed to unset maximum-paths ibgp for afi %u, safi %u%s", - bgp_node_afi (vty), bgp_node_safi(vty), VTY_NEWLINE); - return CMD_WARNING; - } - - return CMD_SUCCESS; + return bgp_maxpaths_config_vty(vty, BGP_PEER_IBGP, NULL, 0, 0); } ALIAS (no_bgp_maxpaths_ibgp, @@ -834,6 +1155,15 @@ ALIAS (no_bgp_maxpaths_ibgp, "iBGP-multipath\n" "Number of paths\n") +ALIAS (no_bgp_maxpaths_ibgp, + no_bgp_maxpaths_ibgp_cluster_cmd, + "no maximum-paths ibgp <1-255> equal-cluster-length", + NO_STR + "Forward packets over multiple paths\n" + "iBGP-multipath\n" + "Number of paths\n" + "Match the cluster length\n") + int bgp_config_write_maxpaths (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, int *write) @@ -848,8 +1178,12 @@ bgp_config_write_maxpaths (struct vty *vty, struct bgp *bgp, afi_t afi, if (bgp->maxpaths[afi][safi].maxpaths_ibgp != BGP_DEFAULT_MAXPATHS) { bgp_config_write_family_header (vty, afi, safi, write); - vty_out (vty, " maximum-paths ibgp %d%s", - bgp->maxpaths[afi][safi].maxpaths_ibgp, VTY_NEWLINE); + 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; @@ -1483,6 +1817,80 @@ ALIAS (no_bgp_default_local_preference, "local preference (higher=more preferred)\n" "Configure default local preference value\n") +static void +peer_announce_routes_if_rmap_out (struct bgp *bgp) +{ + struct peer *peer; + struct listnode *node, *nnode; + struct bgp_filter *filter; + afi_t afi; + safi_t safi; + + /* Reannounce all routes to appropriate neighbors */ + 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_REFLECTOR_CLIENT)) + { + /* check if there's an out route-map on this client */ + filter = &peer->filter[afi][safi]; + if (ROUTE_MAP_OUT_NAME(filter)) + { + if (bgp_debug_update(peer, NULL, 0)) + zlog_debug("%s: Announcing routes again for peer %s" + "(afi=%d, safi=%d", __func__, peer->host, afi, + safi); + + bgp_announce_route_all(peer); + } + } + } + } +} + +DEFUN (bgp_rr_allow_outbound_policy, + bgp_rr_allow_outbound_policy_cmd, + "bgp route-reflector allow-outbound-policy", + "BGP specific commands\n" + "Allow modifications made by out route-map\n" + "on ibgp neighbors\n") +{ + struct bgp *bgp; + + bgp = vty->index; + + if (!bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY)) + { + bgp_flag_set(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY); + peer_announce_routes_if_rmap_out(bgp); + } + + return CMD_SUCCESS; +} + +DEFUN (no_bgp_rr_allow_outbound_policy, + no_bgp_rr_allow_outbound_policy_cmd, + "no bgp route-reflector allow-outbound-policy", + NO_STR + "BGP specific commands\n" + "Allow modifications made by out route-map\n" + "on ibgp neighbors\n") +{ + struct bgp *bgp; + + bgp = vty->index; + + if (bgp_flag_check(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY)) + { + bgp_flag_unset(bgp, BGP_FLAG_RR_ALLOW_OUTBOUND_POLICY); + peer_announce_routes_if_rmap_out(bgp); + } + + 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) @@ -1501,24 +1909,31 @@ peer_remote_as_vty (struct vty *vty, const char *peer_str, ret = str2sockunion (peer_str, &su); if (ret < 0) { - ret = peer_group_remote_as (bgp, peer_str, &as); + /* Check for peer by interface */ + ret = peer_remote_as (bgp, NULL, peer_str, &as, afi, safi); if (ret < 0) - { - vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE); - return CMD_WARNING; - } - return CMD_SUCCESS; + { + ret = peer_group_remote_as (bgp, peer_str, &as); + if (ret < 0) + { + vty_out (vty, "%% Create the peer-group or interface first%s", + VTY_NEWLINE); + return CMD_WARNING; + } + return CMD_SUCCESS; + } } - - if (peer_address_self_check (&su)) + else { - vty_out (vty, "%% Can not configure the local system as neighbor%s", - VTY_NEWLINE); - return CMD_WARNING; + if (peer_address_self_check (&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, afi, safi); } - ret = peer_remote_as (bgp, &su, &as, afi, safi); - /* This peer belongs to peer group. */ switch (ret) { @@ -1543,17 +1958,51 @@ DEFUN (neighbor_remote_as, return peer_remote_as_vty (vty, argv[0], argv[1], AFI_IP, SAFI_UNICAST); } +DEFUN (neighbor_interface_config, + neighbor_interface_config_cmd, + "neighbor WORD interface", + NEIGHBOR_STR + "Interface name or neighbor tag\n" + "Enable BGP on interface\n") +{ + struct bgp *bgp; + struct peer *peer; + struct peer_group *group; + + bgp = vty->index; + group = peer_group_lookup (bgp, argv[0]); + if (group) + { + vty_out (vty, "%% Name conflict with peer-group %s", VTY_NEWLINE); + return CMD_WARNING; + } + + peer = peer_conf_interface_get (bgp, argv[0], AFI_IP, SAFI_UNICAST); + if (!peer) + return CMD_WARNING; + + return CMD_SUCCESS; +} + + DEFUN (neighbor_peer_group, neighbor_peer_group_cmd, "neighbor WORD peer-group", NEIGHBOR_STR - "Neighbor tag\n" + "Interface name or neighbor tag\n" "Configure peer-group\n") { struct bgp *bgp; + struct peer *peer; struct peer_group *group; bgp = vty->index; + peer = peer_lookup_by_conf_if (bgp, argv[0]); + if (peer) + { + vty_out (vty, "%% Name conflict with interface: %s", VTY_NEWLINE); + return CMD_WARNING; + } group = peer_group_get (bgp, argv[0]); if (! group) @@ -1573,10 +2022,19 @@ DEFUN (no_neighbor, union sockunion su; struct peer_group *group; struct peer *peer; + struct peer *other; ret = str2sockunion (argv[0], &su); if (ret < 0) { + /* look up for neighbor by interface name config. */ + peer = peer_lookup_by_conf_if (vty->index, argv[0]); + if (peer) + { + peer_delete (peer); + return CMD_SUCCESS; + } + group = peer_group_lookup (vty->index, argv[0]); if (group) peer_group_delete (group); @@ -1590,7 +2048,12 @@ DEFUN (no_neighbor, { peer = peer_lookup (vty->index, &su); if (peer) - peer_delete (peer); + { + other = peer->doppelganger; + peer_delete (peer); + if (other && other->status != Deleted) + peer_delete(other); + } } return CMD_SUCCESS; @@ -1605,6 +2068,30 @@ ALIAS (no_neighbor, "Specify a BGP neighbor\n" AS_STR) +DEFUN (no_neighbor_interface_config, + no_neighbor_interface_config_cmd, + "no neighbor WORD interface", + NO_STR + NEIGHBOR_STR + "Interface name\n" + "Configure BGP on interface\n") +{ + struct peer *peer; + + /* look up for neighbor by interface name config. */ + peer = peer_lookup_by_conf_if (vty->index, argv[0]); + if (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, no_neighbor_peer_group_cmd, "no neighbor WORD peer-group", @@ -1626,23 +2113,32 @@ DEFUN (no_neighbor_peer_group, return CMD_SUCCESS; } -DEFUN (no_neighbor_peer_group_remote_as, - no_neighbor_peer_group_remote_as_cmd, +DEFUN (no_neighbor_interface_peer_group_remote_as, + no_neighbor_interface_peer_group_remote_as_cmd, "no neighbor WORD remote-as " CMD_AS_RANGE, NO_STR NEIGHBOR_STR - "Neighbor tag\n" + "Interface name or neighbor tag\n" "Specify a BGP neighbor\n" AS_STR) { struct peer_group *group; + struct peer *peer; + + /* look up for neighbor by interface name config. */ + peer = peer_lookup_by_conf_if (vty->index, argv[0]); + if (peer) + { + peer_as_change (peer, 0); + return CMD_SUCCESS; + } group = peer_group_lookup (vty->index, argv[0]); if (group) peer_group_remote_as_delete (group); else { - vty_out (vty, "%% Create the peer-group first%s", VTY_NEWLINE); + vty_out (vty, "%% Create the peer-group or interface first%s", VTY_NEWLINE); return CMD_WARNING; } return CMD_SUCCESS; @@ -1837,9 +2333,9 @@ DEFUN (no_neighbor_activate, DEFUN (neighbor_set_peer_group, neighbor_set_peer_group_cmd, - NEIGHBOR_CMD "peer-group WORD", + NEIGHBOR_CMD2 "peer-group WORD", NEIGHBOR_STR - NEIGHBOR_ADDR_STR + NEIGHBOR_ADDR_STR2 "Member of the peer-group\n" "peer-group name\n") { @@ -1847,15 +2343,30 @@ DEFUN (neighbor_set_peer_group, as_t as; union sockunion su; struct bgp *bgp; + struct peer *peer; struct peer_group *group; bgp = vty->index; + peer = NULL; ret = str2sockunion (argv[0], &su); if (ret < 0) { - vty_out (vty, "%% Malformed address: %s%s", argv[0], VTY_NEWLINE); - return CMD_WARNING; + peer = peer_lookup_by_conf_if (bgp, argv[0]); + if (!peer) + { + vty_out (vty, "%% Malformed address or name: %s%s", argv[0], VTY_NEWLINE); + return CMD_WARNING; + } + } + else + { + if (peer_address_self_check (&su)) + { + vty_out (vty, "%% Can not configure the local system as neighbor%s", + VTY_NEWLINE); + return CMD_WARNING; + } } group = peer_group_lookup (bgp, argv[1]); @@ -1865,14 +2376,7 @@ DEFUN (neighbor_set_peer_group, return CMD_WARNING; } - if (peer_address_self_check (&su)) - { - vty_out (vty, "%% Can not configure the local system as neighbor%s", - VTY_NEWLINE); - return CMD_WARNING; - } - - ret = peer_group_bind (bgp, &su, group, bgp_node_afi (vty), + ret = peer_group_bind (bgp, &su, peer, group, bgp_node_afi (vty), bgp_node_safi (vty), &as); if (ret == BGP_ERR_PEER_GROUP_PEER_TYPE_DIFFERENT) @@ -1886,10 +2390,10 @@ DEFUN (neighbor_set_peer_group, DEFUN (no_neighbor_set_peer_group, no_neighbor_set_peer_group_cmd, - NO_NEIGHBOR_CMD "peer-group WORD", + NO_NEIGHBOR_CMD2 "peer-group WORD", NO_STR NEIGHBOR_STR - NEIGHBOR_ADDR_STR + NEIGHBOR_ADDR_STR2 "Member of the peer-group\n" "peer-group name\n") { @@ -2191,32 +2695,143 @@ DEFUN (no_neighbor_nexthop_self, PEER_FLAG_NEXTHOP_SELF|PEER_FLAG_NEXTHOP_SELF_ALL); } +/* neighbor as-override */ +DEFUN (neighbor_as_override, + neighbor_as_override_cmd, + NEIGHBOR_CMD2 "as-override", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Override ASNs in outbound updates if aspath equals remote-as\n") +{ + return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_AS_OVERRIDE); +} + +DEFUN (no_neighbor_as_override, + no_neighbor_as_override_cmd, + NO_NEIGHBOR_CMD2 "as-override", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Override ASNs in outbound updates if aspath equals remote-as\n") +{ + return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_AS_OVERRIDE); +} + /* neighbor remove-private-AS. */ DEFUN (neighbor_remove_private_as, neighbor_remove_private_as_cmd, NEIGHBOR_CMD2 "remove-private-AS", NEIGHBOR_STR NEIGHBOR_ADDR_STR2 - "Remove private AS number from outbound updates\n") + "Remove private ASNs in outbound updates\n") { + peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_REMOVE_PRIVATE_AS_ALL| + PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE); return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), bgp_node_safi (vty), PEER_FLAG_REMOVE_PRIVATE_AS); } +DEFUN (neighbor_remove_private_as_all, + neighbor_remove_private_as_all_cmd, + NEIGHBOR_CMD2 "remove-private-AS all", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Remove private ASNs in outbound updates\n" + "Apply to all AS numbers") +{ + peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE); + return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_REMOVE_PRIVATE_AS| + PEER_FLAG_REMOVE_PRIVATE_AS_ALL); +} + +DEFUN (neighbor_remove_private_as_replace_as, + neighbor_remove_private_as_replace_as_cmd, + NEIGHBOR_CMD2 "remove-private-AS replace-AS", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Remove private ASNs in outbound updates\n" + "Replace private ASNs with our ASN in outbound updates\n") +{ + peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_REMOVE_PRIVATE_AS_ALL); + return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_REMOVE_PRIVATE_AS| + PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE); +} + +DEFUN (neighbor_remove_private_as_all_replace_as, + neighbor_remove_private_as_all_replace_as_cmd, + NEIGHBOR_CMD2 "remove-private-AS all replace-AS", + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Remove private ASNs in outbound updates\n" + "Apply to all AS numbers" + "Replace private ASNs with our ASN in outbound updates\n") +{ + return peer_af_flag_set_vty (vty, argv[0], bgp_node_afi (vty), + bgp_node_safi (vty), + PEER_FLAG_REMOVE_PRIVATE_AS| + PEER_FLAG_REMOVE_PRIVATE_AS_ALL| + PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE); +} + DEFUN (no_neighbor_remove_private_as, no_neighbor_remove_private_as_cmd, NO_NEIGHBOR_CMD2 "remove-private-AS", NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2 - "Remove private AS number from outbound updates\n") + "Remove private ASNs in outbound updates\n") { return peer_af_flag_unset_vty (vty, argv[0], bgp_node_afi (vty), bgp_node_safi (vty), - PEER_FLAG_REMOVE_PRIVATE_AS); + PEER_FLAG_REMOVE_PRIVATE_AS| + PEER_FLAG_REMOVE_PRIVATE_AS_ALL| + PEER_FLAG_REMOVE_PRIVATE_AS_REPLACE); } +ALIAS (no_neighbor_remove_private_as, + no_neighbor_remove_private_as_all_cmd, + NO_NEIGHBOR_CMD2 "remove-private-AS all", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Remove private ASNs in outbound updates\n" + "Apply to all AS numbers") + +ALIAS (no_neighbor_remove_private_as, + no_neighbor_remove_private_as_replace_as_cmd, + NO_NEIGHBOR_CMD2 "remove-private-AS replace-AS", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Remove private ASNs in outbound updates\n" + "Replace private ASNs with our ASN in outbound updates\n") + +ALIAS (no_neighbor_remove_private_as, + no_neighbor_remove_private_as_all_replace_as_cmd, + NO_NEIGHBOR_CMD2 "remove-private-AS all replace-AS", + NO_STR + NEIGHBOR_STR + NEIGHBOR_ADDR_STR2 + "Remove private ASNs in outbound updates\n" + "Apply to all AS numbers" + "Replace private ASNs with our ASN in outbound updates\n") + + /* neighbor send-community. */ DEFUN (neighbor_send_community, neighbor_send_community_cmd, @@ -3090,6 +3705,9 @@ peer_update_source_vty (struct vty *vty, const char *peer_str, if (! peer) return CMD_WARNING; + if (peer->conf_if) + return CMD_WARNING; + if (source_str) { union sockunion su; @@ -3539,6 +4157,54 @@ ALIAS (no_neighbor_advertise_interval, "Minimum interval between sending BGP routing updates\n" "time in seconds\n") +/* Time to wait before processing route-map updates */ +DEFUN (bgp_set_route_map_delay_timer, + bgp_set_route_map_delay_timer_cmd, + "bgp route-map delay-timer <0-600>", + SET_STR + "BGP route-map delay timer\n" + "Time in secs to wait before processing route-map changes\n" + "0 disables the timer and no route updates happen when\n" + "route-maps change") +{ + u_int32_t rmap_delay_timer; + struct bgp *bgp; + + bgp = vty->index; + if (argv[0]) + { + VTY_GET_INTEGER_RANGE ("delay-timer", rmap_delay_timer, argv[0], 0, 600); + bgp->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 && bgp->t_rmap_update ) + { + BGP_TIMER_OFF(bgp->t_rmap_update); + thread_execute (bm->master, bgp_route_map_update_timer, &bgp, 0); + } + return CMD_SUCCESS; + } + else + return CMD_WARNING; +} + +DEFUN (no_bgp_set_route_map_delay_timer, + no_bgp_set_route_map_delay_timer_cmd, + "no bgp route-map delay-timer", + NO_STR + "Default BGP route-map delay timer\n" + "Reset to default time to wait for processing route-map changes") +{ + struct bgp *bgp; + + bgp = vty->index; + bgp->rmap_update_timer = RMAP_DEFAULT_UPDATE_TIMER; + + return CMD_SUCCESS; +} + /* neighbor interface */ static int peer_interface_vty (struct vty *vty, const char *ip_str, const char *str) @@ -3547,7 +4213,7 @@ peer_interface_vty (struct vty *vty, const char *ip_str, const char *str) struct peer *peer; peer = peer_lookup_vty (vty, ip_str); - if (! peer) + if (! peer || peer->conf_if) return CMD_WARNING; if (str) @@ -4437,18 +5103,27 @@ bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, 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); + 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); } + + /* This is to apply read-only mode on this clear. */ + if (stype == BGP_CLEAR_SOFT_NONE) + bgp->update_delay_over = 0; + return CMD_SUCCESS; } @@ -4461,19 +5136,26 @@ bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, /* Make sockunion for lookup. */ ret = str2sockunion (arg, &su); if (ret < 0) - { - vty_out (vty, "Malformed address: %s%s", arg, VTY_NEWLINE); - return CMD_WARNING; - } - peer = peer_lookup (bgp, &su); - if (! peer) - { - vty_out (vty, "%%BGP: Unknown neighbor - \"%s\"%s", arg, VTY_NEWLINE); - return CMD_WARNING; - } + { + peer = peer_lookup_by_conf_if (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 (stype == BGP_CLEAR_SOFT_NONE) - ret = peer_clear (peer); + ret = peer_clear (peer, NULL); else ret = peer_clear_soft (peer, afi, safi, stype); @@ -4499,7 +5181,7 @@ bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, { if (stype == BGP_CLEAR_SOFT_NONE) { - ret = peer_clear (peer); + ret = peer_clear (peer, NULL); continue; } @@ -4522,7 +5204,7 @@ bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, continue; if (stype == BGP_CLEAR_SOFT_NONE) - ret = peer_clear (peer); + ret = peer_clear (peer, &nnode); else ret = peer_clear_soft (peer, afi, safi, stype); @@ -4546,7 +5228,7 @@ bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, find = 1; if (stype == BGP_CLEAR_SOFT_NONE) - ret = peer_clear (peer); + ret = peer_clear (peer, &nnode); else ret = peer_clear_soft (peer, afi, safi, stype); @@ -4562,6 +5244,87 @@ bgp_clear (struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, return CMD_SUCCESS; } +/* Recalculate bestpath and re-advertise a prefix */ +static int +bgp_clear_prefix (struct vty *vty, 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 view %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_vty (struct vty *vty, const char *name, afi_t afi, safi_t safi, enum clear_sort sort, enum bgp_clear_type stype, @@ -4642,32 +5405,35 @@ ALIAS (clear_ip_bgp_all, DEFUN (clear_ip_bgp_peer, clear_ip_bgp_peer_cmd, - "clear ip bgp (A.B.C.D|X:X::X:X)", + "clear ip bgp (A.B.C.D|X:X::X:X|WORD)", CLEAR_STR IP_STR BGP_STR "BGP neighbor IP address to clear\n" - "BGP IPv6 neighbor to clear\n") + "BGP IPv6 neighbor to clear\n" + "BGP neighbor on interface to clear\n") { return bgp_clear_vty (vty, NULL, 0, 0, clear_peer, BGP_CLEAR_SOFT_NONE, argv[0]); } ALIAS (clear_ip_bgp_peer, clear_bgp_peer_cmd, - "clear bgp (A.B.C.D|X:X::X:X)", + "clear bgp (A.B.C.D|X:X::X:X|WORD)", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" - "BGP IPv6 neighbor to clear\n") + "BGP IPv6 neighbor to clear\n" + "BGP neighbor on interface to clear\n") ALIAS (clear_ip_bgp_peer, clear_bgp_ipv6_peer_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X)", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD)", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" - "BGP IPv6 neighbor to clear\n") + "BGP IPv6 neighbor to clear\n" + "BGP neighbor on interface to clear\n") DEFUN (clear_ip_bgp_peer_group, clear_ip_bgp_peer_group_cmd, @@ -4724,6 +5490,27 @@ ALIAS (clear_ip_bgp_external, "Address family\n" "Clear all external peers\n") +DEFUN (clear_ip_bgp_prefix, + clear_ip_bgp_prefix_cmd, + "clear ip bgp prefix A.B.C.D/M", + CLEAR_STR + IP_STR + BGP_STR + "Clear bestpath and re-advertise\n" + "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n") +{ + return bgp_clear_prefix (vty, NULL, argv[0], AFI_IP, SAFI_UNICAST, NULL); +} + +ALIAS (clear_ip_bgp_prefix, + clear_bgp_prefix_cmd, + "clear bgp prefix A.B.C.D/M", + CLEAR_STR + BGP_STR + "Clear bestpath and re-advertise\n" + "IP prefix <network>/<length>, e.g., 35.0.0.0/8\n") + + DEFUN (clear_ip_bgp_as, clear_ip_bgp_as_cmd, "clear ip bgp " CMD_AS_RANGE, @@ -4758,8 +5545,8 @@ DEFUN (clear_ip_bgp_all_soft_out, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all, @@ -4776,7 +5563,7 @@ ALIAS (clear_ip_bgp_all_soft_out, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) ALIAS (clear_ip_bgp_all_soft_out, clear_ip_bgp_instance_all_soft_out_cmd, @@ -4787,8 +5574,8 @@ ALIAS (clear_ip_bgp_all_soft_out, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_all_ipv4_soft_out, clear_ip_bgp_all_ipv4_soft_out_cmd, @@ -4800,8 +5587,8 @@ DEFUN (clear_ip_bgp_all_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (strncmp (argv[0], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all, @@ -4821,7 +5608,7 @@ ALIAS (clear_ip_bgp_all_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_instance_all_ipv4_soft_out, clear_ip_bgp_instance_all_ipv4_soft_out_cmd, @@ -4835,7 +5622,7 @@ DEFUN (clear_ip_bgp_instance_all_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST, clear_all, @@ -4854,8 +5641,8 @@ DEFUN (clear_ip_bgp_all_vpnv4_soft_out, "Clear all peers\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all, BGP_CLEAR_SOFT_OUT, NULL); @@ -4870,7 +5657,7 @@ ALIAS (clear_ip_bgp_all_vpnv4_soft_out, "Clear all peers\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_all_encap_soft_out, clear_ip_bgp_all_encap_soft_out_cmd, @@ -4905,8 +5692,8 @@ DEFUN (clear_bgp_all_soft_out, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all, @@ -4924,8 +5711,8 @@ ALIAS (clear_bgp_all_soft_out, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_all_soft_out, clear_bgp_all_out_cmd, @@ -4933,7 +5720,7 @@ ALIAS (clear_bgp_all_soft_out, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_all_soft_out, clear_bgp_ipv6_all_soft_out_cmd, @@ -4942,8 +5729,8 @@ ALIAS (clear_bgp_all_soft_out, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_all_soft_out, clear_bgp_ipv6_all_out_cmd, @@ -4952,7 +5739,23 @@ ALIAS (clear_bgp_all_soft_out, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) + +DEFUN (clear_bgp_ipv6_safi_prefix, + clear_bgp_ipv6_safi_prefix_cmd, + "clear bgp ipv6 (unicast|multicast) prefix X:X::X:X/M", + CLEAR_STR + BGP_STR + "Address family\n" + "Address Family Modifier\n" + "Clear bestpath and re-advertise\n" + "IPv6 prefix <network>/<length>, e.g., 3ffe::/16\n") +{ + if (strncmp (argv[0], "m", 1) == 0) + return bgp_clear_prefix (vty, NULL, argv[1], AFI_IP6, SAFI_MULTICAST, NULL); + else + return bgp_clear_prefix (vty, NULL, argv[1], AFI_IP6, SAFI_UNICAST, NULL); +} DEFUN (clear_ip_bgp_peer_soft_out, clear_ip_bgp_peer_soft_out_cmd, @@ -4961,8 +5764,8 @@ DEFUN (clear_ip_bgp_peer_soft_out, IP_STR BGP_STR "BGP neighbor address to clear\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -4975,7 +5778,7 @@ ALIAS (clear_ip_bgp_peer_soft_out, IP_STR BGP_STR "BGP neighbor address to clear\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_peer_ipv4_soft_out, clear_ip_bgp_peer_ipv4_soft_out_cmd, @@ -4987,8 +5790,8 @@ DEFUN (clear_ip_bgp_peer_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer, @@ -5008,7 +5811,7 @@ ALIAS (clear_ip_bgp_peer_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_peer_vpnv4_soft_out, clear_ip_bgp_peer_vpnv4_soft_out_cmd, @@ -5019,8 +5822,8 @@ DEFUN (clear_ip_bgp_peer_vpnv4_soft_out, "BGP neighbor address to clear\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5035,7 +5838,7 @@ ALIAS (clear_ip_bgp_peer_vpnv4_soft_out, "BGP neighbor address to clear\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_peer_encap_soft_out, clear_ip_bgp_peer_encap_soft_out_cmd, @@ -5066,13 +5869,14 @@ ALIAS (clear_ip_bgp_peer_encap_soft_out, DEFUN (clear_bgp_peer_soft_out, clear_bgp_peer_soft_out_cmd, - "clear bgp (A.B.C.D|X:X::X:X) soft out", + "clear bgp (A.B.C.D|X:X::X:X|WORD) soft out", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5080,33 +5884,36 @@ DEFUN (clear_bgp_peer_soft_out, ALIAS (clear_bgp_peer_soft_out, clear_bgp_ipv6_peer_soft_out_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft out", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) soft out", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_STR + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_peer_soft_out, clear_bgp_peer_out_cmd, - "clear bgp (A.B.C.D|X:X::X:X) out", + "clear bgp (A.B.C.D|X:X::X:X|WORD) out", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig outbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_peer_soft_out, clear_bgp_ipv6_peer_out_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) out", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) out", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig outbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_peer_group_soft_out, clear_ip_bgp_peer_group_soft_out_cmd, @@ -5116,8 +5923,8 @@ DEFUN (clear_ip_bgp_peer_group_soft_out, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5131,7 +5938,7 @@ ALIAS (clear_ip_bgp_peer_group_soft_out, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_peer_group_ipv4_soft_out, clear_ip_bgp_peer_group_ipv4_soft_out_cmd, @@ -5144,8 +5951,8 @@ DEFUN (clear_ip_bgp_peer_group_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group, @@ -5166,7 +5973,7 @@ ALIAS (clear_ip_bgp_peer_group_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_bgp_peer_group_soft_out, clear_bgp_peer_group_soft_out_cmd, @@ -5175,8 +5982,8 @@ DEFUN (clear_bgp_peer_group_soft_out, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5190,8 +5997,8 @@ ALIAS (clear_bgp_peer_group_soft_out, "Address family\n" "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_peer_group_soft_out, clear_bgp_peer_group_out_cmd, @@ -5200,7 +6007,7 @@ ALIAS (clear_bgp_peer_group_soft_out, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_peer_group_soft_out, clear_bgp_ipv6_peer_group_out_cmd, @@ -5210,7 +6017,7 @@ ALIAS (clear_bgp_peer_group_soft_out, "Address family\n" "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_external_soft_out, clear_ip_bgp_external_soft_out_cmd, @@ -5219,8 +6026,8 @@ DEFUN (clear_ip_bgp_external_soft_out, IP_STR BGP_STR "Clear all external peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external, BGP_CLEAR_SOFT_OUT, NULL); @@ -5233,7 +6040,7 @@ ALIAS (clear_ip_bgp_external_soft_out, IP_STR BGP_STR "Clear all external peers\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_external_ipv4_soft_out, clear_ip_bgp_external_ipv4_soft_out_cmd, @@ -5245,8 +6052,8 @@ DEFUN (clear_ip_bgp_external_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (strncmp (argv[0], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external, @@ -5266,7 +6073,7 @@ ALIAS (clear_ip_bgp_external_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_bgp_external_soft_out, clear_bgp_external_soft_out_cmd, @@ -5274,8 +6081,8 @@ DEFUN (clear_bgp_external_soft_out, CLEAR_STR BGP_STR "Clear all external peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external, BGP_CLEAR_SOFT_OUT, NULL); @@ -5288,8 +6095,8 @@ ALIAS (clear_bgp_external_soft_out, BGP_STR "Address family\n" "Clear all external peers\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_external_soft_out, clear_bgp_external_out_cmd, @@ -5297,7 +6104,7 @@ ALIAS (clear_bgp_external_soft_out, CLEAR_STR BGP_STR "Clear all external peers\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_external_soft_out, clear_bgp_ipv6_external_out_cmd, @@ -5306,7 +6113,7 @@ ALIAS (clear_bgp_external_soft_out, BGP_STR "Address family\n" "Clear all external peers\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_as_soft_out, clear_ip_bgp_as_soft_out_cmd, @@ -5315,8 +6122,8 @@ DEFUN (clear_ip_bgp_as_soft_out, IP_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5329,7 +6136,7 @@ ALIAS (clear_ip_bgp_as_soft_out, IP_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_as_ipv4_soft_out, clear_ip_bgp_as_ipv4_soft_out_cmd, @@ -5341,8 +6148,8 @@ DEFUN (clear_ip_bgp_as_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as, @@ -5362,7 +6169,7 @@ ALIAS (clear_ip_bgp_as_ipv4_soft_out, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_as_vpnv4_soft_out, clear_ip_bgp_as_vpnv4_soft_out_cmd, @@ -5373,8 +6180,8 @@ DEFUN (clear_ip_bgp_as_vpnv4_soft_out, "Clear peers with the AS number\n" "Address family\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5389,7 +6196,7 @@ ALIAS (clear_ip_bgp_as_vpnv4_soft_out, "Clear peers with the AS number\n" "Address family\n" "Address Family modifier\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) DEFUN (clear_ip_bgp_as_encap_soft_out, clear_ip_bgp_as_encap_soft_out_cmd, @@ -5424,8 +6231,8 @@ DEFUN (clear_bgp_as_soft_out, CLEAR_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as, BGP_CLEAR_SOFT_OUT, argv[0]); @@ -5438,8 +6245,8 @@ ALIAS (clear_bgp_as_soft_out, BGP_STR "Address family\n" "Clear peers with the AS number\n" - "Soft reconfig\n" - "Soft reconfig outbound update\n") + BGP_SOFT_STR + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_as_soft_out, clear_bgp_as_out_cmd, @@ -5447,7 +6254,7 @@ ALIAS (clear_bgp_as_soft_out, CLEAR_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) ALIAS (clear_bgp_as_soft_out, clear_bgp_ipv6_as_out_cmd, @@ -5456,7 +6263,7 @@ ALIAS (clear_bgp_as_soft_out, BGP_STR "Address family\n" "Clear peers with the AS number\n" - "Soft reconfig outbound update\n") + BGP_SOFT_OUT_STR) /* Inbound soft-reconfiguration */ DEFUN (clear_ip_bgp_all_soft_in, @@ -5466,8 +6273,8 @@ DEFUN (clear_ip_bgp_all_soft_in, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all, @@ -5486,8 +6293,8 @@ ALIAS (clear_ip_bgp_all_soft_in, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_ip_bgp_all_soft_in, clear_ip_bgp_all_in_cmd, @@ -5496,7 +6303,7 @@ ALIAS (clear_ip_bgp_all_soft_in, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_all_in_prefix_filter, clear_ip_bgp_all_in_prefix_filter_cmd, @@ -5505,7 +6312,7 @@ DEFUN (clear_ip_bgp_all_in_prefix_filter, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { if (argc== 1) @@ -5525,7 +6332,7 @@ ALIAS (clear_ip_bgp_all_in_prefix_filter, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") @@ -5539,8 +6346,8 @@ DEFUN (clear_ip_bgp_all_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (strncmp (argv[0], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all, @@ -5560,7 +6367,7 @@ ALIAS (clear_ip_bgp_all_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_instance_all_ipv4_soft_in, clear_ip_bgp_instance_all_ipv4_soft_in_cmd, @@ -5574,8 +6381,8 @@ DEFUN (clear_ip_bgp_instance_all_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_MULTICAST, clear_all, @@ -5595,7 +6402,7 @@ DEFUN (clear_ip_bgp_all_ipv4_in_prefix_filter, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { if (strncmp (argv[0], "m", 1) == 0) @@ -5616,7 +6423,7 @@ DEFUN (clear_ip_bgp_instance_all_ipv4_in_prefix_filter, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { if (strncmp (argv[1], "m", 1) == 0) @@ -5636,8 +6443,8 @@ DEFUN (clear_ip_bgp_all_vpnv4_soft_in, "Clear all peers\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all, BGP_CLEAR_SOFT_IN, NULL); @@ -5652,7 +6459,7 @@ ALIAS (clear_ip_bgp_all_vpnv4_soft_in, "Clear all peers\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_all_encap_soft_in, clear_ip_bgp_all_encap_soft_in_cmd, @@ -5687,8 +6494,8 @@ DEFUN (clear_bgp_all_soft_in, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all, @@ -5706,8 +6513,8 @@ ALIAS (clear_bgp_all_soft_in, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_bgp_all_soft_in, clear_bgp_ipv6_all_soft_in_cmd, @@ -5716,8 +6523,8 @@ ALIAS (clear_bgp_all_soft_in, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_bgp_all_soft_in, clear_bgp_all_in_cmd, @@ -5725,7 +6532,7 @@ ALIAS (clear_bgp_all_soft_in, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) ALIAS (clear_bgp_all_soft_in, clear_bgp_ipv6_all_in_cmd, @@ -5734,7 +6541,7 @@ ALIAS (clear_bgp_all_soft_in, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_bgp_all_in_prefix_filter, clear_bgp_all_in_prefix_filter_cmd, @@ -5742,7 +6549,7 @@ DEFUN (clear_bgp_all_in_prefix_filter, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_all, @@ -5756,7 +6563,7 @@ ALIAS (clear_bgp_all_in_prefix_filter, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") DEFUN (clear_ip_bgp_peer_soft_in, @@ -5766,8 +6573,8 @@ DEFUN (clear_ip_bgp_peer_soft_in, IP_STR BGP_STR "BGP neighbor address to clear\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer, BGP_CLEAR_SOFT_IN, argv[0]); @@ -5780,7 +6587,7 @@ ALIAS (clear_ip_bgp_peer_soft_in, IP_STR BGP_STR "BGP neighbor address to clear\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_peer_in_prefix_filter, clear_ip_bgp_peer_in_prefix_filter_cmd, @@ -5789,7 +6596,7 @@ DEFUN (clear_ip_bgp_peer_in_prefix_filter, IP_STR BGP_STR "BGP neighbor address to clear\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out the existing ORF prefix-list\n") { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer, @@ -5806,8 +6613,8 @@ DEFUN (clear_ip_bgp_peer_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer, @@ -5827,7 +6634,7 @@ ALIAS (clear_ip_bgp_peer_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_peer_ipv4_in_prefix_filter, clear_ip_bgp_peer_ipv4_in_prefix_filter_cmd, @@ -5839,7 +6646,7 @@ DEFUN (clear_ip_bgp_peer_ipv4_in_prefix_filter, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out the existing ORF prefix-list\n") { if (strncmp (argv[1], "m", 1) == 0) @@ -5859,8 +6666,8 @@ DEFUN (clear_ip_bgp_peer_vpnv4_soft_in, "BGP neighbor address to clear\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer, BGP_CLEAR_SOFT_IN, argv[0]); @@ -5875,7 +6682,7 @@ ALIAS (clear_ip_bgp_peer_vpnv4_soft_in, "BGP neighbor address to clear\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_peer_encap_soft_in, clear_ip_bgp_peer_encap_soft_in_cmd, @@ -5906,13 +6713,14 @@ ALIAS (clear_ip_bgp_peer_encap_soft_in, DEFUN (clear_bgp_peer_soft_in, clear_bgp_peer_soft_in_cmd, - "clear bgp (A.B.C.D|X:X::X:X) soft in", + "clear bgp (A.B.C.D|X:X::X:X|WORD) soft in", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer, BGP_CLEAR_SOFT_IN, argv[0]); @@ -5920,42 +6728,46 @@ DEFUN (clear_bgp_peer_soft_in, ALIAS (clear_bgp_peer_soft_in, clear_bgp_ipv6_peer_soft_in_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft in", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) soft in", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_bgp_peer_soft_in, clear_bgp_peer_in_cmd, - "clear bgp (A.B.C.D|X:X::X:X) in", + "clear bgp (A.B.C.D|X:X::X:X|WORD) in", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig inbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_IN_STR) ALIAS (clear_bgp_peer_soft_in, clear_bgp_ipv6_peer_in_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) in", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) in", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig inbound update\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_IN_STR) DEFUN (clear_bgp_peer_in_prefix_filter, clear_bgp_peer_in_prefix_filter_cmd, - "clear bgp (A.B.C.D|X:X::X:X) in prefix-filter", + "clear bgp (A.B.C.D|X:X::X:X|WORD) in prefix-filter", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig inbound update\n" + "BGP neighbor on interface to clear\n" + BGP_SOFT_IN_STR "Push out the existing ORF prefix-list\n") { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer, @@ -5964,13 +6776,14 @@ DEFUN (clear_bgp_peer_in_prefix_filter, ALIAS (clear_bgp_peer_in_prefix_filter, clear_bgp_ipv6_peer_in_prefix_filter_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) in prefix-filter", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) in prefix-filter", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig inbound update\n" + "BGP neighbor on interface to clear\n" + BGP_SOFT_IN_STR "Push out the existing ORF prefix-list\n") DEFUN (clear_ip_bgp_peer_group_soft_in, @@ -5981,8 +6794,8 @@ DEFUN (clear_ip_bgp_peer_group_soft_in, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group, BGP_CLEAR_SOFT_IN, argv[0]); @@ -5996,7 +6809,7 @@ ALIAS (clear_ip_bgp_peer_group_soft_in, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_peer_group_in_prefix_filter, clear_ip_bgp_peer_group_in_prefix_filter_cmd, @@ -6006,7 +6819,7 @@ DEFUN (clear_ip_bgp_peer_group_in_prefix_filter, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group, @@ -6024,8 +6837,8 @@ DEFUN (clear_ip_bgp_peer_group_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group, @@ -6046,7 +6859,7 @@ ALIAS (clear_ip_bgp_peer_group_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_peer_group_ipv4_in_prefix_filter, clear_ip_bgp_peer_group_ipv4_in_prefix_filter_cmd, @@ -6059,7 +6872,7 @@ DEFUN (clear_ip_bgp_peer_group_ipv4_in_prefix_filter, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { if (strncmp (argv[1], "m", 1) == 0) @@ -6077,8 +6890,8 @@ DEFUN (clear_bgp_peer_group_soft_in, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group, BGP_CLEAR_SOFT_IN, argv[0]); @@ -6092,8 +6905,8 @@ ALIAS (clear_bgp_peer_group_soft_in, "Address family\n" "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_bgp_peer_group_soft_in, clear_bgp_peer_group_in_cmd, @@ -6102,7 +6915,7 @@ ALIAS (clear_bgp_peer_group_soft_in, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) ALIAS (clear_bgp_peer_group_soft_in, clear_bgp_ipv6_peer_group_in_cmd, @@ -6112,7 +6925,7 @@ ALIAS (clear_bgp_peer_group_soft_in, "Address family\n" "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_bgp_peer_group_in_prefix_filter, clear_bgp_peer_group_in_prefix_filter_cmd, @@ -6121,7 +6934,7 @@ DEFUN (clear_bgp_peer_group_in_prefix_filter, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group, @@ -6136,7 +6949,7 @@ ALIAS (clear_bgp_peer_group_in_prefix_filter, "Address family\n" "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") DEFUN (clear_ip_bgp_external_soft_in, @@ -6146,8 +6959,8 @@ DEFUN (clear_ip_bgp_external_soft_in, IP_STR BGP_STR "Clear all external peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external, BGP_CLEAR_SOFT_IN, NULL); @@ -6160,7 +6973,7 @@ ALIAS (clear_ip_bgp_external_soft_in, IP_STR BGP_STR "Clear all external peers\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_external_in_prefix_filter, clear_ip_bgp_external_in_prefix_filter_cmd, @@ -6169,7 +6982,7 @@ DEFUN (clear_ip_bgp_external_in_prefix_filter, IP_STR BGP_STR "Clear all external peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external, @@ -6186,8 +6999,8 @@ DEFUN (clear_ip_bgp_external_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (strncmp (argv[0], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external, @@ -6207,7 +7020,7 @@ ALIAS (clear_ip_bgp_external_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_external_ipv4_in_prefix_filter, clear_ip_bgp_external_ipv4_in_prefix_filter_cmd, @@ -6219,7 +7032,7 @@ DEFUN (clear_ip_bgp_external_ipv4_in_prefix_filter, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { if (strncmp (argv[0], "m", 1) == 0) @@ -6236,8 +7049,8 @@ DEFUN (clear_bgp_external_soft_in, CLEAR_STR BGP_STR "Clear all external peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external, BGP_CLEAR_SOFT_IN, NULL); @@ -6250,8 +7063,8 @@ ALIAS (clear_bgp_external_soft_in, BGP_STR "Address family\n" "Clear all external peers\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_bgp_external_soft_in, clear_bgp_external_in_cmd, @@ -6259,7 +7072,7 @@ ALIAS (clear_bgp_external_soft_in, CLEAR_STR BGP_STR "Clear all external peers\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) ALIAS (clear_bgp_external_soft_in, clear_bgp_ipv6_external_in_cmd, @@ -6268,7 +7081,7 @@ ALIAS (clear_bgp_external_soft_in, BGP_STR "Address family\n" "Clear all external peers\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_bgp_external_in_prefix_filter, clear_bgp_external_in_prefix_filter_cmd, @@ -6276,7 +7089,7 @@ DEFUN (clear_bgp_external_in_prefix_filter, CLEAR_STR BGP_STR "Clear all external peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external, @@ -6290,7 +7103,7 @@ ALIAS (clear_bgp_external_in_prefix_filter, BGP_STR "Address family\n" "Clear all external peers\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") DEFUN (clear_ip_bgp_as_soft_in, @@ -6300,8 +7113,8 @@ DEFUN (clear_ip_bgp_as_soft_in, IP_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as, BGP_CLEAR_SOFT_IN, argv[0]); @@ -6314,7 +7127,7 @@ ALIAS (clear_ip_bgp_as_soft_in, IP_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_as_in_prefix_filter, clear_ip_bgp_as_in_prefix_filter_cmd, @@ -6323,7 +7136,7 @@ DEFUN (clear_ip_bgp_as_in_prefix_filter, IP_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as, @@ -6340,8 +7153,8 @@ DEFUN (clear_ip_bgp_as_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as, @@ -6361,7 +7174,7 @@ ALIAS (clear_ip_bgp_as_ipv4_soft_in, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_as_ipv4_in_prefix_filter, clear_ip_bgp_as_ipv4_in_prefix_filter_cmd, @@ -6373,7 +7186,7 @@ DEFUN (clear_ip_bgp_as_ipv4_in_prefix_filter, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { if (strncmp (argv[1], "m", 1) == 0) @@ -6393,8 +7206,8 @@ DEFUN (clear_ip_bgp_as_vpnv4_soft_in, "Clear peers with the AS number\n" "Address family\n" "Address Family modifier\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as, BGP_CLEAR_SOFT_IN, argv[0]); @@ -6409,7 +7222,7 @@ ALIAS (clear_ip_bgp_as_vpnv4_soft_in, "Clear peers with the AS number\n" "Address family\n" "Address Family modifier\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_ip_bgp_as_encap_soft_in, clear_ip_bgp_as_encap_soft_in_cmd, @@ -6444,8 +7257,8 @@ DEFUN (clear_bgp_as_soft_in, CLEAR_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as, BGP_CLEAR_SOFT_IN, argv[0]); @@ -6458,8 +7271,8 @@ ALIAS (clear_bgp_as_soft_in, BGP_STR "Address family\n" "Clear peers with the AS number\n" - "Soft reconfig\n" - "Soft reconfig inbound update\n") + BGP_SOFT_STR + BGP_SOFT_IN_STR) ALIAS (clear_bgp_as_soft_in, clear_bgp_as_in_cmd, @@ -6467,7 +7280,7 @@ ALIAS (clear_bgp_as_soft_in, CLEAR_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) ALIAS (clear_bgp_as_soft_in, clear_bgp_ipv6_as_in_cmd, @@ -6476,7 +7289,7 @@ ALIAS (clear_bgp_as_soft_in, BGP_STR "Address family\n" "Clear peers with the AS number\n" - "Soft reconfig inbound update\n") + BGP_SOFT_IN_STR) DEFUN (clear_bgp_as_in_prefix_filter, clear_bgp_as_in_prefix_filter_cmd, @@ -6484,7 +7297,7 @@ DEFUN (clear_bgp_as_in_prefix_filter, CLEAR_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as, @@ -6498,7 +7311,7 @@ ALIAS (clear_bgp_as_in_prefix_filter, BGP_STR "Address family\n" "Clear peers with the AS number\n" - "Soft reconfig inbound update\n" + BGP_SOFT_IN_STR "Push out prefix-list ORF and do inbound soft reconfig\n") /* Both soft-reconfiguration */ @@ -6509,7 +7322,7 @@ DEFUN (clear_ip_bgp_all_soft, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all, @@ -6528,7 +7341,7 @@ ALIAS (clear_ip_bgp_all_soft, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) DEFUN (clear_ip_bgp_all_ipv4_soft, @@ -6541,7 +7354,7 @@ DEFUN (clear_ip_bgp_all_ipv4_soft, "Address family\n" "Address Family Modifier\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (strncmp (argv[0], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all, @@ -6563,7 +7376,7 @@ DEFUN (clear_ip_bgp_instance_all_ipv4_soft, "Address family\n" "Address Family Modifier\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_all, @@ -6582,7 +7395,7 @@ DEFUN (clear_ip_bgp_all_vpnv4_soft, "Clear all peers\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_all, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6609,7 +7422,7 @@ DEFUN (clear_bgp_all_soft, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all, @@ -6627,7 +7440,7 @@ ALIAS (clear_bgp_all_soft, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) ALIAS (clear_bgp_all_soft, clear_bgp_ipv6_all_soft_cmd, @@ -6636,7 +7449,7 @@ ALIAS (clear_bgp_all_soft, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) DEFUN (clear_ip_bgp_peer_soft, clear_ip_bgp_peer_soft_cmd, @@ -6645,7 +7458,7 @@ DEFUN (clear_ip_bgp_peer_soft, IP_STR BGP_STR "BGP neighbor address to clear\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_peer, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6661,7 +7474,7 @@ DEFUN (clear_ip_bgp_peer_ipv4_soft, "Address family\n" "Address Family Modifier\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_peer, @@ -6680,7 +7493,7 @@ DEFUN (clear_ip_bgp_peer_vpnv4_soft, "BGP neighbor address to clear\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_peer, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6703,12 +7516,13 @@ DEFUN (clear_ip_bgp_peer_encap_soft, DEFUN (clear_bgp_peer_soft, clear_bgp_peer_soft_cmd, - "clear bgp (A.B.C.D|X:X::X:X) soft", + "clear bgp (A.B.C.D|X:X::X:X|WORD) soft", CLEAR_STR BGP_STR "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_peer, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6716,13 +7530,14 @@ DEFUN (clear_bgp_peer_soft, ALIAS (clear_bgp_peer_soft, clear_bgp_ipv6_peer_soft_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) soft", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) soft", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_STR) DEFUN (clear_ip_bgp_peer_group_soft, clear_ip_bgp_peer_group_soft_cmd, @@ -6732,7 +7547,7 @@ DEFUN (clear_ip_bgp_peer_group_soft, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_group, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6749,7 +7564,7 @@ DEFUN (clear_ip_bgp_peer_group_ipv4_soft, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_group, @@ -6766,7 +7581,7 @@ DEFUN (clear_bgp_peer_group_soft, BGP_STR "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_group, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6780,7 +7595,7 @@ ALIAS (clear_bgp_peer_group_soft, "Address family\n" "Clear all members of peer-group\n" "BGP peer-group name\n" - "Soft reconfig\n") + BGP_SOFT_STR) DEFUN (clear_ip_bgp_external_soft, clear_ip_bgp_external_soft_cmd, @@ -6789,7 +7604,7 @@ DEFUN (clear_ip_bgp_external_soft, IP_STR BGP_STR "Clear all external peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_external, BGP_CLEAR_SOFT_BOTH, NULL); @@ -6805,7 +7620,7 @@ DEFUN (clear_ip_bgp_external_ipv4_soft, "Address family\n" "Address Family modifier\n" "Address Family modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (strncmp (argv[0], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_external, @@ -6821,7 +7636,7 @@ DEFUN (clear_bgp_external_soft, CLEAR_STR BGP_STR "Clear all external peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_external, BGP_CLEAR_SOFT_BOTH, NULL); @@ -6834,7 +7649,7 @@ ALIAS (clear_bgp_external_soft, BGP_STR "Address family\n" "Clear all external peers\n" - "Soft reconfig\n") + BGP_SOFT_STR) DEFUN (clear_ip_bgp_as_soft, clear_ip_bgp_as_soft_cmd, @@ -6843,7 +7658,7 @@ DEFUN (clear_ip_bgp_as_soft, IP_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_UNICAST, clear_as, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6859,7 +7674,7 @@ DEFUN (clear_ip_bgp_as_ipv4_soft, "Address family\n" "Address Family Modifier\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { if (strncmp (argv[1], "m", 1) == 0) return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MULTICAST, clear_as, @@ -6878,7 +7693,7 @@ DEFUN (clear_ip_bgp_as_vpnv4_soft, "Clear peers with the AS number\n" "Address family\n" "Address Family Modifier\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP, SAFI_MPLS_VPN, clear_as, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6905,7 +7720,7 @@ DEFUN (clear_bgp_as_soft, CLEAR_STR BGP_STR "Clear peers with the AS number\n" - "Soft reconfig\n") + BGP_SOFT_STR) { return bgp_clear_vty (vty, NULL, AFI_IP6, SAFI_UNICAST, clear_as, BGP_CLEAR_SOFT_BOTH, argv[0]); @@ -6918,7 +7733,7 @@ ALIAS (clear_bgp_as_soft, BGP_STR "Address family\n" "Clear peers with the AS number\n" - "Soft reconfig\n") + BGP_SOFT_STR) /* RS-client soft reconfiguration. */ DEFUN (clear_bgp_all_rsclient, @@ -6927,7 +7742,7 @@ DEFUN (clear_bgp_all_rsclient, CLEAR_STR BGP_STR "Clear all peers\n" - "Soft reconfig for rsclient RIB\n") + BGP_SOFT_RSCLIENT_RIB_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_all, @@ -6944,7 +7759,7 @@ ALIAS (clear_bgp_all_rsclient, BGP_STR "Address family\n" "Clear all peers\n" - "Soft reconfig for rsclient RIB\n") + BGP_SOFT_RSCLIENT_RIB_STR) ALIAS (clear_bgp_all_rsclient, clear_bgp_instance_all_rsclient_cmd, @@ -6954,7 +7769,7 @@ ALIAS (clear_bgp_all_rsclient, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig for rsclient RIB\n") + BGP_SOFT_RSCLIENT_RIB_STR) ALIAS (clear_bgp_all_rsclient, clear_bgp_ipv6_instance_all_rsclient_cmd, @@ -6965,7 +7780,7 @@ ALIAS (clear_bgp_all_rsclient, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig for rsclient RIB\n") + BGP_SOFT_RSCLIENT_RIB_STR) DEFUN (clear_ip_bgp_all_rsclient, clear_ip_bgp_all_rsclient_cmd, @@ -6974,7 +7789,7 @@ DEFUN (clear_ip_bgp_all_rsclient, IP_STR BGP_STR "Clear all peers\n" - "Soft reconfig for rsclient RIB\n") + BGP_SOFT_RSCLIENT_RIB_STR) { if (argc == 1) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_all, @@ -6993,16 +7808,17 @@ ALIAS (clear_ip_bgp_all_rsclient, "BGP view\n" "view name\n" "Clear all peers\n" - "Soft reconfig for rsclient RIB\n") + BGP_SOFT_RSCLIENT_RIB_STR) DEFUN (clear_bgp_peer_rsclient, clear_bgp_peer_rsclient_cmd, - "clear bgp (A.B.C.D|X:X::X:X) rsclient", + "clear bgp (A.B.C.D|X:X::X:X|WORD) rsclient", CLEAR_STR BGP_STR "BGP neighbor IP address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig for rsclient RIB\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_RSCLIENT_RIB_STR) { if (argc == 2) return bgp_clear_vty (vty, argv[0], AFI_IP6, SAFI_UNICAST, clear_peer, @@ -7014,28 +7830,30 @@ DEFUN (clear_bgp_peer_rsclient, ALIAS (clear_bgp_peer_rsclient, clear_bgp_ipv6_peer_rsclient_cmd, - "clear bgp ipv6 (A.B.C.D|X:X::X:X) rsclient", + "clear bgp ipv6 (A.B.C.D|X:X::X:X|WORD) rsclient", CLEAR_STR BGP_STR "Address family\n" "BGP neighbor IP address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig for rsclient RIB\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_RSCLIENT_RIB_STR) ALIAS (clear_bgp_peer_rsclient, clear_bgp_instance_peer_rsclient_cmd, - "clear bgp view WORD (A.B.C.D|X:X::X:X) rsclient", + "clear bgp view WORD (A.B.C.D|X:X::X:X|WORD) rsclient", CLEAR_STR BGP_STR "BGP view\n" "view name\n" "BGP neighbor IP address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig for rsclient RIB\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_RSCLIENT_RIB_STR) ALIAS (clear_bgp_peer_rsclient, clear_bgp_ipv6_instance_peer_rsclient_cmd, - "clear bgp ipv6 view WORD (A.B.C.D|X:X::X:X) rsclient", + "clear bgp ipv6 view WORD (A.B.C.D|X:X::X:X|WORD) rsclient", CLEAR_STR BGP_STR "Address family\n" @@ -7043,17 +7861,19 @@ ALIAS (clear_bgp_peer_rsclient, "view name\n" "BGP neighbor IP address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig for rsclient RIB\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_RSCLIENT_RIB_STR) DEFUN (clear_ip_bgp_peer_rsclient, clear_ip_bgp_peer_rsclient_cmd, - "clear ip bgp (A.B.C.D|X:X::X:X) rsclient", + "clear ip bgp (A.B.C.D|X:X::X:X|WORD) rsclient", CLEAR_STR IP_STR BGP_STR "BGP neighbor IP address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig for rsclient RIB\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_RSCLIENT_RIB_STR) { if (argc == 2) return bgp_clear_vty (vty, argv[0], AFI_IP, SAFI_UNICAST, clear_peer, @@ -7065,7 +7885,7 @@ DEFUN (clear_ip_bgp_peer_rsclient, ALIAS (clear_ip_bgp_peer_rsclient, clear_ip_bgp_instance_peer_rsclient_cmd, - "clear ip bgp view WORD (A.B.C.D|X:X::X:X) rsclient", + "clear ip bgp view WORD (A.B.C.D|X:X::X:X|WORD) rsclient", CLEAR_STR IP_STR BGP_STR @@ -7073,7 +7893,8 @@ ALIAS (clear_ip_bgp_peer_rsclient, "view name\n" "BGP neighbor IP address to clear\n" "BGP IPv6 neighbor to clear\n" - "Soft reconfig for rsclient RIB\n") + "BGP neighbor on interface to clear\n" + BGP_SOFT_RSCLIENT_RIB_STR) DEFUN (show_bgp_views, show_bgp_views_cmd, @@ -7252,6 +8073,9 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi) 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) @@ -7263,6 +8087,39 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi) vty_out (vty, "BGP router identifier %s, local AS number %u%s", inet_ntoa (bgp->router_id), bgp->as, VTY_NEWLINE); + if (bgp_update_delay_configured(bgp)) + { + 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 (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); ents = bgp_table_count (bgp->rib[afi][safi]); vty_out (vty, "RIB entries %ld, using %s of memory%s", ents, @@ -7308,14 +8165,16 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi) vty_out (vty, "4 "); - vty_out (vty, "%5u %7d %7d %8d %4d %4lu ", + vty_out (vty, "%5u %7d %7d %8d %4d %4d ", 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, - 0, 0, (unsigned long) peer->obuf->count); + 0, 0, + peer->sync[afi][safi]->update.count + + peer->sync[afi][safi]->withdraw.count); vty_out (vty, "%8s", peer_uptime (peer->uptime, timebuf, BGP_UPTIME_LEN)); @@ -7344,6 +8203,7 @@ bgp_show_summary (struct vty *vty, struct bgp *bgp, int afi, int safi) else vty_out (vty, "No %s neighbor is configured%s", afi == AFI_IP ? "IPv4" : "IPv6", VTY_NEWLINE); + return CMD_SUCCESS; } @@ -7983,9 +8843,16 @@ bgp_show_peer_afi (struct vty *vty, struct peer *p, afi_t afi, safi_t safi) 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)) - vty_out (vty, " Private AS number removed from updates to this neighbor%s", VTY_NEWLINE); - if (CHECK_FLAG (p->af_flags[afi][safi], PEER_FLAG_NEXTHOP_SELF)) + 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)) + 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_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_NEXTHOP_SELF_ALL)) 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); @@ -8122,15 +8989,21 @@ static void bgp_show_peer (struct vty *vty, struct peer *p) { struct bgp *bgp; - char buf1[BUFSIZ]; + char buf1[BUFSIZ], buf[SU_ADDRSTRLEN]; char timebuf[BGP_UPTIME_LEN]; afi_t afi; safi_t safi; + u_int16_t i; + u_char *msg; bgp = p->bgp; - /* Configured IP address. */ - vty_out (vty, "BGP neighbor is %s, ", p->host); + 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, ", p->host); vty_out (vty, "remote AS %u, ", p->as); vty_out (vty, "local AS %u%s%s, ", p->change_local_as ? p->change_local_as : p->local_as, @@ -8183,9 +9056,11 @@ bgp_show_peer (struct vty *vty, struct peer *p) /* read timer */ vty_out (vty, " Last read %s", peer_uptime (p->readtime, timebuf, BGP_UPTIME_LEN)); + vty_out (vty, ", Last write %s%s", + peer_uptime (p->last_write, timebuf, BGP_UPTIME_LEN), VTY_NEWLINE); /* Configured timer values. */ - vty_out (vty, ", hold time is %d, keepalive interval is %d seconds%s", + 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)) { @@ -8404,12 +9279,33 @@ bgp_show_peer (struct vty *vty, struct peer *p) p->established, p->dropped, VTY_NEWLINE); - if (! p->dropped) + if (! p->last_reset) vty_out (vty, " Last reset never%s", VTY_NEWLINE); else - vty_out (vty, " Last reset %s, due to %s%s", - peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN), - peer_down_str[(int) p->last_reset], VTY_NEWLINE); + { + vty_out (vty, " Last reset %s, due to %s%s", + peer_uptime (p->resettime, timebuf, BGP_UPTIME_LEN), + 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)) { @@ -8488,8 +9384,12 @@ bgp_show_peer (struct vty *vty, struct peer *p) if (p->t_connect) vty_out (vty, "Next connect timer due in %ld seconds%s", thread_timer_remain_second (p->t_connect), VTY_NEWLINE); - - vty_out (vty, "Read thread: %s Write thread: %s%s", + if (p->t_routeadv) + vty_out (vty, "MRAI (interval %d) 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); @@ -8503,7 +9403,7 @@ bgp_show_peer (struct vty *vty, struct peer *p) static int bgp_show_neighbor (struct vty *vty, struct bgp *bgp, - enum show_type type, union sockunion *su) + enum show_type type, union sockunion *su, const char *conf_if) { struct listnode *node, *nnode; struct peer *peer; @@ -8511,17 +9411,31 @@ bgp_show_neighbor (struct vty *vty, struct bgp *bgp, 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); break; case show_peer: - if (sockunion_same (&peer->su, su)) - { - find = 1; - bgp_show_peer (vty, peer); - } + if (conf_if) + { + if (peer->conf_if && !strcmp(peer->conf_if, conf_if)) + { + find = 1; + bgp_show_peer (vty, peer); + } + } + else + { + if (sockunion_same (&peer->su, su)) + { + find = 1; + bgp_show_peer (vty, peer); + } + } break; } } @@ -8540,35 +9454,35 @@ bgp_show_neighbor_vty (struct vty *vty, const char *name, struct bgp *bgp; union sockunion su; - if (ip_str) - { - ret = str2sockunion (ip_str, &su); - if (ret < 0) - { - vty_out (vty, "%% Malformed address: %s%s", ip_str, VTY_NEWLINE); - return CMD_WARNING; - } - } - if (name) { bgp = bgp_lookup_by_name (name); - if (! bgp) { vty_out (vty, "%% No such BGP instance exist%s", VTY_NEWLINE); return CMD_WARNING; } - - bgp_show_neighbor (vty, bgp, type, &su); - - return CMD_SUCCESS; } - - bgp = bgp_get_default (); + else + { + bgp = bgp_get_default (); + } if (bgp) - bgp_show_neighbor (vty, bgp, type, &su); + { + if (ip_str) + { + ret = str2sockunion (ip_str, &su); + if (ret < 0) + bgp_show_neighbor (vty, bgp, type, NULL, ip_str); + else + bgp_show_neighbor (vty, bgp, type, &su, NULL); + } + else + { + bgp_show_neighbor (vty, bgp, type, NULL, NULL); + } + } return CMD_SUCCESS; } @@ -8626,20 +9540,21 @@ ALIAS (show_ip_bgp_neighbors, DEFUN (show_ip_bgp_neighbors_peer, show_ip_bgp_neighbors_peer_cmd, - "show ip bgp neighbors (A.B.C.D|X:X::X:X)", + "show ip bgp neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR IP_STR BGP_STR "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") { return bgp_show_neighbor_vty (vty, NULL, show_peer, argv[argc - 1]); } ALIAS (show_ip_bgp_neighbors_peer, show_ip_bgp_ipv4_neighbors_peer_cmd, - "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X)", + "show ip bgp ipv4 (unicast|multicast) neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR IP_STR BGP_STR @@ -8648,7 +9563,8 @@ ALIAS (show_ip_bgp_neighbors_peer, "Address Family modifier\n" "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") ALIAS (show_ip_bgp_neighbors_peer, show_ip_bgp_vpnv4_all_neighbors_peer_cmd, @@ -8674,13 +9590,14 @@ ALIAS (show_ip_bgp_neighbors_peer, ALIAS (show_ip_bgp_neighbors_peer, show_bgp_ipv6_neighbors_peer_cmd, - "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X)", + "show bgp ipv6 neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR BGP_STR "Address family\n" "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") DEFUN (show_ip_bgp_instance_neighbors, show_ip_bgp_instance_neighbors_cmd, @@ -8707,7 +9624,7 @@ ALIAS (show_ip_bgp_instance_neighbors, DEFUN (show_ip_bgp_instance_neighbors_peer, show_ip_bgp_instance_neighbors_peer_cmd, - "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X)", + "show ip bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR IP_STR BGP_STR @@ -8715,7 +9632,8 @@ DEFUN (show_ip_bgp_instance_neighbors_peer, "View name\n" "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") { return bgp_show_neighbor_vty (vty, argv[0], show_peer, argv[1]); } @@ -8765,12 +9683,13 @@ DEFUN (show_bgp_neighbors, DEFUN (show_bgp_neighbors_peer, show_bgp_neighbors_peer_cmd, - "show bgp neighbors (A.B.C.D|X:X::X:X)", + "show bgp neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR BGP_STR "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") { return bgp_show_neighbor_vty (vty, NULL, show_peer, argv[argc - 1]); } @@ -8789,21 +9708,22 @@ DEFUN (show_bgp_instance_neighbors, DEFUN (show_bgp_instance_neighbors_peer, show_bgp_instance_neighbors_peer_cmd, - "show bgp view WORD neighbors (A.B.C.D|X:X::X:X)", + "show bgp view WORD neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR BGP_STR "BGP view\n" "View name\n" "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") { return bgp_show_neighbor_vty (vty, argv[0], show_peer, argv[1]); } ALIAS (show_bgp_instance_neighbors_peer, show_bgp_instance_ipv6_neighbors_peer_cmd, - "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X)", + "show bgp view WORD ipv6 neighbors (A.B.C.D|X:X::X:X|WORD)", SHOW_STR BGP_STR "BGP view\n" @@ -8811,7 +9731,8 @@ ALIAS (show_bgp_instance_neighbors_peer, "Address family\n" "Detailed information on TCP and BGP neighbor connections\n" "Neighbor to display information about\n" - "Neighbor to display information about\n") + "Neighbor to display information about\n" + "Neighbor on bgp configured interface\n") /* Show BGP's AS paths internal data. There are both `show ip bgp paths' and `show ip mbgp paths'. Those functions results are the @@ -9407,7 +10328,7 @@ DEFUN (no_bgp_redistribute_ipv4, return bgp_redistribute_unset (vty->index, AFI_IP, type); } -DEFUN (no_bgp_redistribute_ipv4_rmap, +ALIAS (no_bgp_redistribute_ipv4, no_bgp_redistribute_ipv4_rmap_cmd, "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " route-map WORD", NO_STR @@ -9415,21 +10336,8 @@ DEFUN (no_bgp_redistribute_ipv4_rmap, QUAGGA_IP_REDIST_HELP_STR_BGPD "Route map reference\n" "Pointer to route-map entries\n") -{ - int type; - - type = proto_redistnum (AFI_IP, argv[0]); - if (type < 0 || type == ZEBRA_ROUTE_BGP) - { - vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE); - return CMD_WARNING; - } - - bgp_redistribute_routemap_unset (vty->index, AFI_IP, type); - return CMD_SUCCESS; -} -DEFUN (no_bgp_redistribute_ipv4_metric, +ALIAS (no_bgp_redistribute_ipv4, no_bgp_redistribute_ipv4_metric_cmd, "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " metric <0-4294967295>", NO_STR @@ -9437,21 +10345,8 @@ DEFUN (no_bgp_redistribute_ipv4_metric, QUAGGA_IP_REDIST_HELP_STR_BGPD "Metric for redistributed routes\n" "Default metric\n") -{ - int type; - type = proto_redistnum (AFI_IP, argv[0]); - if (type < 0 || type == ZEBRA_ROUTE_BGP) - { - vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE); - return CMD_WARNING; - } - - bgp_redistribute_metric_unset (vty->index, AFI_IP, type); - return CMD_SUCCESS; -} - -DEFUN (no_bgp_redistribute_ipv4_rmap_metric, +ALIAS (no_bgp_redistribute_ipv4, no_bgp_redistribute_ipv4_rmap_metric_cmd, "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>", NO_STR @@ -9461,22 +10356,8 @@ DEFUN (no_bgp_redistribute_ipv4_rmap_metric, "Pointer to route-map entries\n" "Metric for redistributed routes\n" "Default metric\n") -{ - int type; - type = proto_redistnum (AFI_IP, argv[0]); - if (type < 0 || type == ZEBRA_ROUTE_BGP) - { - vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE); - return CMD_WARNING; - } - - bgp_redistribute_metric_unset (vty->index, AFI_IP, type); - bgp_redistribute_routemap_unset (vty->index, AFI_IP, type); - return CMD_SUCCESS; -} - -ALIAS (no_bgp_redistribute_ipv4_rmap_metric, +ALIAS (no_bgp_redistribute_ipv4, no_bgp_redistribute_ipv4_metric_rmap_cmd, "no redistribute " QUAGGA_IP_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD", NO_STR @@ -9620,7 +10501,7 @@ DEFUN (no_bgp_redistribute_ipv6, return bgp_redistribute_unset (vty->index, AFI_IP6, type); } -DEFUN (no_bgp_redistribute_ipv6_rmap, +ALIAS (no_bgp_redistribute_ipv6, no_bgp_redistribute_ipv6_rmap_cmd, "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " route-map WORD", NO_STR @@ -9628,21 +10509,8 @@ DEFUN (no_bgp_redistribute_ipv6_rmap, QUAGGA_IP6_REDIST_HELP_STR_BGPD "Route map reference\n" "Pointer to route-map entries\n") -{ - int type; - type = proto_redistnum (AFI_IP6, argv[0]); - if (type < 0 || type == ZEBRA_ROUTE_BGP) - { - vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE); - return CMD_WARNING; - } - - bgp_redistribute_routemap_unset (vty->index, AFI_IP6, type); - return CMD_SUCCESS; -} - -DEFUN (no_bgp_redistribute_ipv6_metric, +ALIAS (no_bgp_redistribute_ipv6, no_bgp_redistribute_ipv6_metric_cmd, "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " metric <0-4294967295>", NO_STR @@ -9650,21 +10518,8 @@ DEFUN (no_bgp_redistribute_ipv6_metric, QUAGGA_IP6_REDIST_HELP_STR_BGPD "Metric for redistributed routes\n" "Default metric\n") -{ - int type; - - type = proto_redistnum (AFI_IP6, argv[0]); - if (type < 0 || type == ZEBRA_ROUTE_BGP) - { - vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE); - return CMD_WARNING; - } - bgp_redistribute_metric_unset (vty->index, AFI_IP6, type); - return CMD_SUCCESS; -} - -DEFUN (no_bgp_redistribute_ipv6_rmap_metric, +ALIAS (no_bgp_redistribute_ipv6, no_bgp_redistribute_ipv6_rmap_metric_cmd, "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " route-map WORD metric <0-4294967295>", NO_STR @@ -9674,22 +10529,8 @@ DEFUN (no_bgp_redistribute_ipv6_rmap_metric, "Pointer to route-map entries\n" "Metric for redistributed routes\n" "Default metric\n") -{ - int type; - - type = proto_redistnum (AFI_IP6, argv[0]); - if (type < 0 || type == ZEBRA_ROUTE_BGP) - { - vty_out (vty, "%% Invalid route type%s", VTY_NEWLINE); - return CMD_WARNING; - } - bgp_redistribute_metric_unset (vty->index, AFI_IP6, type); - bgp_redistribute_routemap_unset (vty->index, AFI_IP6, type); - return CMD_SUCCESS; -} - -ALIAS (no_bgp_redistribute_ipv6_rmap_metric, +ALIAS (no_bgp_redistribute_ipv6, no_bgp_redistribute_ipv6_metric_rmap_cmd, "no redistribute " QUAGGA_IP6_REDIST_STR_BGPD " metric <0-4294967295> route-map WORD", NO_STR @@ -9864,6 +10705,26 @@ bgp_vty_init (void) 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, &no_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, &no_bgp_maxmed_onstartup_period_cmd); + install_element (BGP_NODE, &bgp_maxmed_onstartup_medv_cmd); + install_element (BGP_NODE, &no_bgp_maxmed_onstartup_period_medv_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, &no_bgp_update_delay_establish_wait_cmd); + + install_element (BGP_NODE, &bgp_wpkt_quanta_cmd); + install_element (BGP_NODE, &no_bgp_wpkt_quanta_cmd); + /* "maximum-paths" commands. */ install_element (BGP_NODE, &bgp_maxpaths_cmd); install_element (BGP_NODE, &no_bgp_maxpaths_cmd); @@ -9871,18 +10732,34 @@ bgp_vty_init (void) install_element (BGP_IPV4_NODE, &bgp_maxpaths_cmd); install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_cmd); install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_arg_cmd); + install_element (BGP_IPV6_NODE, &bgp_maxpaths_cmd); + install_element (BGP_IPV6_NODE, &no_bgp_maxpaths_cmd); + install_element (BGP_IPV6_NODE, &no_bgp_maxpaths_arg_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_NODE, &no_bgp_maxpaths_ibgp_arg_cmd); + install_element (BGP_NODE, &no_bgp_maxpaths_ibgp_cluster_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_IPV4_NODE, &no_bgp_maxpaths_ibgp_cluster_cmd); install_element (BGP_IPV4_NODE, &no_bgp_maxpaths_ibgp_arg_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); + install_element (BGP_IPV6_NODE, &no_bgp_maxpaths_ibgp_arg_cmd); + install_element (BGP_IPV6_NODE, &no_bgp_maxpaths_ibgp_cluster_cmd); /* "timers bgp" commands. */ install_element (BGP_NODE, &bgp_timers_cmd); install_element (BGP_NODE, &no_bgp_timers_cmd); install_element (BGP_NODE, &no_bgp_timers_arg_cmd); + /* route-map delay-timer commands */ + 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); @@ -9951,15 +10828,21 @@ bgp_vty_init (void) install_element (BGP_NODE, &no_bgp_default_local_preference_cmd); install_element (BGP_NODE, &no_bgp_default_local_preference_val_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); + /* "neighbor remote-as" commands. */ install_element (BGP_NODE, &neighbor_remote_as_cmd); + install_element (BGP_NODE, &neighbor_interface_config_cmd); install_element (BGP_NODE, &no_neighbor_cmd); install_element (BGP_NODE, &no_neighbor_remote_as_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_peer_group_remote_as_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); @@ -10270,17 +11153,61 @@ bgp_vty_init (void) install_element (BGP_ENCAPV6_NODE, &neighbor_nexthop_self_cmd); install_element (BGP_ENCAPV6_NODE, &no_neighbor_nexthop_self_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); + /* "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_VPNV6_NODE, &neighbor_remove_private_as_cmd); @@ -10289,6 +11216,12 @@ bgp_vty_init (void) install_element (BGP_ENCAP_NODE, &no_neighbor_remove_private_as_cmd); install_element (BGP_ENCAPV6_NODE, &neighbor_remove_private_as_cmd); install_element (BGP_ENCAPV6_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); /* "neighbor send-community" commands.*/ install_element (BGP_NODE, &neighbor_send_community_cmd); @@ -10856,6 +11789,10 @@ bgp_vty_init (void) install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_cmd); install_element (ENABLE_NODE, &clear_bgp_ipv6_as_in_prefix_filter_cmd); + /* clear ip bgp prefix */ + install_element (ENABLE_NODE, &clear_ip_bgp_prefix_cmd); + install_element (ENABLE_NODE, &clear_bgp_ipv6_safi_prefix_cmd); + /* "clear ip bgp neighbor soft out" */ install_element (ENABLE_NODE, &clear_ip_bgp_all_soft_out_cmd); install_element (ENABLE_NODE, &clear_ip_bgp_instance_all_soft_out_cmd); |