)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"314ca785b50491bedf058419219d783d54582f47","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"07da24d3_328a37fa","updated":"2025-12-09 10:49:28.000000000","message":"I think this is a good change and BB confirms that it works (or worked, a few weeks ago).  I think the comments could be improved a bit more...","commit_id":"5cc68e7127e852e4d4c3a91b5a005fc3bb290941"}],"src/openvpn/tun.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"be0859f144525d19022ecdd2d7eeb970e0ab9872","unresolved":true,"context_lines":[{"line_number":1741,"context_line":"        struct openvpn_iphdr *iph \u003d (struct openvpn_iphdr *)buf;"},{"line_number":1742,"context_line":""},{"line_number":1743,"context_line":"        bool is_ipv6 \u003d OPENVPN_IPH_GET_VER(iph-\u003eversion_len) \u003d\u003d 6;"},{"line_number":1744,"context_line":"#endif"},{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"        if (is_ipv6)"},{"line_number":1747,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"9ab6ebcd_42cb1b73","line":1744,"updated":"2025-11-14 12:37:27.000000000","message":"it makes little sense to keep the historic code difference - this basically does the same thing, just using \"system headers\" vs. \"openvpn headers\", but since this is a well-defined structure, the result must be the same.  So if we unify these, let\u0027s do it properly, and get rid of the #ifdef","commit_id":"e306fc2b8a15d2660cafab57f70690c4aa783ce3"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"31a9e1e7b024b428b361401d031e6c4db27ba7bb","unresolved":false,"context_lines":[{"line_number":1741,"context_line":"        struct openvpn_iphdr *iph \u003d (struct openvpn_iphdr *)buf;"},{"line_number":1742,"context_line":""},{"line_number":1743,"context_line":"        bool is_ipv6 \u003d OPENVPN_IPH_GET_VER(iph-\u003eversion_len) \u003d\u003d 6;"},{"line_number":1744,"context_line":"#endif"},{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"        if (is_ipv6)"},{"line_number":1747,"context_line":"        {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"4ca9d7f6_c2a30b9c","line":1744,"in_reply_to":"9ab6ebcd_42cb1b73","updated":"2025-11-14 13:41:34.000000000","message":"Done","commit_id":"e306fc2b8a15d2660cafab57f70690c4aa783ce3"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"0c9cd2b970e66a64ea0670d6761a9487b02451e5","unresolved":true,"context_lines":[{"line_number":1795,"context_line":"write_tun(struct tuntap *tt, uint8_t *buf, int len)"},{"line_number":1796,"context_line":"{"},{"line_number":1797,"context_line":"    write_tun_header(tt, buf, len);"},{"line_number":1798,"context_line":"}"},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"int"},{"line_number":1801,"context_line":"read_tun(struct tuntap *tt, uint8_t *buf, int len)"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"ec691247_5975103b","line":1798,"updated":"2025-11-14 12:41:01.000000000","message":"ah, and this lost the `return` part when being moved...  `return write_tun_header...`","commit_id":"e306fc2b8a15d2660cafab57f70690c4aa783ce3"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"31a9e1e7b024b428b361401d031e6c4db27ba7bb","unresolved":false,"context_lines":[{"line_number":1795,"context_line":"write_tun(struct tuntap *tt, uint8_t *buf, int len)"},{"line_number":1796,"context_line":"{"},{"line_number":1797,"context_line":"    write_tun_header(tt, buf, len);"},{"line_number":1798,"context_line":"}"},{"line_number":1799,"context_line":""},{"line_number":1800,"context_line":"int"},{"line_number":1801,"context_line":"read_tun(struct tuntap *tt, uint8_t *buf, int len)"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"25c2eb38_1e1267b2","line":1798,"in_reply_to":"ec691247_5975103b","updated":"2025-11-14 13:41:34.000000000","message":"Done","commit_id":"e306fc2b8a15d2660cafab57f70690c4aa783ce3"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"314ca785b50491bedf058419219d783d54582f47","unresolved":true,"context_lines":[{"line_number":1702,"context_line":" * I have not tested TAP devices on OpenBSD,"},{"line_number":1703,"context_line":" * but I have conditionalized the special"},{"line_number":1704,"context_line":" * TUN handling code described above to"},{"line_number":1705,"context_line":" * go away for TAP devices."},{"line_number":1706,"context_line":" */"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"#include \u003cnetinet/ip.h\u003e"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"9197213b_fa155467","line":1705,"updated":"2025-12-09 10:49:28.000000000","message":"I think this should be reworded (\"we *have* tested\") to be something like\n\n```\n * For TAP devices, no extra header is needed, so we need to check for DEV_TYPE_TUN\n```\n\nor so?  Or maybe even shorter \"For TAP devices, this is not needed and must not be done\" or so (so it\u0027s clear \"even if we wanted to keep the code the same, we can\u0027t\").","commit_id":"5cc68e7127e852e4d4c3a91b5a005fc3bb290941"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"635cc1bd7bf771be2b98cc7dfdec81223f260aee","unresolved":false,"context_lines":[{"line_number":1702,"context_line":" * I have not tested TAP devices on OpenBSD,"},{"line_number":1703,"context_line":" * but I have conditionalized the special"},{"line_number":1704,"context_line":" * TUN handling code described above to"},{"line_number":1705,"context_line":" * go away for TAP devices."},{"line_number":1706,"context_line":" */"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"#include \u003cnetinet/ip.h\u003e"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"a90c6423_69a26e6b","line":1705,"in_reply_to":"9197213b_fa155467","updated":"2025-12-09 11:19:56.000000000","message":"Done","commit_id":"5cc68e7127e852e4d4c3a91b5a005fc3bb290941"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"314ca785b50491bedf058419219d783d54582f47","unresolved":true,"context_lines":[{"line_number":1782,"context_line":"#pragma GCC diagnostic pop"},{"line_number":1783,"context_line":"#endif"},{"line_number":1784,"context_line":""},{"line_number":1785,"context_line":"#if !defined(TARGET_DARWIN)"},{"line_number":1786,"context_line":"int"},{"line_number":1787,"context_line":"write_tun(struct tuntap *tt, uint8_t *buf, int len)"},{"line_number":1788,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"0f65128b_1360ae44","line":1785,"updated":"2025-12-09 10:49:28.000000000","message":"I think this also warrants a comment\n\n```\n/* MacOS is slightly different again (extra variant for UTUN) so this platform\n * has its own read_tun()/write_tun() with the necessary conditionals below\n */\n```\n\n(it took me a while to remember and find the specifics, someone else will be even more confused)","commit_id":"5cc68e7127e852e4d4c3a91b5a005fc3bb290941"},{"author":{"_account_id":1000001,"name":"flichtenheld","display_name":"Frank Lichtenheld","email":"frank@lichtenheld.com","username":"flichtenheld","status":"OpenVPN Inc."},"change_message_id":"635cc1bd7bf771be2b98cc7dfdec81223f260aee","unresolved":false,"context_lines":[{"line_number":1782,"context_line":"#pragma GCC diagnostic pop"},{"line_number":1783,"context_line":"#endif"},{"line_number":1784,"context_line":""},{"line_number":1785,"context_line":"#if !defined(TARGET_DARWIN)"},{"line_number":1786,"context_line":"int"},{"line_number":1787,"context_line":"write_tun(struct tuntap *tt, uint8_t *buf, int len)"},{"line_number":1788,"context_line":"{"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"22fc509a_891e7acd","line":1785,"in_reply_to":"0f65128b_1360ae44","updated":"2025-12-09 11:19:56.000000000","message":"Done","commit_id":"5cc68e7127e852e4d4c3a91b5a005fc3bb290941"}]}
