Skip to content

Commit

Permalink
Merge pull request FRRouting#17728 from dmytroshytyi-6WIND/bgp_rpki_s…
Browse files Browse the repository at this point in the history
…tate

bgpd: add rpki current state
  • Loading branch information
ton31337 authored Jan 1, 2025
2 parents 97cad1c + 5f50b98 commit 3acfcef
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 9 deletions.
17 changes: 8 additions & 9 deletions bgpd/bgp_route.c
Original file line number Diff line number Diff line change
Expand Up @@ -11975,14 +11975,13 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t sa
continue;
}

if (type == bgp_show_type_rpki) {
if (dest_p->family == AF_INET
|| dest_p->family == AF_INET6)
rpki_curr_state = hook_call(
bgp_rpki_prefix_status,
pi->peer, pi->attr, dest_p);
if (rpki_target_state != RPKI_NOT_BEING_USED
&& rpki_curr_state != rpki_target_state)
if ((dest_p->family == AF_INET || dest_p->family == AF_INET6) &&
(detail_routes || detail_json || type == bgp_show_type_rpki)) {
rpki_curr_state = hook_call(bgp_rpki_prefix_status, pi->peer,
pi->attr, dest_p);
if (type == bgp_show_type_rpki &&
rpki_target_state != RPKI_NOT_BEING_USED &&
rpki_curr_state != rpki_target_state)
continue;
}

Expand Down Expand Up @@ -12213,7 +12212,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t sa

route_vty_out_detail(vty, bgp, dest, dest_p, pi,
family2afi(dest_p->family), safi,
RPKI_NOT_BEING_USED, json_paths, NULL);
rpki_curr_state, json_paths, NULL);
} else {
route_vty_out(vty, dest_p, pi, display,
safi, json_paths, wide);
Expand Down
70 changes: 70 additions & 0 deletions tests/topotests/bgp_rpki_topo1/r2/bgp_rpki_valid.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"vrfId": 0,
"vrfName": "default",
"tableVersion": 3,
"routerId": "192.0.2.2",
"defaultLocPrf": 100,
"localAS": 65002,
"routes": {
"198.51.100.0/24": [
{
"origin": "IGP",
"metric": 0,
"valid": true,
"version": 2,
"rpkiValidationState": "valid",
"bestpath": {
"overall": true,
"selectionReason": "First path received"
},
"nexthops": [
{
"ip": "192.0.2.1",
"hostname": "r1",
"afi": "ipv4",
"metric": 0,
"accessible": true,
"used": true
}
],
"peer": {
"peerId": "192.0.2.1",
"routerId": "192.0.2.1",
"hostname": "r1",
"type": "external"
}
}
],
"203.0.113.0/24": [
{
"origin": "IGP",
"metric": 0,
"valid": true,
"version": 3,
"rpkiValidationState": "valid",
"bestpath": {
"overall": true,
"selectionReason": "First path received"
},
"nexthops": [
{
"ip": "192.0.2.1",
"hostname": "r1",
"afi": "ipv4",
"metric": 0,
"accessible": true,
"used": true
}
],
"peer": {
"peerId": "192.0.2.1",
"routerId": "192.0.2.1",
"hostname": "r1",
"type": "external"
}
}
]
},
"totalRoutes": 3,
"totalPaths": 3
}
29 changes: 29 additions & 0 deletions tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,16 @@ def show_rpki_prefixes(rname, expected, vrf=None):
return topotest.json_cmp(output, expected)


def show_rpki_valid(rname, expected, vrf=None):
tgen = get_topogen()

cmd = "show bgp ipv4 detail json"

output = json.loads(tgen.gears[rname].vtysh_cmd(cmd))

return topotest.json_cmp(output, expected)


def show_bgp_ipv4_table_rpki(rname, rpki_state, expected, vrf=None):
tgen = get_topogen()

Expand All @@ -123,6 +133,25 @@ def show_bgp_ipv4_table_rpki(rname, rpki_state, expected, vrf=None):
return topotest.json_cmp(output, expected)


def test_show_bgp_rpki_prefixes_valid():
tgen = get_topogen()

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

for rname in ["r1", "r3"]:
logger.info("{}: checking if rtrd is running".format(rname))
if rtrd_process[rname].poll() is not None:
pytest.skip(tgen.errors)

rname = "r2"
expected = open(os.path.join(CWD, "{}/bgp_rpki_valid.json".format(rname))).read()
expected_json = json.loads(expected)
test_func = functools.partial(show_rpki_valid, rname, expected_json)
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, "Failed to see RPKI on {}".format(rname)


def test_show_bgp_rpki_prefixes():
tgen = get_topogen()

Expand Down

0 comments on commit 3acfcef

Please sign in to comment.