Skip to content

Commit d5b74ce

Browse files
authored
Merge pull request #154 from NLnetLabs/release-0.5.1
Released 2026-02-09. ### New * Added `filter[peerAddress]` to the `/ribs` HTTP endpoint. * HTTP API responses now include the `NextHop` part of the `MP_REACH_NLRI` path attribute. * HTTP API supports gzip compressed responses, and streaming/chunking of responses. ### Bug fixes * SELinux on CentOS panic on startup ([#132](#132), [roto#259](https://github.com/NLnetLabs/roto/issues/259), [#150](#150)) ### Acknowledgements We would like to very much thank Rein Fernhout (LevitatingBusinessMan) and Denys Fedoryshchenko for their (ongoing) input and support in various ways.
2 parents 52bcabb + d290068 commit d5b74ce

85 files changed

Lines changed: 1636 additions & 8432 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 975 additions & 1099 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 39 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ name = "print_rotonda_std_doc"
1919
path = "doc/bin/print_rotonda_std_doc.rs"
2020

2121
[workspace.package]
22-
version = "0.5.1-dev"
22+
version = "0.5.1"
2323
edition = "2021"
2424
rust-version = "1.87"
2525
authors = ["NLnet Labs <routing-team@nlnetlabs.nl>"]
@@ -29,96 +29,84 @@ authors = ["NLnet Labs <routing-team@nlnetlabs.nl>"]
2929
#members = []
3030

3131
[workspace.dependencies]
32-
routecore = { version = "0.6", features = ["bgp", "bmp", "serde", "fsm", "mrt"] }
32+
routecore = { version = "0.7", features = ["bgp", "bmp", "serde", "fsm", "mrt"] }
3333
inetnum = { version = "0.1.1", features = ["arbitrary", "serde"] }
3434
rotonda-store = { version = "0.5.0" }
3535
log = "0.4"
3636

3737

3838
[dependencies]
39-
arc-swap = "1.6"
40-
chrono = { version = "0.4", features = ["serde"] }
41-
clap = { version = "4.4", features = ["cargo"] }
39+
arc-swap = "1.8"
40+
chrono = { version = "0.4", default-features = false, features = ["serde", "now"] }
41+
clap = { version = "4.5", default-features = false, features = ["cargo"] }
4242
crossbeam-utils = "0.8"
43-
fern = "0.6"
43+
fern = "0.7"
4444
futures = "0.3"
45-
hash32 = "0.3.1"
46-
hyper = { version = "0.14", features = ["server", "stream"] }
45+
hash32 = "1.0.0" # this can probably go
4746
log = { workspace = true }
4847
log-reroute = "0.1"
4948
pin-project-lite = "0.2"
50-
rand = "0.8"
51-
reqwest = { version = "0.11", default-features = false }
5249
routecore = { workspace = true }
53-
sanitise-file-name = "1.0"
5450
serde = { version = "1.0", features = ["derive", "rc"] }
5551
serde_json = { version = "1.0", features = ["preserve_order"] }
56-
slab = "0.4"
57-
tokio = { version = "1.44.2", features = ["fs", "io-util", "macros", "net", "rt", "rt-multi-thread", "signal", "sync", "test-util", "time", "tracing"] }
58-
toml = "0.8"
59-
url = { version = "2.4", features = ["serde"] }
52+
tokio = { version = "1.49", default-features = false, features = ["fs", "io-util", "macros", "net", "rt", "rt-multi-thread", "signal", "sync", "test-util", "time", "tracing"] }
53+
toml = "0.9"
6054

