Print the allocated IPv4 address in tun-setup
The overlay IPv4 address is not derived from the keys: it is allocated at run time and signed, so on a fresh state directory there is nothing for tun-setup to print. Once the agent has run, the claim is in state.sqlite, and reading it back takes no directory lock, so tun-setup can show the `ip address add` line while the agent is running. Records are verified on the way out; the database is not a trust boundary. The line needs no keep_addr_on_down and no nodad, unlike its IPv6 counterpart: Linux keeps IPv4 addresses on an interface that has lost carrier, and IPv4 has no duplicate address detection to stall. Also fix a race in the four-agent test. A peer counts as connected once its session authenticates, which can precede the announcement carrying its hostname, so reading the hostnames straight away occasionally saw only two. It now waits for them like every other success condition. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+13
-6
@@ -42,12 +42,19 @@ async fn four_agents_form_a_mesh_and_exchange_distinguishable_messages() {
|
||||
}
|
||||
|
||||
// Each peer announced its own hostname, so sessions are distinguishable.
|
||||
let status = agents[0].agent.network_status(network_id).await.unwrap();
|
||||
let hostnames: HashSet<String> = status
|
||||
.peers
|
||||
.iter()
|
||||
.filter_map(|peer| peer.hostname.clone())
|
||||
.collect();
|
||||
// A peer counts as connected as soon as its session is authenticated, which
|
||||
// can be a round before its announcement carrying the hostname arrives, so
|
||||
// this waits for the hostnames rather than reading them straight away.
|
||||
let hostnames: HashSet<String> = wait_until("three distinct peer hostnames", || async {
|
||||
let status = agents[0].agent.network_status(network_id).await.ok()?;
|
||||
let hostnames: HashSet<String> = status
|
||||
.peers
|
||||
.iter()
|
||||
.filter_map(|peer| peer.hostname.clone())
|
||||
.collect();
|
||||
(hostnames.len() >= 3).then_some(hostnames)
|
||||
})
|
||||
.await;
|
||||
assert_eq!(
|
||||
hostnames.len(),
|
||||
3,
|
||||
|
||||
Reference in New Issue
Block a user