Skip to content

Commit

Permalink
Merge pull request #17905 from pguibert6WIND/advertised_routes_incorr…
Browse files Browse the repository at this point in the history
…ect_json

Advertised routes incorrect json
  • Loading branch information
ton31337 authored Jan 27, 2025
2 parents 95db38f + e78a049 commit ee67699
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 1 deletion.
4 changes: 3 additions & 1 deletion bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -15245,7 +15245,7 @@ static int peer_adj_routes(struct vty *vty, struct peer *peer, afi_t afi,
if (type == bgp_show_adj_route_advertised ||
type == bgp_show_adj_route_received) {
if (first) {
vty_out(vty, "\"%s\":", rd_str);
vty_out(vty, "{\"%s\":", rd_str);
first = false;
} else {
vty_out(vty, ",\"%s\":", rd_str);
Expand All @@ -15259,6 +15259,8 @@ static int peer_adj_routes(struct vty *vty, struct peer *peer, afi_t afi,
output_count += output_count_per_rd;
filtered_count += filtered_count_per_rd;
}
if (first == false && json_routes)
vty_out(vty, "}");
} else {
show_adj_route(vty, peer, table, afi, safi, type, rmap_name,
json, json_ar, show_flags, &header1, &header2,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"bgpLocalRouterId":"192.0.2.1",
"defaultLocPrf":100,
"localAS":65500,
"advertisedRoutes":{
"192.0.2.1:1":{
"rd":"192.0.2.1:1",
"10.101.0.0/24":{
"prefix":"10.101.0.0/24",
"advertisedTo":{
"10.125.0.2":{
"hostname":"r2"
}
},
"paths":[{
"aspath":{
"string":"Local",
"segments":[],
"length":0
},
"nhVrfName":"vrf1",
"announceNexthopSelf":true,
"origin":"incomplete",
"metric":0,
"locPrf":100,
"weight":32768,
"valid":true,
"sourced":true,
"local":true,
"bestpath":{
"overall":true,
"selectionReason":"First path received"
},
"extendedCommunity":{
"string":"RT:192.0.2.1:100"
},
"originatorId":"192.0.2.1",
"remoteLabel":101,
"nexthops":[{
"ip":"0.0.0.0",
"hostname":"r1",
"afi":"ipv4",
"metric":0,
"accessible":true,
"used":true
}],
"peer":{
"peerId":"0.0.0.0",
"routerId":"192.0.2.1"
}
}]
}
},
"192.0.2.1:3":{
"rd":"192.0.2.1:3",
"10.103.0.0/24":{
"prefix":"10.103.0.0/24",
"advertisedTo":{
"10.125.0.2":{
"hostname":"r2"
}
},
"paths":[{
"aspath":{
"string":"Local",
"segments":[],
"length":0
},
"nhVrfName":"vrf3",
"announceNexthopSelf":true,
"origin":"incomplete",
"metric":0,
"locPrf":100,
"weight":32768,
"valid":true,
"sourced":true,
"local":true,
"bestpath":{
"overall":true,
"selectionReason":"First path received"
},
"extendedCommunity":{
"string":"RT:192.0.2.1:300"
},
"originatorId":"192.0.2.1",
"remoteLabel":103,
"nexthops":[{
"ip":"0.0.0.0",
"hostname":"r1",
"afi":"ipv4",
"metric":0,
"accessible":true,
"used":true
}],
"peer":{
"peerId":"0.0.0.0",
"routerId":"192.0.2.1"
}
}]
}
}
},
"totalPrefixCounter":2,
"filteredPrefixCounter":0
}
38 changes: 38 additions & 0 deletions tests/topotests/bgp_vpnv4_noretain/test_bgp_vpnv4_noretain.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,29 @@ def check_show_bgp_ipv4_vpn(rname, json_file):
assert result is None, assertmsg


def check_show_bgp_ipv4_vpn_peer_advertised_routes(rname, peer, json_file):
tgen = get_topogen()
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
router = tgen.gears[rname]

logger.info(
"Checking VPNv4 advertised routes for on {} for peer {}".format(rname, peer)
)

json_file = "{}/{}/{}".format(CWD, router.name, json_file)
expected = json.loads(open(json_file).read())
test_func = partial(
topotest.router_json_cmp,
router,
"show bgp ipv4 vpn neighbors {} advertised-routes detail json".format(peer),
expected,
)
_, result = topotest.run_and_expect(test_func, None, count=20, wait=1)
assertmsg = '"{}" JSON output mismatches'.format(router.name)
assert result is None, assertmsg


def check_show_bgp_vrf_ipv4(rname, json_file):
tgen = get_topogen()
if tgen.routers_have_failure():
Expand Down Expand Up @@ -563,6 +586,21 @@ def test_bgp_retain_step12():
check_show_bgp_vrf_ipv4(rname, "ipv4_vrf_all_routes_init.json")


def test_bgp_advertised_routes_step13():
"""
Dump advertised routes from r1 to r2
Check that the localpref attribute is set on the show command
"""

tgen = get_topogen()
if tgen.routers_have_failure():
pytest.skip(tgen.errors)

check_show_bgp_ipv4_vpn_peer_advertised_routes(
"r1", "10.125.0.2", "ipv4_vpn_routes_advertised_10_125_0_2.json"
)


def test_memory_leak():
"Run the memory leak test and report results."
tgen = get_topogen()
Expand Down

0 comments on commit ee67699

Please sign in to comment.