bestpath_per_as_used = 0;
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX;
- safi++)
- if (CHECK_FLAG(
- peer->af_flags[afi][safi],
- PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
- bestpath_per_as_used = 1;
- break;
- }
+ FOREACH_AFI_SAFI (afi, safi)
+ if (CHECK_FLAG(
+ peer->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
+ bestpath_per_as_used = 1;
+ break;
+ }
if (bestpath_per_as_used)
break;
int idx = 0;
/* [<view|vrf> VIEWVRFNAME] */
- if (argv_find(argv, argc, "WORD", &idx))
+ if (argv_find(argv, argc, "VIEWVRFNAME", &idx))
vrf = argv[idx]->arg;
prefix = argv[argc - 1]->arg;
json_add = json_object_new_object();
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
- json_object *json_sub =
- NULL;
- json_sub =
- json_object_new_object();
- print_store =
- afi_safi_print(
- afi,
- safi);
+ FOREACH_AFI_SAFI (afi, safi) {
+ json_object *json_sub = NULL;
+ json_sub =
+ json_object_new_object();
+ print_store = afi_safi_print(
+ afi, safi);
+ if (CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV)) {
if (CHECK_FLAG(
p->af_cap
[afi]
[safi],
PEER_CAP_ADDPATH_AF_TX_ADV)
- || CHECK_FLAG(
+ && CHECK_FLAG(
p->af_cap
[afi]
[safi],
- PEER_CAP_ADDPATH_AF_TX_RCV)) {
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_ADV)
- && CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_RCV))
- json_object_boolean_true_add(
- json_sub,
- "txAdvertisedAndReceived");
- else if (
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_ADV))
- json_object_boolean_true_add(
- json_sub,
- "txAdvertised");
- else if (
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_RCV))
- json_object_boolean_true_add(
- json_sub,
- "txReceived");
- }
+ PEER_CAP_ADDPATH_AF_TX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "txAdvertisedAndReceived");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV))
+ json_object_boolean_true_add(
+ json_sub,
+ "txAdvertised");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "txReceived");
+ }
+ if (CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV)) {
if (CHECK_FLAG(
p->af_cap
[afi]
[safi],
PEER_CAP_ADDPATH_AF_RX_ADV)
- || CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_RCV)) {
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_ADV)
- && CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_RCV))
- json_object_boolean_true_add(
- json_sub,
- "rxAdvertisedAndReceived");
- else if (
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_ADV))
- json_object_boolean_true_add(
- json_sub,
- "rxAdvertised");
- else if (
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_RCV))
- json_object_boolean_true_add(
- json_sub,
- "rxReceived");
- }
-
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_ADV)
- || CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_RCV)
- || CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_ADV)
- || CHECK_FLAG(
+ && CHECK_FLAG(
p->af_cap
[afi]
[safi],
PEER_CAP_ADDPATH_AF_RX_RCV))
- json_object_object_add(
- json_add,
- print_store,
- json_sub);
- else
- json_object_free(
- json_sub);
+ json_object_boolean_true_add(
+ json_sub,
+ "rxAdvertisedAndReceived");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV))
+ json_object_boolean_true_add(
+ json_sub,
+ "rxAdvertised");
+ else if (
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "rxReceived");
}
+ if (CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
+ json_object_object_add(
+ json_add,
+ print_store,
+ json_sub);
+ else
+ json_object_free(
+ json_sub);
+ }
+
json_object_object_add(
json_cap, "addPath", json_add);
}
json_object *json_multi = NULL;
json_multi = json_object_new_object();
- for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (p->afc_adv[afi][safi]
+ || p->afc_recv[afi][safi]) {
+ json_object *json_exten = NULL;
+ json_exten =
+ json_object_new_object();
+
if (p->afc_adv[afi][safi]
- || p->afc_recv[afi][safi]) {
- json_object
- *json_exten =
- NULL;
- json_exten =
- json_object_new_object();
-
- if (p->afc_adv[afi]
- [safi]
- && p->afc_recv
- [afi]
- [safi])
- json_object_boolean_true_add(
- json_exten,
- "advertisedAndReceived");
- else if (p->afc_adv
- [afi]
- [safi])
- json_object_boolean_true_add(
- json_exten,
- "advertised");
- else if (p->afc_recv
- [afi]
- [safi])
- json_object_boolean_true_add(
- json_exten,
- "received");
+ && p->afc_recv[afi][safi])
+ json_object_boolean_true_add(
+ json_exten,
+ "advertisedAndReceived");
+ else if (p->afc_adv[afi][safi])
+ json_object_boolean_true_add(
+ json_exten,
+ "advertised");
+ else if (p->afc_recv[afi][safi])
+ json_object_boolean_true_add(
+ json_exten,
+ "received");
- json_object_object_add(
- json_multi,
- afi_safi_print(
- afi,
- safi),
- json_exten);
- }
+ json_object_object_add(
+ json_multi,
+ afi_safi_print(afi,
+ safi),
+ json_exten);
}
}
json_object_object_add(
"gracefulRestartRemoteTimerMsecs",
p->v_gr_restart * 1000);
- for (afi = AFI_IP;
- afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX;
- safi++) {
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_RCV)) {
+ json_object *
+ json_sub =
+ NULL;
+ json_sub =
+ json_object_new_object();
+
if (CHECK_FLAG(
p->af_cap
[afi]
[safi],
- PEER_CAP_RESTART_AF_RCV)) {
- json_object *json_sub =
- NULL;
- json_sub =
- json_object_new_object();
-
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_RESTART_AF_PRESERVE_RCV))
- json_object_boolean_true_add(
- json_sub,
- "preserved");
- restart_af_count++;
- json_object_object_add(
- json_restart,
- afi_safi_print(
- afi,
- safi),
- json_sub);
- }
+ PEER_CAP_RESTART_AF_PRESERVE_RCV))
+ json_object_boolean_true_add(
+ json_sub,
+ "preserved");
+ restart_af_count++;
+ json_object_object_add(
+ json_restart,
+ afi_safi_print(
+ afi,
+ safi),
+ json_sub);
}
}
if (!restart_af_count) {
PEER_CAP_ADDPATH_ADV)) {
vty_out(vty, " AddPath:\n");
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV)) {
+ vty_out(vty,
+ " %s: TX ",
+ afi_safi_print(
+ afi,
+ safi));
+
if (CHECK_FLAG(
p->af_cap
[afi]
[safi],
- PEER_CAP_ADDPATH_AF_TX_ADV)
- || CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_RCV)) {
+ PEER_CAP_ADDPATH_AF_TX_ADV))
vty_out(vty,
- " %s: TX ",
+ "advertised %s",
afi_safi_print(
afi,
safi));
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_ADV))
- vty_out(vty,
- "advertised %s",
- afi_safi_print(
- afi,
- safi));
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_RCV))
+ vty_out(vty,
+ "%sreceived",
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV)
+ ? " and "
+ : "");
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_RCV))
- vty_out(vty,
- "%sreceived",
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_TX_ADV)
- ? " and "
- : "");
+ vty_out(vty, "\n");
+ }
- vty_out(vty,
- "\n");
- }
+ if (CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ || CHECK_FLAG(
+ p->af_cap[afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV)) {
+ vty_out(vty,
+ " %s: RX ",
+ afi_safi_print(
+ afi,
+ safi));
if (CHECK_FLAG(
p->af_cap
[afi]
[safi],
- PEER_CAP_ADDPATH_AF_RX_ADV)
- || CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_RCV)) {
+ PEER_CAP_ADDPATH_AF_RX_ADV))
vty_out(vty,
- " %s: RX ",
+ "advertised %s",
afi_safi_print(
afi,
safi));
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_ADV))
- vty_out(vty,
- "advertised %s",
- afi_safi_print(
- afi,
- safi));
-
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_RCV))
- vty_out(vty,
- "%sreceived",
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_ADDPATH_AF_RX_ADV)
- ? " and "
- : "");
-
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_RCV))
vty_out(vty,
- "\n");
- }
+ "%sreceived",
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV)
+ ? " and "
+ : "");
+
+ vty_out(vty, "\n");
}
+ }
}
/* Dynamic */
}
/* Multiprotocol Extensions */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++)
- if (p->afc_adv[afi][safi]
- || p->afc_recv[afi][safi]) {
+ FOREACH_AFI_SAFI (afi, safi)
+ if (p->afc_adv[afi][safi]
+ || p->afc_recv[afi][safi]) {
+ vty_out(vty,
+ " Address Family %s:",
+ afi_safi_print(afi,
+ safi));
+ if (p->afc_adv[afi][safi])
vty_out(vty,
- " Address Family %s:",
- afi_safi_print(
- afi,
- safi));
- if (p->afc_adv[afi]
- [safi])
- vty_out(vty,
- " advertised");
- if (p->afc_recv[afi]
- [safi])
- vty_out(vty,
- " %sreceived",
- p->afc_adv[afi]
- [safi]
- ? "and "
- : "");
- vty_out(vty, "\n");
- }
+ " advertised");
+ if (p->afc_recv[afi][safi])
+ vty_out(vty,
+ " %sreceived",
+ p->afc_adv[afi]
+ [safi]
+ ? "and "
+ : "");
+ vty_out(vty, "\n");
+ }
/* Hostname capability */
vty_out(vty, " Hostname Capability:");
vty_out(vty,
" Address families by peer:\n ");
- for (afi = AFI_IP;
- afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX;
- safi++)
- if (CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_RESTART_AF_RCV)) {
- vty_out(vty,
- "%s%s(%s)",
- restart_af_count
- ? ", "
- : "",
- afi_safi_print(
- afi,
- safi),
- CHECK_FLAG(
- p->af_cap
- [afi]
- [safi],
- PEER_CAP_RESTART_AF_PRESERVE_RCV)
- ? "preserved"
- : "not preserved");
- restart_af_count++;
- }
+ FOREACH_AFI_SAFI (afi, safi)
+ if (CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_RCV)) {
+ vty_out(vty,
+ "%s%s(%s)",
+ restart_af_count
+ ? ", "
+ : "",
+ afi_safi_print(
+ afi,
+ safi),
+ CHECK_FLAG(
+ p->af_cap
+ [afi]
+ [safi],
+ PEER_CAP_RESTART_AF_PRESERVE_RCV)
+ ? "preserved"
+ : "not preserved");
+ restart_af_count++;
+ }
if (!restart_af_count)
vty_out(vty, "none");
vty_out(vty, "\n");
json_grace_recv = json_object_new_object();
if (p->status == Established) {
- for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
- if (CHECK_FLAG(
- p->af_sflags[afi]
- [safi],
- PEER_STATUS_EOR_SEND)) {
- json_object_boolean_true_add(
- json_grace_send,
- afi_safi_print(
- afi,
- safi));
- eor_send_af_count++;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_EOR_SEND)) {
+ json_object_boolean_true_add(
+ json_grace_send,
+ afi_safi_print(afi,
+ safi));
+ eor_send_af_count++;
}
}
- for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
- if (CHECK_FLAG(
- p->af_sflags[afi]
- [safi],
- PEER_STATUS_EOR_RECEIVED)) {
- json_object_boolean_true_add(
- json_grace_recv,
- afi_safi_print(
- afi,
- safi));
- eor_receive_af_count++;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(
+ p->af_sflags[afi][safi],
+ PEER_STATUS_EOR_RECEIVED)) {
+ json_object_boolean_true_add(
+ json_grace_recv,
+ afi_safi_print(afi,
+ safi));
+ eor_receive_af_count++;
}
}
}
vty_out(vty, " Graceful restart informations:\n");
if (p->status == Established) {
vty_out(vty, " End-of-RIB send: ");
- for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
- if (CHECK_FLAG(
- p->af_sflags[afi]
- [safi],
- PEER_STATUS_EOR_SEND)) {
- vty_out(vty, "%s%s",
- eor_send_af_count
- ? ", "
- : "",
- afi_safi_print(
- afi,
- safi));
- eor_send_af_count++;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(p->af_sflags[afi][safi],
+ PEER_STATUS_EOR_SEND)) {
+ vty_out(vty, "%s%s",
+ eor_send_af_count ? ", "
+ : "",
+ afi_safi_print(afi,
+ safi));
+ eor_send_af_count++;
}
}
vty_out(vty, "\n");
vty_out(vty, " End-of-RIB received: ");
- for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST;
- safi < SAFI_MAX; safi++) {
- if (CHECK_FLAG(
- p->af_sflags[afi]
- [safi],
- PEER_STATUS_EOR_RECEIVED)) {
- vty_out(vty, "%s%s",
- eor_receive_af_count
- ? ", "
- : "",
- afi_safi_print(
- afi,
- safi));
- eor_receive_af_count++;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(
+ p->af_sflags[afi][safi],
+ PEER_STATUS_EOR_RECEIVED)) {
+ vty_out(vty, "%s%s",
+ eor_receive_af_count
+ ? ", "
+ : "",
+ afi_safi_print(afi,
+ safi));
+ eor_receive_af_count++;
}
}
vty_out(vty, "\n");
if (use_json)
json_hold = json_object_new_object();
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- if (p->afc[afi][safi])
- bgp_show_peer_afi(vty, p, afi, safi, use_json,
- json_hold);
+ FOREACH_AFI_SAFI (afi, safi)
+ if (p->afc[afi][safi])
+ bgp_show_peer_afi(vty, p, afi, safi, use_json,
+ json_hold);
if (use_json) {
json_object_object_add(json_neigh, "addressFamilyInfo",
com = (struct community *)backet->data;
vty_out(vty, "[%p] (%ld) %s\n", (void *)com, com->refcnt,
- community_str(com));
+ community_str(com, false));
}
/* Show BGP's community internal data. */
/* Display AFs configured. */
vty_out(vty, " Configured address-families:");
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (conf->afc[afi][safi]) {
- af_cfgd = 1;
- vty_out(vty, " %s;", afi_safi_print(afi, safi));
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (conf->afc[afi][safi]) {
+ af_cfgd = 1;
+ vty_out(vty, " %s;", afi_safi_print(afi, safi));
}
+ }
if (!af_cfgd)
vty_out(vty, " none\n");
else
vrf = pg = NULL;
int idx = 0;
- vrf = argv_find(argv, argc, "WORD", &idx) ? argv[idx]->arg : NULL;
+ vrf = argv_find(argv, argc, "VIEWVRFNAME", &idx) ? argv[idx]->arg : NULL;
pg = argv_find(argv, argc, "PGNAME", &idx) ? argv[idx]->arg : NULL;
return bgp_show_peer_group_vty(vty, vrf, pg);
vty_out(vty, " %s %s\n",
community_direct_str(entry->direct),
entry->style == COMMUNITY_LIST_STANDARD
- ? community_str(entry->u.com)
+ ? community_str(entry->u.com, false)
: entry->config);
}
}
str = "";
else {
if (entry->style == COMMUNITY_LIST_STANDARD)
- str = community_str(entry->u.com);
+ str = community_str(entry->u.com, false);
else
str = entry->config;
}