Improves consistency and readability.
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
safi_t safi;
struct bgp_synchronize *sync;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- sync = XCALLOC(MTYPE_BGP_SYNCHRONISE,
- sizeof(struct bgp_synchronize));
- BGP_ADV_FIFO_INIT(&sync->update);
- BGP_ADV_FIFO_INIT(&sync->withdraw);
- BGP_ADV_FIFO_INIT(&sync->withdraw_low);
- peer->sync[afi][safi] = sync;
- peer->hash[afi][safi] =
- hash_create(baa_hash_key,
- baa_hash_cmp,
- "BGP Sync Hash");
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ sync = XCALLOC(MTYPE_BGP_SYNCHRONISE,
+ sizeof(struct bgp_synchronize));
+ BGP_ADV_FIFO_INIT(&sync->update);
+ BGP_ADV_FIFO_INIT(&sync->withdraw);
+ BGP_ADV_FIFO_INIT(&sync->withdraw_low);
+ peer->sync[afi][safi] = sync;
+ peer->hash[afi][safi] = hash_create(baa_hash_key, baa_hash_cmp,
+ "BGP Sync Hash");
+ }
}
void bgp_sync_delete(struct peer *peer)
afi_t afi;
safi_t safi;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (peer->sync[afi][safi])
- XFREE(MTYPE_BGP_SYNCHRONISE,
- peer->sync[afi][safi]);
- peer->sync[afi][safi] = NULL;
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->sync[afi][safi])
+ XFREE(MTYPE_BGP_SYNCHRONISE, peer->sync[afi][safi]);
+ peer->sync[afi][safi] = NULL;
- if (peer->hash[afi][safi])
- hash_free(peer->hash[afi][safi]);
- peer->hash[afi][safi] = NULL;
- }
+ if (peer->hash[afi][safi])
+ hash_free(peer->hash[afi][safi]);
+ peer->hash[afi][safi] = NULL;
+ }
}
from_peer->domainname = NULL;
}
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- peer->af_flags[afi][safi] =
- from_peer->af_flags[afi][safi];
- peer->af_sflags[afi][safi] =
- from_peer->af_sflags[afi][safi];
- peer->af_cap[afi][safi] = from_peer->af_cap[afi][safi];
- peer->afc_nego[afi][safi] =
- from_peer->afc_nego[afi][safi];
- peer->afc_adv[afi][safi] =
- from_peer->afc_adv[afi][safi];
- peer->afc_recv[afi][safi] =
- from_peer->afc_recv[afi][safi];
- peer->orf_plist[afi][safi] =
- from_peer->orf_plist[afi][safi];
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ peer->af_flags[afi][safi] = from_peer->af_flags[afi][safi];
+ peer->af_sflags[afi][safi] = from_peer->af_sflags[afi][safi];
+ peer->af_cap[afi][safi] = from_peer->af_cap[afi][safi];
+ peer->afc_nego[afi][safi] = from_peer->afc_nego[afi][safi];
+ peer->afc_adv[afi][safi] = from_peer->afc_adv[afi][safi];
+ peer->afc_recv[afi][safi] = from_peer->afc_recv[afi][safi];
+ peer->orf_plist[afi][safi] = from_peer->orf_plist[afi][safi];
+ }
if (bgp_getsockname(peer) < 0) {
zlog_err(
peer->fd = -1;
}
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- /* Reset all negotiated variables */
- peer->afc_nego[afi][safi] = 0;
- peer->afc_adv[afi][safi] = 0;
- peer->afc_recv[afi][safi] = 0;
-
- /* peer address family capability flags*/
- peer->af_cap[afi][safi] = 0;
-
- /* peer address family status flags*/
- peer->af_sflags[afi][safi] = 0;
-
- /* Received ORF prefix-filter */
- peer->orf_plist[afi][safi] = NULL;
-
- if ((peer->status == OpenConfirm)
- || (peer->status == Established)) {
- /* ORF received prefix-filter pnt */
- sprintf(orf_name, "%s.%d.%d", peer->host, afi,
- safi);
- prefix_bgp_orf_remove_all(afi, orf_name);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ /* Reset all negotiated variables */
+ peer->afc_nego[afi][safi] = 0;
+ peer->afc_adv[afi][safi] = 0;
+ peer->afc_recv[afi][safi] = 0;
+
+ /* peer address family capability flags*/
+ peer->af_cap[afi][safi] = 0;
+
+ /* peer address family status flags*/
+ peer->af_sflags[afi][safi] = 0;
+
+ /* Received ORF prefix-filter */
+ peer->orf_plist[afi][safi] = NULL;
+
+ if ((peer->status == OpenConfirm)
+ || (peer->status == Established)) {
+ /* ORF received prefix-filter pnt */
+ sprintf(orf_name, "%s.%d.%d", peer->host, afi, safi);
+ prefix_bgp_orf_remove_all(afi, orf_name);
}
+ }
/* Reset keepalive and holdtime */
if (PEER_OR_GROUP_TIMER_SET(peer)) {
peer->uptime = bgp_clock();
/* Send route-refresh when ORF is enabled */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_ADV)) {
if (CHECK_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ORF_PREFIX_SM_ADV)) {
- if (CHECK_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ORF_PREFIX_RM_RCV))
- bgp_route_refresh_send(
- peer, afi, safi,
- ORF_TYPE_PREFIX,
- REFRESH_IMMEDIATE, 0);
- else if (
- CHECK_FLAG(
- peer->af_cap[afi][safi],
- PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
- bgp_route_refresh_send(
- peer, afi, safi,
- ORF_TYPE_PREFIX_OLD,
- REFRESH_IMMEDIATE, 0);
- }
+ PEER_CAP_ORF_PREFIX_RM_RCV))
+ bgp_route_refresh_send(peer, afi, safi,
+ ORF_TYPE_PREFIX,
+ REFRESH_IMMEDIATE, 0);
+ else if (CHECK_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
+ bgp_route_refresh_send(peer, afi, safi,
+ ORF_TYPE_PREFIX_OLD,
+ REFRESH_IMMEDIATE, 0);
+ }
+ }
/* First update is deferred until ORF or ROUTE-REFRESH is received */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_RM_ADV))
if (CHECK_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ORF_PREFIX_RM_ADV))
- if (CHECK_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ORF_PREFIX_SM_RCV)
- || CHECK_FLAG(
- peer->af_cap[afi][safi],
- PEER_CAP_ORF_PREFIX_SM_OLD_RCV))
- SET_FLAG(peer->af_sflags[afi][safi],
- PEER_STATUS_ORF_WAIT_REFRESH);
+ PEER_CAP_ORF_PREFIX_SM_RCV)
+ || CHECK_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ORF_PREFIX_SM_OLD_RCV))
+ SET_FLAG(peer->af_sflags[afi][safi],
+ PEER_STATUS_ORF_WAIT_REFRESH);
+ }
bgp_announce_peer(peer);
return;
/* MP capability for configured AFI, SAFI */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (peer->afc[afi][safi]) {
- /* Convert AFI, SAFI to values for packet. */
- bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi,
- &pkt_safi);
-
- peer->afc_adv[afi][safi] = 1;
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->afc[afi][safi]) {
+ /* Convert AFI, SAFI to values for packet. */
+ bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi,
+ &pkt_safi);
+
+ peer->afc_adv[afi][safi] = 1;
+ stream_putc(s, BGP_OPEN_OPT_CAP);
+ stream_putc(s, CAPABILITY_CODE_MP_LEN + 2);
+ stream_putc(s, CAPABILITY_CODE_MP);
+ stream_putc(s, CAPABILITY_CODE_MP_LEN);
+ stream_putw(s, pkt_afi);
+ stream_putc(s, 0);
+ stream_putc(s, pkt_safi);
+
+ /* Extended nexthop capability - currently
+ * supporting RFC-5549 for
+ * Link-Local peering only
+ */
+ if (CHECK_FLAG(peer->flags, PEER_FLAG_CAPABILITY_ENHE)
+ && peer->su.sa.sa_family == AF_INET6
+ && IN6_IS_ADDR_LINKLOCAL(&peer->su.sin6.sin6_addr)
+ && afi == AFI_IP
+ && (safi == SAFI_UNICAST
+ || safi == SAFI_LABELED_UNICAST)) {
+ /* RFC 5549 Extended Next Hop Encoding
+ */
+ SET_FLAG(peer->cap, PEER_CAP_ENHE_ADV);
stream_putc(s, BGP_OPEN_OPT_CAP);
- stream_putc(s, CAPABILITY_CODE_MP_LEN + 2);
- stream_putc(s, CAPABILITY_CODE_MP);
- stream_putc(s, CAPABILITY_CODE_MP_LEN);
+ stream_putc(s, CAPABILITY_CODE_ENHE_LEN + 2);
+ stream_putc(s, CAPABILITY_CODE_ENHE);
+ stream_putc(s, CAPABILITY_CODE_ENHE_LEN);
+
+ SET_FLAG(peer->af_cap[AFI_IP][safi],
+ PEER_CAP_ENHE_AF_ADV);
stream_putw(s, pkt_afi);
- stream_putc(s, 0);
- stream_putc(s, pkt_safi);
+ stream_putw(s, pkt_safi);
+ stream_putw(s, afi_int2iana(AFI_IP6));
- /* Extended nexthop capability - currently
- * supporting RFC-5549 for
- * Link-Local peering only
- */
- if (CHECK_FLAG(peer->flags,
- PEER_FLAG_CAPABILITY_ENHE)
- && peer->su.sa.sa_family == AF_INET6
- && IN6_IS_ADDR_LINKLOCAL(
- &peer->su.sin6.sin6_addr)
- && afi == AFI_IP
- && (safi == SAFI_UNICAST
- || safi == SAFI_LABELED_UNICAST)) {
- /* RFC 5549 Extended Next Hop Encoding
- */
- SET_FLAG(peer->cap, PEER_CAP_ENHE_ADV);
- stream_putc(s, BGP_OPEN_OPT_CAP);
- stream_putc(s,
- CAPABILITY_CODE_ENHE_LEN
- + 2);
- stream_putc(s, CAPABILITY_CODE_ENHE);
- stream_putc(s,
- CAPABILITY_CODE_ENHE_LEN);
-
- SET_FLAG(peer->af_cap[AFI_IP][safi],
- PEER_CAP_ENHE_AF_ADV);
- stream_putw(s, pkt_afi);
- stream_putw(s, pkt_safi);
- stream_putw(s, afi_int2iana(AFI_IP6));
-
- if (CHECK_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ENHE_AF_RCV))
- SET_FLAG(
- peer->af_cap[afi][safi],
- PEER_CAP_ENHE_AF_NEGO);
- }
+ if (CHECK_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ENHE_AF_RCV))
+ SET_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ENHE_AF_NEGO);
}
}
+ }
/* Route refresh. */
SET_FLAG(peer->cap, PEER_CAP_REFRESH_ADV);
stream_putl(s, local_as);
/* AddPath */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- if (peer->afc[afi][safi]) {
- afi_safi_count++;
-
- /* Only advertise addpath TX if a feature that
- * will use it is
- * configured */
- if (CHECK_FLAG(peer->af_flags[afi][safi],
- PEER_FLAG_ADDPATH_TX_ALL_PATHS)
- || CHECK_FLAG(
- peer->af_flags[afi][safi],
- PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
- adv_addpath_tx = 1;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->afc[afi][safi]) {
+ afi_safi_count++;
+
+ /* Only advertise addpath TX if a feature that
+ * will use it is
+ * configured */
+ if (CHECK_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_ALL_PATHS)
+ || CHECK_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS))
+ adv_addpath_tx = 1;
+ }
+ }
SET_FLAG(peer->cap, PEER_CAP_ADDPATH_ADV);
stream_putc(s, BGP_OPEN_OPT_CAP);
stream_putc(s, CAPABILITY_CODE_ADDPATH);
stream_putc(s, CAPABILITY_CODE_ADDPATH_LEN * afi_safi_count);
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- if (peer->afc[afi][safi]) {
- /* Convert AFI, SAFI to values for packet. */
- bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi,
- &pkt_safi);
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->afc[afi][safi]) {
+ /* Convert AFI, SAFI to values for packet. */
+ bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi,
+ &pkt_safi);
- stream_putw(s, pkt_afi);
- stream_putc(s, pkt_safi);
+ stream_putw(s, pkt_afi);
+ stream_putc(s, pkt_safi);
- if (adv_addpath_tx) {
- stream_putc(s,
- BGP_ADDPATH_RX
- | BGP_ADDPATH_TX);
- SET_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ADDPATH_AF_RX_ADV);
- SET_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ADDPATH_AF_TX_ADV);
- } else {
- stream_putc(s, BGP_ADDPATH_RX);
- SET_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ADDPATH_AF_RX_ADV);
- UNSET_FLAG(peer->af_cap[afi][safi],
- PEER_CAP_ADDPATH_AF_TX_ADV);
- }
+ if (adv_addpath_tx) {
+ stream_putc(s, BGP_ADDPATH_RX | BGP_ADDPATH_TX);
+ SET_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV);
+ SET_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV);
+ } else {
+ stream_putc(s, BGP_ADDPATH_RX);
+ SET_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ADDPATH_AF_RX_ADV);
+ UNSET_FLAG(peer->af_cap[afi][safi],
+ PEER_CAP_ADDPATH_AF_TX_ADV);
}
+ }
+ }
/* ORF capability. */
- 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_ORF_PREFIX_SM)
- || CHECK_FLAG(peer->af_flags[afi][safi],
- PEER_FLAG_ORF_PREFIX_RM)) {
- bgp_open_capability_orf(
- s, peer, afi, safi,
- CAPABILITY_CODE_ORF_OLD);
- bgp_open_capability_orf(s, peer, afi, safi,
- CAPABILITY_CODE_ORF);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (CHECK_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_ORF_PREFIX_SM)
+ || CHECK_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_ORF_PREFIX_RM)) {
+ bgp_open_capability_orf(s, peer, afi, safi,
+ CAPABILITY_CODE_ORF_OLD);
+ bgp_open_capability_orf(s, peer, afi, safi,
+ CAPABILITY_CODE_ORF);
+ }
+ }
/* Dynamic capability. */
if (CHECK_FLAG(peer->flags, PEER_FLAG_DYNAMIC_CAPABILITY)) {
config
is present */
if (bgp_flag_check(peer->bgp, BGP_FLAG_GRACEFUL_RESTART)) {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- if (peer->afc[afi][safi]) {
- /* Convert AFI, SAFI to values for
- * packet. */
- bgp_map_afi_safi_int2iana(
- afi, safi, &pkt_afi, &pkt_safi);
- stream_putw(s, pkt_afi);
- stream_putc(s, pkt_safi);
- if (bgp_flag_check(
- peer->bgp,
- BGP_FLAG_GR_PRESERVE_FWD))
- stream_putc(s, RESTART_F_BIT);
- else
- stream_putc(s, 0);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->afc[afi][safi]) {
+ /* Convert AFI, SAFI to values for
+ * packet. */
+ bgp_map_afi_safi_int2iana(afi, safi, &pkt_afi,
+ &pkt_safi);
+ stream_putw(s, pkt_afi);
+ stream_putc(s, pkt_safi);
+ if (bgp_flag_check(peer->bgp,
+ BGP_FLAG_GR_PRESERVE_FWD))
+ stream_putc(s, RESTART_F_BIT);
+ else
+ stream_putc(s, 0);
+ }
+ }
}
/* Total Graceful restart capability Len. */
if (peer->bgp && peer->bgp->main_peers_update_hold)
return NULL;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- paf = peer_af_find(peer, afi, safi);
- if (!paf || !PAF_SUBGRP(paf))
- continue;
+ FOREACH_AFI_SAFI (afi, safi) {
+ paf = peer_af_find(peer, afi, safi);
+ if (!paf || !PAF_SUBGRP(paf))
+ continue;
+ next_pkt = paf->next_pkt_to_send;
+
+ /* Try to generate a packet for the peer if we are at
+ * the end of
+ * the list. Always try to push out WITHDRAWs first. */
+ if (!next_pkt || !next_pkt->buffer) {
+ next_pkt = subgroup_withdraw_packet(PAF_SUBGRP(paf));
+ if (!next_pkt || !next_pkt->buffer)
+ subgroup_update_packet(PAF_SUBGRP(paf));
next_pkt = paf->next_pkt_to_send;
+ }
- /* Try to generate a packet for the peer if we are at
- * the end of
- * the list. Always try to push out WITHDRAWs first. */
- if (!next_pkt || !next_pkt->buffer) {
- next_pkt = subgroup_withdraw_packet(
- PAF_SUBGRP(paf));
- if (!next_pkt || !next_pkt->buffer)
- subgroup_update_packet(PAF_SUBGRP(paf));
- next_pkt = paf->next_pkt_to_send;
- }
-
- /* If we still don't have a packet to send to the peer,
- * then
- * try to find out out if we have to send eor or if not,
- * skip to
- * the next AFI, SAFI.
- * Don't send the EOR prematurely... if the subgroup's
- * coalesce
- * timer is running, the adjacency-out structure is not
- * created
- * yet.
- */
- if (!next_pkt || !next_pkt->buffer) {
- if (CHECK_FLAG(peer->cap,
- PEER_CAP_RESTART_RCV)) {
- if (!(PAF_SUBGRP(paf))->t_coalesce
- && peer->afc_nego[afi][safi]
- && peer->synctime
- && !CHECK_FLAG(
- peer->af_sflags[afi]
- [safi],
- PEER_STATUS_EOR_SEND)) {
- SET_FLAG(peer->af_sflags[afi]
- [safi],
- PEER_STATUS_EOR_SEND);
- return bgp_update_packet_eor(
- peer, afi, safi);
- }
+ /* If we still don't have a packet to send to the peer,
+ * then
+ * try to find out out if we have to send eor or if not,
+ * skip to
+ * the next AFI, SAFI.
+ * Don't send the EOR prematurely... if the subgroup's
+ * coalesce
+ * timer is running, the adjacency-out structure is not
+ * created
+ * yet.
+ */
+ if (!next_pkt || !next_pkt->buffer) {
+ if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV)) {
+ if (!(PAF_SUBGRP(paf))->t_coalesce
+ && peer->afc_nego[afi][safi]
+ && peer->synctime
+ && !CHECK_FLAG(peer->af_sflags[afi][safi],
+ PEER_STATUS_EOR_SEND)) {
+ SET_FLAG(peer->af_sflags[afi][safi],
+ PEER_STATUS_EOR_SEND);
+ return bgp_update_packet_eor(peer, afi,
+ safi);
}
- continue;
}
+ continue;
+ }
- /*
- * Found a packet template to send, overwrite packet
- * with appropriate
- * attributes from peer and advance peer
- */
- s = bpacket_reformat_for_peer(next_pkt, paf);
- bpacket_queue_advance_peer(paf);
- return s;
- }
+ /*
+ * Found a packet template to send, overwrite packet
+ * with appropriate
+ * attributes from peer and advance peer
+ */
+ s = bpacket_reformat_for_peer(next_pkt, paf);
+ bpacket_queue_advance_peer(paf);
+ return s;
+ }
return NULL;
}
return;
}
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- paf = peer_af_find(peer, afi, safi);
- if (!paf)
- continue;
- subgrp = paf->subgroup;
- if (!subgrp)
- continue;
+ FOREACH_AFI_SAFI (afi, safi) {
+ paf = peer_af_find(peer, afi, safi);
+ if (!paf)
+ continue;
+ subgrp = paf->subgroup;
+ if (!subgrp)
+ continue;
- next_pkt = paf->next_pkt_to_send;
- if (next_pkt && next_pkt->buffer) {
- BGP_WRITE_ON(peer->t_write, bgp_write,
- peer->fd);
- return;
- }
+ next_pkt = paf->next_pkt_to_send;
+ if (next_pkt && next_pkt->buffer) {
+ BGP_WRITE_ON(peer->t_write, bgp_write, peer->fd);
+ return;
+ }
- /* No packets readily available for AFI/SAFI, are there
- * subgroup packets
- * that need to be generated? */
- if (bpacket_queue_is_full(SUBGRP_INST(subgrp),
- SUBGRP_PKTQ(subgrp)))
- fullq_found = 1;
- else if (subgroup_packets_to_build(subgrp)) {
+ /* No packets readily available for AFI/SAFI, are there
+ * subgroup packets
+ * that need to be generated? */
+ if (bpacket_queue_is_full(SUBGRP_INST(subgrp),
+ SUBGRP_PKTQ(subgrp)))
+ fullq_found = 1;
+ else if (subgroup_packets_to_build(subgrp)) {
+ BGP_WRITE_ON(peer->t_write, bgp_write, peer->fd);
+ return;
+ }
+
+ /* No packets to send, see if EOR is pending */
+ if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV)) {
+ if (!subgrp->t_coalesce && peer->afc_nego[afi][safi]
+ && peer->synctime
+ && !CHECK_FLAG(peer->af_sflags[afi][safi],
+ PEER_STATUS_EOR_SEND)
+ && safi != SAFI_MPLS_VPN) {
BGP_WRITE_ON(peer->t_write, bgp_write,
peer->fd);
return;
}
-
- /* No packets to send, see if EOR is pending */
- if (CHECK_FLAG(peer->cap, PEER_CAP_RESTART_RCV)) {
- if (!subgrp->t_coalesce
- && peer->afc_nego[afi][safi]
- && peer->synctime
- && !CHECK_FLAG(peer->af_sflags[afi][safi],
- PEER_STATUS_EOR_SEND)
- && safi != SAFI_MPLS_VPN) {
- BGP_WRITE_ON(peer->t_write, bgp_write,
- peer->fd);
- return;
- }
- }
}
+ }
if (fullq_found) {
BGP_WRITE_ON(peer->t_write, bgp_write, peer->fd);
return;
if (bgp_debug_neighbor_events(peer))
zlog_debug("Peer %s: Checking explicit EORs", peer->host);
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (peer->afc_nego[afi][safi]
- && !CHECK_FLAG(peer->af_sflags[afi][safi],
- PEER_STATUS_EOR_RECEIVED)) {
- if (bgp_debug_neighbor_events(peer))
- zlog_debug(
- " afi %d safi %d didnt receive EOR",
- afi, safi);
- return;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->afc_nego[afi][safi]
+ && !CHECK_FLAG(peer->af_sflags[afi][safi],
+ PEER_STATUS_EOR_RECEIVED)) {
+ if (bgp_debug_neighbor_events(peer))
+ zlog_debug(
+ " afi %d safi %d didnt receive EOR",
+ afi, safi);
+ return;
}
+ }
peer->update_delay_over = 1;
peer->bgp->explicit_eors++;
sizeof(bgp->update_delay_zebra_resume_time));
bgp->main_zebra_update_hold = 0;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (bgp_fibupd_safi(safi))
- bgp_zebra_announce_table(bgp, afi,
- safi);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (bgp_fibupd_safi(safi))
+ bgp_zebra_announce_table(bgp, afi, safi);
+ }
bgp->main_peers_update_hold = 0;
bgp_start_routeadv(bgp);
afi_t afi;
safi_t safi;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- bgp_announce_route(peer, afi, safi);
+ FOREACH_AFI_SAFI (afi, safi)
+ bgp_announce_route(peer, afi, safi);
}
static void bgp_soft_reconfig_table(struct peer *peer, afi_t afi, safi_t safi,
afi_t afi;
safi_t safi;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- bgp_clear_route(peer, afi, safi);
+ FOREACH_AFI_SAFI (afi, safi)
+ bgp_clear_route(peer, afi, safi);
#if ENABLE_BGP_VNC
rfapiProcessPeerDown(peer);
struct bgp_table *table;
struct bgp_static *bgp_static;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- for (rn = bgp_table_top(bgp->route[afi][safi]); rn;
- rn = bgp_route_next(rn)) {
- if (rn->info == NULL)
- continue;
+ FOREACH_AFI_SAFI (afi, safi)
+ for (rn = bgp_table_top(bgp->route[afi][safi]); rn;
+ rn = bgp_route_next(rn)) {
+ if (rn->info == NULL)
+ continue;
- if ((safi == SAFI_MPLS_VPN)
- || (safi == SAFI_ENCAP)
- || (safi == SAFI_EVPN)) {
- table = rn->info;
-
- for (rm = bgp_table_top(table); rm;
- rm = bgp_route_next(rm)) {
- bgp_static = rm->info;
- bgp_static_update_safi(
- bgp, &rm->p, bgp_static,
- afi, safi);
- }
- } else {
- bgp_static_update(bgp, &rn->p, rn->info,
- afi, safi);
+ if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP)
+ || (safi == SAFI_EVPN)) {
+ table = rn->info;
+
+ for (rm = bgp_table_top(table); rm;
+ rm = bgp_route_next(rm)) {
+ bgp_static = rm->info;
+ bgp_static_update_safi(bgp, &rm->p,
+ bgp_static, afi,
+ safi);
}
+ } else {
+ bgp_static_update(bgp, &rn->p, rn->info, afi,
+ safi);
}
+ }
}
/* Called from bgp_delete(). Delete all static routes from the BGP
struct bgp_table *table;
struct bgp_static *bgp_static;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- for (rn = bgp_table_top(bgp->route[afi][safi]); rn;
- rn = bgp_route_next(rn)) {
- if (rn->info == NULL)
- continue;
+ FOREACH_AFI_SAFI (afi, safi)
+ for (rn = bgp_table_top(bgp->route[afi][safi]); rn;
+ rn = bgp_route_next(rn)) {
+ if (rn->info == NULL)
+ continue;
- if ((safi == SAFI_MPLS_VPN)
- || (safi == SAFI_ENCAP)
- || (safi == SAFI_EVPN)) {
- table = rn->info;
-
- for (rm = bgp_table_top(table); rm;
- rm = bgp_route_next(rm)) {
- bgp_static = rm->info;
- bgp_static_withdraw_safi(
- bgp, &rm->p, AFI_IP,
- safi,
- (struct prefix_rd *)&rn
- ->p);
- bgp_static_free(bgp_static);
- rn->info = NULL;
- bgp_unlock_node(rn);
- }
- } else {
- bgp_static = rn->info;
- bgp_static_withdraw(bgp, &rn->p, afi,
- safi);
+ if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP)
+ || (safi == SAFI_EVPN)) {
+ table = rn->info;
+
+ for (rm = bgp_table_top(table); rm;
+ rm = bgp_route_next(rm)) {
+ bgp_static = rm->info;
+ bgp_static_withdraw_safi(
+ bgp, &rm->p, AFI_IP, safi,
+ (struct prefix_rd *)&rn->p);
bgp_static_free(bgp_static);
rn->info = NULL;
bgp_unlock_node(rn);
}
+ } else {
+ bgp_static = rn->info;
+ bgp_static_withdraw(bgp, &rn->p, afi, safi);
+ bgp_static_free(bgp_static);
+ rn->info = NULL;
+ bgp_unlock_node(rn);
}
+ }
}
void bgp_static_redo_import_check(struct bgp *bgp)
/* Use this flag to force reprocessing of the route */
bgp_flag_set(bgp, BGP_FLAG_FORCE_STATIC_PROCESS);
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- for (rn = bgp_table_top(bgp->route[afi][safi]); rn;
- rn = bgp_route_next(rn)) {
- if (rn->info == NULL)
- continue;
+ FOREACH_AFI_SAFI (afi, safi) {
+ for (rn = bgp_table_top(bgp->route[afi][safi]); rn;
+ rn = bgp_route_next(rn)) {
+ if (rn->info == NULL)
+ continue;
- if ((safi == SAFI_MPLS_VPN)
- || (safi == SAFI_ENCAP)
- || (safi == SAFI_EVPN)) {
- table = rn->info;
-
- for (rm = bgp_table_top(table); rm;
- rm = bgp_route_next(rm)) {
- bgp_static = rm->info;
- bgp_static_update_safi(
- bgp, &rm->p, bgp_static,
- afi, safi);
- }
- } else {
- bgp_static = rn->info;
- bgp_static_update(bgp, &rn->p,
- bgp_static, afi,
- safi);
+ if ((safi == SAFI_MPLS_VPN) || (safi == SAFI_ENCAP)
+ || (safi == SAFI_EVPN)) {
+ table = rn->info;
+
+ for (rm = bgp_table_top(table); rm;
+ rm = bgp_route_next(rm)) {
+ bgp_static = rm->info;
+ bgp_static_update_safi(bgp, &rm->p,
+ bgp_static, afi,
+ safi);
}
+ } else {
+ bgp_static = rn->info;
+ bgp_static_update(bgp, &rn->p, bgp_static, afi,
+ safi);
}
+ }
+ }
bgp_flag_unset(bgp, BGP_FLAG_FORCE_STATIC_PROCESS);
}
afi_t afi;
safi_t safi;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- bgp_purge_af_static_redist_routes(bgp, afi, safi);
+ FOREACH_AFI_SAFI (afi, safi)
+ bgp_purge_af_static_redist_routes(bgp, afi, safi);
}
/*
safi_t safi;
/* Init BGP distance table. */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- bgp_distance_table[afi][safi] =
- bgp_table_init(afi, safi);
+ FOREACH_AFI_SAFI (afi, safi)
+ bgp_distance_table[afi][safi] = bgp_table_init(afi, safi);
/* IPv4 BGP commands. */
install_element(BGP_NODE, &bgp_table_map_cmd);
afi_t afi;
safi_t safi;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- bgp_table_unlock(bgp_distance_table[afi][safi]);
- bgp_distance_table[afi][safi] = NULL;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ bgp_table_unlock(bgp_distance_table[afi][safi]);
+ bgp_distance_table[afi][safi] = NULL;
+ }
}
/* All the peers have been updated correctly already. This is
* just updating the placeholder data. No real update required.
*/
- for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group))
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- filter = &group->conf->filter[afi][safi];
-
- for (direct = RMAP_IN; direct < RMAP_MAX;
- direct++) {
- if ((filter->map[direct].name)
- && (strcmp(rmap_name,
- filter->map[direct].name)
- == 0))
- filter->map[direct].map = map;
- }
-
- if (filter->usmap.name
- && (strcmp(rmap_name, filter->usmap.name)
+ for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &group->conf->filter[afi][safi];
+
+ for (direct = RMAP_IN; direct < RMAP_MAX; direct++) {
+ if ((filter->map[direct].name)
+ && (strcmp(rmap_name,
+ filter->map[direct].name)
== 0))
- filter->usmap.map = map;
+ filter->map[direct].map = map;
}
+
+ if (filter->usmap.name
+ && (strcmp(rmap_name, filter->usmap.name) == 0))
+ filter->usmap.map = map;
+ }
+ }
}
/*
if (CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
continue;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- /* process in/out/import/export/default-orig
- * route-maps */
- bgp_route_map_process_peer(rmap_name, map, peer,
- afi, safi,
- route_update);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ /* process in/out/import/export/default-orig
+ * route-maps */
+ bgp_route_map_process_peer(rmap_name, map, peer, afi,
+ safi, route_update);
+ }
}
/* for outbound/default-orig route-maps, process for groups */
/* update peer-group config (template) */
bgp_route_map_update_peer_group(rmap_name, map, bgp);
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- /* For table route-map updates. */
- if (!bgp_fibupd_safi(safi))
- continue;
-
- if (bgp->table_map[afi][safi].name
- && (strcmp(rmap_name,
- bgp->table_map[afi][safi].name)
- == 0)) {
- bgp->table_map[afi][safi].map = map;
+ FOREACH_AFI_SAFI (afi, safi) {
+ /* For table route-map updates. */
+ if (!bgp_fibupd_safi(safi))
+ continue;
- if (BGP_DEBUG(zebra, ZEBRA))
- zlog_debug(
- "Processing route_map %s update on "
- "table map",
- rmap_name);
- if (route_update)
- bgp_zebra_announce_table(bgp, afi,
- safi);
- }
+ if (bgp->table_map[afi][safi].name
+ && (strcmp(rmap_name, bgp->table_map[afi][safi].name)
+ == 0)) {
+ bgp->table_map[afi][safi].map = map;
+
+ if (BGP_DEBUG(zebra, ZEBRA))
+ zlog_debug(
+ "Processing route_map %s update on "
+ "table map",
+ rmap_name);
+ if (route_update)
+ bgp_zebra_announce_table(bgp, afi, safi);
+ }
- /* For network route-map updates. */
- for (bn = bgp_table_top(bgp->route[afi][safi]); bn;
- bn = bgp_route_next(bn))
- if ((bgp_static = bn->info) != NULL) {
- if (bgp_static->rmap.name
- && (strcmp(rmap_name,
- bgp_static->rmap.name)
- == 0)) {
- bgp_static->rmap.map = map;
-
- if (route_update)
- if (!bgp_static
- ->backdoor) {
- if (bgp_debug_zebra(
- &bn->p))
- zlog_debug(
- "Processing route_map %s update on "
- "static route %s",
- rmap_name,
- inet_ntop(
- bn->p.family,
- &bn->p.u.prefix,
- buf,
- INET6_ADDRSTRLEN));
- bgp_static_update(
- bgp,
- &bn->p,
- bgp_static,
- afi,
- safi);
- }
- }
+ /* For network route-map updates. */
+ for (bn = bgp_table_top(bgp->route[afi][safi]); bn;
+ bn = bgp_route_next(bn))
+ if ((bgp_static = bn->info) != NULL) {
+ if (bgp_static->rmap.name
+ && (strcmp(rmap_name, bgp_static->rmap.name)
+ == 0)) {
+ bgp_static->rmap.map = map;
+
+ if (route_update)
+ if (!bgp_static->backdoor) {
+ if (bgp_debug_zebra(
+ &bn->p))
+ zlog_debug(
+ "Processing route_map %s update on "
+ "static route %s",
+ rmap_name,
+ inet_ntop(
+ bn->p.family,
+ &bn->p.u.prefix,
+ buf,
+ INET6_ADDRSTRLEN));
+ bgp_static_update(
+ bgp, &bn->p,
+ bgp_static, afi,
+ safi);
+ }
}
- }
+ }
+ }
/* For redistribute route-map updates. */
for (afi = AFI_IP; afi < AFI_MAX; afi++)
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;
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",
/* 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
peer->password = NULL;
/* Set default flags. */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (!bgp_option_check(BGP_OPT_CONFIG_CISCO)) {
- SET_FLAG(peer->af_flags[afi][safi],
- PEER_FLAG_SEND_COMMUNITY);
- SET_FLAG(peer->af_flags[afi][safi],
- PEER_FLAG_SEND_EXT_COMMUNITY);
- SET_FLAG(peer->af_flags[afi][safi],
- PEER_FLAG_SEND_LARGE_COMMUNITY);
- }
- peer->orf_plist[afi][safi] = NULL;
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (!bgp_option_check(BGP_OPT_CONFIG_CISCO)) {
+ SET_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_SEND_COMMUNITY);
+ SET_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_SEND_EXT_COMMUNITY);
+ SET_FLAG(peer->af_flags[afi][safi],
+ PEER_FLAG_SEND_LARGE_COMMUNITY);
}
+ peer->orf_plist[afi][safi] = NULL;
+ }
SET_FLAG(peer->sflags, PEER_STATUS_CAPABILITY_OPEN);
/* Create buffers. */
peer_dst->password =
XSTRDUP(MTYPE_PEER_PASSWORD, peer_src->password);
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- peer_dst->afc[afi][safi] = peer_src->afc[afi][safi];
- peer_dst->af_flags[afi][safi] =
- peer_src->af_flags[afi][safi];
- peer_dst->allowas_in[afi][safi] =
- peer_src->allowas_in[afi][safi];
- peer_dst->weight[afi][safi] =
- peer_src->weight[afi][safi];
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ peer_dst->afc[afi][safi] = peer_src->afc[afi][safi];
+ peer_dst->af_flags[afi][safi] = peer_src->af_flags[afi][safi];
+ peer_dst->allowas_in[afi][safi] =
+ peer_src->allowas_in[afi][safi];
+ peer_dst->weight[afi][safi] = peer_src->weight[afi][safi];
+ }
for (afidx = BGP_AF_START; afidx < BGP_AF_MAX; afidx++) {
paf = peer_src->peer_af_array[afidx];
afi_t afi;
safi_t safi;
- for (afi = AFI_IP; afi < AFI_MAX; afi++) {
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- bgp_recalculate_afi_safi_bestpaths(bgp, afi, safi);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ bgp_recalculate_afi_safi_bestpaths(bgp, afi, safi);
}
}
}
/* Free filter related memory. */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- filter = &peer->filter[afi][safi];
-
- for (i = FILTER_IN; i < FILTER_MAX; i++) {
- if (filter->dlist[i].name) {
- XFREE(MTYPE_BGP_FILTER_NAME,
- filter->dlist[i].name);
- filter->dlist[i].name = NULL;
- }
-
- if (filter->plist[i].name) {
- XFREE(MTYPE_BGP_FILTER_NAME,
- filter->plist[i].name);
- filter->plist[i].name = NULL;
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &peer->filter[afi][safi];
- if (filter->aslist[i].name) {
- XFREE(MTYPE_BGP_FILTER_NAME,
- filter->aslist[i].name);
- filter->aslist[i].name = NULL;
- }
+ for (i = FILTER_IN; i < FILTER_MAX; i++) {
+ if (filter->dlist[i].name) {
+ XFREE(MTYPE_BGP_FILTER_NAME,
+ filter->dlist[i].name);
+ filter->dlist[i].name = NULL;
}
- for (i = RMAP_IN; i < RMAP_MAX; i++) {
- if (filter->map[i].name) {
- XFREE(MTYPE_BGP_FILTER_NAME,
- filter->map[i].name);
- filter->map[i].name = NULL;
- }
+ if (filter->plist[i].name) {
+ XFREE(MTYPE_BGP_FILTER_NAME,
+ filter->plist[i].name);
+ filter->plist[i].name = NULL;
}
- if (filter->usmap.name) {
+ if (filter->aslist[i].name) {
XFREE(MTYPE_BGP_FILTER_NAME,
- filter->usmap.name);
- filter->usmap.name = NULL;
+ filter->aslist[i].name);
+ filter->aslist[i].name = NULL;
}
+ }
- if (peer->default_rmap[afi][safi].name) {
- XFREE(MTYPE_ROUTE_MAP_NAME,
- peer->default_rmap[afi][safi].name);
- peer->default_rmap[afi][safi].name = NULL;
+ for (i = RMAP_IN; i < RMAP_MAX; i++) {
+ if (filter->map[i].name) {
+ XFREE(MTYPE_BGP_FILTER_NAME,
+ filter->map[i].name);
+ filter->map[i].name = NULL;
}
}
+ if (filter->usmap.name) {
+ XFREE(MTYPE_BGP_FILTER_NAME, filter->usmap.name);
+ filter->usmap.name = NULL;
+ }
+
+ if (peer->default_rmap[afi][safi].name) {
+ XFREE(MTYPE_ROUTE_MAP_NAME,
+ peer->default_rmap[afi][safi].name);
+ peer->default_rmap[afi][safi].name = NULL;
+ }
+ }
+
FOREACH_AFI_SAFI (afi, safi)
peer_af_delete(peer, afi, safi);
if (peer->conf_if && cap_enhe_preset)
peer_flag_set(peer, PEER_FLAG_CAPABILITY_ENHE);
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (group->conf->afc[afi][safi]) {
- peer->afc[afi][safi] = 1;
-
- if (peer_af_find(peer, afi, safi)
- || peer_af_create(peer, afi,
- safi)) {
- peer_group2peer_config_copy_af(
- group, peer, afi, safi);
- }
- } else if (peer->afc[afi][safi])
- peer_deactivate(peer, afi, safi);
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (group->conf->afc[afi][safi]) {
+ peer->afc[afi][safi] = 1;
+
+ if (peer_af_find(peer, afi, safi)
+ || peer_af_create(peer, afi, safi)) {
+ peer_group2peer_config_copy_af(
+ group, peer, afi, safi);
+ }
+ } else if (peer->afc[afi][safi])
+ peer_deactivate(peer, afi, safi);
}
if (peer->group) {
/* If the peer-group is active for this afi/safi then activate
* for this peer */
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++)
- if (group->conf->afc[afi][safi]) {
- peer->afc[afi][safi] = 1;
- peer_af_create(peer, afi, safi);
- peer_group2peer_config_copy_af(
- group, peer, afi, safi);
- } else if (peer->afc[afi][safi])
- peer_deactivate(peer, afi, safi);
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (group->conf->afc[afi][safi]) {
+ peer->afc[afi][safi] = 1;
+ peer_af_create(peer, afi, safi);
+ peer_group2peer_config_copy_af(group, peer, afi,
+ safi);
+ } else if (peer->afc[afi][safi])
+ peer_deactivate(peer, afi, safi);
+ }
SET_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE);
if (group != peer->group)
return BGP_ERR_PEER_GROUP_MISMATCH;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (peer->afc[afi][safi]) {
- peer->afc[afi][safi] = 0;
- peer_af_flag_reset(peer, afi, safi);
-
- if (peer_af_delete(peer, afi, safi) != 0) {
- zlog_err(
- "couldn't delete af structure for peer %s",
- peer->host);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (peer->afc[afi][safi]) {
+ peer->afc[afi][safi] = 0;
+ peer_af_flag_reset(peer, afi, safi);
+
+ if (peer_af_delete(peer, afi, safi) != 0) {
+ zlog_err(
+ "couldn't delete af structure for peer %s",
+ peer->host);
}
}
+ }
assert(listnode_lookup(group->peer, peer));
peer_unlock(peer); /* peer group list reference */
bgp->group = list_new();
bgp->group->cmp = (int (*)(void *, void *))peer_group_cmp;
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- bgp->route[afi][safi] = bgp_table_init(afi, safi);
- bgp->aggregate[afi][safi] = bgp_table_init(afi, safi);
- bgp->rib[afi][safi] = bgp_table_init(afi, safi);
+ FOREACH_AFI_SAFI (afi, safi) {
+ bgp->route[afi][safi] = bgp_table_init(afi, safi);
+ bgp->aggregate[afi][safi] = bgp_table_init(afi, safi);
+ bgp->rib[afi][safi] = bgp_table_init(afi, safi);
- /* Enable maximum-paths */
- bgp_maximum_paths_set(bgp, afi, safi, BGP_PEER_EBGP,
- multipath_num, 0);
- bgp_maximum_paths_set(bgp, afi, safi, BGP_PEER_IBGP,
- multipath_num, 0);
- }
+ /* Enable maximum-paths */
+ bgp_maximum_paths_set(bgp, afi, safi, BGP_PEER_EBGP,
+ multipath_num, 0);
+ bgp_maximum_paths_set(bgp, afi, safi, BGP_PEER_IBGP,
+ multipath_num, 0);
+ }
bgp->v_update_delay = BGP_UPDATE_DELAY_DEF;
bgp->default_local_pref = BGP_DEFAULT_LOCAL_PREF;
bgp->peerhash = NULL;
}
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- /* Special handling for 2-level routing tables. */
- if (safi == SAFI_MPLS_VPN || safi == SAFI_ENCAP
- || safi == SAFI_EVPN) {
- for (rn = bgp_table_top(bgp->rib[afi][safi]);
- rn; rn = bgp_route_next(rn)) {
- table = (struct bgp_table *)rn->info;
- bgp_table_finish(&table);
- }
+ FOREACH_AFI_SAFI (afi, safi) {
+ /* Special handling for 2-level routing tables. */
+ if (safi == SAFI_MPLS_VPN || safi == SAFI_ENCAP
+ || safi == SAFI_EVPN) {
+ for (rn = bgp_table_top(bgp->rib[afi][safi]); rn;
+ rn = bgp_route_next(rn)) {
+ table = (struct bgp_table *)rn->info;
+ bgp_table_finish(&table);
}
- if (bgp->route[afi][safi])
- bgp_table_finish(&bgp->route[afi][safi]);
- if (bgp->aggregate[afi][safi])
- bgp_table_finish(&bgp->aggregate[afi][safi]);
- if (bgp->rib[afi][safi])
- bgp_table_finish(&bgp->rib[afi][safi]);
- rmap = &bgp->table_map[afi][safi];
- if (rmap->name)
- XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name);
}
+ if (bgp->route[afi][safi])
+ bgp_table_finish(&bgp->route[afi][safi]);
+ if (bgp->aggregate[afi][safi])
+ bgp_table_finish(&bgp->aggregate[afi][safi]);
+ if (bgp->rib[afi][safi])
+ bgp_table_finish(&bgp->rib[afi][safi]);
+ rmap = &bgp->table_map[afi][safi];
+ if (rmap->name)
+ XFREE(MTYPE_ROUTE_MAP_NAME, rmap->name);
+ }
bgp_scan_finish(bgp);
bgp_address_destroy(bgp);
* peer_group_bind as that is sub-optimal and does some stuff we don't
* want.
*/
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) {
- if (!group->conf->afc[afi][safi])
- continue;
- peer->afc[afi][safi] = 1;
+ FOREACH_AFI_SAFI (afi, safi) {
+ if (!group->conf->afc[afi][safi])
+ continue;
+ peer->afc[afi][safi] = 1;
- if (!peer_af_find(peer, afi, safi))
- peer_af_create(peer, afi, safi);
+ if (!peer_af_find(peer, afi, safi))
+ peer_af_create(peer, afi, safi);
- peer_group2peer_config_copy_af(group, peer, afi, safi);
- }
+ peer_group2peer_config_copy_af(group, peer, afi, safi);
+ }
/* Mark as dynamic, but also as a "config node" for other things to
* work. */
update_group_policy_update(bgp, BGP_POLICY_FILTER_LIST,
access->name, 0, 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++) {
- filter = &peer->filter[afi][safi];
-
- for (direct = FILTER_IN;
- direct < FILTER_MAX; direct++) {
- if (filter->dlist[direct].name)
- filter->dlist[direct]
- .alist = access_list_lookup(
- afi,
- filter->dlist[direct]
- .name);
- else
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &peer->filter[afi][safi];
+
+ for (direct = FILTER_IN; direct < FILTER_MAX;
+ direct++) {
+ if (filter->dlist[direct].name)
+ filter->dlist[direct]
+ .alist = access_list_lookup(
+ afi,
filter->dlist[direct]
- .alist = NULL;
- }
+ .name);
+ else
+ filter->dlist[direct].alist =
+ NULL;
}
+ }
}
for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX;
- safi++) {
- filter =
- &group->conf->filter[afi][safi];
-
- for (direct = FILTER_IN;
- direct < FILTER_MAX; direct++) {
- if (filter->dlist[direct].name)
- filter->dlist[direct]
- .alist = access_list_lookup(
- afi,
- filter->dlist[direct]
- .name);
- else
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &group->conf->filter[afi][safi];
+
+ for (direct = FILTER_IN; direct < FILTER_MAX;
+ direct++) {
+ if (filter->dlist[direct].name)
+ filter->dlist[direct]
+ .alist = access_list_lookup(
+ afi,
filter->dlist[direct]
- .alist = NULL;
- }
+ .name);
+ else
+ filter->dlist[direct].alist =
+ NULL;
}
+ }
}
#if ENABLE_BGP_VNC
vnc_prefix_list_update(bgp);
plist ? prefix_list_name(plist) : NULL, 0, 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++) {
- filter = &peer->filter[afi][safi];
-
- for (direct = FILTER_IN;
- direct < FILTER_MAX; direct++) {
- if (filter->plist[direct].name)
- filter->plist[direct]
- .plist = prefix_list_lookup(
- afi,
- filter->plist[direct]
- .name);
- else
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &peer->filter[afi][safi];
+
+ for (direct = FILTER_IN; direct < FILTER_MAX;
+ direct++) {
+ if (filter->plist[direct].name)
+ filter->plist[direct]
+ .plist = prefix_list_lookup(
+ afi,
filter->plist[direct]
- .plist = NULL;
- }
+ .name);
+ else
+ filter->plist[direct].plist =
+ NULL;
}
+ }
}
for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX;
- safi++) {
- filter =
- &group->conf->filter[afi][safi];
-
- for (direct = FILTER_IN;
- direct < FILTER_MAX; direct++) {
- if (filter->plist[direct].name)
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &group->conf->filter[afi][safi];
+
+ for (direct = FILTER_IN; direct < FILTER_MAX;
+ direct++) {
+ if (filter->plist[direct].name)
+ filter->plist[direct]
+ .plist = prefix_list_lookup(
+ afi,
filter->plist[direct]
- .plist = prefix_list_lookup(
- afi,
- filter->plist[direct]
- .name);
- else
- filter->plist[direct]
- .plist = NULL;
- }
+ .name);
+ else
+ filter->plist[direct].plist =
+ NULL;
}
+ }
}
}
}
aslist_name, 0, 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++) {
- filter = &peer->filter[afi][safi];
-
- for (direct = FILTER_IN;
- direct < FILTER_MAX; direct++) {
- if (filter->aslist[direct].name)
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &peer->filter[afi][safi];
+
+ for (direct = FILTER_IN; direct < FILTER_MAX;
+ direct++) {
+ if (filter->aslist[direct].name)
+ filter->aslist[direct]
+ .aslist = as_list_lookup(
filter->aslist[direct]
- .aslist = as_list_lookup(
- filter->aslist[direct]
- .name);
- else
- filter->aslist[direct]
- .aslist = NULL;
- }
+ .name);
+ else
+ filter->aslist[direct].aslist =
+ NULL;
}
+ }
}
for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group)) {
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (safi = SAFI_UNICAST; safi < SAFI_MAX;
- safi++) {
- filter =
- &group->conf->filter[afi][safi];
-
- for (direct = FILTER_IN;
- direct < FILTER_MAX; direct++) {
- if (filter->aslist[direct].name)
+ FOREACH_AFI_SAFI (afi, safi) {
+ filter = &group->conf->filter[afi][safi];
+
+ for (direct = FILTER_IN; direct < FILTER_MAX;
+ direct++) {
+ if (filter->aslist[direct].name)
+ filter->aslist[direct]
+ .aslist = as_list_lookup(
filter->aslist[direct]
- .aslist = as_list_lookup(
- filter->aslist[direct]
- .name);
- else
- filter->aslist[direct]
- .aslist = NULL;
- }
+ .name);
+ else
+ filter->aslist[direct].aslist =
+ NULL;
}
+ }
}
}
}