]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: use FOREACH_AFI_SAFI where possible 1474/head
authorQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 21 Nov 2017 18:02:06 +0000 (13:02 -0500)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 21 Nov 2017 18:02:06 +0000 (13:02 -0500)
Improves consistency and readability.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
bgpd/bgp_advertise.c
bgpd/bgp_fsm.c
bgpd/bgp_open.c
bgpd/bgp_packet.c
bgpd/bgp_route.c
bgpd/bgp_routemap.c
bgpd/bgp_vty.c
bgpd/bgpd.c

index 2c83de89e06f378144eee957e43777c67cf67dd5..840cc35751f0965c7a1f441f898ca377c2d286ad 100644 (file)
@@ -239,19 +239,16 @@ void bgp_sync_init(struct peer *peer)
        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)
@@ -259,15 +256,13 @@ 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;
+       }
 }
index aa350d3dd4ca65462407051152f6ec7da1db7c0d..8de7e970de0fe0022cb963c5a4a20f3e59f87c2c 100644 (file)
@@ -181,22 +181,15 @@ static struct peer *peer_xfer_conn(struct peer *from_peer)
                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(
@@ -1070,30 +1063,28 @@ int bgp_stop(struct peer *peer)
                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)) {
@@ -1471,38 +1462,33 @@ static int bgp_establish(struct peer *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);
 
index 5c9ba89a5786c5f63e0cf5e306fd536eb9f976e9..77fb61fbb863dd9d1e07da1fdc657cc58086a8bb 100644 (file)
@@ -1285,59 +1285,52 @@ void bgp_open_capability(struct stream *s, struct 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);
@@ -1363,21 +1356,20 @@ void bgp_open_capability(struct stream *s, struct peer *peer)
        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);
@@ -1385,46 +1377,43 @@ void bgp_open_capability(struct stream *s, struct peer *peer)
        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)) {
@@ -1497,22 +1486,21 @@ void bgp_open_capability(struct stream *s, struct peer *peer)
           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. */
index b7f01140459d3f39adcf373c8e74c61bc1f84576..a955b3512c9a96d1e754d557581879d24a06ef53 100644 (file)
@@ -204,65 +204,59 @@ static struct stream *bgp_write_packet(struct peer *peer)
        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;
 }
@@ -282,48 +276,44 @@ static void bgp_write_proceed_actions(struct peer *peer)
                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;
@@ -1300,18 +1290,17 @@ static void bgp_update_explicit_eors(struct peer *peer)
        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++;
index 4ee1aafbe9f375f7b27e8d1de80280ba7449ea2a..6c72ba3e0bc387dfadd5f51af0483bff3ecf78a2 100644 (file)
@@ -2056,12 +2056,10 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_node *rn,
                                 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);
@@ -3434,9 +3432,8 @@ void bgp_announce_route_all(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++)
-                       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,
@@ -3718,9 +3715,8 @@ void bgp_clear_route_all(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++)
-                       bgp_clear_route(peer, afi, safi);
+       FOREACH_AFI_SAFI (afi, safi)
+               bgp_clear_route(peer, afi, safi);
 
 #if ENABLE_BGP_VNC
        rfapiProcessPeerDown(peer);
@@ -4624,30 +4620,28 @@ void bgp_static_add(struct bgp *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_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
@@ -4661,39 +4655,34 @@ void bgp_static_delete(struct bgp *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)
@@ -4707,32 +4696,30 @@ 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);
 }
 
@@ -4771,9 +4758,8 @@ void bgp_purge_static_redist_routes(struct bgp *bgp)
        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);
 }
 
 /*
@@ -11350,10 +11336,8 @@ void bgp_route_init(void)
        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);
@@ -11525,9 +11509,8 @@ void bgp_route_finish(void)
        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;
+       }
 }
index f26498fb0322dc2a34e07b1cda1582f6ec7f199c..f588acfb790900103983d83b6cd7efbe7f44571b 100644 (file)
@@ -2881,25 +2881,23 @@ static void bgp_route_map_update_peer_group(const char *rmap_name,
        /* 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;
+               }
+       }
 }
 
 /*
@@ -2930,14 +2928,12 @@ static void bgp_route_map_process_update(struct bgp *bgp, const char *rmap_name,
                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 */