6155
# Dependencies specifically used by the BGP/BMP related modifications to the original RTRTR base
62-
allocator-api2 = "0.2"
56+
allocator-api2 = "0.2" # 0.3 causes breakage because other crates depend on 0.2.21 # do we still need the custom allocator?
6357
assert-json-diff = "2.0"
6458
async-trait = "0.1"
65-
atomic_enum = "0.2.0"
66-
flate2 = { version = "1.0", optional = true }
67-
anyhow = "1.0"
68-
bytes = { version = "1.5.0" }
69-
const_format = "0.2"
70-
hex-slice = "0.1"
71-
hash_hasher = "2.0"
72-
hashbrown = "0.14"
73-
html-escape = { version = "0.2" }
59+
atomic_enum = "0.3.0" # might go after refactor of bmp
60+
flate2 = { version = "1.1", optional = true }
61+
anyhow = "1.0" # might go after cleaning up tests
62+
bytes = { version = "1.11.1" }
63+
hashbrown = "0.16" # will go if we remove custom alloc
64+
hex-slice = "0.1" # might go after refactor of bmp
7465
inetnum = { workspace = true }
75-
indoc = "2.0"
76-
layout-rs = { version = "0.1" }
7766
mqtt = { version = "0.23.0", package = "rumqttc", default-features = false }
78-
memmap2 = "0.9.4"
67+
memmap2 = "0.9.9"
7968
non-empty-vec = { version = "0.2", features = ["serde"]}
80-
percent-encoding = "2.3"
81-
roto = { version = "0.7" }
69+
roto = { version = "0.7" } # 0.8 available, requires changes
8270
rotonda-store = { workspace = true }
8371
serde_with = "3"
84-
smallvec = { version = "1.11", features = ["const_generics", "const_new", "union"] }
85-
tokio-metrics = { version = "0.3", default-features = false }
86-
uuid = { version = "1.4", features = ["v4", "fast-rng"] }
87-
sha2 = "0.10.8"
88-
csv = "1.3.1"
89-
bzip2 = "0.5.0"
90-
rpki = { version = "0.19.1", features = ["crypto", "rtr"] }
91-
futures-util = "0.3.31"
92-
micromap = "0.0.19"
72+
smallvec = { version = "1.15", features = ["const_generics", "const_new", "union"] }
73+
tokio-metrics = { version = "0.4", default-features = false }
74+
uuid = { version = "1.20", features = ["v4", "fast-rng"] }
75+
sha2 = "0.10"
76+
csv = "1.4"
77+
bzip2 = "0.6"
78+
tokio-stream = "0.1.18"
79+
rpki = { version = "0.19.2", features = ["crypto", "rtr"] }
80+
futures-util = "0.3"
81+
micromap = "0.1.0"
9382
paste = "1.0.15"
94-
axum = { version = "0.8.4", features = ["query", "http1", "http2", "tokio"], default-features = false }
83+
axum = { version = "0.8.8", features = ["query", "http1", "http2", "tokio"], default-features = false }
84+
rshtml = "0.3.0"
85+
cranelift-jit = "*"
86+
tower-http = { version = "0.5.2", features = ["compression-gzip"], optional = true }
9587
serde_qs = "0.15.0"
96-
rshtml = "0.2.0"
9788

9889
[target.'cfg(unix)'.dependencies]
99-
syslog = "6.1"
90+
syslog = "7.0"
10091

10192
[dev-dependencies]
10293
hex = "0.4"
103-
env_logger = "0.10"
94+
env_logger = "0.11"
10495
prometheus-parse = "0.2"
105-
reqwest = { version = "0.11", default-features = false, features = ["json"] }
106-
rumqttd = { version = "0.18.0", default-features = false }
107-
insta = { version = "1.43.1", features = ["glob"] }
108-
assert_cmd = "2.0.17"
109-
glob = "0.3.3"
96+
reqwest = { version = "0.12", default-features = false, features = ["json"] }
97+
rumqttd = { version = "0.20.0", default-features = false }
11098

11199
[profile.release]
112100
strip = true
113101

114102
[features]
115-
default = ["http-api-gzip"]
103+
default = ["http-api-gzip", "cranelift-jit/selinux-fix"]
116104

117105
# Enable GZIP compression of the HTTP /metrics response
118-
http-api-gzip = ["flate2"]
106+
http-api-gzip = ["flate2", "tower-http"]
119107

120108
[build-dependencies]
121-
rshtml = "0.2.0"
109+
rshtml = "0.3.0"
122110

123111

124112
[package.metadata.rshtml]

Changelog.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,34 @@
11
# Changelog
22

3-
## Unreleased version
3+
## 0.5.1
44

5-
Released yyyy-mm-dd.
6-
7-
8-
### Breaking changes
5+
Released 2026-02-09.
96

107

118
### New
129

10+
* Added `filter[peerAddress]` to the `/ribs` HTTP endpoint.
1311

14-
### Bug fixes
12+
* HTTP API responses now include the `NextHop` part of the `MP_REACH_NLRI` path
13+
attribute.
1514

15+
* HTTP API supports gzip compressed responses, and streaming/chunking of
16+
responses.
1617

17-
### Other changes
18+
19+
### Bug fixes
1820

1921

