)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"e8b0653565d3155f5f9126f59cb7f589dae27af7","unresolved":true,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Probe every resolved address of each remote in parallel (per-remote"},{"line_number":16,"context_line":"storage is sized to the resolved address count, no fixed cap), accept a"},{"line_number":17,"context_line":"reply from any of them (first reply for a remote wins), and resend to"},{"line_number":18,"context_line":"all of a remote\u0027s addresses while it is unanswered. The per-address send"},{"line_number":19,"context_line":"moves into oob_probe_send_target(), which keeps the"},{"line_number":20,"context_line":"one-probe-per-address rule across the addresses of all entries."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"60a157b9_f39a3941","line":17,"range":{"start_line":17,"start_character":24,"end_line":17,"end_character":53},"updated":"2026-09-16 09:33:21.000000000","message":"Does this assume that every address of a remote advertises the same priority, weight, and latency margin? If A answers first with priority 100 and B later answers with priority 0, B is ignored and the whole remote is ranked using A\u0027s values, even though priority is supposed to take precedence over latency. If this is an intended configuration invariant, it should probably be documented.","commit_id":"90d175b6edad10c9c7bbd944dc9a55902d21c58b"},{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"ab6abe3e9a8214f69b6cf3ab0447b7744705549d","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Probe every resolved address of each remote in parallel (per-remote"},{"line_number":16,"context_line":"storage is sized to the resolved address count, no fixed cap), accept a"},{"line_number":17,"context_line":"reply from any of them (first reply for a remote wins), and resend to"},{"line_number":18,"context_line":"all of a remote\u0027s addresses while it is unanswered. The per-address send"},{"line_number":19,"context_line":"moves into oob_probe_send_target(), which keeps the"},{"line_number":20,"context_line":"one-probe-per-address rule across the addresses of all entries."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"e15eb201_e8d127cf","line":17,"range":{"start_line":17,"start_character":24,"end_line":17,"end_character":53},"in_reply_to":"60a157b9_f39a3941","updated":"2026-09-17 07:39:50.000000000","message":"Yes, that is the assumption: the addresses of one remote are the same service and advertise the same values, and the first to answer speaks for the remote. Now stated in the man page and the commit message.","commit_id":"90d175b6edad10c9c7bbd944dc9a55902d21c58b"}],"src/openvpn/oob.h":[{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"e8b0653565d3155f5f9126f59cb7f589dae27af7","unresolved":true,"context_lines":[{"line_number":197,"context_line":"    socklen_t *destlens;"},{"line_number":198,"context_line":"    int n_dests;"},{"line_number":199,"context_line":"    bool sent;"},{"line_number":200,"context_line":"    struct timeval sent_at; /* when the first probe went out, for the RTT */"},{"line_number":201,"context_line":"};"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":24,"id":"ff788675_08592794","line":200,"updated":"2026-09-16 09:33:21.000000000","message":"Sharing one timestamp for every address of a remote might be problematic. If A is sent at t\u003d0, B at t\u003d20, and B replies at t\u003d25, B\u0027s RTT is recorded as 25ms rather than 5ms. The reply source identifies which destination answered, so the first-send timestamp should be stored per destination. As written, this measures time since probing the remote began, not the RTT of the responding address.","commit_id":"90d175b6edad10c9c7bbd944dc9a55902d21c58b"},{"author":{"_account_id":1000008,"name":"stipa","display_name":"Lev Stipakov","email":"lstipakov@gmail.com","username":"stipa"},"change_message_id":"ab6abe3e9a8214f69b6cf3ab0447b7744705549d","unresolved":false,"context_lines":[{"line_number":197,"context_line":"    socklen_t *destlens;"},{"line_number":198,"context_line":"    int n_dests;"},{"line_number":199,"context_line":"    bool sent;"},{"line_number":200,"context_line":"    struct timeval sent_at; /* when the first probe went out, for the RTT */"},{"line_number":201,"context_line":"};"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"/**"}],"source_content_type":"text/x-csrc","patch_set":24,"id":"bfa1f4c9_5d495a41","line":200,"in_reply_to":"ff788675_08592794","updated":"2026-09-17 07:39:50.000000000","message":"Right, the shared timestamp measured from the remote\u0027s first send. The first-send time is now kept per address and the RTT is taken from the address the reply came from; oob_probe_rtt_ms() with a unit test on exactly your example (A at 0, B at 20, reply from B at 25 -\u003e 5 ms).","commit_id":"90d175b6edad10c9c7bbd944dc9a55902d21c58b"}]}
