]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_mplsvpn.c
*: remove trailing newlines from zlog messages
[mirror_frr.git] / bgpd / bgp_mplsvpn.c
index d4204126e170476fa90d9ad1f6a2c4f932815e70..446d094c9400779cef06ca0ec1a9bb0c0972fe7b 100644 (file)
@@ -289,6 +289,8 @@ void vpn_leak_zebra_vrf_label_update(struct bgp *bgp, afi_t afi)
                           bgp->vrf_id);
        }
 
+       if (label == BGP_PREVENT_VRF_2_VRF_LEAK)
+               label = MPLS_LABEL_NONE;
        zclient_send_vrf_label(zclient, bgp->vrf_id, afi, label, ZEBRA_LSP_BGP);
        bgp->vpn_policy[afi].tovpn_zebra_vrf_label_last_sent = label;
 }
@@ -316,6 +318,9 @@ void vpn_leak_zebra_vrf_label_withdraw(struct bgp *bgp, afi_t afi)
                           bgp->name_pretty, bgp->vrf_id);
        }
 
+       if (label == BGP_PREVENT_VRF_2_VRF_LEAK)
+               label = MPLS_LABEL_NONE;
+
        zclient_send_vrf_label(zclient, bgp->vrf_id, afi, label, ZEBRA_LSP_BGP);
        bgp->vpn_policy[afi].tovpn_zebra_vrf_label_last_sent = label;
 }
