]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/bgp_zebra.c
bgpd: Convert binfo to path
[mirror_frr.git] / bgpd / bgp_zebra.c
index 5a5c7c9861635036817959a06faa225db7bbfc63..1c0553344b0db6d80fecba25ca1d10a6dfce3fd3 100644 (file)
@@ -925,8 +925,8 @@ bool bgp_zebra_nexthop_set(union sockunion *local, union sockunion *remote,
        return true;
 }
 
-static struct in6_addr *bgp_info_to_ipv6_nexthop(struct bgp_info *info,
-                                                ifindex_t *ifindex)
+static struct in6_addr *
+bgp_path_info_to_ipv6_nexthop(struct bgp_path_info *info, ifindex_t *ifindex)
 {
        struct in6_addr *nexthop = NULL;
 
@@ -968,7 +968,7 @@ static struct in6_addr *bgp_info_to_ipv6_nexthop(struct bgp_info *info,
 }
 
 static int bgp_table_map_apply(struct route_map *map, struct prefix *p,
-                              struct bgp_info *info)
+                              struct bgp_path_info *info)
 {
        route_map_result_t ret;
 
@@ -994,7 +994,7 @@ static int bgp_table_map_apply(struct route_map *map, struct prefix *p,
                        ifindex_t ifindex;
                        struct in6_addr *nexthop;
 
-                       nexthop = bgp_info_to_ipv6_nexthop(info, &ifindex);
+                       nexthop = bgp_path_info_to_ipv6_nexthop(info, &ifindex);
                        zlog_debug(
                                "Zebra rmap deny: IPv6 route %s/%d nexthop %s",
                                inet_ntop(AF_INET6, &p->u.prefix6, buf[0],
@@ -1121,13 +1121,11 @@ static int update_ipv4nh_for_route_install(int nh_othervrf,
        return 1;
 }
 
-static int update_ipv6nh_for_route_install(int nh_othervrf,
-                                          struct in6_addr *nexthop,
-                                          ifindex_t ifindex,
-                                          struct bgp_info *ri,
-                                          struct bgp_info *best_ri,
-                                          bool is_evpn,
-                                          struct zapi_nexthop *api_nh)
+static int
+update_ipv6nh_for_route_install(int nh_othervrf, struct in6_addr *nexthop,
+                               ifindex_t ifindex, struct bgp_path_info *ri,
+                               struct bgp_path_info *best_ri, bool is_evpn,
+                               struct zapi_nexthop *api_nh)
 {
        struct attr *attr;
 
@@ -1183,7 +1181,7 @@ static int update_ipv6nh_for_route_install(int nh_othervrf,
 }
 
 void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
-                       struct bgp_info *info, struct bgp *bgp, afi_t afi,
+                       struct bgp_path_info *info, struct bgp *bgp, afi_t afi,
                        safi_t safi)
 {
        struct zapi_route api;
@@ -1193,11 +1191,11 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
        int has_valid_label = 0;
        uint8_t distance;
        struct peer *peer;
-       struct bgp_info *mpinfo;
+       struct bgp_path_info *mpinfo;
        uint32_t metric;
        struct attr local_attr;
-       struct bgp_info local_info;
-       struct bgp_info *mpinfo_cp = &local_info;
+       struct bgp_path_info local_info;
+       struct bgp_path_info *mpinfo_cp = &local_info;
        route_tag_t tag;
        mpls_label_t label;
        int nh_othervrf = 0;
@@ -1242,7 +1240,8 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
 
                /* Obtain peer from parent */
                if (info->extra && info->extra->parent)
-                       peer = ((struct bgp_info *)(info->extra->parent))->peer;
+                       peer = ((struct bgp_path_info *)(info->extra->parent))
+                                      ->peer;
        }
 
        tag = info->attr->tag;
@@ -1266,7 +1265,7 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
 
        /* Metric is currently based on the best-path only */
        metric = info->attr->med;
-       for (mpinfo = info; mpinfo; mpinfo = bgp_info_mpath_next(mpinfo)) {
+       for (mpinfo = info; mpinfo; mpinfo = bgp_path_info_mpath_next(mpinfo)) {
                if (valid_nh_count >= multipath_num)
                        break;
 
@@ -1356,8 +1355,8 @@ void bgp_zebra_announce(struct bgp_node *rn, struct prefix *p,
                                        tag = mpinfo_cp->attr->tag;
                                }
                        }
-                       nexthop = bgp_info_to_ipv6_nexthop(mpinfo_cp,
-                                                          &ifindex);
+                       nexthop = bgp_path_info_to_ipv6_nexthop(mpinfo_cp,
+                                                               &ifindex);
                        nh_updated = update_ipv6nh_for_route_install(
                                        nh_othervrf, nexthop, ifindex,
                                        mpinfo, info, is_evpn, api_nh);
@@ -1466,7 +1465,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi)
 {
        struct bgp_node *rn;
        struct bgp_table *table;
-       struct bgp_info *ri;
+       struct bgp_path_info *ri;
 
        /* Don't try to install if we're not connected to Zebra or Zebra doesn't
         * know of this instance.
@@ -1480,7 +1479,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi)
 
        for (rn = bgp_table_top(table); rn; rn = bgp_route_next(rn))
                for (ri = rn->info; ri; ri = ri->next)
-                       if (CHECK_FLAG(ri->flags, BGP_INFO_SELECTED) &&
+                       if (CHECK_FLAG(ri->flags, BGP_PATH_SELECTED) &&
 
                            (ri->type == ZEBRA_ROUTE_BGP
                             && (ri->sub_type == BGP_ROUTE_NORMAL
@@ -1490,7 +1489,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi)
                                                   safi);
 }
 
-void bgp_zebra_withdraw(struct prefix *p, struct bgp_info *info,
+void bgp_zebra_withdraw(struct prefix *p, struct bgp_path_info *info,
                        struct bgp *bgp, safi_t safi)
 {
        struct zapi_route api;
@@ -1680,7 +1679,7 @@ int bgp_redistribute_metric_set(struct bgp *bgp, struct bgp_redist *red,
                                afi_t afi, int type, uint32_t metric)
 {
        struct bgp_node *rn;
-       struct bgp_info *ri;
+       struct bgp_path_info *ri;
 
        if (red->redist_metric_flag && red->redist_metric == metric)
                return 0;
@@ -1703,8 +1702,8 @@ int bgp_redistribute_metric_set(struct bgp *bgp, struct bgp_redist *red,
                                ri->attr = bgp_attr_intern(&new_attr);
                                bgp_attr_unintern(&old_attr);
 
-                               bgp_info_set_flag(rn, ri,
-                                                 BGP_INFO_ATTR_CHANGED);
+                               bgp_path_info_set_flag(rn, ri,
+                                                      BGP_PATH_ATTR_CHANGED);
                                bgp_process(bgp, rn, afi, SAFI_UNICAST);
                        }
                }
@@ -2081,20 +2080,20 @@ static int ipset_entry_notify_owner(int command, struct zclient *zclient,
                break;
        case ZAPI_IPSET_ENTRY_INSTALLED:
                {
-                       struct bgp_info *bgp_info;
-                       struct bgp_info_extra *extra;
-
-                       bgp_pbime->installed = true;
-                       bgp_pbime->install_in_progress = false;
-                       if (BGP_DEBUG(zebra, ZEBRA))
-                               zlog_debug("%s: Received IPSET_ENTRY_INSTALLED",
-                                          __PRETTY_FUNCTION__);
-                       /* link bgp_info to bpme */
-                       bgp_info = (struct bgp_info *)bgp_pbime->bgp_info;
-                       extra = bgp_info_extra_get(bgp_info);
-                       if (extra->bgp_fs_pbr == NULL)
-                               extra->bgp_fs_pbr = list_new();
-                       listnode_add(extra->bgp_fs_pbr, bgp_pbime);
+               struct bgp_path_info *path;
+               struct bgp_path_info_extra *extra;
+
+               bgp_pbime->installed = true;
+               bgp_pbime->install_in_progress = false;
+               if (BGP_DEBUG(zebra, ZEBRA))
+                       zlog_debug("%s: Received IPSET_ENTRY_INSTALLED",
+                                  __PRETTY_FUNCTION__);
+               /* link bgp_path_info to bpme */
+               path = (struct bgp_path_info *)bgp_pbime->path;
+               extra = bgp_path_info_extra_get(path);
+               if (extra->bgp_fs_pbr == NULL)
+                       extra->bgp_fs_pbr = list_new();
+               listnode_add(extra->bgp_fs_pbr, bgp_pbime);
                }
                break;
        case ZAPI_IPSET_ENTRY_FAIL_REMOVE: