)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Arne Schwabe \u003carne@rfc2549.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-09-16 16:35:38 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"6b060a08_b9b15038","line":7,"updated":"2025-09-16 21:19:39.000000000","message":"to be honest, this title feels a bit cryptic 😄\nmaybe it can be simplified a little, since we have the longer description below?","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Arne Schwabe \u003carne@rfc2549.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-09-16 16:35:38 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"db3aa800_00ffb55b","line":7,"in_reply_to":"6b060a08_b9b15038","updated":"2025-09-17 10:19:40.000000000","message":"I tried to make it a bit easier to understand what is happening here.","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"de7c0b9b7e95c1505cdbf53d75d95a710056a15f","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Arne Schwabe \u003carne@rfc2549.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-09-16 16:35:38 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"e68f700d_fb964762","line":7,"in_reply_to":"db3aa800_00ffb55b","updated":"2025-09-17 11:01:39.000000000","message":"how about:\n\nDCO: install onlink host iroute when pushed IP is out of server network\n\n?","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0eb283f91c911412ff85c933da2ef23a163ba6cc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Arne Schwabe \u003carne@rfc2549.org\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-09-16 16:35:38 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"4477c2fa_904f1747","line":7,"in_reply_to":"e68f700d_fb964762","updated":"2025-10-28 13:55:11.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"},{"line_number":11,"context_line":"ensure that traffic for these IP addresses is also directed to the VPN."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For Linux it is important that these extra routes are routes using scope link"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"955bcbc5_de33bffb","line":10,"updated":"2025-09-16 21:19:39.000000000","message":"the subject for \"need\" is \"Additional IP addresses\", but I think you meant \"a route to those IPs\", right? So this sentence should be massaged a little.\n\nMoreover, is `ifconfig-push` really creating an \"Additional IP\" or is it just substituting the IP assigned out of the server pool?","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"de7c0b9b7e95c1505cdbf53d75d95a710056a15f","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"},{"line_number":11,"context_line":"ensure that traffic for these IP addresses is also directed to the VPN."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For Linux it is important that these extra routes are routes using scope link"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"e81bb1a9_d227e995","line":10,"in_reply_to":"8599ca43_fae0473b","updated":"2025-09-17 11:01:39.000000000","message":"I agree with that, but what I meant in my comment is that we \"need *routes* to be added\" not IPs.\nIn your text you\u0027re implying we need to add IPs \"..to the operating system..\"","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"},{"line_number":11,"context_line":"ensure that traffic for these IP addresses is also directed to the VPN."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For Linux it is important that these extra routes are routes using scope link"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"8599ca43_fae0473b","line":10,"in_reply_to":"955bcbc5_de33bffb","updated":"2025-09-17 10:19:40.000000000","message":"ifconfig-push can be used for both. To either pick a specific IP address of the pool or to specify an address outside of the pool. But pool is not really correct here either as we really care about  --ifconfig here and not about --ifconfig-pool but --server typically sets to be the same.","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0eb283f91c911412ff85c933da2ef23a163ba6cc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Install host routes with onlink scope iroutes for ifconfig-push routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Additional IP addresses for hosts that lie outside the primary network"},{"line_number":10,"context_line":"of the configured device need to be added to the operating system to"},{"line_number":11,"context_line":"ensure that traffic for these IP addresses is also directed to the VPN."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For Linux it is important that these extra routes are routes using scope link"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"f9794219_e00d035b","line":10,"in_reply_to":"e81bb1a9_d227e995","updated":"2025-10-28 13:55:11.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For Linux it is important that these extra routes are routes using scope link"},{"line_number":14,"context_line":"rather than static since otherwise routes via these IP addresses, like"},{"line_number":15,"context_line":"iroute, will not work."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Tested using a server with ccd:"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9e07abea_3c127d4d","line":15,"updated":"2025-09-16 21:19:39.000000000","message":"should we add \"because the server does not have an address in the same network as these IPs assigned to the VPN interface\" (some something alike)?\n\nJust to make sure in 5 months from now we recall why we did this.","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0eb283f91c911412ff85c933da2ef23a163ba6cc","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"For Linux it is important that these extra routes are routes using scope link"},{"line_number":14,"context_line":"rather than static since otherwise routes via these IP addresses, like"},{"line_number":15,"context_line":"iroute, will not work."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Tested using a server with ccd:"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"220f5023_3980d1f4","line":15,"in_reply_to":"9e07abea_3c127d4d","updated":"2025-10-28 13:55:11.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"e2d2c119d49bf7f9d03b80ca3c6ce362f03e786b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c18f2bbe_08ceec1d","updated":"2025-09-15 17:40:48.000000000","message":"Currently only tested on Linux. Need to still test the other DCO platforms.","commit_id":"eca6ef1e59b0b0d80daf10f84462e507a713a874"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"6f13f334dcfe5240a76fd53465d62d76c2dc80d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7c13ad05_98e42543","in_reply_to":"c18f2bbe_08ceec1d","updated":"2025-09-16 14:35:32.000000000","message":"Linux and FreeBSD work fine. Windows testing still pending.","commit_id":"eca6ef1e59b0b0d80daf10f84462e507a713a874"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1d39b057_bf1d0eae","updated":"2025-09-16 21:19:39.000000000","message":"patch looks good to me. I just have a few minor nitpicks..","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"a406f07d985e65b5e0771505f5b020b549e6253e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"d5d4d5c9_bd5add8f","updated":"2025-10-12 12:59:34.000000000","message":"Ah, it compiles because that particular test instance had `configure --disable-dco`.  If configured without that, compilation bombs in the expected way\n\n```\n  CC       dco.o\ndco.c: In function \u0027dco_install_iroute\u0027:\ndco.c:683:26: error: \u0027MR_ONLINK_ADDR\u0027 undeclared (first use in this function); did you mean \u0027MR_ONLINK_DCO_ADDR\u0027?\n  683 |         if (addr-\u003etype \u0026 MR_ONLINK_ADDR)\n      |                          ^~~~~~~~~~~~~~\n      |                          MR_ONLINK_DCO_ADDR\ndco.c:683:26: note: each undeclared identifier is reported only once for each function it appears in\ndco.c: In function \u0027dco_delete_iroutes\u0027:\ndco.c:744:13: error: implicit declaration of function \u0027dco_win_del_iroute_ipv4\u0027 [-Wimplicit-function-declaration]\n  744 |             dco_win_del_iroute_ipv4(\u0026c-\u003ec1.tuntap-\u003edco, mi-\u003econtext.c2.push_ifconfig_local, 32);\n      |             ^~~~~~~~~~~~~~~~~~~~~~~\n```","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d32e1e2d27f0422711138304a71ab28d7c4a7710","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1a82e443_780bf661","updated":"2025-10-12 12:55:11.000000000","message":"this got broken during review / respin...  conceptually I have nothing to complain, but the MR_ONLINK_ADDR vs. MR_ONLINK_DCO_ADDR needs to be fixed.  Admittedly I do not understand why it compiles at all (!?)...\n\n```\n$ git grep MR_ONLINK\nsrc/openvpn/dco.c:    if (addr-\u003etype \u0026 MR_ONLINK_DCO_ADDR)\nsrc/openvpn/dco.c:        if (addr-\u003etype \u0026 MR_ONLINK_ADDR)\nsrc/openvpn/dco.c:        if (addr-\u003etype \u0026 MR_ONLINK_ADDR)\nsrc/openvpn/mroute.h:#define MR_ONLINK_DCO_ADDR 64\nsrc/openvpn/multi.c:        addr.type |\u003d MR_ONLINK_DCO_ADDR;\nsrc/openvpn/multi.c:        addr.type |\u003d MR_ONLINK_DCO_ADDR;\n```\n\nso MR_ONLINK_ADDR is referenced, but not defined anywhere - and it still compiles.  Huh.","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"a067452c57cb40166e20052d2748c760959e2c5c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e3edc7c1_9e23bf82","in_reply_to":"1a82e443_780bf661","updated":"2025-10-13 14:23:56.000000000","message":"Yeah not really sure what happend there during my rebase. I am going through the patch again to see that it really works.","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0eb283f91c911412ff85c933da2ef23a163ba6cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e5ff4143_333c1d57","in_reply_to":"e3edc7c1_9e23bf82","updated":"2025-10-28 13:55:11.000000000","message":"Done","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"5f4d5543fac246f19d64136d0b725997dc729601","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"2c5b22c2_233899e8","updated":"2025-10-18 21:18:40.000000000","message":"This is not working right yet.  I am testing on FreeBSD/DCO, but the \"do I need this route\" logic should not make a difference.\n\nI\u0027ve built a testbed to create `ifconfig-push` or `ifconfig-ipv6-push` at will (from the client side) and integrate that in t_client.sh - and noticed that I am always seeing IPv6 /128s added\n\n```\n/sbin/route -6 add -net fd00:abcd:114:2::1001/128 -iface tun0 -fib 0\n```\n\n... for a client that just got a pool address\n\n```\n# grep ^server tun-udp-p2mp/server.conf\nserver 10.114.2.0 255.255.255.0\nserver-ipv6 fd00:abcd:114:2::/64\n```\n\nwill investigate more tomorrow, but maybe you can find it over night? ;-)","commit_id":"9c78bdf6de34137c24f869d483fd962e81dccf9c"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0eb283f91c911412ff85c933da2ef23a163ba6cc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"c16ab975_93ec02ff","in_reply_to":"2c5b22c2_233899e8","updated":"2025-10-28 13:55:11.000000000","message":"Done","commit_id":"9c78bdf6de34137c24f869d483fd962e81dccf9c"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"32d914dc8f9bb17757e4fe2603641fdfa0c40cf1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9c2c69f4_b4136ad4","updated":"2025-10-28 13:32:29.000000000","message":"We are getting there, but the journey is not over, alas.\n\nNow installation/removal of routes \"according to what we want\" in general works fine, but we *always* try to remove the IPv4 host route at the end - here\u0027s for a regular pool IP:\n\n```\nOct 28 14:25:08 fbsd14 tun-udp-p2mp[12610]: MULTI_sva: pool returned IPv4\u003d10.114.2.3, IPv6\u003dfd00:abcd:114:2::1001\nOct 28 14:25:08 fbsd14 tun-udp-p2mp[12610]: MULTI: Learn: 10.114.2.3 -\u003e cron2-ubuntu-2004-amd64/udp6:195.30.8.84:44555 peer-id\u003d1\nOct 28 14:25:08 fbsd14 tun-udp-p2mp[12610]: MULTI: primary virtual IP for cron2-ubuntu-2004-amd64/udp6:195.30.8.84:44555 peer-id\u003d1: 10.114.2.3\n...\nOct 28 14:26:25 fbsd14 tun-udp-p2mp[12610]: /sbin/route del -net 10.114.2.3/32 -iface tun0 -fib 0 -weight 16777115\nOct 28 14:26:25 fbsd14 tun-udp-p2mp[12610]: ERROR: FreeBSD route command failed: external program exited with error status: 1\n```\n\nwhich obviously is not the way to go forward.  Need to look what changed in IPv4 land here.","commit_id":"8d1416fee21b68b12e00bbbf565bf84f5792aff1"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"03d1bf3842014cd89fe9e48d05ede397e6455e0c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"6283fe65_37f7fb09","updated":"2025-10-28 13:54:18.000000000","message":"found it, `htonl()` again, the two calls are not symmetric wrt byte order - so the check works correctly for IPv4 add and fails for IPv4 delete.  Patch suggestion in the comment.","commit_id":"8d1416fee21b68b12e00bbbf565bf84f5792aff1"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d67930a8ff9442378154fe33cec940b3fede7450","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2f36b985_021dc8d3","updated":"2025-10-29 07:06:44.000000000","message":"thanks :-)","commit_id":"74c2d66043e45ae95a552f763af39cbc7a8740b4"}],"doc/man-sections/server-options.rst":[{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"0f0831faed7eb8809c644022fb596ef50f2b73cc","unresolved":true,"context_lines":[{"line_number":314,"context_line":"  3.  Use ``--ifconfig-pool`` allocation for dynamic IP (last"},{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3599a99a_f568303b","line":317,"updated":"2025-09-16 20:52:02.000000000","message":"Should this also be documented for `ifconfig-ipv6-push`?","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"466e943ceedab2c95c1bf63d37b52f870353bdf0","unresolved":true,"context_lines":[{"line_number":314,"context_line":"  3.  Use ``--ifconfig-pool`` allocation for dynamic IP (last"},{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a7b6d431_9cacb904","line":317,"in_reply_to":"3599a99a_f568303b","updated":"2025-09-16 21:20:33.000000000","message":"@heiko@openvpn.net it\u0027s just a few lines below","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":true,"context_lines":[{"line_number":314,"context_line":"  3.  Use ``--ifconfig-pool`` allocation for dynamic IP (last"},{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"}],"source_content_type":"text/x-rst","patch_set":2,"id":"86c25c1c_10f45ae8","line":317,"in_reply_to":"3599a99a_f568303b","updated":"2025-09-17 10:19:40.000000000","message":"I already documented. You seem to have commented on version 2 after I uploaded v4.","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"de7c0b9b7e95c1505cdbf53d75d95a710056a15f","unresolved":false,"context_lines":[{"line_number":314,"context_line":"  3.  Use ``--ifconfig-pool`` allocation for dynamic IP (last"},{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c74c5864_8023ffde","line":317,"in_reply_to":"86c25c1c_10f45ae8","updated":"2025-09-17 11:01:39.000000000","message":"Done","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"58253d1d13d8e3a8668f7af17bb8e7f64567c746","unresolved":false,"context_lines":[{"line_number":314,"context_line":"  3.  Use ``--ifconfig-pool`` allocation for dynamic IP (last"},{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"}],"source_content_type":"text/x-rst","patch_set":2,"id":"a01854be_05971411","line":317,"in_reply_to":"a7b6d431_9cacb904","updated":"2025-09-16 21:40:03.000000000","message":"Yeah, was looking at an old version.","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"},{"line_number":321,"context_line":"  for ``--client-config-dir`` per-client static IPv6 interface"}],"source_content_type":"text/x-rst","patch_set":4,"id":"a86c4865_793f1207","line":318,"updated":"2025-09-16 21:19:39.000000000","message":"s/for/to/\ns/ /./","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":315,"context_line":"      choice)."},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"  When DCO is enabled, OpenVPN will install a /32 route for the local IP"},{"line_number":318,"context_line":"  address "},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"--ifconfig-ipv6-push args"},{"line_number":321,"context_line":"  for ``--client-config-dir`` per-client static IPv6 interface"}],"source_content_type":"text/x-rst","patch_set":4,"id":"17f06b05_a6c4c15f","line":318,"in_reply_to":"a86c4865_793f1207","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"     ifconfig-ipv6-push ipv6addr/bits ipv6remote"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"  When DCO is enabled, OpenVPN will install a /128 route for the local IP"},{"line_number":331,"context_line":"  address."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"--multihome"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bff8681a_b8c91a88","line":330,"updated":"2025-09-16 21:19:39.000000000","message":"s/for/to/","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"     ifconfig-ipv6-push ipv6addr/bits ipv6remote"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"  When DCO is enabled, OpenVPN will install a /128 route for the local IP"},{"line_number":331,"context_line":"  address."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"--multihome"}],"source_content_type":"text/x-rst","patch_set":4,"id":"6b55d068_07d64a50","line":330,"in_reply_to":"bff8681a_b8c91a88","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"}],"src/openvpn/dco.c":[{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":726,"context_line":"#endif"},{"line_number":727,"context_line":"        }"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        /* Check if we added the local network as /32 route as it was not in"},{"line_number":730,"context_line":"         * the normal on link scope */"},{"line_number":731,"context_line":"        if (multi_check_push_ifconfig_extra_route(mi))"},{"line_number":732,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"d9ae49b2_0ce9bbcd","line":729,"updated":"2025-09-16 21:19:39.000000000","message":"should we call it \"client network\", as \"local\" seems to be something local to the server","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":726,"context_line":"#endif"},{"line_number":727,"context_line":"        }"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        /* Check if we added the local network as /32 route as it was not in"},{"line_number":730,"context_line":"         * the normal on link scope */"},{"line_number":731,"context_line":"        if (multi_check_push_ifconfig_extra_route(mi))"},{"line_number":732,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"b545dc09_22feb536","line":729,"in_reply_to":"d9ae49b2_0ce9bbcd","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d32e1e2d27f0422711138304a71ab28d7c4a7710","unresolved":true,"context_lines":[{"line_number":683,"context_line":"        {"},{"line_number":684,"context_line":"            gateway \u003d NULL;"},{"line_number":685,"context_line":"        }"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        net_route_v6_add(\u0026m-\u003etop.net_ctx, \u0026addr-\u003ev6.addr, addr-\u003enetbits,"},{"line_number":688,"context_line":"                         gateway, c-\u003ec1.tuntap-\u003eactual_name, 0,"},{"line_number":689,"context_line":"                         DCO_IROUTE_METRIC);"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"785dfadb_41bb07c6","line":686,"updated":"2025-10-12 12:55:11.000000000","message":"This got broken in patch iterations - initially everything was `MR_ONLINK_ADDR` and then the define got changed to `MR_ONLINK_DCO_ADDR` but the \"not win32\" platform was not adjusted?","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"a067452c57cb40166e20052d2748c760959e2c5c","unresolved":false,"context_lines":[{"line_number":683,"context_line":"        {"},{"line_number":684,"context_line":"            gateway \u003d NULL;"},{"line_number":685,"context_line":"        }"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":"        net_route_v6_add(\u0026m-\u003etop.net_ctx, \u0026addr-\u003ev6.addr, addr-\u003enetbits,"},{"line_number":688,"context_line":"                         gateway, c-\u003ec1.tuntap-\u003eactual_name, 0,"},{"line_number":689,"context_line":"                         DCO_IROUTE_METRIC);"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"1d9fd552_43ebda64","line":686,"in_reply_to":"785dfadb_41bb07c6","updated":"2025-10-13 14:23:56.000000000","message":"Acknowledged","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d32e1e2d27f0422711138304a71ab28d7c4a7710","unresolved":true,"context_lines":[{"line_number":697,"context_line":"#else"},{"line_number":698,"context_line":"        in_addr_t dest \u003d htonl(addr-\u003ev4.addr);"},{"line_number":699,"context_line":"        const in_addr_t *gateway \u003d \u0026mi-\u003econtext.c2.push_ifconfig_local;"},{"line_number":700,"context_line":"        if (addr-\u003etype \u0026 MR_ONLINK_ADDR)"},{"line_number":701,"context_line":"        {"},{"line_number":702,"context_line":"            gateway \u003d NULL;"},{"line_number":703,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"c26431d1_ead0937a","line":700,"updated":"2025-10-12 12:55:11.000000000","message":"_DCO_","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"a067452c57cb40166e20052d2748c760959e2c5c","unresolved":false,"context_lines":[{"line_number":697,"context_line":"#else"},{"line_number":698,"context_line":"        in_addr_t dest \u003d htonl(addr-\u003ev4.addr);"},{"line_number":699,"context_line":"        const in_addr_t *gateway \u003d \u0026mi-\u003econtext.c2.push_ifconfig_local;"},{"line_number":700,"context_line":"        if (addr-\u003etype \u0026 MR_ONLINK_ADDR)"},{"line_number":701,"context_line":"        {"},{"line_number":702,"context_line":"            gateway \u003d NULL;"},{"line_number":703,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"394a8910_234e7857","line":700,"in_reply_to":"c26431d1_ead0937a","updated":"2025-10-13 14:23:56.000000000","message":"Done","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d32e1e2d27f0422711138304a71ab28d7c4a7710","unresolved":true,"context_lines":[{"line_number":742,"context_line":"            /* On windows we do not install these routes, so we also do not need to delete them */"},{"line_number":743,"context_line":"            dco_win_del_iroute_ipv4(\u0026c-\u003ec1.tuntap-\u003edco, mi-\u003econtext.c2.push_ifconfig_local, 32);"},{"line_number":744,"context_line":"#endif"},{"line_number":745,"context_line":"        }"},{"line_number":746,"context_line":"    }"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    if (mi-\u003econtext.c2.push_ifconfig_ipv6_defined)"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"b9ffbe40_0e0e1234","line":745,"updated":"2025-10-12 12:55:11.000000000","message":"this looks wrong.  The !not WIN32 code calls `dco_win_`?","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"a067452c57cb40166e20052d2748c760959e2c5c","unresolved":false,"context_lines":[{"line_number":742,"context_line":"            /* On windows we do not install these routes, so we also do not need to delete them */"},{"line_number":743,"context_line":"            dco_win_del_iroute_ipv4(\u0026c-\u003ec1.tuntap-\u003edco, mi-\u003econtext.c2.push_ifconfig_local, 32);"},{"line_number":744,"context_line":"#endif"},{"line_number":745,"context_line":"        }"},{"line_number":746,"context_line":"    }"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    if (mi-\u003econtext.c2.push_ifconfig_ipv6_defined)"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"d3123254_400e84c7","line":745,"in_reply_to":"b9ffbe40_0e0e1234","updated":"2025-10-13 14:23:56.000000000","message":"Done","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"d32e1e2d27f0422711138304a71ab28d7c4a7710","unresolved":true,"context_lines":[{"line_number":768,"context_line":"            net_route_v6_del(\u0026m-\u003etop.net_ctx, \u0026mi-\u003econtext.c2.push_ifconfig_ipv6_local, 128,"},{"line_number":769,"context_line":"                             NULL, c-\u003ec1.tuntap-\u003eactual_name, 0, DCO_IROUTE_METRIC);"},{"line_number":770,"context_line":"#endif"},{"line_number":771,"context_line":"        }"},{"line_number":772,"context_line":"    }"},{"line_number":773,"context_line":"#endif /* if defined(TARGET_LINUX) || defined(TARGET_FREEBSD) || defined(_WIN32) */"},{"line_number":774,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"6e19a3ae_10206ebe","line":771,"updated":"2025-10-12 12:55:11.000000000","message":"This is asymmetric to IPv4 - I guess this is from early tests, and the `dco_win_del...()` think needs to go out?","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"a067452c57cb40166e20052d2748c760959e2c5c","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            net_route_v6_del(\u0026m-\u003etop.net_ctx, \u0026mi-\u003econtext.c2.push_ifconfig_ipv6_local, 128,"},{"line_number":769,"context_line":"                             NULL, c-\u003ec1.tuntap-\u003eactual_name, 0, DCO_IROUTE_METRIC);"},{"line_number":770,"context_line":"#endif"},{"line_number":771,"context_line":"        }"},{"line_number":772,"context_line":"    }"},{"line_number":773,"context_line":"#endif /* if defined(TARGET_LINUX) || defined(TARGET_FREEBSD) || defined(_WIN32) */"},{"line_number":774,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":8,"id":"fba68590_cdaa0d71","line":771,"in_reply_to":"6e19a3ae_10206ebe","updated":"2025-10-13 14:23:56.000000000","message":"Acknowledged","commit_id":"00c603f7f895319c4048184d1f1c19cdee233fad"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"03d1bf3842014cd89fe9e48d05ede397e6455e0c","unresolved":true,"context_lines":[{"line_number":740,"context_line":"         * not in the on link scope defined by --ifconfig */"},{"line_number":741,"context_line":"        in_addr_t ifconfig_local \u003d mi-\u003econtext.c2.push_ifconfig_local;"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        if (multi_check_push_ifconfig_extra_route(mi, ifconfig_local))"},{"line_number":744,"context_line":"        {"},{"line_number":745,"context_line":"            /* On windows we do not install these routes, so we also do not need to delete them */"},{"line_number":746,"context_line":"            net_route_v4_del(\u0026m-\u003etop.net_ctx, \u0026ifconfig_local,"}],"source_content_type":"text/x-csrc","patch_set":13,"id":"9082ac20_ae5adc12","line":743,"updated":"2025-10-28 13:54:18.000000000","message":"with patch v12, multi_check_push_ifconfig_extra_route() lost an htonl(), and the *other* caller has a `htonl(a)`, so this one needs a `htonl(ifconfig_local)` to make it symmetric, or change it everywhere.","commit_id":"8d1416fee21b68b12e00bbbf565bf84f5792aff1"}],"src/openvpn/mroute.h":[{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"0f0831faed7eb8809c644022fb596ef50f2b73cc","unresolved":true,"context_lines":[{"line_number":75,"context_line":"/* Address type mask indicating that proto # is part of address */"},{"line_number":76,"context_line":"#define MR_WITH_PROTO 32"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"/* MRoute is an on link/scope address  ather than a route */"},{"line_number":79,"context_line":"#define MR_ONLINK_ADDR 64"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"struct mroute_addr"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"dca75073_98b8eff0","line":78,"updated":"2025-09-16 20:52:02.000000000","message":"Typo r`ather`","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"58253d1d13d8e3a8668f7af17bb8e7f64567c746","unresolved":false,"context_lines":[{"line_number":75,"context_line":"/* Address type mask indicating that proto # is part of address */"},{"line_number":76,"context_line":"#define MR_WITH_PROTO 32"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"/* MRoute is an on link/scope address  ather than a route */"},{"line_number":79,"context_line":"#define MR_ONLINK_ADDR 64"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"struct mroute_addr"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"8364575a_c2f0e56d","line":78,"in_reply_to":"dca75073_98b8eff0","updated":"2025-09-16 21:40:03.000000000","message":"Done","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"/* Address type mask indicating that proto # is part of address */"},{"line_number":76,"context_line":"#define MR_WITH_PROTO 32"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"/* MRoute is an on link/scope address  ather than a route */"},{"line_number":79,"context_line":"#define MR_ONLINK_ADDR 64"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"struct mroute_addr"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"442f986d_d8c6b1d1","line":78,"in_reply_to":"dca75073_98b8eff0","updated":"2025-09-17 10:19:40.000000000","message":"fixed already in v4.","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"}],"src/openvpn/multi.c":[{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"0f0831faed7eb8809c644022fb596ef50f2b73cc","unresolved":true,"context_lines":[{"line_number":4344,"context_line":"     */"},{"line_number":4345,"context_line":"}"},{"line_number":4346,"context_line":""},{"line_number":4347,"context_line":"/**"},{"line_number":4348,"context_line":" * Determines if the ifconfig_push_local address falls into the range of the local"},{"line_number":4349,"context_line":" * IP addresses of the VPN interface (ifconfig_local with ifconfig_remote_netmask)"},{"line_number":4350,"context_line":" *"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"b815c5df_9c118436","line":4347,"updated":"2025-09-16 20:52:02.000000000","message":"Doxygen is already in the header file","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000006,"name":"d12fk","display_name":"Heiko Hund","email":"heiko@openvpn.net","username":"d12fk"},"change_message_id":"593ba8556a7d1e9f990c0b124d36b7da16837b64","unresolved":false,"context_lines":[{"line_number":4344,"context_line":"     */"},{"line_number":4345,"context_line":"}"},{"line_number":4346,"context_line":""},{"line_number":4347,"context_line":"/**"},{"line_number":4348,"context_line":" * Determines if the ifconfig_push_local address falls into the range of the local"},{"line_number":4349,"context_line":" * IP addresses of the VPN interface (ifconfig_local with ifconfig_remote_netmask)"},{"line_number":4350,"context_line":" *"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"6c873af0_913f1b52","line":4347,"in_reply_to":"b815c5df_9c118436","updated":"2025-09-18 03:14:42.000000000","message":"Done","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":4344,"context_line":"     */"},{"line_number":4345,"context_line":"}"},{"line_number":4346,"context_line":""},{"line_number":4347,"context_line":"/**"},{"line_number":4348,"context_line":" * Determines if the ifconfig_push_local address falls into the range of the local"},{"line_number":4349,"context_line":" * IP addresses of the VPN interface (ifconfig_local with ifconfig_remote_netmask)"},{"line_number":4350,"context_line":" *"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f087988d_68fbfd53","line":4347,"in_reply_to":"b815c5df_9c118436","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"1ece183c8f3786474cd9554f6c8b7ee58fab096a"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":1248,"context_line":"         * we install this as extra onscope address on the interface  */"},{"line_number":1249,"context_line":"        struct gc_arena gc \u003d gc_new();"},{"line_number":1250,"context_line":"        /* The IP address is not assigned to the interface of the DCO device */"},{"line_number":1251,"context_line":"        msg(D_MULTI_LOW, \"MULTI: Adding /32 on-link route for route %s -\u003e %s\","},{"line_number":1252,"context_line":"            print_in_addr_t(remote_si.addr.in4.sin_addr.s_addr, 0, \u0026gc),"},{"line_number":1253,"context_line":"            multi_instance_string(mi, false, \u0026gc));"},{"line_number":1254,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"d08232ec_d390068e","line":1251,"updated":"2025-09-16 21:19:39.000000000","message":"s/for route/for ifconfig-push/ ? (like you wrote in the ipv6 case)","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":1248,"context_line":"         * we install this as extra onscope address on the interface  */"},{"line_number":1249,"context_line":"        struct gc_arena gc \u003d gc_new();"},{"line_number":1250,"context_line":"        /* The IP address is not assigned to the interface of the DCO device */"},{"line_number":1251,"context_line":"        msg(D_MULTI_LOW, \"MULTI: Adding /32 on-link route for route %s -\u003e %s\","},{"line_number":1252,"context_line":"            print_in_addr_t(remote_si.addr.in4.sin_addr.s_addr, 0, \u0026gc),"},{"line_number":1253,"context_line":"            multi_instance_string(mi, false, \u0026gc));"},{"line_number":1254,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"8e1814c1_f9785b38","line":1251,"in_reply_to":"d08232ec_d390068e","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":1259,"context_line":"        gc_free(\u0026gc);"},{"line_number":1260,"context_line":"    }"},{"line_number":1261,"context_line":""},{"line_number":1262,"context_line":"    if (!primary)"},{"line_number":1263,"context_line":"    {"},{"line_number":1264,"context_line":"        ASSERT(netbits \u003e\u003d 0); /* DCO requires populated netbits */"},{"line_number":1265,"context_line":"        dco_install_iroute(m, mi, \u0026addr);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"bed1bbae_c70f9021","line":1262,"updated":"2025-09-16 21:19:39.000000000","message":"for clarity sake, shouldn\u0027t this be an \"else if\"?\nFrom a functional perspective it shouldn\u0027t make a difference.","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"        gc_free(\u0026gc);"},{"line_number":1260,"context_line":"    }"},{"line_number":1261,"context_line":""},{"line_number":1262,"context_line":"    if (!primary)"},{"line_number":1263,"context_line":"    {"},{"line_number":1264,"context_line":"        ASSERT(netbits \u003e\u003d 0); /* DCO requires populated netbits */"},{"line_number":1265,"context_line":"        dco_install_iroute(m, mi, \u0026addr);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"8e6958ef_74bd7374","line":1262,"in_reply_to":"bed1bbae_c70f9021","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":1312,"context_line":"        dco_install_iroute(m, mi, \u0026addr);"},{"line_number":1313,"context_line":"        gc_free(\u0026gc);"},{"line_number":1314,"context_line":"    }"},{"line_number":1315,"context_line":"    if (!primary)"},{"line_number":1316,"context_line":"    {"},{"line_number":1317,"context_line":"        /* \"primary\" is the VPN ifconfig address of the peer and already"},{"line_number":1318,"context_line":"         * known to DCO, so only install \"extra\" iroutes (primary \u003d false)"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"8760fe93_46153291","line":1315,"updated":"2025-09-16 21:19:39.000000000","message":"same","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":1312,"context_line":"        dco_install_iroute(m, mi, \u0026addr);"},{"line_number":1313,"context_line":"        gc_free(\u0026gc);"},{"line_number":1314,"context_line":"    }"},{"line_number":1315,"context_line":"    if (!primary)"},{"line_number":1316,"context_line":"    {"},{"line_number":1317,"context_line":"        /* \"primary\" is the VPN ifconfig address of the peer and already"},{"line_number":1318,"context_line":"         * known to DCO, so only install \"extra\" iroutes (primary \u003d false)"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"4d8bd6f0_6be3546b","line":1315,"in_reply_to":"8760fe93_46153291","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":4350,"context_line":" *"},{"line_number":4351,"context_line":" * @return Returns true if ifconfig_push is outside that range and requires an extra"},{"line_number":4352,"context_line":" * route to be installed."},{"line_number":4353,"context_line":" */"},{"line_number":4354,"context_line":"bool"},{"line_number":4355,"context_line":"multi_check_push_ifconfig_extra_route(struct multi_instance *mi)"},{"line_number":4356,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"4a7ec029_5c48f9ed","line":4353,"updated":"2025-09-16 21:19:39.000000000","message":"I think we normally put the doxygen in one place only (i.e. header file), so this can go.","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":4350,"context_line":" *"},{"line_number":4351,"context_line":" * @return Returns true if ifconfig_push is outside that range and requires an extra"},{"line_number":4352,"context_line":" * route to be installed."},{"line_number":4353,"context_line":" */"},{"line_number":4354,"context_line":"bool"},{"line_number":4355,"context_line":"multi_check_push_ifconfig_extra_route(struct multi_instance *mi)"},{"line_number":4356,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"de75b4bc_4f184632","line":4353,"in_reply_to":"4a7ec029_5c48f9ed","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"730e59c345a9702b29523369b7d3d3a415267275","unresolved":true,"context_lines":[{"line_number":4374,"context_line":"    }"},{"line_number":4375,"context_line":""},{"line_number":4376,"context_line":"    return (!ipv6_net_contains_host(\u0026ifconfig_local, o-\u003eifconfig_ipv6_netbits,"},{"line_number":4377,"context_line":"                                    \u0026o-\u003epush_ifconfig_ipv6_local));"},{"line_number":4378,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"55223ae1_ab140e86","line":4377,"updated":"2025-10-19 09:49:39.000000000","message":"Ah, here we go.  This fails if there is *no* `ifconfig-ipv6-push` in the config, as then we have\n\n```\n(gdb) print o-\u003epush_ifconfig_ipv6_local\n$10 \u003d {__u6_addr \u003d {__u6_addr8 \u003d \u0027\\000\u0027 \u003crepeats 15 times\u003e, __u6_addr16 \u003d {0, 0, 0, 0, 0, 0, 0, 0}, __u6_addr32 \u003d {0, 0, 0, 0}}}\n```\n\n... and that obviously does not match.\n\nFrom reading the code in `dco_delete_iroutes()`, this looks as if the check should be on `mi-\u003econtext.c2.push_ifconfig_local` and not `mi-\u003econtext.options.push_ifconfig_ipv6_local`?  \n\n... later... yep, this works:\n\n``` \n    struct context_2 *c2 \u003d \u0026mi-\u003econtext.c2;\n    return (!ipv6_net_contains_host(\u0026ifconfig_local, o-\u003eifconfig_ipv6_netbits,\n                                    \u0026c2-\u003epush_ifconfig_ipv6_local));\n```","commit_id":"9c78bdf6de34137c24f869d483fd962e81dccf9c"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"3da1bb2e50ab315258a7c28ef93baec4d9816682","unresolved":true,"context_lines":[{"line_number":4374,"context_line":"    }"},{"line_number":4375,"context_line":""},{"line_number":4376,"context_line":"    return (!ipv6_net_contains_host(\u0026ifconfig_local, o-\u003eifconfig_ipv6_netbits,"},{"line_number":4377,"context_line":"                                    \u0026o-\u003epush_ifconfig_ipv6_local));"},{"line_number":4378,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"e8420035_d33ff056","line":4377,"in_reply_to":"55223ae1_ab140e86","updated":"2025-10-19 09:56:30.000000000","message":"Maybe it would also be an idea to change `multi_check_push_ifconfig_ipv6_extra_route()` to not be passed a `mi` but the actual route we want to check?  Both callers know what IPv6 address they want to be looked at (a6 / \u0026mi-\u003econtext.c2.push_ifconfig_ipv6_local) and actually passing *that* address would certainly make the code easier to understand...\n\n(For symmetry reasons, the same argument could be made for IPv4, of course)","commit_id":"9c78bdf6de34137c24f869d483fd962e81dccf9c"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0eb283f91c911412ff85c933da2ef23a163ba6cc","unresolved":false,"context_lines":[{"line_number":4374,"context_line":"    }"},{"line_number":4375,"context_line":""},{"line_number":4376,"context_line":"    return (!ipv6_net_contains_host(\u0026ifconfig_local, o-\u003eifconfig_ipv6_netbits,"},{"line_number":4377,"context_line":"                                    \u0026o-\u003epush_ifconfig_ipv6_local));"},{"line_number":4378,"context_line":"}"}],"source_content_type":"text/x-csrc","patch_set":11,"id":"02b58eff_bb2dd3f8","line":4377,"in_reply_to":"e8420035_d33ff056","updated":"2025-10-28 13:55:11.000000000","message":"Done","commit_id":"9c78bdf6de34137c24f869d483fd962e81dccf9c"}],"src/openvpn/multi.h":[{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"7f19b9d91d6f6dc4e099579b958b3e218b83bd4f","unresolved":true,"context_lines":[{"line_number":669,"context_line":"/**"},{"line_number":670,"context_line":" * Determines if the ifconfig_push_local address falls into the range of the local"},{"line_number":671,"context_line":" * IP addresses of the VPN interface (ifconfig_local with ifconfig_remote_netmask)"},{"line_number":672,"context_line":" *"},{"line_number":673,"context_line":" * @return Returns true if ifconfig_push is outside that range and requires an extra"},{"line_number":674,"context_line":" * route to be installed."},{"line_number":675,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"c67d489a_5aa0fbc8","line":672,"updated":"2025-09-16 21:19:39.000000000","message":"forgot to document \"mi\"","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"},{"author":{"_account_id":1000003,"name":"plaisthos","display_name":"Arne Schwabe","email":"arne-openvpn@rfc2549.org","username":"plaisthos"},"change_message_id":"9456158c5fe7fcc7e6faa1921c0c540599a7f3c6","unresolved":false,"context_lines":[{"line_number":669,"context_line":"/**"},{"line_number":670,"context_line":" * Determines if the ifconfig_push_local address falls into the range of the local"},{"line_number":671,"context_line":" * IP addresses of the VPN interface (ifconfig_local with ifconfig_remote_netmask)"},{"line_number":672,"context_line":" *"},{"line_number":673,"context_line":" * @return Returns true if ifconfig_push is outside that range and requires an extra"},{"line_number":674,"context_line":" * route to be installed."},{"line_number":675,"context_line":" */"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"413eed33_c08b5e0d","line":672,"in_reply_to":"c67d489a_5aa0fbc8","updated":"2025-09-17 10:19:40.000000000","message":"Done","commit_id":"559bb18d98ce89d8db90117af3f84a8ba5edaae9"}]}