@@ -500,7 +505,7 @@ leak_update(struct bgp *bgp, /* destination bgp instance */
        /*
         * match parent
         */
-       for (bpi = bn->info; bpi; bpi = bpi->next) {
+       for (bpi = bgp_node_get_bgp_path_info(bn); bpi; bpi = bpi->next) {
                if (bpi->extra && bpi->extra->parent == parent)
                        break;
        }
@@ -919,11 +924,13 @@ void vpn_leak_from_vrf_withdraw(struct bgp *bgp_vpn,              /* to */
        bn = bgp_afi_node_get(bgp_vpn->rib[afi][safi], afi, safi, p,
                              &(bgp_vrf->vpn_policy[afi].tovpn_rd));
 
+       if (!bn)
+               return;
        /*
         * vrf -> vpn
         * match original bpi imported from
         */
-       for (bpi = (bn ? bn->info : NULL); bpi; bpi = bpi->next) {
+       for (bpi = bgp_node_get_bgp_path_info(bn); bpi; bpi = bpi->next) {
                if (bpi->extra && bpi->extra->parent == path_vrf) {
                        break;
                }
@@ -959,7 +966,7 @@ void vpn_leak_from_vrf_withdraw_all(struct bgp *bgp_vpn, /* to */
                struct bgp_path_info *bpi;
 
                /* This is the per-RD table of prefixes */
-               table = prn->info;
+               table = bgp_node_get_bgp_table_info(prn);
 
                if (!table)
                        continue;
@@ -968,13 +975,14 @@ void vpn_leak_from_vrf_withdraw_all(struct bgp *bgp_vpn, /* to */
 
                        char buf[PREFIX2STR_BUFFER];
 
-                       if (debug && bn->info) {
+                       bpi = bgp_node_get_bgp_path_info(bn);
+                       if (debug && bpi) {
                                zlog_debug(
                                        "%s: looking at prefix %s", __func__,
                                        prefix2str(&bn->p, buf, sizeof(buf)));
                        }
 
-                       for (bpi = bn->info; bpi; bpi = bpi->next) {
+                       for (; bpi; bpi = bpi->next) {
                                if (debug)
                                        zlog_debug("%s: type %d, sub_type %d",
                                                   __func__, bpi->type,
@@ -987,7 +995,7 @@ void vpn_leak_from_vrf_withdraw_all(struct bgp *bgp_vpn, /* to */
                                    == bgp_vrf) {
                                        /* delete route */
                                        if (debug)
-                                               zlog_debug("%s: deleting it\n",
+                                               zlog_debug("%s: deleting it",
                                                           __func__);
                                        bgp_aggregate_decrement(bgp_vpn, &bn->p,
                                                                bpi, afi, safi);
@@ -1017,7 +1025,8 @@ void vpn_leak_from_vrf_update_all(struct bgp *bgp_vpn, /* to */
                if (debug)
                        zlog_debug("%s: node=%p", __func__, bn);
 
-               for (bpi = bn->info; bpi; bpi = bpi->next) {
+               for (bpi = bgp_node_get_bgp_path_info(bn); bpi;
+                    bpi = bpi->next) {
                        if (debug)
                                zlog_debug(
                                        "%s: calling vpn_leak_from_vrf_update",
@@ -1064,9 +1073,13 @@ vpn_leak_to_vrf_update_onevrf(struct bgp *bgp_vrf,           /* to */
                return;
        }
 
-       if (debug)
-               zlog_debug("%s: updating to vrf %s", __func__,
-                               bgp_vrf->name_pretty);
+       if (debug) {
+               char buf_prefix[PREFIX_STRLEN];
+
+               prefix2str(p, buf_prefix, sizeof(buf_prefix));
+               zlog_debug("%s: updating %s to vrf %s", __func__,
+                               buf_prefix, bgp_vrf->name_pretty);
+       }
 
        bgp_attr_dup(&static_attr, path_vpn->attr); /* shallow copy */
 
@@ -1079,8 +1092,6 @@ vpn_leak_to_vrf_update_onevrf(struct bgp *bgp_vrf,            /* to */
         */
        uint8_t nhfamily = NEXTHOP_FAMILY(path_vpn->attr->mp_nexthop_len);
 
-       if (nhfamily != AF_UNSPEC)
-               static_attr.flag |= ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP);
        memset(&nexthop_orig, 0, sizeof(nexthop_orig));
        nexthop_orig.family = nhfamily;
 
@@ -1100,6 +1111,7 @@ vpn_leak_to_vrf_update_onevrf(struct bgp *bgp_vrf,            /* to */
                        static_attr.mp_nexthop_len =
                                path_vpn->attr->mp_nexthop_len;
                }
+               static_attr.flag |= ATTR_FLAG_BIT(BGP_ATTR_NEXT_HOP);
                break;
        case AF_INET6:
                /* save */
@@ -1123,6 +1135,7 @@ vpn_leak_to_vrf_update_onevrf(struct bgp *bgp_vrf,            /* to */
                memset(&info, 0, sizeof(info));
                info.peer = bgp_vrf->peer_self;
                info.attr = &static_attr;
+               info.extra = path_vpn->extra; /* Used for source-vrf filter */
                ret = route_map_apply(bgp_vrf->vpn_policy[afi]
                                              .rmap[BGP_VPN_POLICY_DIR_FROMVPN],
                                      p, RMAP_BGP, &info);
@@ -1299,7 +1312,9 @@ void vpn_leak_to_vrf_withdraw(struct bgp *bgp_vpn,            /* from */
                                   bgp->name_pretty);
 
                bn = bgp_afi_node_get(bgp->rib[afi][safi], afi, safi, p, NULL);
-               for (bpi = (bn ? bn->info : NULL); bpi; bpi = bpi->next) {
+
+               for (bpi = bgp_node_get_bgp_path_info(bn); bpi;
+                    bpi = bpi->next) {
                        if (bpi->extra
                            && (struct bgp_path_info *)bpi->extra->parent
                                       == path_vpn) {
@@ -1335,7 +1350,8 @@ void vpn_leak_to_vrf_withdraw_all(struct bgp *bgp_vrf, /* to */
        for (bn = bgp_table_top(bgp_vrf->rib[afi][safi]); bn;
             bn = bgp_route_next(bn)) {
 
-               for (bpi = bn->info; bpi; bpi = bpi->next) {
+               for (bpi = bgp_node_get_bgp_path_info(bn); bpi;
+                    bpi = bpi->next) {
                        if (bpi->extra && bpi->extra->bgp_orig != bgp_vrf) {
 
                                /* delete route */
@@ -1374,14 +1390,15 @@ void vpn_leak_to_vrf_update_all(struct bgp *bgp_vrf, /* to */
                memcpy(prd.val, prn->p.u.val, 8);
 
                /* This is the per-RD table of prefixes */
-               table = prn->info;
+               table = bgp_node_get_bgp_table_info(prn);
 
                if (!table)
                        continue;
 
                for (bn = bgp_table_top(table); bn; bn = bgp_route_next(bn)) {
 
-                       for (bpi = bn->info; bpi; bpi = bpi->next) {
+                       for (bpi = bgp_node_get_bgp_path_info(bn); bpi;
+                            bpi = bpi->next) {
 
                                if (bpi->extra
                                    && bpi->extra->bgp_orig == bgp_vrf)