mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-26 03:07:51 +00:00
Merge pull request #17728 from dmytroshytyi-6WIND/bgp_rpki_state
bgpd: add rpki current state
This commit is contained in:
commit
3acfcef778
@ -11975,14 +11975,13 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t sa
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == bgp_show_type_rpki) {
|
if ((dest_p->family == AF_INET || dest_p->family == AF_INET6) &&
|
||||||
if (dest_p->family == AF_INET
|
(detail_routes || detail_json || type == bgp_show_type_rpki)) {
|
||||||
|| dest_p->family == AF_INET6)
|
rpki_curr_state = hook_call(bgp_rpki_prefix_status, pi->peer,
|
||||||
rpki_curr_state = hook_call(
|
pi->attr, dest_p);
|
||||||
bgp_rpki_prefix_status,
|
if (type == bgp_show_type_rpki &&
|
||||||
pi->peer, pi->attr, dest_p);
|
rpki_target_state != RPKI_NOT_BEING_USED &&
|
||||||
if (rpki_target_state != RPKI_NOT_BEING_USED
|
rpki_curr_state != rpki_target_state)
|
||||||
&& rpki_curr_state != rpki_target_state)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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,
|
route_vty_out_detail(vty, bgp, dest, dest_p, pi,
|
||||||
family2afi(dest_p->family), safi,
|
family2afi(dest_p->family), safi,
|
||||||
RPKI_NOT_BEING_USED, json_paths, NULL);
|
rpki_curr_state, json_paths, NULL);
|
||||||
} else {
|
} else {
|
||||||
route_vty_out(vty, dest_p, pi, display,
|
route_vty_out(vty, dest_p, pi, display,
|
||||||
safi, json_paths, wide);
|
safi, json_paths, wide);
|
||||||
|
70
tests/topotests/bgp_rpki_topo1/r2/bgp_rpki_valid.json
Normal file
70
tests/topotests/bgp_rpki_topo1/r2/bgp_rpki_valid.json
Normal file
@ -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
|
||||||
|
}
|
@ -101,6 +101,16 @@ def show_rpki_prefixes(rname, expected, vrf=None):
|
|||||||
return topotest.json_cmp(output, expected)
|
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):
|
def show_bgp_ipv4_table_rpki(rname, rpki_state, expected, vrf=None):
|
||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
|
|
||||||
@ -123,6 +133,25 @@ def show_bgp_ipv4_table_rpki(rname, rpki_state, expected, vrf=None):
|
|||||||
return topotest.json_cmp(output, expected)
|
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():
|
def test_show_bgp_rpki_prefixes():
|
||||||
tgen = get_topogen()
|
tgen = get_topogen()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user