{
oid *offset;
int offsetlen;
- struct bgp_path_info *path;
+ struct bgp_path_info *path, *min;
struct bgp_dest *dest;
union sockunion su;
unsigned int len;
else
addr->prefixlen = len * 8;
+ addr->family = family;
+
dest = bgp_node_get(bgp->rib[afi][SAFI_UNICAST], addr);
offset++;
if (!dest)
return NULL;
- while ((dest = bgp_route_next(dest))) {
- struct bgp_path_info *min = NULL;
+ do {
+ min = NULL;
for (path = bgp_dest_get_bgp_path_info(dest); path;
path = path->next) {
offset = name + namelen;
+ /* Encode prefix into OID */
if (family == AF_INET)
oid_copy_in_addr(offset, &rn_p->u.prefix4);
else
*offset = rn_p->prefixlen;
offset++;
+ /* Encode peer's IP into OID */
if (family == AF_INET) {
oid_copy_in_addr(offset,
&min->peer->su.sin.sin_addr);
}
addr->prefixlen = rn_p->prefixlen;
+ addr->family = rn_p->family;
bgp_dest_unlock_node(dest);
memset(&paddr.ip._v4_addr, 0, afi_len);
else
memset(&paddr.ip._v6_addr, 0, afi_len);
- }
+ } while ((dest = bgp_route_next(dest)));
return NULL;
}