[bgpd] Merge AS4 support
2007-10-14 Paul Jakma <paul.jakma@sun.com>
* NEWS: Note that MRT dumps are now version 2
* (general) Merge in Juergen Kammer's AS4 patch.
2007-09-27 Paul Jakma <paul.jakma@sun.com>
* bgp_aspath.c: (assegment_normalise) remove duplicates from
from sets.
(aspath_reconcile_as4) disregard a broken part of the RFC around
error handling in path reconciliation.
* aspath_test.c: Test dupe-weeding from sets.
Test that reconciliation merges AS_PATH and AS4_PATH where
former is shorter than latter.
2007-09-26 Paul Jakma <paul.jakma@sun.com>
* aspath_test.c: Test AS4_PATH reconcilation where length
of AS_PATH and AS4_PATH is same.
2007-09-25 Paul Jakma <paul.jakma@sun.com>
* bgp_open.c: (peek_for_as4_capability) Fix to work.
* bgp_packet.c: (bgp_open_receive) Fix sanity check of as4.
* tests/bgp_capability_test.c: (general) Extend tests to validate
peek_for_as4_capability.
Add test of full OPEN Option block, with multiple capabilities,
both as a series of Option, and a single option.
Add some crap to beginning of stream, to prevent code depending
on getp == 0.
2007-09-18 Paul Jakma <paul.jakma@sun.com>
* bgp_open.c: (bgp_capability_as4) debug printf inline with others.
(peek_for_as4_capability) There's no need to signal failure, as
failure is better dealt with through full capability parser -
just return the AS4, simpler.
* bgp_packet.c: (bgp_open_receive) Update to match
peek_for_as4_capability change.
Allow use of BGP_AS_TRANS by 2b speakers.
Use NOTIFY_OPEN_ERR rather than CEASE for OPEN parsing errors.
(bgp_capability_msg_parse) missing argument to debug print
(bgp_capability_receive) missing return values.
* tests/bgp_capability_test.c: (parse_test) update for changes to
peek_for_as4_capability
2007-07-25 Paul Jakma <paul.jakma@sun.com>
* Remove 2-byte size macros, just make existing macros take
argument to indicate which size to use.
Adjust all users - typically they want '1'.
* bgp_aspath.c: (aspath_has_as4) New, return 1 if there are any
as4's in a path.
(aspath_put) Return the number of bytes actually written, to
fix the bug Juergen noted: Splitting of segments will change
the number of bytes written from that already written to the
AS_PATH header.
(aspath_snmp_pathseg) Pass 2-byte flag to aspath_put. SNMP
is still defined as 2b.
(aspath_aggregate) fix latent bug.
(aspath_reconcile_as4) AS_PATH+NEW_AS_PATH reconciliation
function.
(aspath_key_make) Hash the AS_PATH string, rather than
just taking the addition of assegment ASes as the hash value,
hopefully sligthly more collision resistant.
(bgp_attr_munge_as4_attrs) Collide the NEW_ attributes
together with the OLD 2-byte forms, code Juergen
had in bgp_attr_parse but re-organised a bit.
(bgp_attr_parse) Bunch of code from Juergen moves
to previous function.
(bgp_packet_attribute) Compact significantly by
just /always/ using extended-length attr header.
Fix bug Juergen noted, by using aspath_put's
(new) returned size value for the attr header rather
than the (guesstimate) of aspath_size() - the two could
differ when aspath_put had to split large segments, unlikely
this bug was ever hit in the 'wild'.
(bgp_dump_routes_attr) Always use extended-len and
use aspath_put return for header length. Output 4b ASN
for AS_PATH and AGGREGATOR.
* bgp_ecommunity.c: (ecommunity_{hash_make,cmp}) fix
hash callback declarations to match prototypes.
(ecommunity_gettoken) Updated for ECOMMUNITY_ENCODE_AS4,
complete rewrite of Juergen's changes (no asdot support)
* bgp_open.c: (bgp_capability_as4) New, does what it says
on the tin.
(peek_for_as4_capability) Rewritten to use streams and
bgp_capability_as4.
* bgp_packet.c: (bgp_open_send) minor edit
checked (in the abstract at least) with Juergen.
Changes are to be more accepting, e.g, allow AS_TRANS on
a 2-byte session.
* (general) Update all commands to use CMD_AS_RANGE.
* bgp_vty.c: (bgp_clear) Fix return vals to use CMD_..
Remove stuff replicated by VTY_GET_LONG
(bgp_clear_vty) Return bgp_clear directly to vty.
* tests/aspath_test.c: Exercise 32bit parsing. Test reconcile
function.
* tests/ecommunity_test.c: New, test AS4 ecommunity changes,
positive test only at this time, error cases not tested yet.
2007-07-25 Juergen Kammer <j.kammer@eurodata.de>
* (general) AS4 support.
* bgpd.h: as_t changes to 4-bytes.
* bgp_aspath.h: Add BGP_AS4_MAX and BGP_AS_TRANS defines.
* bgp_aspath.c: AS_VALUE_SIZE becomes 4-byte, AS16_VALUE_SIZE
added for 2-byte.
Add AS16 versions of length calc macros.
(aspath_count_numas) New, count number of ASes.
(aspath_has_as4) New, return 1 if there are any as4's in a
path.
(assegments_parse) Interpret assegment as 4 or 2 byte,
according to how the caller instructs us, with a new
argument.
(aspath_parse) Add use32bit argument to pass to
assegments_parse. Adjust all its callers to pass 1, unless
otherwise noted.
(assegment_data_put) Adjust to be able to write 2 or 4 byte
AS, according to new use32bit argument.
(aspath_put) Adjust to write 2 or 4.
(aspath_gettoken) Use a long for passed in asno.
* bgp_attr.c: (attr_str) Add BGP_ATTR_AS4_PATH and
BGP_ATTR_AS4_AGGREGATOR.
(bgp_attr_aspath) Call aspath_parse with right 2/4 arg, as
determined by received-capability flag.
(bgp_attr_aspath_check) New, code previously in attr_aspath
but moved to new func so it can be run after NEW_AS_PATH
reconciliation.
(bgp_attr_as4_path) New, handle NEW_AS_PATH.
(bgp_attr_aggregator) Adjust to cope with 2/4 byte ASes.
(bgp_attr_as4_aggregator) New, read NEW_AGGREGATOR.
(bgp_attr_parse) Add handoffs to previous parsers for the two
new AS4 NEW_ attributes.
Various checks added for NEW/OLD reconciliation.
(bgp_packet_attribute) Support 2/4 for AS_PATH and
AGGREGATOR, detect when NEW_ attrs need to be sent.
* bgp_debug.{c,h}: Add 'debug bgp as4'.
* bgp_dump.c: MRTv2 support, unconditionally enabled, which
supports AS4. Based on patches from Erik (RIPE?).
* bgp_ecommunity.c: (ecommunity_ecom2str) ECOMMUNITY_ENCODE_AS4
support.
* bgp_open.c: (peek_for_as4_capability) New, peek for AS4
capability prior to full capability parsing, so we know which
ASN to use for struct peer lookup.
(bgp_open_capability) Always send AS4 capability.
* bgp_packet.c: (bgp_open_send) AS4 handling for AS field
(bgp_open_receive) Peek for AS4 capability first, and figure
out which AS to believe.
* bgp_vty.c: (bgp_show_peer) Print AS4 cap
* tests/aspath_test.c: Support asn32 changes, call aspath_parse
with 16 bit.
* vtysh/extract.pl: AS4 compatibility for router bgp ASNUMBER
* vtysh/extract.pl.in: AS4 compatibility for router bgp ASNUMBER
* vtysh/vtysh.c: AS4 compatibility for router bgp ASNUMBER
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 3eeb5f9..927e99a 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -308,7 +308,7 @@
/* "router bgp" commands. */
DEFUN (router_bgp,
router_bgp_cmd,
- "router bgp <1-65535>",
+ "router bgp CMD_AS_RANGE",
ROUTER_STR
BGP_STR
AS_STR)
@@ -318,7 +318,7 @@
struct bgp *bgp;
const char *name = NULL;
- VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, 65535);
+ VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
if (argc == 2)
name = argv[1];
@@ -348,7 +348,7 @@
ALIAS (router_bgp,
router_bgp_view_cmd,
- "router bgp <1-65535> view WORD",
+ "router bgp CMD_AS_RANGE view WORD",
ROUTER_STR
BGP_STR
AS_STR
@@ -358,7 +358,7 @@
/* "no router bgp" commands. */
DEFUN (no_router_bgp,
no_router_bgp_cmd,
- "no router bgp <1-65535>",
+ "no router bgp CMD_AS_RANGE",
NO_STR
ROUTER_STR
BGP_STR
@@ -368,7 +368,7 @@
struct bgp *bgp;
const char *name = NULL;
- VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, 65535);
+ VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
if (argc == 2)
name = argv[1];
@@ -388,7 +388,7 @@
ALIAS (no_router_bgp,
no_router_bgp_view_cmd,
- "no router bgp <1-65535> view WORD",
+ "no router bgp CMD_AS_RANGE view WORD",
NO_STR
ROUTER_STR
BGP_STR
@@ -539,7 +539,7 @@
DEFUN (bgp_confederation_identifier,
bgp_confederation_identifier_cmd,
- "bgp confederation identifier <1-65535>",
+ "bgp confederation identifier CMD_AS_RANGE",
"BGP specific commands\n"
"AS confederation parameters\n"
"AS number\n"
@@ -550,7 +550,7 @@
bgp = vty->index;
- VTY_GET_INTEGER ("AS", as, argv[0]);
+ VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
bgp_confederation_id_set (bgp, as);
@@ -571,7 +571,7 @@
bgp = vty->index;
if (argc == 1)
- VTY_GET_INTEGER ("AS", as, argv[0]);
+ VTY_GET_INTEGER_RANGE ("AS", as, argv[0], 1, BGP_AS4_MAX);
bgp_confederation_id_unset (bgp);
@@ -580,7 +580,7 @@
ALIAS (no_bgp_confederation_identifier,
no_bgp_confederation_identifier_arg_cmd,
- "no bgp confederation identifier <1-65535>",
+ "no bgp confederation identifier CMD_AS_RANGE",
NO_STR
"BGP specific commands\n"
"AS confederation parameters\n"
@@ -589,7 +589,7 @@
DEFUN (bgp_confederation_peers,
bgp_confederation_peers_cmd,
- "bgp confederation peers .<1-65535>",
+ "bgp confederation peers .CMD_AS_RANGE",
"BGP specific commands\n"
"AS confederation parameters\n"
"Peer ASs in BGP confederation\n"
@@ -603,7 +603,7 @@
for (i = 0; i < argc; i++)
{
- VTY_GET_INTEGER_RANGE ("AS", as, argv[i], 1, 65535);
+ VTY_GET_INTEGER_RANGE ("AS", as, argv[i], 1, BGP_AS4_MAX);
if (bgp->as == as)
{
@@ -619,7 +619,7 @@
DEFUN (no_bgp_confederation_peers,
no_bgp_confederation_peers_cmd,
- "no bgp confederation peers .<1-65535>",
+ "no bgp confederation peers .CMD_AS_RANGE",
NO_STR
"BGP specific commands\n"
"AS confederation parameters\n"
@@ -634,8 +634,8 @@
for (i = 0; i < argc; i++)
{
- VTY_GET_INTEGER_RANGE ("AS", as, argv[i], 1, 65535);
-
+ VTY_GET_INTEGER_RANGE ("AS", as, argv[i], 1, BGP_AS4_MAX);
+
bgp_confederation_peers_remove (bgp, as);
}
return CMD_SUCCESS;
@@ -1249,7 +1249,7 @@
bgp = vty->index;
/* Get AS number. */
- VTY_GET_INTEGER_RANGE ("AS", as, as_str, 1, 65535);
+ VTY_GET_INTEGER_RANGE ("AS", as, as_str, 1, BGP_AS4_MAX);
/* If peer is peer group, call proper function. */
ret = str2sockunion (peer_str, &su);
@@ -1288,7 +1288,7 @@
DEFUN (neighbor_remote_as,
neighbor_remote_as_cmd,
- NEIGHBOR_CMD2 "remote-as <1-65535>",
+ NEIGHBOR_CMD2 "remote-as CMD_AS_RANGE",
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"Specify a BGP neighbor\n"
@@ -1352,7 +1352,7 @@
ALIAS (no_neighbor,
no_neighbor_remote_as_cmd,
- NO_NEIGHBOR_CMD "remote-as <1-65535>",
+ NO_NEIGHBOR_CMD "remote-as CMD_AS_RANGE",
NO_STR
NEIGHBOR_STR
NEIGHBOR_ADDR_STR
@@ -1382,7 +1382,7 @@
DEFUN (no_neighbor_peer_group_remote_as,
no_neighbor_peer_group_remote_as_cmd,
- "no neighbor WORD remote-as <1-65535>",
+ "no neighbor WORD remote-as CMD_AS_RANGE",
NO_STR
NEIGHBOR_STR
"Neighbor tag\n"
@@ -1404,7 +1404,7 @@
DEFUN (neighbor_local_as,
neighbor_local_as_cmd,
- NEIGHBOR_CMD2 "local-as <1-65535>",
+ NEIGHBOR_CMD2 "local-as CMD_AS_RANGE",
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"Specify a local-as number\n"
@@ -1423,7 +1423,7 @@
DEFUN (neighbor_local_as_no_prepend,
neighbor_local_as_no_prepend_cmd,
- NEIGHBOR_CMD2 "local-as <1-65535> no-prepend",
+ NEIGHBOR_CMD2 "local-as CMD_AS_RANGE no-prepend",
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
"Specify a local-as number\n"
@@ -1462,7 +1462,7 @@
ALIAS (no_neighbor_local_as,
no_neighbor_local_as_val_cmd,
- NO_NEIGHBOR_CMD2 "local-as <1-65535>",
+ NO_NEIGHBOR_CMD2 "local-as CMD_AS_RANGE",
NO_STR
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
@@ -1471,7 +1471,7 @@
ALIAS (no_neighbor_local_as,
no_neighbor_local_as_val2_cmd,
- NO_NEIGHBOR_CMD2 "local-as <1-65535> no-prepend",
+ NO_NEIGHBOR_CMD2 "local-as CMD_AS_RANGE no-prepend",
NO_STR
NEIGHBOR_STR
NEIGHBOR_ADDR_STR2
@@ -4037,7 +4037,7 @@
if (ret < 0)
bgp_clear_vty_error (vty, peer, afi, safi, ret);
}
- return 0;
+ return CMD_SUCCESS;
}
/* Clear specified neighbors. */
@@ -4051,13 +4051,13 @@
if (ret < 0)
{
vty_out (vty, "Malformed address: %s%s", arg, VTY_NEWLINE);
- return -1;
+ return CMD_WARNING;
}
peer = peer_lookup (bgp, &su);
if (! peer)
{
vty_out (vty, "%%BGP: Unknown neighbor - \"%s\"%s", arg, VTY_NEWLINE);
- return -1;
+ return CMD_WARNING;
}
if (stype == BGP_CLEAR_SOFT_NONE)
@@ -4068,7 +4068,7 @@
if (ret < 0)
bgp_clear_vty_error (vty, peer, afi, safi, ret);
- return 0;
+ return CMD_SUCCESS;
}
/* Clear all peer-group members. */
@@ -4080,7 +4080,7 @@
if (! group)
{
vty_out (vty, "%%BGP: No such peer-group %s%s", arg, VTY_NEWLINE);
- return -1;
+ return CMD_WARNING;
}
for (ALL_LIST_ELEMENTS (group->peer, node, nnode, peer))
@@ -4099,7 +4099,7 @@
if (ret < 0)
bgp_clear_vty_error (vty, peer, afi, safi, ret);
}
- return 0;
+ return CMD_SUCCESS;
}
if (sort == clear_external)
@@ -4117,22 +4117,21 @@
if (ret < 0)
bgp_clear_vty_error (vty, peer, afi, safi, ret);
}
- return 0;
+ return CMD_SUCCESS;
}
if (sort == clear_as)
{
as_t as;
unsigned long as_ul;
- char *endptr = NULL;
int find = 0;
- as_ul = strtoul(arg, &endptr, 10);
-
- if ((as_ul == ULONG_MAX) || (*endptr != '\0') || (as_ul > USHRT_MAX))
+ VTY_GET_LONG ("AS", as_ul, arg);
+
+ if (!as_ul)
{
vty_out (vty, "Invalid AS number%s", VTY_NEWLINE);
- return -1;
+ return CMD_WARNING;
}
as = (as_t) as_ul;
@@ -4153,10 +4152,10 @@
if (! find)
vty_out (vty, "%%BGP: No peer is configured with AS %s%s", arg,
VTY_NEWLINE);
- return 0;
+ return CMD_SUCCESS;
}
- return 0;
+ return CMD_SUCCESS;
}
static int
@@ -4164,7 +4163,6 @@
enum clear_sort sort, enum bgp_clear_type stype,
const char *arg)
{
- int ret;
struct bgp *bgp;
/* BGP structure lookup. */
@@ -4187,11 +4185,7 @@
}
}
- ret = bgp_clear (vty, bgp, afi, safi, sort, stype, arg);
- if (ret < 0)
- return CMD_WARNING;
-
- return CMD_SUCCESS;
+ return bgp_clear (vty, bgp, afi, safi, sort, stype, arg);
}
DEFUN (clear_ip_bgp_all,
@@ -4328,7 +4322,7 @@
DEFUN (clear_ip_bgp_as,
clear_ip_bgp_as_cmd,
- "clear ip bgp <1-65535>",
+ "clear ip bgp CMD_AS_RANGE",
CLEAR_STR
IP_STR
BGP_STR
@@ -4339,14 +4333,14 @@
ALIAS (clear_ip_bgp_as,
clear_bgp_as_cmd,
- "clear bgp <1-65535>",
+ "clear bgp CMD_AS_RANGE",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n")
ALIAS (clear_ip_bgp_as,
clear_bgp_ipv6_as_cmd,
- "clear bgp ipv6 <1-65535>",
+ "clear bgp ipv6 CMD_AS_RANGE",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -4858,7 +4852,7 @@
DEFUN (clear_ip_bgp_as_soft_out,
clear_ip_bgp_as_soft_out_cmd,
- "clear ip bgp <1-65535> soft out",
+ "clear ip bgp CMD_AS_RANGE soft out",
CLEAR_STR
IP_STR
BGP_STR
@@ -4872,7 +4866,7 @@
ALIAS (clear_ip_bgp_as_soft_out,
clear_ip_bgp_as_out_cmd,
- "clear ip bgp <1-65535> out",
+ "clear ip bgp CMD_AS_RANGE out",
CLEAR_STR
IP_STR
BGP_STR
@@ -4881,7 +4875,7 @@
DEFUN (clear_ip_bgp_as_ipv4_soft_out,
clear_ip_bgp_as_ipv4_soft_out_cmd,
- "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft out",
+ "clear ip bgp CMD_AS_RANGE ipv4 (unicast|multicast) soft out",
CLEAR_STR
IP_STR
BGP_STR
@@ -4902,7 +4896,7 @@
ALIAS (clear_ip_bgp_as_ipv4_soft_out,
clear_ip_bgp_as_ipv4_out_cmd,
- "clear ip bgp <1-65535> ipv4 (unicast|multicast) out",
+ "clear ip bgp CMD_AS_RANGE ipv4 (unicast|multicast) out",
CLEAR_STR
IP_STR
BGP_STR
@@ -4914,7 +4908,7 @@
DEFUN (clear_ip_bgp_as_vpnv4_soft_out,
clear_ip_bgp_as_vpnv4_soft_out_cmd,
- "clear ip bgp <1-65535> vpnv4 unicast soft out",
+ "clear ip bgp CMD_AS_RANGE vpnv4 unicast soft out",
CLEAR_STR
IP_STR
BGP_STR
@@ -4930,7 +4924,7 @@
ALIAS (clear_ip_bgp_as_vpnv4_soft_out,
clear_ip_bgp_as_vpnv4_out_cmd,
- "clear ip bgp <1-65535> vpnv4 unicast out",
+ "clear ip bgp CMD_AS_RANGE vpnv4 unicast out",
CLEAR_STR
IP_STR
BGP_STR
@@ -4941,7 +4935,7 @@
DEFUN (clear_bgp_as_soft_out,
clear_bgp_as_soft_out_cmd,
- "clear bgp <1-65535> soft out",
+ "clear bgp CMD_AS_RANGE soft out",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n"
@@ -4954,7 +4948,7 @@
ALIAS (clear_bgp_as_soft_out,
clear_bgp_ipv6_as_soft_out_cmd,
- "clear bgp ipv6 <1-65535> soft out",
+ "clear bgp ipv6 CMD_AS_RANGE soft out",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -4964,7 +4958,7 @@
ALIAS (clear_bgp_as_soft_out,
clear_bgp_as_out_cmd,
- "clear bgp <1-65535> out",
+ "clear bgp CMD_AS_RANGE out",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n"
@@ -4972,7 +4966,7 @@
ALIAS (clear_bgp_as_soft_out,
clear_bgp_ipv6_as_out_cmd,
- "clear bgp ipv6 <1-65535> out",
+ "clear bgp ipv6 CMD_AS_RANGE out",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -5762,7 +5756,7 @@
DEFUN (clear_ip_bgp_as_soft_in,
clear_ip_bgp_as_soft_in_cmd,
- "clear ip bgp <1-65535> soft in",
+ "clear ip bgp CMD_AS_RANGE soft in",
CLEAR_STR
IP_STR
BGP_STR
@@ -5776,7 +5770,7 @@
ALIAS (clear_ip_bgp_as_soft_in,
clear_ip_bgp_as_in_cmd,
- "clear ip bgp <1-65535> in",
+ "clear ip bgp CMD_AS_RANGE in",
CLEAR_STR
IP_STR
BGP_STR
@@ -5785,7 +5779,7 @@
DEFUN (clear_ip_bgp_as_in_prefix_filter,
clear_ip_bgp_as_in_prefix_filter_cmd,
- "clear ip bgp <1-65535> in prefix-filter",
+ "clear ip bgp CMD_AS_RANGE in prefix-filter",
CLEAR_STR
IP_STR
BGP_STR
@@ -5799,7 +5793,7 @@
DEFUN (clear_ip_bgp_as_ipv4_soft_in,
clear_ip_bgp_as_ipv4_soft_in_cmd,
- "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft in",
+ "clear ip bgp CMD_AS_RANGE ipv4 (unicast|multicast) soft in",
CLEAR_STR
IP_STR
BGP_STR
@@ -5820,7 +5814,7 @@
ALIAS (clear_ip_bgp_as_ipv4_soft_in,
clear_ip_bgp_as_ipv4_in_cmd,
- "clear ip bgp <1-65535> ipv4 (unicast|multicast) in",
+ "clear ip bgp CMD_AS_RANGE ipv4 (unicast|multicast) in",
CLEAR_STR
IP_STR
BGP_STR
@@ -5832,7 +5826,7 @@
DEFUN (clear_ip_bgp_as_ipv4_in_prefix_filter,
clear_ip_bgp_as_ipv4_in_prefix_filter_cmd,
- "clear ip bgp <1-65535> ipv4 (unicast|multicast) in prefix-filter",
+ "clear ip bgp CMD_AS_RANGE ipv4 (unicast|multicast) in prefix-filter",
CLEAR_STR
IP_STR
BGP_STR
@@ -5853,7 +5847,7 @@
DEFUN (clear_ip_bgp_as_vpnv4_soft_in,
clear_ip_bgp_as_vpnv4_soft_in_cmd,
- "clear ip bgp <1-65535> vpnv4 unicast soft in",
+ "clear ip bgp CMD_AS_RANGE vpnv4 unicast soft in",
CLEAR_STR
IP_STR
BGP_STR
@@ -5869,7 +5863,7 @@
ALIAS (clear_ip_bgp_as_vpnv4_soft_in,
clear_ip_bgp_as_vpnv4_in_cmd,
- "clear ip bgp <1-65535> vpnv4 unicast in",
+ "clear ip bgp CMD_AS_RANGE vpnv4 unicast in",
CLEAR_STR
IP_STR
BGP_STR
@@ -5880,7 +5874,7 @@
DEFUN (clear_bgp_as_soft_in,
clear_bgp_as_soft_in_cmd,
- "clear bgp <1-65535> soft in",
+ "clear bgp CMD_AS_RANGE soft in",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n"
@@ -5893,7 +5887,7 @@
ALIAS (clear_bgp_as_soft_in,
clear_bgp_ipv6_as_soft_in_cmd,
- "clear bgp ipv6 <1-65535> soft in",
+ "clear bgp ipv6 CMD_AS_RANGE soft in",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -5903,7 +5897,7 @@
ALIAS (clear_bgp_as_soft_in,
clear_bgp_as_in_cmd,
- "clear bgp <1-65535> in",
+ "clear bgp CMD_AS_RANGE in",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n"
@@ -5911,7 +5905,7 @@
ALIAS (clear_bgp_as_soft_in,
clear_bgp_ipv6_as_in_cmd,
- "clear bgp ipv6 <1-65535> in",
+ "clear bgp ipv6 CMD_AS_RANGE in",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -5920,7 +5914,7 @@
DEFUN (clear_bgp_as_in_prefix_filter,
clear_bgp_as_in_prefix_filter_cmd,
- "clear bgp <1-65535> in prefix-filter",
+ "clear bgp CMD_AS_RANGE in prefix-filter",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n"
@@ -5933,7 +5927,7 @@
ALIAS (clear_bgp_as_in_prefix_filter,
clear_bgp_ipv6_as_in_prefix_filter_cmd,
- "clear bgp ipv6 <1-65535> in prefix-filter",
+ "clear bgp ipv6 CMD_AS_RANGE in prefix-filter",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -6248,7 +6242,7 @@
DEFUN (clear_ip_bgp_as_soft,
clear_ip_bgp_as_soft_cmd,
- "clear ip bgp <1-65535> soft",
+ "clear ip bgp CMD_AS_RANGE soft",
CLEAR_STR
IP_STR
BGP_STR
@@ -6261,7 +6255,7 @@
DEFUN (clear_ip_bgp_as_ipv4_soft,
clear_ip_bgp_as_ipv4_soft_cmd,
- "clear ip bgp <1-65535> ipv4 (unicast|multicast) soft",
+ "clear ip bgp CMD_AS_RANGE ipv4 (unicast|multicast) soft",
CLEAR_STR
IP_STR
BGP_STR
@@ -6281,7 +6275,7 @@
DEFUN (clear_ip_bgp_as_vpnv4_soft,
clear_ip_bgp_as_vpnv4_soft_cmd,
- "clear ip bgp <1-65535> vpnv4 unicast soft",
+ "clear ip bgp CMD_AS_RANGE vpnv4 unicast soft",
CLEAR_STR
IP_STR
BGP_STR
@@ -6296,7 +6290,7 @@
DEFUN (clear_bgp_as_soft,
clear_bgp_as_soft_cmd,
- "clear bgp <1-65535> soft",
+ "clear bgp CMD_AS_RANGE soft",
CLEAR_STR
BGP_STR
"Clear peers with the AS number\n"
@@ -6308,7 +6302,7 @@
ALIAS (clear_bgp_as_soft,
clear_bgp_ipv6_as_soft_cmd,
- "clear bgp ipv6 <1-65535> soft",
+ "clear bgp ipv6 CMD_AS_RANGE soft",
CLEAR_STR
BGP_STR
"Address family\n"
@@ -6688,7 +6682,7 @@
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, (unsigned long) peer->obuf->count);
vty_out (vty, "%8s",
peer_uptime (peer->uptime, timebuf, BGP_UPTIME_LEN));
@@ -7271,6 +7265,18 @@
{
vty_out (vty, " Neighbor capabilities:%s", VTY_NEWLINE);
+ /* AS4 */
+ if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV)
+ || CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
+ {
+ vty_out (vty, " 4 Byte AS:");
+ if (CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV))
+ vty_out (vty, " advertised");
+ if (CHECK_FLAG (p->cap, PEER_CAP_AS4_RCV))
+ vty_out (vty, " %sreceived",
+ CHECK_FLAG (p->cap, PEER_CAP_AS4_ADV) ? "and " : "");
+ vty_out (vty, "%s", VTY_NEWLINE);
+ }
/* Dynamic */
if (CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_RCV)
|| CHECK_FLAG (p->cap, PEER_CAP_DYNAMIC_ADV))
@@ -7389,21 +7395,18 @@
}
if (p->t_gr_restart)
- {
- vty_out (vty, " The remaining time of restart timer is %ld%s",
- thread_timer_remain_second (p->t_gr_restart), VTY_NEWLINE);
- }
+ vty_out (vty, " The remaining time of restart timer is %ld%s",
+ thread_timer_remain_second (p->t_gr_restart), VTY_NEWLINE);
+
if (p->t_gr_stale)
- {
- vty_out (vty, " The remaining time of stalepath timer is %ld%s",
- thread_timer_remain_second (p->t_gr_stale), VTY_NEWLINE);
- }
+ vty_out (vty, " The remaining time of stalepath timer is %ld%s",
+ thread_timer_remain_second (p->t_gr_stale), VTY_NEWLINE);
}
/* Packet counts. */
vty_out (vty, " Message statistics:%s", VTY_NEWLINE);
vty_out (vty, " Inq depth is 0%s", VTY_NEWLINE);
- vty_out (vty, " Outq depth is %lu%s", (unsigned long)p->obuf->count, VTY_NEWLINE);
+ vty_out (vty, " Outq depth is %lu%s", (unsigned long) p->obuf->count, VTY_NEWLINE);
vty_out (vty, " Sent Rcvd%s", VTY_NEWLINE);
vty_out (vty, " Opens: %10d %10d%s", p->open_out, p->open_in, VTY_NEWLINE);
vty_out (vty, " Notifications: %10d %10d%s", p->notify_out, p->notify_in, VTY_NEWLINE);
@@ -7907,7 +7910,7 @@
vty_out (vty, "4 ");
- vty_out (vty, "%5d ", rsclient->as);
+ vty_out (vty, "%11d ", rsclient->as);
rmname = ROUTE_MAP_EXPORT_NAME(&rsclient->filter[afi][safi]);
if ( rmname && strlen (rmname) > 13 )