20-
### Known issues
22+
* SELinux on CentOS panic on startup
23+
([#132](https://github.com/NLnetLabs/rotonda/issues/132),
24+
[roto#259](https://github.com/NLnetLabs/roto/issues/259),
25+
[#150](https://github.com/NLnetLabs/rotonda/pull/150))
2126

2227

2328
### Acknowledgements
2429

30+
We would like to very much thank Rein Fernhout (LevitatingBusinessMan) and
31+
Denys Fedoryshchenko for their (ongoing) input and support in various ways.
2532

2633
## 0.5.0 'Mosaïque Public'
2734

src/common/file_io.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub trait FileIo: Default {
4949
mod fileio {
5050
//! Filesystem I/O.
5151
use std::{
52-
io::{Error, ErrorKind},
52+
io::Error,
5353
path::Path,
5454
};
5555

@@ -109,8 +109,7 @@ mod fileio {
109109
path: P,
110110
) -> std::io::Result<String> {
111111
std::fs::read_to_string(path.as_ref()).map_err(|err| {
112-
Error::new(
113-
ErrorKind::Other,
112+
Error::other(
114113
format!("For path '{}': {err}", path.as_ref().display()),
115114
)
116115
})

src/common/frim.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ where
178178
}
179179
}
180180

181+
#[allow(dead_code)]
181182
pub fn contains_key(&self, key: &K) -> bool {
182183
self.get(key).is_some()
183184
}
@@ -190,7 +191,7 @@ where
190191
.map(|(_k, v)| v.clone())
191192
}
192193

193-
pub fn entry(&self, key: K) -> Entry<K, V> {
194+
pub fn entry(&self, key: K) -> Entry<'_, K, V> {
194195
match self.get(&key) {
195196
Some(v) => Entry::Occupied(v),
196197
None => Entry::Vacant(self, key),

src/common/json.rs

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/common/memory.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ impl<T: Allocator + Send + Sync> metrics::Source for TrackingAllocator<T> {
115115
mod tests {
116116
use std::{alloc::System, sync::Arc};
117117

118-
use hashbrown::hash_map::DefaultHashBuilder;
118+
use hashbrown::DefaultHashBuilder;
119119

120120
use crate::tests::util::internal::get_testable_metrics_snapshot;
121121

src/common/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
pub mod file_io;
22
pub(crate) mod frim;
3-
pub(crate) mod json;
43
pub(crate) mod memory;
54
pub(crate) mod net;
65
pub(crate) mod routecore_extra;

src/common/status_reporter.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use std::{
2-
fmt::{Debug, Display},
2+
fmt::Display,
33
num::NonZeroUsize,
44
sync::Arc,
55
};
66

7-
use log::{debug, error, trace};
7+
use log::{debug, trace};
88

99
use crate::{comms::GateStatus, manager::TargetCommand, metrics};
1010

@@ -37,17 +37,9 @@ pub trait Chainable: Named {
3737
}
3838

3939
pub trait AnyStatusReporter: Chainable {
40+
#[allow(dead_code)]
4041
fn metrics(&self) -> Option<Arc<dyn metrics::Source>>;
4142

42-
fn input_mismatch<T: Display, U: Debug>(&self, expected: T, received: U) {
43-
sr_log!(
44-
error: self,
45-
"Configuration error: Received {:#?} but expected {}",
46-
received,
47-
expected
48-
);
49-
}
50-
5143
fn upstream_sources_changed(
5244
&self,
5345
num_old_sources: NonZeroUsize,

src/comms.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,26 +1830,25 @@ struct SubscribeResponse {
18301830
#[cfg(test)]
18311831
mod tests {
18321832
use chrono::SubsecRound;
1833+
use rotonda_store::prefix_record::RouteStatus;
18331834
use smallvec::smallvec;
18341835
use tokio::sync::Notify;
18351836

18361837
use crate::{
1837-
payload::Payload,
1838-
tests::util::internal::{
1838+
payload::Payload, tests::util::internal::{
18391839
enable_logging, get_testable_metrics_snapshot,
1840-
},
1840+
}
18411841
};
18421842

18431843
use super::*;
18441844

18451845
#[tokio::test(flavor = "multi_thread")]
1846-
#[cfg(not(tarpaulin))]
18471846
async fn gate_link_lifecycle_test() {
18481847
use std::str::FromStr;
18491848

18501849
use routecore::bgp::{message::PduParseInfo, nlri::afisafi::Ipv4UnicastNlri, path_attributes::OwnedPathAttributes};
18511850

1852-
use crate::{payload::{RotondaPaMap, RotondaRoute}, roto_runtime::types::RouteContext};
1851+
use crate::{payload::{RotondaPaMap, RotondaRoute}};
18531852

18541853
// Lifecycle of a connected gate and link:
18551854
//
@@ -1926,8 +1925,10 @@ mod tests {
19261925
)
19271926
)
19281927
),
1929-
RouteContext::for_reprocessing(),
1930-
None
1928+
None,
1929+
1234, // IngressId
1930+
RouteStatus::Active,
1931+
19311932
)
19321933
}
19331934

0 commit comments

Comments
 (0)