)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support CIDR on options and extend netbits usage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for CIDR notation on all suitable options (client-nat,"},{"line_number":10,"context_line":"ifconfig, ifconfig-push, ifconfig-push-constraint, iroute, route,"},{"line_number":11,"context_line":"server, server-bridge). Anyway push of ifconfig is done without CIDR in"},{"line_number":12,"context_line":"order to support older peers. Also netmask env vars have been preserved"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"af57c291_7928346b","line":9,"updated":"2024-09-16 12:39:30.000000000","message":"Maybe give some more motivation here. Why is this good for users? Is the assumption that this notation is easier to use for users?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support CIDR on options and extend netbits usage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for CIDR notation on all suitable options (client-nat,"},{"line_number":10,"context_line":"ifconfig, ifconfig-push, ifconfig-push-constraint, iroute, route,"},{"line_number":11,"context_line":"server, server-bridge). Anyway push of ifconfig is done without CIDR in"},{"line_number":12,"context_line":"order to support older peers. Also netmask env vars have been preserved"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ef955895_c40062c5","line":9,"in_reply_to":"af57c291_7928346b","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"49223bd183f634bdadd90e35877d6ee6c8b63dfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9627c440_7dbccb32","updated":"2024-09-11 13:07:48.000000000","message":"Only started going through the code, so only a few comments. Without a documentation update I find it difficult to judge the changes. Please provide documentation update.","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"220b14dc20dc23d9479a34548416e711a8302507","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"14ad8d46_a94d92c2","in_reply_to":"9627c440_7dbccb32","updated":"2024-09-11 13:26:12.000000000","message":"Will do","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"47a10a46_31641898","updated":"2024-09-13 13:57:21.000000000","message":"Didn\u0027t get through the whole code, but here a collection of my thoughts so far...","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a81f1d94_2d9548fa","updated":"2024-09-16 12:39:30.000000000","message":"Finished with first pass over the whole change.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"eace8f827ef47648341c3b1e09724d210ce21d62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5edecdbf_b2c4ff17","updated":"2024-09-12 14:06:23.000000000","message":"I extended to the doc pages on the options affected by this change.\nI restored --ifconfig-pool to the original format (no CIDR).","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"}],"doc/man-sections/server-options.rst":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":341,"context_line":"--iroute args"},{"line_number":342,"context_line":"  Generate an internal route to a specific client. If both the ``netmask``"},{"line_number":343,"context_line":"  and the ``bits`` parameter are omitted, the subnet defaults to"},{"line_number":344,"context_line":"  :code:`255.255.255.255`."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"  Valid syntax:"},{"line_number":347,"context_line":"  ::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"04a8784d_9d0d84d0","line":344,"updated":"2024-09-13 13:57:21.000000000","message":"for completeness mentions /32 as well.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":341,"context_line":"--iroute args"},{"line_number":342,"context_line":"  Generate an internal route to a specific client. If both the ``netmask``"},{"line_number":343,"context_line":"  and the ``bits`` parameter are omitted, the subnet defaults to"},{"line_number":344,"context_line":"  :code:`255.255.255.255`."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"  Valid syntax:"},{"line_number":347,"context_line":"  ::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"36991047_c59736fd","line":344,"in_reply_to":"04a8784d_9d0d84d0","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"62e27b41e2072502651f06b166003a105df0cc6c","unresolved":true,"context_lines":[{"line_number":306,"context_line":"  the client view of its local endpoint to differ from the server view. In"},{"line_number":307,"context_line":"  this case ``local/netmask`` (or ``local/bits``) will refer to the server"},{"line_number":308,"context_line":"  view while ``alias/netmask`` (or ``alias/bits``) will refer to the client"},{"line_number":309,"context_line":"  view."},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"  This option must be associated with a specific client instance, which"},{"line_number":312,"context_line":"  means that it must be specified either in a client instance config file"}],"source_content_type":"text/x-rst","patch_set":9,"id":"6c774407_c41b8c34","line":309,"updated":"2026-03-09 13:10:53.000000000","message":"I would find it a bit easier to read if this was more explicit. Maybe add something like \"So the server will actually push ``ifconfig alias remote/netmask`` to the client\"?","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"624da500f4edcf1e8369be5d87ed8f0ec0a54c5e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"  the client view of its local endpoint to differ from the server view. In"},{"line_number":307,"context_line":"  this case ``local/netmask`` (or ``local/bits``) will refer to the server"},{"line_number":308,"context_line":"  view while ``alias/netmask`` (or ``alias/bits``) will refer to the client"},{"line_number":309,"context_line":"  view."},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"  This option must be associated with a specific client instance, which"},{"line_number":312,"context_line":"  means that it must be specified either in a client instance config file"}],"source_content_type":"text/x-rst","patch_set":9,"id":"93ccbb1c_e6347e78","line":309,"in_reply_to":"6c774407_c41b8c34","updated":"2026-03-10 09:53:10.000000000","message":"Acknowledged","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"}],"doc/man-sections/vpn-network-options.rst":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":217,"context_line":"  Valid syntaxes:"},{"line_number":218,"context_line":"  ::"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"     ifconfig local rn"},{"line_number":221,"context_line":"     ifconfig local/bits"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  Set TUN/TAP adapter parameters. It requires the *IP address* of the local"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f755556_b75a572a","line":220,"updated":"2024-09-13 13:57:21.000000000","message":"Need to specify the two possibilities (IP address or netmask) separately.\nAlso \"rn\" is a horrible name. What it is supposed to mean?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"7bc835a350c61886b0c754dff60979f6e7933d74","unresolved":false,"context_lines":[{"line_number":217,"context_line":"  Valid syntaxes:"},{"line_number":218,"context_line":"  ::"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"     ifconfig local rn"},{"line_number":221,"context_line":"     ifconfig local/bits"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  Set TUN/TAP adapter parameters. It requires the *IP address* of the local"}],"source_content_type":"text/x-rst","patch_set":3,"id":"e9b1f04d_20390532","line":220,"in_reply_to":"010562e7_9eb9bcd4","updated":"2024-09-17 16:12:50.000000000","message":"Done","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"eb87af5bba9bc3439bc03e2dc9f64b482bb17d38","unresolved":true,"context_lines":[{"line_number":217,"context_line":"  Valid syntaxes:"},{"line_number":218,"context_line":"  ::"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"     ifconfig local rn"},{"line_number":221,"context_line":"     ifconfig local/bits"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  Set TUN/TAP adapter parameters. It requires the *IP address* of the local"}],"source_content_type":"text/x-rst","patch_set":3,"id":"010562e7_9eb9bcd4","line":220,"in_reply_to":"61768e6b_7acc98ad","updated":"2024-09-17 11:34:07.000000000","message":"Yes, I think that is a good idea.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":true,"context_lines":[{"line_number":217,"context_line":"  Valid syntaxes:"},{"line_number":218,"context_line":"  ::"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"     ifconfig local rn"},{"line_number":221,"context_line":"     ifconfig local/bits"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"  Set TUN/TAP adapter parameters. It requires the *IP address* of the local"}],"source_content_type":"text/x-rst","patch_set":3,"id":"61768e6b_7acc98ad","line":220,"in_reply_to":"7f755556_b75a572a","updated":"2024-09-16 15:54:54.000000000","message":"I think it stands for remote_netmask. I left it like this because I found it mentioned in this form in the explanation that follows (line 237) but I agree it isn\u0027t clear. I\u0027m duplicating it to show both versions of ifconfig (remote and netmask) as you suggested. However this may not be completely coherent to --ifconfig-push (which has \"local remote-netmask\" arguments). Should I change that one too accordingly?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":263,"context_line":"     ifconfig 10.8.0.2 10.8.0.1"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"     # tun/tap device in subnet mode"},{"line_number":266,"context_line":"     ifconfig 10.8.0.2 255.255.255.0"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"--ifconfig-ipv6 args"},{"line_number":269,"context_line":"  Configure an IPv6 address on the *tun* device."}],"source_content_type":"text/x-rst","patch_set":3,"id":"9e59c2d1_8882b7e2","line":266,"range":{"start_line":266,"start_character":21,"end_line":266,"end_character":26},"updated":"2024-09-13 13:57:21.000000000","message":"Add /bits example here?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":263,"context_line":"     ifconfig 10.8.0.2 10.8.0.1"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"     # tun/tap device in subnet mode"},{"line_number":266,"context_line":"     ifconfig 10.8.0.2 255.255.255.0"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"--ifconfig-ipv6 args"},{"line_number":269,"context_line":"  Configure an IPv6 address on the *tun* device."}],"source_content_type":"text/x-rst","patch_set":3,"id":"308f35e0_f16ee639","line":266,"range":{"start_line":266,"start_character":21,"end_line":266,"end_character":26},"in_reply_to":"9e59c2d1_8882b7e2","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":386,"context_line":"  Valid syntaxes:"},{"line_number":387,"context_line":"  ::"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"      route network|ipv4addr [netmask] [gateway] [metric]"},{"line_number":390,"context_line":"      route network|ipv4addr/bits [gateway] [metric]"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"  This option is intended as a convenience proxy for the ``route``\\(8)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f33e5bdd_a494b3ca","line":389,"updated":"2024-09-13 13:57:21.000000000","message":"Does the network|ipv4addr here really add any value? Should we go just for ipv4addr here like with --route-ipv6 ?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":386,"context_line":"  Valid syntaxes:"},{"line_number":387,"context_line":"  ::"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"      route network|ipv4addr [netmask] [gateway] [metric]"},{"line_number":390,"context_line":"      route network|ipv4addr/bits [gateway] [metric]"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"  This option is intended as a convenience proxy for the ``route``\\(8)"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1861ac78_b520ac5c","line":389,"in_reply_to":"f33e5bdd_a494b3ca","updated":"2024-09-16 15:54:54.000000000","message":"I didn\u0027t drop the \"network\" format because I thought it was referring to the DNS resolvable name or special keywords as opposed to the ipv4 address. But I see that it can be a bit misleading therefore I will duplicate the lines (network and ipv4addr).","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"}],"src/openvpn/options.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"49223bd183f634bdadd90e35877d6ee6c8b63dfe","unresolved":true,"context_lines":[{"line_number":1513,"context_line":"{"},{"line_number":1514,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":"    msg(D_SHOW_PARMS, \"  server_network \u003d %s/%d\", print_in_addr_t(o-\u003eserver_network, 0, \u0026gc), o-\u003eserver_netbits);"},{"line_number":1517,"context_line":"    msg(D_SHOW_PARMS, \"  server_network_ipv6 \u003d %s\", print_in6_addr(o-\u003eserver_network_ipv6, 0, \u0026gc) );"},{"line_number":1518,"context_line":"    SHOW_INT(server_netbits_ipv6);"},{"line_number":1519,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_ip \u003d %s/%d\", print_in_addr_t(o-\u003eserver_bridge_ip, 0, \u0026gc), o-\u003eserver_bridge_netbits);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"2909683e_d410ca3f","line":1516,"updated":"2024-09-11 13:07:48.000000000","message":"%u","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"220b14dc20dc23d9479a34548416e711a8302507","unresolved":false,"context_lines":[{"line_number":1513,"context_line":"{"},{"line_number":1514,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":1515,"context_line":""},{"line_number":1516,"context_line":"    msg(D_SHOW_PARMS, \"  server_network \u003d %s/%d\", print_in_addr_t(o-\u003eserver_network, 0, \u0026gc), o-\u003eserver_netbits);"},{"line_number":1517,"context_line":"    msg(D_SHOW_PARMS, \"  server_network_ipv6 \u003d %s\", print_in6_addr(o-\u003eserver_network_ipv6, 0, \u0026gc) );"},{"line_number":1518,"context_line":"    SHOW_INT(server_netbits_ipv6);"},{"line_number":1519,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_ip \u003d %s/%d\", print_in_addr_t(o-\u003eserver_bridge_ip, 0, \u0026gc), o-\u003eserver_bridge_netbits);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"2609ef1b_3e2658b8","line":1516,"in_reply_to":"2909683e_d410ca3f","updated":"2024-09-11 13:26:12.000000000","message":"Acknowledged","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"49223bd183f634bdadd90e35877d6ee6c8b63dfe","unresolved":true,"context_lines":[{"line_number":1516,"context_line":"    msg(D_SHOW_PARMS, \"  server_network \u003d %s/%d\", print_in_addr_t(o-\u003eserver_network, 0, \u0026gc), o-\u003eserver_netbits);"},{"line_number":1517,"context_line":"    msg(D_SHOW_PARMS, \"  server_network_ipv6 \u003d %s\", print_in6_addr(o-\u003eserver_network_ipv6, 0, \u0026gc) );"},{"line_number":1518,"context_line":"    SHOW_INT(server_netbits_ipv6);"},{"line_number":1519,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_ip \u003d %s/%d\", print_in_addr_t(o-\u003eserver_bridge_ip, 0, \u0026gc), o-\u003eserver_bridge_netbits);"},{"line_number":1520,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_pool_start \u003d %s\", print_in_addr_t(o-\u003eserver_bridge_pool_start, 0, \u0026gc));"},{"line_number":1521,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_pool_end \u003d %s\", print_in_addr_t(o-\u003eserver_bridge_pool_end, 0, \u0026gc));"},{"line_number":1522,"context_line":"    if (o-\u003epush_list.head)"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"5e27a458_e0728f32","line":1519,"updated":"2024-09-11 13:07:48.000000000","message":"%u","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"220b14dc20dc23d9479a34548416e711a8302507","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"    msg(D_SHOW_PARMS, \"  server_network \u003d %s/%d\", print_in_addr_t(o-\u003eserver_network, 0, \u0026gc), o-\u003eserver_netbits);"},{"line_number":1517,"context_line":"    msg(D_SHOW_PARMS, \"  server_network_ipv6 \u003d %s\", print_in6_addr(o-\u003eserver_network_ipv6, 0, \u0026gc) );"},{"line_number":1518,"context_line":"    SHOW_INT(server_netbits_ipv6);"},{"line_number":1519,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_ip \u003d %s/%d\", print_in_addr_t(o-\u003eserver_bridge_ip, 0, \u0026gc), o-\u003eserver_bridge_netbits);"},{"line_number":1520,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_pool_start \u003d %s\", print_in_addr_t(o-\u003eserver_bridge_pool_start, 0, \u0026gc));"},{"line_number":1521,"context_line":"    msg(D_SHOW_PARMS, \"  server_bridge_pool_end \u003d %s\", print_in_addr_t(o-\u003eserver_bridge_pool_end, 0, \u0026gc));"},{"line_number":1522,"context_line":"    if (o-\u003epush_list.head)"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"511cdb40_3a9d08f3","line":1519,"in_reply_to":"5e27a458_e0728f32","updated":"2024-09-11 13:26:12.000000000","message":"Acknowledged","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"49223bd183f634bdadd90e35877d6ee6c8b63dfe","unresolved":true,"context_lines":[{"line_number":1532,"context_line":"        }"},{"line_number":1533,"context_line":"    }"},{"line_number":1534,"context_line":"    SHOW_BOOL(ifconfig_pool_defined);"},{"line_number":1535,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_start \u003d %s/%d\", print_in_addr_t(o-\u003eifconfig_pool_start, 0, \u0026gc), o-\u003eifconfig_pool_netbits);"},{"line_number":1536,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_end \u003d %s\", print_in_addr_t(o-\u003eifconfig_pool_end, 0, \u0026gc));"},{"line_number":1537,"context_line":"    SHOW_STR(ifconfig_pool_persist_filename);"},{"line_number":1538,"context_line":"    SHOW_INT(ifconfig_pool_persist_refresh_freq);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f1263d0c_6227c36a","line":1535,"updated":"2024-09-11 13:07:48.000000000","message":"%u\n\ngiving netbits with _start doesn\u0027t seem to make sense.","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"d6fc88876db353ca1d6649dcb818081cd8be029d","unresolved":true,"context_lines":[{"line_number":1532,"context_line":"        }"},{"line_number":1533,"context_line":"    }"},{"line_number":1534,"context_line":"    SHOW_BOOL(ifconfig_pool_defined);"},{"line_number":1535,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_start \u003d %s/%d\", print_in_addr_t(o-\u003eifconfig_pool_start, 0, \u0026gc), o-\u003eifconfig_pool_netbits);"},{"line_number":1536,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_end \u003d %s\", print_in_addr_t(o-\u003eifconfig_pool_end, 0, \u0026gc));"},{"line_number":1537,"context_line":"    SHOW_STR(ifconfig_pool_persist_filename);"},{"line_number":1538,"context_line":"    SHOW_INT(ifconfig_pool_persist_refresh_freq);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"550aedbd_8f511ee3","line":1535,"in_reply_to":"200757a5_2e7e0aa5","updated":"2024-09-11 13:57:19.000000000","message":"ok","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":false,"context_lines":[{"line_number":1532,"context_line":"        }"},{"line_number":1533,"context_line":"    }"},{"line_number":1534,"context_line":"    SHOW_BOOL(ifconfig_pool_defined);"},{"line_number":1535,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_start \u003d %s/%d\", print_in_addr_t(o-\u003eifconfig_pool_start, 0, \u0026gc), o-\u003eifconfig_pool_netbits);"},{"line_number":1536,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_end \u003d %s\", print_in_addr_t(o-\u003eifconfig_pool_end, 0, \u0026gc));"},{"line_number":1537,"context_line":"    SHOW_STR(ifconfig_pool_persist_filename);"},{"line_number":1538,"context_line":"    SHOW_INT(ifconfig_pool_persist_refresh_freq);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f3ac4520_d5a41ab2","line":1535,"in_reply_to":"550aedbd_8f511ee3","updated":"2024-09-13 13:57:21.000000000","message":"Done","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"64272977975ab3a3203a85c158560dff4f19ec04","unresolved":true,"context_lines":[{"line_number":1532,"context_line":"        }"},{"line_number":1533,"context_line":"    }"},{"line_number":1534,"context_line":"    SHOW_BOOL(ifconfig_pool_defined);"},{"line_number":1535,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_start \u003d %s/%d\", print_in_addr_t(o-\u003eifconfig_pool_start, 0, \u0026gc), o-\u003eifconfig_pool_netbits);"},{"line_number":1536,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_end \u003d %s\", print_in_addr_t(o-\u003eifconfig_pool_end, 0, \u0026gc));"},{"line_number":1537,"context_line":"    SHOW_STR(ifconfig_pool_persist_filename);"},{"line_number":1538,"context_line":"    SHOW_INT(ifconfig_pool_persist_refresh_freq);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"200757a5_2e7e0aa5","line":1535,"in_reply_to":"af179191_a1b280d9","updated":"2024-09-11 13:55:12.000000000","message":"I\u0027m saying that we need to come up with a clearer display for the information. But I do not have a proposal right now. Maybe once I have looked deeper into the topic of why we actually have a start and an end and a netmask.","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"220b14dc20dc23d9479a34548416e711a8302507","unresolved":true,"context_lines":[{"line_number":1532,"context_line":"        }"},{"line_number":1533,"context_line":"    }"},{"line_number":1534,"context_line":"    SHOW_BOOL(ifconfig_pool_defined);"},{"line_number":1535,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_start \u003d %s/%d\", print_in_addr_t(o-\u003eifconfig_pool_start, 0, \u0026gc), o-\u003eifconfig_pool_netbits);"},{"line_number":1536,"context_line":"    msg(D_SHOW_PARMS, \"  ifconfig_pool_end \u003d %s\", print_in_addr_t(o-\u003eifconfig_pool_end, 0, \u0026gc));"},{"line_number":1537,"context_line":"    SHOW_STR(ifconfig_pool_persist_filename);"},{"line_number":1538,"context_line":"    SHOW_INT(ifconfig_pool_persist_refresh_freq);"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"af179191_a1b280d9","line":1535,"in_reply_to":"f1263d0c_6227c36a","updated":"2024-09-11 13:26:12.000000000","message":"So you are suggesting avoiding netbits in this case?","commit_id":"3ce6b364dbe29bea30165956b142dd91e995083c"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":6100,"context_line":"        bool error \u003d false;"},{"line_number":6101,"context_line":""},{"line_number":6102,"context_line":"        VERIFY_PERMISSION(OPT_P_UP);"},{"line_number":6103,"context_line":"        if (!p[2]) /* p[1] must be in CIDR format */"},{"line_number":6104,"context_line":"        {"},{"line_number":6105,"context_line":"            unsigned int netbits \u003d 0;"},{"line_number":6106,"context_line":"            get_ip_addr(p[1], \u0026netbits, msglevel, \u0026error);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"483600ca_2e578b22","line":6103,"updated":"2024-09-13 13:57:21.000000000","message":"Should probably do a ip_or_dns_addr_safe(p[1]) here? Might need to enhance that function to allow netbits, though.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":6100,"context_line":"        bool error \u003d false;"},{"line_number":6101,"context_line":""},{"line_number":6102,"context_line":"        VERIFY_PERMISSION(OPT_P_UP);"},{"line_number":6103,"context_line":"        if (!p[2]) /* p[1] must be in CIDR format */"},{"line_number":6104,"context_line":"        {"},{"line_number":6105,"context_line":"            unsigned int netbits \u003d 0;"},{"line_number":6106,"context_line":"            get_ip_addr(p[1], \u0026netbits, msglevel, \u0026error);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ce30cce3_6ee36c90","line":6103,"in_reply_to":"483600ca_2e578b22","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7026,"context_line":"        const char *netmask \u003d p[i+1] ? p[i++] : NULL;"},{"line_number":7027,"context_line":"        const char *foreign_network \u003d p[i];"},{"line_number":7028,"context_line":""},{"line_number":7029,"context_line":"        VERIFY_PERMISSION(OPT_P_ROUTE);"},{"line_number":7030,"context_line":"        cnol_check_alloc(options);"},{"line_number":7031,"context_line":"        add_client_nat_to_option_list(options-\u003eclient_nat, type, network, netmask, foreign_network, msglevel);"},{"line_number":7032,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"37d80b88_d3071bd7","line":7029,"range":{"start_line":7029,"start_character":8,"end_line":7029,"end_character":25},"updated":"2024-09-13 13:57:21.000000000","message":"VERIFY_PERMISSION should go first","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7026,"context_line":"        const char *netmask \u003d p[i+1] ? p[i++] : NULL;"},{"line_number":7027,"context_line":"        const char *foreign_network \u003d p[i];"},{"line_number":7028,"context_line":""},{"line_number":7029,"context_line":"        VERIFY_PERMISSION(OPT_P_ROUTE);"},{"line_number":7030,"context_line":"        cnol_check_alloc(options);"},{"line_number":7031,"context_line":"        add_client_nat_to_option_list(options-\u003eclient_nat, type, network, netmask, foreign_network, msglevel);"},{"line_number":7032,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"10b9fbdb_8c9a2ae0","line":7029,"range":{"start_line":7029,"start_character":8,"end_line":7029,"end_character":25},"in_reply_to":"37d80b88_d3071bd7","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7034,"context_line":"    {"},{"line_number":7035,"context_line":"        size_t i \u003d 1;"},{"line_number":7036,"context_line":"        char *cidr \u003d strchr(p[i], \u0027/\u0027);"},{"line_number":7037,"context_line":"        if (cidr \u0026\u0026 !no_more_than_n_args(msglevel, p, 4, NM_QUOTE_HINT))"},{"line_number":7038,"context_line":"        {"},{"line_number":7039,"context_line":"            goto err;"},{"line_number":7040,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"babf9754_f9b70e73","line":7037,"updated":"2024-09-13 13:57:21.000000000","message":"Why NM_QUOTE_HINT?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7034,"context_line":"    {"},{"line_number":7035,"context_line":"        size_t i \u003d 1;"},{"line_number":7036,"context_line":"        char *cidr \u003d strchr(p[i], \u0027/\u0027);"},{"line_number":7037,"context_line":"        if (cidr \u0026\u0026 !no_more_than_n_args(msglevel, p, 4, NM_QUOTE_HINT))"},{"line_number":7038,"context_line":"        {"},{"line_number":7039,"context_line":"            goto err;"},{"line_number":7040,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"b4a5b082_b11cfef8","line":7037,"in_reply_to":"babf9754_f9b70e73","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7039,"context_line":"            goto err;"},{"line_number":7040,"context_line":"        }"},{"line_number":7041,"context_line":""},{"line_number":7042,"context_line":"        VERIFY_PERMISSION(OPT_P_ROUTE);"},{"line_number":7043,"context_line":"        rol_check_alloc(options);"},{"line_number":7044,"context_line":"        if (pull_mode)"},{"line_number":7045,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e96e9d33_aa4c39e3","line":7042,"range":{"start_line":7042,"start_character":26,"end_line":7042,"end_character":37},"updated":"2024-09-13 13:57:21.000000000","message":"VERIFY_PERMISSION should go first","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7039,"context_line":"            goto err;"},{"line_number":7040,"context_line":"        }"},{"line_number":7041,"context_line":""},{"line_number":7042,"context_line":"        VERIFY_PERMISSION(OPT_P_ROUTE);"},{"line_number":7043,"context_line":"        rol_check_alloc(options);"},{"line_number":7044,"context_line":"        if (pull_mode)"},{"line_number":7045,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4c4dea4c_37ac9b94","line":7042,"range":{"start_line":7042,"start_character":26,"end_line":7042,"end_character":37},"in_reply_to":"e96e9d33_aa4c39e3","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7044,"context_line":"        if (pull_mode)"},{"line_number":7045,"context_line":"        {"},{"line_number":7046,"context_line":""},{"line_number":7047,"context_line":"            const char *network \u003d strtok(p[i++], \"/\"); /* this modifies p[1] */"},{"line_number":7048,"context_line":"            if (!ip_or_dns_addr_safe(network, options-\u003eallow_pull_fqdn) \u0026\u0026 !is_special_addr(p[1])) /* FQDN -- may be DNS name */"},{"line_number":7049,"context_line":"            {"},{"line_number":7050,"context_line":"                msg(msglevel, \"route parameter network/IP \u0027%s\u0027 must be a valid address or address/bits\", p[1]);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1c383a62_67435f56","line":7047,"updated":"2024-09-13 13:57:21.000000000","message":"I find this very ugly. Would be better if we could improve ip_or_dns_addr_safe to handle CIDR notation, wouldn\u0027t it?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7044,"context_line":"        if (pull_mode)"},{"line_number":7045,"context_line":"        {"},{"line_number":7046,"context_line":""},{"line_number":7047,"context_line":"            const char *network \u003d strtok(p[i++], \"/\"); /* this modifies p[1] */"},{"line_number":7048,"context_line":"            if (!ip_or_dns_addr_safe(network, options-\u003eallow_pull_fqdn) \u0026\u0026 !is_special_addr(p[1])) /* FQDN -- may be DNS name */"},{"line_number":7049,"context_line":"            {"},{"line_number":7050,"context_line":"                msg(msglevel, \"route parameter network/IP \u0027%s\u0027 must be a valid address or address/bits\", p[1]);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"23a2b49a_8cb1624d","line":7047,"in_reply_to":"1c383a62_67435f56","updated":"2024-09-16 15:54:54.000000000","message":"Yes, definitely.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7068,"context_line":"        if (cidr)"},{"line_number":7069,"context_line":"        {"},{"line_number":7070,"context_line":"            *cidr \u003d (char)(\u0027/\u0027); /* restore the original CIDR notation for p[1] */"},{"line_number":7071,"context_line":"            add_route_to_option_list(options-\u003eroutes, p[1], NULL, p[2], p[3]);"},{"line_number":7072,"context_line":"        }"},{"line_number":7073,"context_line":"        else"},{"line_number":7074,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4bb91f0f_a5b37ba7","line":7071,"updated":"2024-09-13 13:57:21.000000000","message":"Should we consider already normalizing the route here already and not parse the netmask vs netbits later _again_? But I have to confess I\u0027m not sure why we store the strings here in the first place and do not parse them already, so I might be missing something.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"550700b5beef051bf550b53f469aa728dac844ee","unresolved":true,"context_lines":[{"line_number":7068,"context_line":"        if (cidr)"},{"line_number":7069,"context_line":"        {"},{"line_number":7070,"context_line":"            *cidr \u003d (char)(\u0027/\u0027); /* restore the original CIDR notation for p[1] */"},{"line_number":7071,"context_line":"            add_route_to_option_list(options-\u003eroutes, p[1], NULL, p[2], p[3]);"},{"line_number":7072,"context_line":"        }"},{"line_number":7073,"context_line":"        else"},{"line_number":7074,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"fc1038c9_4e579e2c","line":7071,"in_reply_to":"1f3bc400_01968578","updated":"2024-09-17 11:37:12.000000000","message":"yeah, it is fine. More idle wondering. If we ever decide to refactor that, that is probably worth its own patch series ;)","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":true,"context_lines":[{"line_number":7068,"context_line":"        if (cidr)"},{"line_number":7069,"context_line":"        {"},{"line_number":7070,"context_line":"            *cidr \u003d (char)(\u0027/\u0027); /* restore the original CIDR notation for p[1] */"},{"line_number":7071,"context_line":"            add_route_to_option_list(options-\u003eroutes, p[1], NULL, p[2], p[3]);"},{"line_number":7072,"context_line":"        }"},{"line_number":7073,"context_line":"        else"},{"line_number":7074,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1f3bc400_01968578","line":7071,"in_reply_to":"4bb91f0f_a5b37ba7","updated":"2024-09-16 15:54:54.000000000","message":"The parameters are all stored in string format because \"network\" and \"gateway\" can be ip addresses, resolvable names or even special keywords and the parsing is done in init_route(). If we were to search for the netbits here (in order to convert them into a netmask or vice versa) we would end up moving some of the init_route() logic here.\nAnyway, once ip_or_dns_addr_safe() is improved to handle CIDR notated addresses, do you still think the overhead introduced here is too much?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"7bc835a350c61886b0c754dff60979f6e7933d74","unresolved":false,"context_lines":[{"line_number":7068,"context_line":"        if (cidr)"},{"line_number":7069,"context_line":"        {"},{"line_number":7070,"context_line":"            *cidr \u003d (char)(\u0027/\u0027); /* restore the original CIDR notation for p[1] */"},{"line_number":7071,"context_line":"            add_route_to_option_list(options-\u003eroutes, p[1], NULL, p[2], p[3]);"},{"line_number":7072,"context_line":"        }"},{"line_number":7073,"context_line":"        else"},{"line_number":7074,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"4b0a66fc_21822d3b","line":7071,"in_reply_to":"fc1038c9_4e579e2c","updated":"2024-09-17 16:12:50.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7406,"context_line":"        network \u003d get_ip_addr(p[i++], \u0026netbits, lev, \u0026error);"},{"line_number":7407,"context_line":"        if (netbits)"},{"line_number":7408,"context_line":"        {"},{"line_number":7409,"context_line":"            if (!no_more_than_n_args(msglevel, p, 3, NM_QUOTE_HINT))"},{"line_number":7410,"context_line":"            {"},{"line_number":7411,"context_line":"                goto err;"},{"line_number":7412,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"70b69c9f_0e173b5d","line":7409,"updated":"2024-09-13 13:57:21.000000000","message":"Why NM_QUOTE_HINT?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7406,"context_line":"        network \u003d get_ip_addr(p[i++], \u0026netbits, lev, \u0026error);"},{"line_number":7407,"context_line":"        if (netbits)"},{"line_number":7408,"context_line":"        {"},{"line_number":7409,"context_line":"            if (!no_more_than_n_args(msglevel, p, 3, NM_QUOTE_HINT))"},{"line_number":7410,"context_line":"            {"},{"line_number":7411,"context_line":"                goto err;"},{"line_number":7412,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"03dc6477_3baf4f59","line":7409,"in_reply_to":"70b69c9f_0e173b5d","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7421,"context_line":"            }"},{"line_number":7422,"context_line":"            else"},{"line_number":7423,"context_line":"            {"},{"line_number":7424,"context_line":"                msg(M_USAGE, \"--server directive network/netmask combination is invalid\");"},{"line_number":7425,"context_line":"                goto err;"},{"line_number":7426,"context_line":"            }"},{"line_number":7427,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"eed071e7_4e1a613b","line":7424,"updated":"2024-09-13 13:57:21.000000000","message":"Why does this have a separate error message here but not in the sameish code in --server-bridge below? Can probably remove it here.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7421,"context_line":"            }"},{"line_number":7422,"context_line":"            else"},{"line_number":7423,"context_line":"            {"},{"line_number":7424,"context_line":"                msg(M_USAGE, \"--server directive network/netmask combination is invalid\");"},{"line_number":7425,"context_line":"                goto err;"},{"line_number":7426,"context_line":"            }"},{"line_number":7427,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"c67b2950_32857d05","line":7424,"in_reply_to":"eed071e7_4e1a613b","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7484,"context_line":"        ip \u003d get_ip_addr(p[i++], \u0026netbits, lev, \u0026error);"},{"line_number":7485,"context_line":"        if (netbits)"},{"line_number":7486,"context_line":"        {"},{"line_number":7487,"context_line":"            if (!no_more_than_n_args(msglevel, p, 4, NM_QUOTE_HINT))"},{"line_number":7488,"context_line":"            {"},{"line_number":7489,"context_line":"                goto err;"},{"line_number":7490,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ef3a007f_b7b2f353","line":7487,"updated":"2024-09-13 13:57:21.000000000","message":"Why NM_QUOTE_HINT? Which argument could contain spaces?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7484,"context_line":"        ip \u003d get_ip_addr(p[i++], \u0026netbits, lev, \u0026error);"},{"line_number":7485,"context_line":"        if (netbits)"},{"line_number":7486,"context_line":"        {"},{"line_number":7487,"context_line":"            if (!no_more_than_n_args(msglevel, p, 4, NM_QUOTE_HINT))"},{"line_number":7488,"context_line":"            {"},{"line_number":7489,"context_line":"                goto err;"},{"line_number":7490,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"68375742_e67a2168","line":7487,"in_reply_to":"ef3a007f_b7b2f353","updated":"2024-09-16 15:54:54.000000000","message":"None in fact, I just totally overlooked this flags honestly. Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"ad52567da6d3ffbf28501cd99047fa4a3b8b0adc","unresolved":true,"context_lines":[{"line_number":7895,"context_line":"        local \u003d getaddr(GETADDR_HOST_ORDER|GETADDR_RESOLVE, p[i++], \u0026netbits, 0, NULL, NULL);"},{"line_number":7896,"context_line":"        if (netbits) /* convert netbits to netmask */"},{"line_number":7897,"context_line":"        {"},{"line_number":7898,"context_line":"            if (!no_more_than_n_args(msglevel, p, 3, NM_QUOTE_HINT))"},{"line_number":7899,"context_line":"            {"},{"line_number":7900,"context_line":"                goto err;"},{"line_number":7901,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"5a041385_78596de3","line":7898,"updated":"2024-09-13 13:57:21.000000000","message":"Why NM_QUOTE_HINT?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":7895,"context_line":"        local \u003d getaddr(GETADDR_HOST_ORDER|GETADDR_RESOLVE, p[i++], \u0026netbits, 0, NULL, NULL);"},{"line_number":7896,"context_line":"        if (netbits) /* convert netbits to netmask */"},{"line_number":7897,"context_line":"        {"},{"line_number":7898,"context_line":"            if (!no_more_than_n_args(msglevel, p, 3, NM_QUOTE_HINT))"},{"line_number":7899,"context_line":"            {"},{"line_number":7900,"context_line":"                goto err;"},{"line_number":7901,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"600e6ed7_2f6ddc3f","line":7898,"in_reply_to":"5a041385_78596de3","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"62e27b41e2072502651f06b166003a105df0cc6c","unresolved":true,"context_lines":[{"line_number":7285,"context_line":"    }"},{"line_number":7286,"context_line":"    else if (streq(p[0], \"server-bridge\") \u0026\u0026 p[1] \u0026\u0026 p[2] \u0026\u0026 p[3] \u0026\u0026 !p[5])"},{"line_number":7287,"context_line":"    {"},{"line_number":7288,"context_line":"        const int lev \u003d M_WARN;"},{"line_number":7289,"context_line":"        bool error \u003d false;"},{"line_number":7290,"context_line":"        in_addr_t ip, netmask, pool_start, pool_end;"},{"line_number":7291,"context_line":"        char *server_bridge_parms[MAX_PARMS + 1] \u003d { 0 };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"35d57942_8451aec7","line":7288,"updated":"2026-03-09 13:10:53.000000000","message":"Please fix to msglvl_t","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"624da500f4edcf1e8369be5d87ed8f0ec0a54c5e","unresolved":false,"context_lines":[{"line_number":7285,"context_line":"    }"},{"line_number":7286,"context_line":"    else if (streq(p[0], \"server-bridge\") \u0026\u0026 p[1] \u0026\u0026 p[2] \u0026\u0026 p[3] \u0026\u0026 !p[5])"},{"line_number":7287,"context_line":"    {"},{"line_number":7288,"context_line":"        const int lev \u003d M_WARN;"},{"line_number":7289,"context_line":"        bool error \u003d false;"},{"line_number":7290,"context_line":"        in_addr_t ip, netmask, pool_start, pool_end;"},{"line_number":7291,"context_line":"        char *server_bridge_parms[MAX_PARMS + 1] \u003d { 0 };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"bc6ae7da_894ede5f","line":7288,"in_reply_to":"35d57942_8451aec7","updated":"2026-03-10 09:53:10.000000000","message":"Acknowledged","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"62e27b41e2072502651f06b166003a105df0cc6c","unresolved":true,"context_lines":[{"line_number":7685,"context_line":""},{"line_number":7686,"context_line":"        local \u003d getaddr(GETADDR_HOST_ORDER | GETADDR_RESOLVE, ifconfig_push_parms[1], 0, NULL,"},{"line_number":7687,"context_line":"                        NULL);"},{"line_number":7688,"context_line":"        remote_netmask \u003d getaddr(GETADDR_HOST_ORDER | GETADDR_RESOLVE, ifconfig_push_parms[2], 0,"},{"line_number":7689,"context_line":"                                 NULL, NULL);"},{"line_number":7690,"context_line":"        if (local \u0026\u0026 remote_netmask)"},{"line_number":7691,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"9c9d016a_9cface99","line":7688,"updated":"2026-03-09 13:10:53.000000000","message":"A bit absurd that we need to parse netmask here again if we generated it before. But probably not worth trying to optimize that away.","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"c09597f0e9b592ef89681d275ff1fa072928cec5","unresolved":false,"context_lines":[{"line_number":7685,"context_line":""},{"line_number":7686,"context_line":"        local \u003d getaddr(GETADDR_HOST_ORDER | GETADDR_RESOLVE, ifconfig_push_parms[1], 0, NULL,"},{"line_number":7687,"context_line":"                        NULL);"},{"line_number":7688,"context_line":"        remote_netmask \u003d getaddr(GETADDR_HOST_ORDER | GETADDR_RESOLVE, ifconfig_push_parms[2], 0,"},{"line_number":7689,"context_line":"                                 NULL, NULL);"},{"line_number":7690,"context_line":"        if (local \u0026\u0026 remote_netmask)"},{"line_number":7691,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"c0e57a84_9a30f6b2","line":7688,"in_reply_to":"25bbf8a6_50aad5ce","updated":"2026-03-10 10:28:42.000000000","message":"Acknowledged","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"624da500f4edcf1e8369be5d87ed8f0ec0a54c5e","unresolved":true,"context_lines":[{"line_number":7685,"context_line":""},{"line_number":7686,"context_line":"        local \u003d getaddr(GETADDR_HOST_ORDER | GETADDR_RESOLVE, ifconfig_push_parms[1], 0, NULL,"},{"line_number":7687,"context_line":"                        NULL);"},{"line_number":7688,"context_line":"        remote_netmask \u003d getaddr(GETADDR_HOST_ORDER | GETADDR_RESOLVE, ifconfig_push_parms[2], 0,"},{"line_number":7689,"context_line":"                                 NULL, NULL);"},{"line_number":7690,"context_line":"        if (local \u0026\u0026 remote_netmask)"},{"line_number":7691,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"25bbf8a6_50aad5ce","line":7688,"in_reply_to":"9c9d016a_9cface99","updated":"2026-03-10 09:53:10.000000000","message":"I agree. The main issue is that IPv4 options in options.c do not all convert at the same stage: some paths keep parameters as strings until later consumers, while others parse to binary earlier.\nA dual-helper design (string + binary outputs) is possible, but it would either duplicate per-option handling or require a broader parsing abstraction.\nFor this change, the scope is limited to translating CIDR-form IPv4 parameter strings into the existing legacy string form, without altering downstream option processing.","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"}],"src/openvpn/options_util.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"62e27b41e2072502651f06b166003a105df0cc6c","unresolved":true,"context_lines":[{"line_number":229,"context_line":"    /* build the netmask string */"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    /* Keep this self-contained: using print_in_addr_t here would pull"},{"line_number":232,"context_line":"     * socket_util.c dependencies into options_util unit-test targets. */"},{"line_number":233,"context_line":"    struct in_addr netmask_addr \u003d {"},{"line_number":234,"context_line":"        .s_addr \u003d htonl(netbits_to_netmask((int)prefix))"},{"line_number":235,"context_line":"    };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"8d1749e3_5a891d4c","line":232,"updated":"2026-03-09 13:10:53.000000000","message":"This feels like a weak justification to duplicate code.","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"624da500f4edcf1e8369be5d87ed8f0ec0a54c5e","unresolved":true,"context_lines":[{"line_number":229,"context_line":"    /* build the netmask string */"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    /* Keep this self-contained: using print_in_addr_t here would pull"},{"line_number":232,"context_line":"     * socket_util.c dependencies into options_util unit-test targets. */"},{"line_number":233,"context_line":"    struct in_addr netmask_addr \u003d {"},{"line_number":234,"context_line":"        .s_addr \u003d htonl(netbits_to_netmask((int)prefix))"},{"line_number":235,"context_line":"    };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"eb44c41a_68747e58","line":232,"in_reply_to":"8d1749e3_5a891d4c","updated":"2026-03-10 09:53:10.000000000","message":"Just to make sure I understood this point correctly: do you prefer that I switch to print_in_addr_t() (and pull in socket_util dependencies), or that I keep the local conversion and only tighten/remove the justification comment?\nI tried the former locally: switching to print_in_addr_t() made options_parse_testdriver, push_update_msg_testdriver, and misc_testdriver fail to link unless socket_util.c is also linked. Once socket_util.c is linked, additional transitive symbols are required (setenv_*, siginfo_static/signal_reset, management_*), so this becomes a broader test/build refactor.\nThat\u0027s why for this patch I kept the conversion self-contained in options_util.c.","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"b01d0612b3dafa159c61975ea1ece5a0e35ebe0c","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    /* build the netmask string */"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    /* Keep this self-contained: using print_in_addr_t here would pull"},{"line_number":232,"context_line":"     * socket_util.c dependencies into options_util unit-test targets. */"},{"line_number":233,"context_line":"    struct in_addr netmask_addr \u003d {"},{"line_number":234,"context_line":"        .s_addr \u003d htonl(netbits_to_netmask((int)prefix))"},{"line_number":235,"context_line":"    };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"3152c2da_f44cfb55","line":232,"in_reply_to":"dc618575_003b428a","updated":"2026-03-10 16:18:11.000000000","message":"Done. I used two minimal shared mocks (mock_signal.c, mock_setenv.c) for transitive symbols.","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"c09597f0e9b592ef89681d275ff1fa072928cec5","unresolved":true,"context_lines":[{"line_number":229,"context_line":"    /* build the netmask string */"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    /* Keep this self-contained: using print_in_addr_t here would pull"},{"line_number":232,"context_line":"     * socket_util.c dependencies into options_util unit-test targets. */"},{"line_number":233,"context_line":"    struct in_addr netmask_addr \u003d {"},{"line_number":234,"context_line":"        .s_addr \u003d htonl(netbits_to_netmask((int)prefix))"},{"line_number":235,"context_line":"    };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"dc618575_003b428a","line":232,"in_reply_to":"eb44c41a_68747e58","updated":"2026-03-10 10:28:42.000000000","message":"Okay, to be clear: My opinion is that this code should not be duplicated. I think it is complicated enough that we should avoid this.\n\nThe UT changes are probably not actually a problem. The list of dependencies of test_socket is also reasonably small so I can\u0027t imagine this will be a complicated addition to test_options.\n\nIf that turns out to be wrong we could also look into whether moving the code to options_util would be simpler. There is no strict reason why it needs to be in socket_util.","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"}],"src/openvpn/route.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":321,"context_line":"           const struct route_option *ro,"},{"line_number":322,"context_line":"           const struct route_list *rl)"},{"line_number":323,"context_line":"{"},{"line_number":324,"context_line":"    const in_addr_t default_netbits \u003d IPV4_NETBITS_HOST;"},{"line_number":325,"context_line":"    bool status;"},{"line_number":326,"context_line":"    int ret;"},{"line_number":327,"context_line":"    struct in_addr special \u003d {0};"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"442c7c8d_d509e97e","line":324,"updated":"2024-09-16 12:39:30.000000000","message":"unsigned int?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":321,"context_line":"           const struct route_option *ro,"},{"line_number":322,"context_line":"           const struct route_list *rl)"},{"line_number":323,"context_line":"{"},{"line_number":324,"context_line":"    const in_addr_t default_netbits \u003d IPV4_NETBITS_HOST;"},{"line_number":325,"context_line":"    bool status;"},{"line_number":326,"context_line":"    int ret;"},{"line_number":327,"context_line":"    struct in_addr special \u003d {0};"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ac8b37af_6f6e9a74","line":324,"in_reply_to":"442c7c8d_d509e97e","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    /* separate address and prefix if present */"},{"line_number":330,"context_line":"    char *network \u003d strdup(ro-\u003enetwork);"},{"line_number":331,"context_line":"    const char *cidr \u003d strchr(network, \u0027/\u0027);"},{"line_number":332,"context_line":"    const char *addr \u003d strtok(network, \"/\");"},{"line_number":333,"context_line":"    const char *prefix \u003d strtok(NULL, \"/\");"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"49b38146_172bf62a","line":331,"updated":"2024-09-16 12:39:30.000000000","message":"Would convert to bool here to make it clear purpose","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"    /* separate address and prefix if present */"},{"line_number":330,"context_line":"    char *network \u003d strdup(ro-\u003enetwork);"},{"line_number":331,"context_line":"    const char *cidr \u003d strchr(network, \u0027/\u0027);"},{"line_number":332,"context_line":"    const char *addr \u003d strtok(network, \"/\");"},{"line_number":333,"context_line":"    const char *prefix \u003d strtok(NULL, \"/\");"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"ee1f7533_80da73d9","line":331,"in_reply_to":"49b38146_172bf62a","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":344,"context_line":""},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    /* get_special_addr replaces specialaddr with a special ip addr"},{"line_number":347,"context_line":"     * like gw. getaddrinfo is called to convert a a addrinfo struct */"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    if (get_special_addr(rl, ro-\u003enetwork, (in_addr_t *) \u0026special.s_addr, \u0026status))"},{"line_number":350,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"9927b3a3_4809d0a7","line":347,"range":{"start_line":347,"start_character":41,"end_line":347,"end_character":48},"updated":"2024-09-16 12:39:30.000000000","message":"Want to do a drive-by fix? \"a a\" -\u003e \"to an\"?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":344,"context_line":""},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    /* get_special_addr replaces specialaddr with a special ip addr"},{"line_number":347,"context_line":"     * like gw. getaddrinfo is called to convert a a addrinfo struct */"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"    if (get_special_addr(rl, ro-\u003enetwork, (in_addr_t *) \u0026special.s_addr, \u0026status))"},{"line_number":350,"context_line":"    {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"1b593f21_ba11a0bc","line":347,"range":{"start_line":347,"start_character":41,"end_line":347,"end_character":48},"in_reply_to":"9927b3a3_4809d0a7","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":1102,"context_line":"            {"},{"line_number":1103,"context_line":"                if (rl-\u003eflags \u0026 RG_DEF1)"},{"line_number":1104,"context_line":"                {"},{"line_number":1105,"context_line":"                    /* add new default route (1st component) */"},{"line_number":1106,"context_line":"                    ret \u003d add_route3(0x00000000, 1, rl-\u003espec.remote_endpoint,"},{"line_number":1107,"context_line":"                                     tt, flags, \u0026rl-\u003ergi, es, ctx) \u0026\u0026 ret;"},{"line_number":1108,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"86ce371b_4860dec8","line":1105,"range":{"start_line":1105,"start_character":39,"end_line":1105,"end_character":44},"updated":"2024-09-16 12:39:30.000000000","message":"Maybe add a 0.0.0.0/1 and 128.0.0.0/1 to the comments just to make it slightly easier to read?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":1102,"context_line":"            {"},{"line_number":1103,"context_line":"                if (rl-\u003eflags \u0026 RG_DEF1)"},{"line_number":1104,"context_line":"                {"},{"line_number":1105,"context_line":"                    /* add new default route (1st component) */"},{"line_number":1106,"context_line":"                    ret \u003d add_route3(0x00000000, 1, rl-\u003espec.remote_endpoint,"},{"line_number":1107,"context_line":"                                     tt, flags, \u0026rl-\u003ergi, es, ctx) \u0026\u0026 ret;"},{"line_number":1108,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"fcdc0ae1_bb844192","line":1105,"range":{"start_line":1105,"start_character":39,"end_line":1105,"end_character":44},"in_reply_to":"86ce371b_4860dec8","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":1163,"context_line":"        {"},{"line_number":1164,"context_line":"            if (rl-\u003eflags \u0026 RG_DEF1)"},{"line_number":1165,"context_line":"            {"},{"line_number":1166,"context_line":"                /* delete default route (1st component) */"},{"line_number":1167,"context_line":"                del_route3(0x00000000,"},{"line_number":1168,"context_line":"                           1,"},{"line_number":1169,"context_line":"                           rl-\u003espec.remote_endpoint,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"f88439ab_4ecf8430","line":1166,"range":{"start_line":1166,"start_character":34,"end_line":1166,"end_character":41},"updated":"2024-09-16 12:39:30.000000000","message":"Same (0.0.0.0/1 and 128.0.0.0/1) here.","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"        {"},{"line_number":1164,"context_line":"            if (rl-\u003eflags \u0026 RG_DEF1)"},{"line_number":1165,"context_line":"            {"},{"line_number":1166,"context_line":"                /* delete default route (1st component) */"},{"line_number":1167,"context_line":"                del_route3(0x00000000,"},{"line_number":1168,"context_line":"                           1,"},{"line_number":1169,"context_line":"                           rl-\u003espec.remote_endpoint,"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"3eb2716e_74185bc0","line":1166,"range":{"start_line":1166,"start_character":34,"end_line":1166,"end_character":41},"in_reply_to":"f88439ab_4ecf8430","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":1453,"context_line":"static void"},{"line_number":1454,"context_line":"setenv_route(struct env_set *es, const struct route_ipv4 *r, int i)"},{"line_number":1455,"context_line":"{"},{"line_number":1456,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":1457,"context_line":"    if (r-\u003eflags \u0026 RT_DEFINED)"},{"line_number":1458,"context_line":"    {"},{"line_number":1459,"context_line":"        setenv_route_addr(es, \"network\", r-\u003enetwork, i);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"77dbbd70_ab423838","line":1456,"range":{"start_line":1456,"start_character":0,"end_line":1456,"end_character":2},"updated":"2024-09-16 12:39:30.000000000","message":"Maybe we could move this into the if block? Not sure why we would create it otherwise?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":1453,"context_line":"static void"},{"line_number":1454,"context_line":"setenv_route(struct env_set *es, const struct route_ipv4 *r, int i)"},{"line_number":1455,"context_line":"{"},{"line_number":1456,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":1457,"context_line":"    if (r-\u003eflags \u0026 RT_DEFINED)"},{"line_number":1458,"context_line":"    {"},{"line_number":1459,"context_line":"        setenv_route_addr(es, \"network\", r-\u003enetwork, i);"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"2e313668_5df0fac8","line":1456,"range":{"start_line":1456,"start_character":0,"end_line":1456,"end_character":2},"in_reply_to":"77dbbd70_ab423838","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"}],"src/openvpn/socket.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"f2cee58a981989e3afc16c5c2bc8fd84a5612856","unresolved":true,"context_lines":[{"line_number":738,"context_line":"{"},{"line_number":739,"context_line":"    bool safe \u003d true;"},{"line_number":740,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":741,"context_line":"    const char *sep \u003d strchrnul(addr, \u0027/\u0027);"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    char *dotted_quad \u003d gc_malloc(sep - addr + 1, false, \u0026gc);"},{"line_number":744,"context_line":"    memcpy(dotted_quad, addr, sep - addr);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"6d4da998_8fb1e742","line":741,"updated":"2024-09-18 10:11:15.000000000","message":"strchrnul() is a GNU invention and breaks build on OpenBSD and macOS.","commit_id":"0c1f2fbb0619c2c60c6a6b51442fc2e79adc7821"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"9beaa3b149a30c86f2332bd6b8339e1ad8a98007","unresolved":false,"context_lines":[{"line_number":738,"context_line":"{"},{"line_number":739,"context_line":"    bool safe \u003d true;"},{"line_number":740,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":741,"context_line":"    const char *sep \u003d strchrnul(addr, \u0027/\u0027);"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"    char *dotted_quad \u003d gc_malloc(sep - addr + 1, false, \u0026gc);"},{"line_number":744,"context_line":"    memcpy(dotted_quad, addr, sep - addr);"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"77c42bbf_3459ccce","line":741,"in_reply_to":"6d4da998_8fb1e742","updated":"2024-09-18 10:56:16.000000000","message":"Done. Switched to strchr().","commit_id":"0c1f2fbb0619c2c60c6a6b51442fc2e79adc7821"}],"src/openvpn/tun.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":509,"context_line":"ifconfig_sanity_check(bool tun_p2p, in_addr_t addr, int netbits)"},{"line_number":510,"context_line":"{"},{"line_number":511,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":512,"context_line":"    const bool looks_like_netmask \u003d addr \u0026\u0026 ((addr \u0026 0xFF000000) \u003d\u003d 0xFF000000);"},{"line_number":513,"context_line":"    if (tun_p2p)"},{"line_number":514,"context_line":"    {"},{"line_number":515,"context_line":"        if (looks_like_netmask)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"cbb88db5_f07c3af6","line":512,"updated":"2024-09-16 12:39:30.000000000","message":"Isn\u0027t this redundant? If addr is 0 the second part never matches anyway","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":509,"context_line":"ifconfig_sanity_check(bool tun_p2p, in_addr_t addr, int netbits)"},{"line_number":510,"context_line":"{"},{"line_number":511,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":512,"context_line":"    const bool looks_like_netmask \u003d addr \u0026\u0026 ((addr \u0026 0xFF000000) \u003d\u003d 0xFF000000);"},{"line_number":513,"context_line":"    if (tun_p2p)"},{"line_number":514,"context_line":"    {"},{"line_number":515,"context_line":"        if (looks_like_netmask)"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"6a23e054_db476467","line":512,"in_reply_to":"cbb88db5_f07c3af6","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":521,"context_line":"    }"},{"line_number":522,"context_line":"    else"},{"line_number":523,"context_line":"    {"},{"line_number":524,"context_line":"        if (netbits \u003c 0 || !looks_like_netmask)"},{"line_number":525,"context_line":"        {"},{"line_number":526,"context_line":"            msg(M_WARN, \"WARNING: Since you are using topology subnet, you must either \""},{"line_number":527,"context_line":"                \"provide a valid prefix length in the first argument of --ifconfig (eg. 10.8.0.0/24) \""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"79c39edc_b5bdb970","line":524,"range":{"start_line":524,"start_character":0,"end_line":524,"end_character":2},"updated":"2024-09-16 12:39:30.000000000","message":"Shouldn\u0027t that be \"\u0026\u0026\" ?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":521,"context_line":"    }"},{"line_number":522,"context_line":"    else"},{"line_number":523,"context_line":"    {"},{"line_number":524,"context_line":"        if (netbits \u003c 0 || !looks_like_netmask)"},{"line_number":525,"context_line":"        {"},{"line_number":526,"context_line":"            msg(M_WARN, \"WARNING: Since you are using topology subnet, you must either \""},{"line_number":527,"context_line":"                \"provide a valid prefix length in the first argument of --ifconfig (eg. 10.8.0.0/24) \""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"fe64f694_ae441e6d","line":524,"range":{"start_line":524,"start_character":0,"end_line":524,"end_character":2},"in_reply_to":"79c39edc_b5bdb970","updated":"2024-09-16 15:54:54.000000000","message":"Yes, indeed","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":559,"context_line":"        if (type \u003d\u003d DEV_TYPE_TUN)"},{"line_number":560,"context_line":"        {"},{"line_number":561,"context_line":"            const in_addr_t netmask \u003d netbits \u003c 0 ? 0xFFFFFF00 : netbits_to_netmask(netbits);"},{"line_number":562,"context_line":"            const in_addr_t public_net \u003d public \u0026netmask;"},{"line_number":563,"context_line":"            const in_addr_t local_net \u003d local \u0026 netmask;"},{"line_number":564,"context_line":"            const in_addr_t remote_net \u003d remote \u0026 netmask;"},{"line_number":565,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"e80071f2_d2431db9","line":562,"updated":"2024-09-16 12:39:30.000000000","message":"Add space after \u0026 ?","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":559,"context_line":"        if (type \u003d\u003d DEV_TYPE_TUN)"},{"line_number":560,"context_line":"        {"},{"line_number":561,"context_line":"            const in_addr_t netmask \u003d netbits \u003c 0 ? 0xFFFFFF00 : netbits_to_netmask(netbits);"},{"line_number":562,"context_line":"            const in_addr_t public_net \u003d public \u0026netmask;"},{"line_number":563,"context_line":"            const in_addr_t local_net \u003d local \u0026 netmask;"},{"line_number":564,"context_line":"            const in_addr_t remote_net \u003d remote \u0026 netmask;"},{"line_number":565,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":3,"id":"a2797ec0_d79ee4f7","line":562,"in_reply_to":"e80071f2_d2431db9","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"0533abe0108febd6a801abd82cad461c4a816ee2","unresolved":true,"context_lines":[{"line_number":588,"context_line":"        else if (type \u003d\u003d DEV_TYPE_TAP)"},{"line_number":589,"context_line":"        {"},{"line_number":590,"context_line":"            const in_addr_t netmask \u003d netbits_to_netmask(netbits);"},{"line_number":591,"context_line":"            const in_addr_t public_network \u003d public \u0026netmask;"},{"line_number":592,"context_line":"            const in_addr_t virtual_network \u003d local \u0026 netmask;"},{"line_number":593,"context_line":"            if (netmask \u0026\u0026 public_network \u003d\u003d virtual_network)"},{"line_number":594,"context_line":"            {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"7d0d0823_03c88869","line":591,"range":{"start_line":591,"start_character":52,"end_line":591,"end_character":53},"updated":"2024-09-16 12:39:30.000000000","message":"Add space after \u0026","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"19bb88ed2827707e1f0bb7c6e75d6e9e049dfede","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        else if (type \u003d\u003d DEV_TYPE_TAP)"},{"line_number":589,"context_line":"        {"},{"line_number":590,"context_line":"            const in_addr_t netmask \u003d netbits_to_netmask(netbits);"},{"line_number":591,"context_line":"            const in_addr_t public_network \u003d public \u0026netmask;"},{"line_number":592,"context_line":"            const in_addr_t virtual_network \u003d local \u0026 netmask;"},{"line_number":593,"context_line":"            if (netmask \u0026\u0026 public_network \u003d\u003d virtual_network)"},{"line_number":594,"context_line":"            {"}],"source_content_type":"text/x-csrc","patch_set":3,"id":"7d21b2d6_5f6efde8","line":591,"range":{"start_line":591,"start_character":52,"end_line":591,"end_character":53},"in_reply_to":"7d0d0823_03c88869","updated":"2024-09-16 15:54:54.000000000","message":"Acknowledged","commit_id":"264c1fee8fbdec84a2a65910f2fc2a501f4819db"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"008511c1ddcfe3ba2a54ed5f3fcfb93cec57d9d4","unresolved":true,"context_lines":[{"line_number":556,"context_line":"        if (type \u003d\u003d DEV_TYPE_TUN)"},{"line_number":557,"context_line":"        {"},{"line_number":558,"context_line":"            const in_addr_t netmask \u003d netbits \u003c 0 ? 0xFFFFFF00 : netbits_to_netmask(netbits);"},{"line_number":559,"context_line":"            const in_addr_t public_net \u003d public \u0026 netmask;"},{"line_number":560,"context_line":"            const in_addr_t local_net \u003d local \u0026 netmask;"},{"line_number":561,"context_line":"            const in_addr_t remote_net \u003d remote \u0026 netmask;"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"b961361b_51671575","line":559,"updated":"2024-09-17 11:39:47.000000000","message":"Turns out, it was formatted wrong because uncrustify thinks \"public\" is a keyword and not a variable. Renaming it should fix that.","commit_id":"57b861ef715ae5c747f90f3617debe51edee2664"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"7bc835a350c61886b0c754dff60979f6e7933d74","unresolved":false,"context_lines":[{"line_number":556,"context_line":"        if (type \u003d\u003d DEV_TYPE_TUN)"},{"line_number":557,"context_line":"        {"},{"line_number":558,"context_line":"            const in_addr_t netmask \u003d netbits \u003c 0 ? 0xFFFFFF00 : netbits_to_netmask(netbits);"},{"line_number":559,"context_line":"            const in_addr_t public_net \u003d public \u0026 netmask;"},{"line_number":560,"context_line":"            const in_addr_t local_net \u003d local \u0026 netmask;"},{"line_number":561,"context_line":"            const in_addr_t remote_net \u003d remote \u0026 netmask;"},{"line_number":562,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":4,"id":"0d09b12f_5f27c1f4","line":559,"in_reply_to":"b961361b_51671575","updated":"2024-09-17 16:12:50.000000000","message":"Done","commit_id":"57b861ef715ae5c747f90f3617debe51edee2664"}],"tests/unit_tests/openvpn/test_options_parse.c":[{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"62e27b41e2072502651f06b166003a105df0cc6c","unresolved":true,"context_lines":[{"line_number":327,"context_line":"}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"static void"},{"line_number":330,"context_line":"test_convert_ipv4_cidr_parms_coverage(void **state)"},{"line_number":331,"context_line":"{"},{"line_number":332,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":333,"context_line":"    char *normalized[MAX_PARMS + 1] \u003d { 0 };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"ab0e93b7_3d53fbba","line":330,"updated":"2026-03-09 13:10:53.000000000","message":"This does not feel like it provides actual \"coverage\". The examples are all too similar. To get coverage you should test a bigger variety of \"bits\" (maybe throw a \"0\" and a \"32\" in there at least?) and more interesting variants of input parameters (even if they are not currently realistic). E.g. use minimal and maximal values for network_idx and max_idx.\n\nAlso include the case where the network parameter is a DNS name","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"},{"author":{"_account_id":1000041,"name":"ralf_lici","display_name":"Ralf Lici","email":"ralf@mandelbit.com","username":"ralf_lici"},"change_message_id":"624da500f4edcf1e8369be5d87ed8f0ec0a54c5e","unresolved":false,"context_lines":[{"line_number":327,"context_line":"}"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"static void"},{"line_number":330,"context_line":"test_convert_ipv4_cidr_parms_coverage(void **state)"},{"line_number":331,"context_line":"{"},{"line_number":332,"context_line":"    struct gc_arena gc \u003d gc_new();"},{"line_number":333,"context_line":"    char *normalized[MAX_PARMS + 1] \u003d { 0 };"}],"source_content_type":"text/x-csrc","patch_set":9,"id":"306d8e15_e3a09146","line":330,"in_reply_to":"ab0e93b7_3d53fbba","updated":"2026-03-10 09:53:10.000000000","message":"Acknowledged","commit_id":"b1893027bf1f6dc8a6626271646212faa8e18068"}]}
