)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"cc75682e81813b1747e3fd75fc5e1cd9281db4f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6814a180_2e98f1c4","updated":"2026-09-25 11:53:19.000000000","message":"As a side note: There is a patch from me that adds netns support to t_net.sh: https://gerrit.openvpn.net/c/openvpn/+/1586","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8936254b5cb272200db00d929a5aa6761194b33b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7cb6f8c7_6c2b5e4a","updated":"2026-09-25 11:48:01.000000000","message":"Generally speaking the netns-based test has advantages in terms of isolation, but a test that is usable on *BSD would also be good. I wonder whether it would be possible to re-use some of the test code or whether one would need to create a completely separate script for that.","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"}],"tests/t_route.sh":[{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8936254b5cb272200db00d929a5aa6761194b33b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"#!/usr/bin/env bash"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# t_route.sh - check that --route installs a route where it says it will"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-sh","patch_set":1,"id":"77809d49_afd6d430","line":1,"updated":"2026-09-25 11:48:01.000000000","message":"This fails on the BSD runners. Maybe we can just port it to POSIX? I don\u0027t see anything that particularly needs bash?\n\nt_net.sh seems to get away with it by making the decision in Makefile. But I would say the skip at runtime is preferable.","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8936254b5cb272200db00d929a5aa6761194b33b","unresolved":true,"context_lines":[{"line_number":26,"context_line":"NS\u003d\"ovpnroute$$\""},{"line_number":27,"context_line":"TUN\u003d\"ovpnt$$\""},{"line_number":28,"context_line":"LAN_GW\u003d\"10.71.1.1\""},{"line_number":29,"context_line":"TARGET\u003d\"10.71.250.1\"       # what we ask to be routed via net_gateway"},{"line_number":30,"context_line":"VPN_LOCAL\u003d\"10.71.8.2\""},{"line_number":31,"context_line":"VPN_REMOTE\u003d\"10.71.8.1\""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-sh","patch_set":1,"id":"77b70e66_b16b7565","line":29,"updated":"2026-09-25 11:48:01.000000000","message":"please apply the changes from shfmt in the failed format check.","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8936254b5cb272200db00d929a5aa6761194b33b","unresolved":true,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# A namespace needs the same privileges the rest of the test does, so use"},{"line_number":66,"context_line":"# it as the probe."},{"line_number":67,"context_line":"if ! $RUN_SUDO ip netns add \"$NS\" \u003e/dev/null 2\u003e\u00261; then"},{"line_number":68,"context_line":"    echo \"$0: cannot create a network namespace with \u0027$RUN_SUDO\u0027.\" \u003e\u00262"},{"line_number":69,"context_line":"    echo \"$0: containers commonly disallow this. SKIPPING TEST.\" \u003e\u00262"},{"line_number":70,"context_line":"    exit 77"}],"source_content_type":"text/x-sh","patch_set":1,"id":"223cedbc_75cb6e87","line":67,"updated":"2026-09-25 11:48:01.000000000","message":"I don\u0027t particularly like the preemptive dumping to /dev/null. This command is silent unless it throws an error and then the error might be useful to differentiate between \"can\u0027t create any ns\" and \"can\u0027t create this ns because it exists\" (unlikely as that might be). So I would remove this.","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8936254b5cb272200db00d929a5aa6761194b33b","unresolved":true,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"cleanup()"},{"line_number":78,"context_line":"{"},{"line_number":79,"context_line":"    [ -n \"$clt_pid\" ] \u0026\u0026 kill \"$clt_pid\" 2\u003e/dev/null"},{"line_number":80,"context_line":"    [ -n \"$srv_pid\" ] \u0026\u0026 kill \"$srv_pid\" 2\u003e/dev/null"},{"line_number":81,"context_line":"    wait 2\u003e/dev/null"},{"line_number":82,"context_line":"    # deleting the namespace takes every interface and route in it with it"}],"source_content_type":"text/x-sh","patch_set":1,"id":"7b7a112b_5db8ae54","line":79,"updated":"2026-09-25 11:48:01.000000000","message":"Again, I don\u0027t think the redirection to /dev/null is good here","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"},{"author":{"_account_id":1000001,"name":"Frank Lichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"8936254b5cb272200db00d929a5aa6761194b33b","unresolved":true,"context_lines":[{"line_number":80,"context_line":"    [ -n \"$srv_pid\" ] \u0026\u0026 kill \"$srv_pid\" 2\u003e/dev/null"},{"line_number":81,"context_line":"    wait 2\u003e/dev/null"},{"line_number":82,"context_line":"    # deleting the namespace takes every interface and route in it with it"},{"line_number":83,"context_line":"    $RUN_SUDO ip netns del \"$NS\" 2\u003e/dev/null"},{"line_number":84,"context_line":"    [ -n \"$logdir\" ] \u0026\u0026 rm -rf \"$logdir\""},{"line_number":85,"context_line":"}"},{"line_number":86,"context_line":"trap cleanup EXIT"}],"source_content_type":"text/x-sh","patch_set":1,"id":"ccc4f156_009c1cbc","line":83,"updated":"2026-09-25 11:48:01.000000000","message":"Nor here","commit_id":"57e9b919136ba4e1dac9ff6ca0de201f644c057b"},{"author":{"_account_id":1000054,"name":"chugly","email":"charlie.vigue@openvpn.com","username":"chugly"},"change_message_id":"9884a3993da26528d67b1ba1c39dd632e6d1d0c2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#!/bin/sh"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# t_route.sh - check that --route installs a route where it says it will"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-sh","patch_set":2,"id":"9ab45991_002f433c","line":1,"in_reply_to":"77809d49_afd6d430","updated":"2026-09-28 07:37:25.000000000","message":"Nothing needed bash. checkbashisms and dash -n are both clean now. The reason it failed rather than skipped on BSD was the shebang itself: /usr/bin/env bash exits before the uname check at the top of the script can run, so with /bin/sh the runtime skip works and no Makefile gating is needed. I also replaced seq with a plain counter loop, since seq is not in POSIX either.","commit_id":"5b7dd8356d402cce1f8a8b5005c43596a7ee4d12"},{"author":{"_account_id":1000054,"name":"chugly","email":"charlie.vigue@openvpn.com","username":"chugly"},"change_message_id":"9884a3993da26528d67b1ba1c39dd632e6d1d0c2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"# Namespace topology: one interface carrying a default route, which is"},{"line_number":27,"context_line":"# what net_gateway has to resolve to."},{"line_number":28,"context_line":"NS\u003d\"ovpnroute$$\""},{"line_number":29,"context_line":"TUN\u003d\"ovpnt$$\""},{"line_number":30,"context_line":"LAN_GW\u003d\"10.71.1.1\""},{"line_number":31,"context_line":"TARGET\u003d\"10.71.250.1\" # what we ask to be routed via net_gateway"},{"line_number":32,"context_line":"VPN_LOCAL\u003d\"10.71.8.2\""}],"source_content_type":"text/x-sh","patch_set":2,"id":"81f3d34c_a339030b","line":29,"in_reply_to":"77b70e66_b16b7565","updated":"2026-09-28 07:37:25.000000000","message":"Applied, using the arguments from dev-tools/reformat-shell.sh. Note that tests/t_client.sh is also listed by shfmt on current master. I left that alone as unrelated to this change.","commit_id":"5b7dd8356d402cce1f8a8b5005c43596a7ee4d12"},{"author":{"_account_id":1000054,"name":"chugly","email":"charlie.vigue@openvpn.com","username":"chugly"},"change_message_id":"9884a3993da26528d67b1ba1c39dd632e6d1d0c2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    RUN_SUDO\u003d\"\""},{"line_number":65,"context_line":"fi"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"# A namespace needs the same privileges the rest of the test does, so use"},{"line_number":68,"context_line":"# it as the probe."},{"line_number":69,"context_line":"if ! $RUN_SUDO ip netns add \"$NS\"; then"},{"line_number":70,"context_line":"    echo \"$0: cannot create a network namespace with \u0027$RUN_SUDO\u0027.\" \u003e\u00262"}],"source_content_type":"text/x-sh","patch_set":2,"id":"983cb7ea_f046a1f4","line":67,"in_reply_to":"223cedbc_75cb6e87","updated":"2026-09-28 07:37:25.000000000","message":"Removed.","commit_id":"5b7dd8356d402cce1f8a8b5005c43596a7ee4d12"},{"author":{"_account_id":1000054,"name":"chugly","email":"charlie.vigue@openvpn.com","username":"chugly"},"change_message_id":"9884a3993da26528d67b1ba1c39dd632e6d1d0c2","unresolved":false,"context_lines":[{"line_number":76,"context_line":"clt_pid\u003d\"\""},{"line_number":77,"context_line":"logdir\u003d$(mktemp -d) || exit 1"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"cleanup()"},{"line_number":80,"context_line":"{"},{"line_number":81,"context_line":"    [ -n \"$clt_pid\" ] \u0026\u0026 kill \"$clt_pid\""},{"line_number":82,"context_line":"    [ -n \"$srv_pid\" ] \u0026\u0026 kill \"$srv_pid\""}],"source_content_type":"text/x-sh","patch_set":2,"id":"2691b0cb_d3bc84e8","line":79,"in_reply_to":"7b7a112b_5db8ae54","updated":"2026-09-28 07:37:25.000000000","message":"Removed, along with the two on lines 80 and 81 that were the same pattern. I kept one redirection, on the route query in the polling loop, with a comment saying why: absence of the route is the normal state while polling, so the unreachable error iproute2 prints there is noise rather than a diagnostic. Happy to drop that one too if you would rather have it consistent.","commit_id":"5b7dd8356d402cce1f8a8b5005c43596a7ee4d12"},{"author":{"_account_id":1000054,"name":"chugly","email":"charlie.vigue@openvpn.com","username":"chugly"},"change_message_id":"9884a3993da26528d67b1ba1c39dd632e6d1d0c2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"{"},{"line_number":81,"context_line":"    [ -n \"$clt_pid\" ] \u0026\u0026 kill \"$clt_pid\""},{"line_number":82,"context_line":"    [ -n \"$srv_pid\" ] \u0026\u0026 kill \"$srv_pid\""},{"line_number":83,"context_line":"    wait"},{"line_number":84,"context_line":"    # deleting the namespace takes every interface and route in it with it"},{"line_number":85,"context_line":"    $RUN_SUDO ip netns del \"$NS\""},{"line_number":86,"context_line":"    [ -n \"$logdir\" ] \u0026\u0026 rm -rf \"$logdir\""}],"source_content_type":"text/x-sh","patch_set":2,"id":"4c3a713b_6cb3f26c","line":83,"in_reply_to":"ccc4f156_009c1cbc","updated":"2026-09-28 07:37:25.000000000","message":"Removed.","commit_id":"5b7dd8356d402cce1f8a8b5005c43596a7ee4d12"}]}
