)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"b8259e12961beb4a124b17e6125caf0c614afbf8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1571acdd_a45b15f5","updated":"2026-11-11 07:11:57.000000000","message":"The `clang-format` filter doesn\u0027t pass for this patch.","commit_id":"829177950a079c191414f6f94c18db76c6e2b33b"}],"src/openvpn/tun.c":[{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"b8259e12961beb4a124b17e6125caf0c614afbf8","unresolved":true,"context_lines":[{"line_number":2897,"context_line":""},{"line_number":2898,"context_line":"/* DragonFly tun/tap devices are similar to NetBSD"},{"line_number":2899,"context_line":" *  - for a dynamic tun/tap, open /dev/tun or /dev/tap, get assigned"},{"line_number":2900,"context_line":" *    the first free device, ask with devname(3) what you got, and"},{"line_number":2901,"context_line":" *    the interface will auto-destruct on close"},{"line_number":2902,"context_line":" *  - for a pre-created tun/tap, open \"/dev/tun3\""},{"line_number":2903,"context_line":" *  - using \"--dev tun3\" and have it dynamically created needs a call"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"a7bb5511_9bb3d058","line":2900,"updated":"2026-11-11 07:11:57.000000000","message":"This says \"ask with devname\" but the code uses `fdevname()`.","commit_id":"829177950a079c191414f6f94c18db76c6e2b33b"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"b8259e12961beb4a124b17e6125caf0c614afbf8","unresolved":true,"context_lines":[{"line_number":2908,"context_line":"open_tun(const char *dev, const char *dev_type, const char *dev_node, struct tuntap *tt,"},{"line_number":2909,"context_line":"         openvpn_net_ctx_t *ctx)"},{"line_number":2910,"context_line":"{"},{"line_number":2911,"context_line":"    if (strcmp(dev, \"tap\") \u003d\u003d 0 || strcmp(dev, \"tun\") \u003d\u003d 0)"},{"line_number":2912,"context_line":"    {"},{"line_number":2913,"context_line":"        char tunname[256];"},{"line_number":2914,"context_line":"        snprintf(tunname, sizeof(tunname), \"/dev/%s\", dev);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"99e687a7_8bbb6dc0","line":2911,"updated":"2026-11-11 07:11:57.000000000","message":"`if (!dev_node \u0026\u0026 (strcmp(dev, \"tap\") \u003d\u003d 0 || strcmp(dev, \"tun\") \u003d\u003d 0))`?","commit_id":"829177950a079c191414f6f94c18db76c6e2b33b"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"b8259e12961beb4a124b17e6125caf0c614afbf8","unresolved":true,"context_lines":[{"line_number":2915,"context_line":""},{"line_number":2916,"context_line":"        if ((tt-\u003efd \u003d open(tunname, O_RDWR)) \u003c 0)"},{"line_number":2917,"context_line":"        {"},{"line_number":2918,"context_line":"            msg(M_FATAL, \"Cannot allocate DragonFly TUN/TAP %s dynamically\", tunname);"},{"line_number":2919,"context_line":"        }"},{"line_number":2920,"context_line":""},{"line_number":2921,"context_line":"\tchar *devname \u003d fdevname(tt-\u003efd);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"e529fc41_03291e67","line":2918,"updated":"2026-11-11 07:11:57.000000000","message":"Would this be better as `M_ERR` (so we can also get `strerror(errno)`)?","commit_id":"829177950a079c191414f6f94c18db76c6e2b33b"},{"author":{"_account_id":1000053,"name":"Răzvan Cojocaru","display_name":"Razvan Cojocaru","email":"razvanc@mailbox.org","username":"razvanc"},"change_message_id":"b8259e12961beb4a124b17e6125caf0c614afbf8","unresolved":true,"context_lines":[{"line_number":2921,"context_line":"\tchar *devname \u003d fdevname(tt-\u003efd);"},{"line_number":2922,"context_line":"        if (devname \u003d\u003d NULL)"},{"line_number":2923,"context_line":"        {"},{"line_number":2924,"context_line":"            msg(M_FATAL, \"Cannot query DragonFly TUN/TAP device name\");"},{"line_number":2925,"context_line":"        }"},{"line_number":2926,"context_line":"        set_nonblock(tt-\u003efd);"},{"line_number":2927,"context_line":"        set_cloexec(tt-\u003efd); /* don\u0027t pass fd to scripts */"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"23ab84c9_9f5e251a","line":2924,"updated":"2026-11-11 07:11:57.000000000","message":"Would `M_ERR` fit better here (to get the system error as well)?","commit_id":"829177950a079c191414f6f94c18db76c6e2b33b"}]}
