diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2022-12-15 16:50:52 +0200 |
|---|---|---|
| committer | Donatas Abraitis <donatas@opensourcerouting.org> | 2022-12-19 23:27:33 +0200 |
| commit | 71a055c9d1e8d4c647a8c9940eeff641a68a52c7 (patch) | |
| tree | 5034c63042a281777479e9e514dcf60f70ed1c8d /bgpd/bgp_snmp_bgp4v2.c | |
| parent | 2b9d7b2c9b23be41a9e188402a3de0cbae95aa83 (diff) | |
bgpd: Specify prefix address-family before looking into BGP table
Otherwise, lookup behaves a bit weird.
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
Diffstat (limited to 'bgpd/bgp_snmp_bgp4v2.c')
| -rw-r--r-- | bgpd/bgp_snmp_bgp4v2.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/bgpd/bgp_snmp_bgp4v2.c b/bgpd/bgp_snmp_bgp4v2.c index 20854ff64e..d74c13c9c5 100644 --- a/bgpd/bgp_snmp_bgp4v2.c +++ b/bgpd/bgp_snmp_bgp4v2.c @@ -421,7 +421,7 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, { 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; @@ -501,6 +501,8 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, else addr->prefixlen = len * 8; + addr->family = family; + dest = bgp_node_get(bgp->rib[afi][SAFI_UNICAST], addr); offset++; @@ -526,8 +528,8 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, 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) { @@ -565,6 +567,7 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, offset = name + namelen; + /* Encode prefix into OID */ if (family == AF_INET) oid_copy_in_addr(offset, &rn_p->u.prefix4); else @@ -574,6 +577,7 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, *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); @@ -585,6 +589,7 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, } addr->prefixlen = rn_p->prefixlen; + addr->family = rn_p->family; bgp_dest_unlock_node(dest); @@ -595,7 +600,7 @@ bgp4v2PathAttrLookup(struct variable *v, oid name[], size_t *length, 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; } |
