)]}'
{"id":"openvpn~1729","triplet_id":"openvpn~master~I3f9834cc13c49b9249653d7d8637383f50c2fb87","project":"openvpn","branch":"master","attention_set":{"1000007":{"account":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"last_update":"2026-06-25 10:48:27.000000000","reason":"Someone else replied on the change"}},"removed_from_attention_set":{"1000003":{"account":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"last_update":"2026-06-25 10:48:27.000000000","reason":"removed on reply"}},"hashtags":[],"change_id":"I3f9834cc13c49b9249653d7d8637383f50c2fb87","subject":"multi: don\u0027t let stale-routes-check delete permanent routes","status":"NEW","created":"2026-06-23 22:00:33.000000000","updated":"2026-06-25 10:48:27.000000000","submit_type":"CHERRY_PICK","submittable":false,"total_comment_count":2,"unresolved_comment_count":1,"has_review_started":true,"meta_rev_id":"6cdbbf9fa1ba2538726dffbb14328bcaeae55a05","_number":1729,"virtual_id_number":1729,"owner":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"actions":{},"labels":{"Code-Review":{"approved":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"all":[{"value":2,"date":"2026-06-25 10:48:27.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"}],"values":{"-2":"This shall not be submitted","-1":"I would prefer this is not submitted as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"}],"CC":[{"_account_id":1000026,"name":"openvpn-devel","email":"openvpn-devel@lists.sourceforge.net","username":"openvpn-devel"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-23 22:00:34.000000000","updated_by":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"reviewer":{"_account_id":1000026,"name":"openvpn-devel","email":"openvpn-devel@lists.sourceforge.net","username":"openvpn-devel"},"state":"CC"},{"updated":"2026-06-23 22:00:34.000000000","updated_by":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"reviewer":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"state":"REVIEWER"}],"messages":[{"id":"d336e6871d5289790172a0571804bfc4b419cbaa","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"date":"2026-06-23 22:00:33.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"4c72d771eeb31ebbd4571c4b6013e7253a7f83ef","author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"date":"2026-06-24 09:51:20.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"ebbbe719ba0b428cd12e441e06af35866d2f7bbe","author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"date":"2026-06-24 10:50:49.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"6cdbbf9fa1ba2538726dffbb14328bcaeae55a05","author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"date":"2026-06-25 10:48:27.000000000","message":"Patch Set 1: Code-Review+2","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"78a52c142ef1f4957c01f932c088fb78e58ac5a7","revisions":{"78a52c142ef1f4957c01f932c088fb78e58ac5a7":{"kind":"REWORK","_number":1,"created":"2026-06-23 22:00:33.000000000","uploader":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"ref":"refs/changes/29/1729/1","fetch":{"anonymous http":{"url":"http://gerrit.openvpn.net/openvpn","ref":"refs/changes/29/1729/1","commands":{"Branch":"git fetch http://gerrit.openvpn.net/openvpn refs/changes/29/1729/1 \u0026\u0026 git checkout -b change-1729 FETCH_HEAD","Checkout":"git fetch http://gerrit.openvpn.net/openvpn refs/changes/29/1729/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch http://gerrit.openvpn.net/openvpn refs/changes/29/1729/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch http://gerrit.openvpn.net/openvpn refs/changes/29/1729/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull http://gerrit.openvpn.net/openvpn refs/changes/29/1729/1","Reset To":"git fetch http://gerrit.openvpn.net/openvpn refs/changes/29/1729/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"2b8afc6c685f4e451fd0fa5aa37f18147520dfc1","subject":"openvpnserv: always use W variant of RpcStringFree()"}],"author":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-06-23 21:57:27.000000000","tz":120},"committer":{"name":"Antonio Quartulli","email":"antonio@mandelbit.com","date":"2026-06-23 21:58:08.000000000","tz":120},"subject":"multi: don\u0027t let stale-routes-check delete permanent routes","message":"multi: don\u0027t let stale-routes-check delete permanent routes\n\nWhen --stale-routes-check is enabled the periodic check removed every\naged entry from the virtual address routing table, including the\npermanent routes installed from --iroute (e.g. via --client-config-dir)\nand the client\u0027s pushed ifconfig address. Once those entries were gone,\ntraffic towards the iroute networks was no longer forwarded and the\naffected client suffered an outage until it reconnected.\n\nRoutes learned from configuration (iroutes and pushed ifconfig\naddresses) and genuinely dynamic routes (TAP source addresses learned\nfrom the data channel) were both added with flags \u003d\u003d 0, so\ncheck_stale_routes() could not tell them apart and aged out all of\nthem. Their last_reference is only refreshed when they are hit as a\npacket destination, which never happens for an iroute network (CIDR\nlookups create a separate cached child route instead) nor for an idle\nclient\u0027s pushed address, so both were eventually deleted.\n\nMark the config-derived routes with a new MULTI_ROUTE_PERMANENT flag in\nthe two learn helpers that install them, and skip permanent routes in\ncheck_stale_routes(). Dynamically learned routes keep flags \u003d\u003d 0\nand are still aged out, preserving the documented purpose of the\noption. Cleanup on disconnect is unaffected: a halted instance makes\nmulti_route_defined() return false, so the reaper still removes the\npermanent routes when the client goes away.\n\nChange-Id: I3f9834cc13c49b9249653d7d8637383f50c2fb87\nGithub: closes OpenVPN/openvpn#1063\nSigned-off-by: Antonio Quartulli \u003cantonio@mandelbit.com\u003e\n"},"branch":"refs/heads/master"}},"requirements":[{"status":"NOT_READY","fallback_text":"All required checks must pass","type":"checks_pass"}],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Code-Review","status":"OK","applied_by":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"}}]},{"rule_name":"checks~ChecksSubmitRule","status":"NOT_READY","requirements":[{"status":"NOT_READY","fallback_text":"All required checks must pass","type":"checks_pass"}]}],"submit_requirements":[{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX","-label:Code-Review\u003dMIN"],"failing_atoms":[]}},{"name":"checks~ChecksSubmitRule","status":"UNSATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"rule:checks~ChecksSubmitRule","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["checks~ChecksSubmitRule"]}}]}