@@ -2947,62 +2943,55 @@ static void bgp_route_map_process_update(struct bgp *bgp, const char *rmap_name,
        /* 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++)
index db19835f88f686f9307a944f6675a323c68e6b3f..727884393bcf885b051414901b3d86eeb508033f 100644 (file)
@@ -1654,15 +1654,13 @@ DEFUN (no_bgp_deterministic_med,
                bestpath_per_as_used = 0;
 
                for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
-                       for (afi = AFI_IP; afi < AFI_MAX; afi++)
-                               for (safi = SAFI_UNICAST; safi < SAFI_MAX;
-                                    safi++)
-                                       if (CHECK_FLAG(
-                                                   peer->af_flags[afi][safi],
-                                                   PEER_FLAG_ADDPATH_TX_BESTPATH_PER_AS)) {
-                                               bestpath_per_as_used = 1;
-                                               break;
-                                       }
+                       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;
@@ -8403,133 +8401,120 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
 
                                        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);
                                }
@@ -8678,45 +8663,32 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                                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(
@@ -8798,37 +8770,33 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                                                        "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) {
@@ -8875,101 +8843,93 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                                                  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 */
@@ -9065,30 +9025,25 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                                }
 
                                /* 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:");
@@ -9150,33 +9105,29 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                                                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");
@@ -9201,36 +9152,25 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                        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++;
                                        }
                                }
                        }
@@ -9261,42 +9201,30 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
                        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");
@@ -9424,11 +9352,10 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, u_char use_json,
        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",
@@ -10479,13 +10406,12 @@ static int bgp_show_one_peer_group(struct vty *vty, struct peer_group *group)
 
        /* 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
index 345ceab9ed83a71a3e1d80027afb045badfb566e..a4952be8a67a6ac66d0ebe12efd63094f221566c 100644 (file)
@@ -1121,18 +1121,17 @@ struct peer *peer_new(struct bgp *bgp)
        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.  */
@@ -1214,16 +1213,13 @@ void peer_xfer_config(struct peer *peer_dst, struct peer *peer_src)
                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];
@@ -1425,10 +1421,8 @@ void bgp_recalculate_all_bestpaths(struct bgp *bgp)
        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);
        }
 }
 
@@ -2180,51 +2174,49 @@ int peer_delete(struct peer *peer)
        }
 
        /* 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);
 
@@ -2622,19 +2614,17 @@ int peer_group_bind(struct bgp *bgp, union sockunion *su, struct peer *peer,
                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) {
@@ -2704,15 +2694,15 @@ int peer_group_bind(struct bgp *bgp, union sockunion *su, struct peer *peer,
 
                /* 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);
 
@@ -2734,19 +2724,18 @@ int peer_group_unbind(struct bgp *bgp, struct peer *peer,
        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 */
@@ -2846,18 +2835,17 @@ static struct bgp *bgp_create(as_t *as, const char *name,
        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;
@@ -3206,27 +3194,26 @@ void bgp_free(struct bgp *bgp)
                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);
@@ -3360,17 +3347,16 @@ struct peer *peer_create_bind_dynamic_neighbor(struct bgp *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. */
@@ -5237,45 +5223,40 @@ static void peer_distribute_update(struct access_list *access)
                        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);
@@ -5408,45 +5389,40 @@ static void peer_prefix_list_update(struct prefix_list *plist)
                        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;
                                }
+                       }
                }
        }
 }
@@ -5565,43 +5541,38 @@ static void peer_aslist_update(const char *aslist_name)
                                           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;
                                }
+                       }
                }
        }
 }