)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"8851346cdca84e7be9f4aa583183ec5bd1940ef0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4dfdfc7f_edd487fa","updated":"2024-09-25 07:11:05.000000000","message":"This definitely needs a commit message with a better Subject line (first line) - now git whill show \"properly print protocol\", which is just a small aspect of \"a bunch of mroute changes\"","commit_id":"09cba15c696b7537b93f1c2a861af5a267319dd4"},{"author":{"_account_id":1000007,"name":"ordex","display_name":"Antonio Quartulli","email":"antonio@mandelbit.com","username":"ordex"},"change_message_id":"01ef65e99a7ced9ebc423eaa97d69c5eb576c876","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"fa0a154b_4a8c4437","in_reply_to":"4dfdfc7f_edd487fa","updated":"2024-09-25 11:56:39.000000000","message":"I think here there was some fixup/squash mess.\nCommit message definitely needs some love \u003c3.","commit_id":"09cba15c696b7537b93f1c2a861af5a267319dd4"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"d2f47bedadead4dda776d2b5406bf350cae29d11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5bc1bcd6_135ec90e","in_reply_to":"fa0a154b_4a8c4437","updated":"2024-10-01 15:32:22.000000000","message":"Done","commit_id":"09cba15c696b7537b93f1c2a861af5a267319dd4"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d807f4ed_17ae79e2","updated":"2025-01-24 08:00:10.000000000","message":"There is a couple of things that need looking at\n\n- the forward.c hunk should go to a patch in the series that actually deals with socket arrays, and also very very closely checked for correctness\n- the `proto` initialization in the maddr could be done in a more elegant way\n- `mroute_addr_hash_len()` needs to be fixed","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"69aa11844bea7648682fb8b1377b09dbc9fb2a9c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"f4d661cf_b043eacd","updated":"2025-01-24 12:47:14.000000000","message":"Upgrade to -1 ;-) - mostly this is fine, but we still lost a \"const\" argument, and there is a spurious blank line removal","commit_id":"92f4028d6964104a70a90da9d243bb2ac320358d"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"9797fbea3c00cb35e61d1ac4c2e298a11007f9f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d9e49d1b_d540b375","updated":"2025-01-24 15:37:57.000000000","message":"\"Something is breaking my server side tests\", so it seems - after a first successful TCP connect, the server aborts:\n\nJan 24 15:22:31 gentoo tun-tcp-p2mp[30385]: Assertion failed at multi.c:636\nJan 24 15:22:31 gentoo tun-tcp-p2mp[30385]: Exiting due to fatal error\n\n(just recording here, as Gian has signalled \"I already found the problem\")","commit_id":"e7a40cfa1ba52f013d43eca13ca755c2c8291e7e"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"06e49928be85b8ac6c5e1ed288109de666a3e4d8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"0061d5c9_0e7464f9","updated":"2025-01-24 20:51:14.000000000","message":"Lo and behold, with that change it passes the server side tests just fine ;-)\n\n(Multiple `local` for the same protocol family lead to multiple bound sockets as well, but it doesn\u0027t work correctly yet - this seems to need bits from #764)","commit_id":"2459a691e16de8f2a5003139137a02aab9c1e169"}],"src/openvpn/forward.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":1129,"context_line":"        decrypt_status \u003d openvpn_decrypt(\u0026c-\u003ec2.buf, c-\u003ec2.buffers-\u003edecrypt_buf,"},{"line_number":1130,"context_line":"                                         co, \u0026c-\u003ec2.frame, ad_start);"},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        for (int i \u003d 0; i \u003c c-\u003ec1.link_sockets_num; i++)"},{"line_number":1133,"context_line":"        {"},{"line_number":1134,"context_line":"            if (!decrypt_status"},{"line_number":1135,"context_line":"                /* on the instance context we have only one socket, so just check the first one */"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"3e5d8af2_a31c87b9","line":1132,"updated":"2025-01-24 08:00:10.000000000","message":"I assume this hunk is needed, but it\u0027s sort of \"outside the scope of mroute handling\" (so should either move to #764 or be mentioned in the commit message - I think \"moving\" is more reasonable).\n\nAlso I am not sure it is *correct* - if I read this correctly, the effect is now\n\n`if (!decrypt_status \u0026\u0026 we have *any* listening TCP socket) { SIGUSR1; }`\n\nno?  As it\u0027s walking the whole array, not checking the socket where this packet was received.","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":1129,"context_line":"        decrypt_status \u003d openvpn_decrypt(\u0026c-\u003ec2.buf, c-\u003ec2.buffers-\u003edecrypt_buf,"},{"line_number":1130,"context_line":"                                         co, \u0026c-\u003ec2.frame, ad_start);"},{"line_number":1131,"context_line":""},{"line_number":1132,"context_line":"        for (int i \u003d 0; i \u003c c-\u003ec1.link_sockets_num; i++)"},{"line_number":1133,"context_line":"        {"},{"line_number":1134,"context_line":"            if (!decrypt_status"},{"line_number":1135,"context_line":"                /* on the instance context we have only one socket, so just check the first one */"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"7d7d6798_7dba137c","line":1132,"in_reply_to":"3e5d8af2_a31c87b9","updated":"2025-01-24 11:48:44.000000000","message":"This is still about client context, so no need to loop and no need to touch this again.","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":1132,"context_line":"        for (int i \u003d 0; i \u003c c-\u003ec1.link_sockets_num; i++)"},{"line_number":1133,"context_line":"        {"},{"line_number":1134,"context_line":"            if (!decrypt_status"},{"line_number":1135,"context_line":"                /* on the instance context we have only one socket, so just check the first one */"},{"line_number":1136,"context_line":"                \u0026\u0026 link_socket_connection_oriented(c-\u003ec2.link_sockets[i]))"},{"line_number":1137,"context_line":"            {"},{"line_number":1138,"context_line":"                /* decryption errors are fatal in TCP mode */"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"35afcb51_f6ae0b38","line":1135,"updated":"2025-01-24 08:00:10.000000000","message":"whatever the outcome is, this comment is no longer correct :-)","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"        for (int i \u003d 0; i \u003c c-\u003ec1.link_sockets_num; i++)"},{"line_number":1133,"context_line":"        {"},{"line_number":1134,"context_line":"            if (!decrypt_status"},{"line_number":1135,"context_line":"                /* on the instance context we have only one socket, so just check the first one */"},{"line_number":1136,"context_line":"                \u0026\u0026 link_socket_connection_oriented(c-\u003ec2.link_sockets[i]))"},{"line_number":1137,"context_line":"            {"},{"line_number":1138,"context_line":"                /* decryption errors are fatal in TCP mode */"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"4c321545_89555b0c","line":1135,"in_reply_to":"35afcb51_f6ae0b38","updated":"2025-01-24 11:48:44.000000000","message":"Done","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"}],"src/openvpn/mroute.h":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":222,"context_line":"static inline uint32_t"},{"line_number":223,"context_line":"mroute_addr_hash_len(const struct mroute_addr *a)"},{"line_number":224,"context_line":"{"},{"line_number":225,"context_line":"    return (uint32_t) a-\u003elen + 2;"},{"line_number":226,"context_line":"}"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"static inline void"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"cad156ad_89f96d93","line":225,"updated":"2025-01-24 08:00:10.000000000","message":"if you change the start of the to-be-hashed block, but all the existing data should still be hashed, this looks like you also must increase the length by +1?","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":222,"context_line":"static inline uint32_t"},{"line_number":223,"context_line":"mroute_addr_hash_len(const struct mroute_addr *a)"},{"line_number":224,"context_line":"{"},{"line_number":225,"context_line":"    return (uint32_t) a-\u003elen + 2;"},{"line_number":226,"context_line":"}"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"static inline void"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"9bb3a8db_d8b619b4","line":225,"in_reply_to":"cad156ad_89f96d93","updated":"2025-01-24 11:48:44.000000000","message":"Done","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"}],"src/openvpn/mudp.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":193,"context_line":"    struct multi_instance *mi \u003d NULL;"},{"line_number":194,"context_line":"    struct hash *hash \u003d m-\u003ehash;"},{"line_number":195,"context_line":"    real.proto \u003d ls-\u003einfo.proto;"},{"line_number":196,"context_line":"    m-\u003elocal.proto \u003d real.proto;"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    if (mroute_extract_openvpn_sockaddr(\u0026real, \u0026m-\u003etop.c2.from.dest, true)"},{"line_number":199,"context_line":"        \u0026\u0026 m-\u003etop.c2.buf.len \u003e 0)"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"7a2c3469_2b108655","line":196,"updated":"2025-01-24 08:00:10.000000000","message":"This is a bit confusing.  I can see the assignment to `real.proto` (because mroute_extract_openvpn_sockaddr() cannot do it) but what is `m-\u003elocal`, and who is poulating the rest of it?","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    struct multi_instance *mi \u003d NULL;"},{"line_number":194,"context_line":"    struct hash *hash \u003d m-\u003ehash;"},{"line_number":195,"context_line":"    real.proto \u003d ls-\u003einfo.proto;"},{"line_number":196,"context_line":"    m-\u003elocal.proto \u003d real.proto;"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    if (mroute_extract_openvpn_sockaddr(\u0026real, \u0026m-\u003etop.c2.from.dest, true)"},{"line_number":199,"context_line":"        \u0026\u0026 m-\u003etop.c2.buf.len \u003e 0)"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"ff1ec800_dab6a655","line":196,"in_reply_to":"7a2c3469_2b108655","updated":"2025-01-24 11:48:44.000000000","message":"That\u0027s a leftover, I see that m-\u003elocal is used only on virtual addresses context so no need to copy the real proto and since it\u0027s CLEAR() no need to set the proto to 0.","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"}],"src/openvpn/multi.c":[{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":1153,"context_line":" */"},{"line_number":1154,"context_line":"static struct multi_instance *"},{"line_number":1155,"context_line":"multi_get_instance_by_virtual_addr(struct multi_context *m,"},{"line_number":1156,"context_line":"                                   struct mroute_addr *addr,"},{"line_number":1157,"context_line":"                                   bool cidr_routing)"},{"line_number":1158,"context_line":"{"},{"line_number":1159,"context_line":"    struct multi_route *route;"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"ff5809d5_e5708d45","line":1156,"updated":"2025-01-24 08:00:10.000000000","message":"this looks wrong.  A lookup function should not modify its arguments.\n\nI see calls to `multi_get_instance_by_virtual_addr()` being prepared by `mroute_extract_addr_from_packet()` calls - so if that function sets `proto \u003d 0` (or just `CLEAR()`s the mroutes) we do not need to do anything here.","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":1153,"context_line":" */"},{"line_number":1154,"context_line":"static struct multi_instance *"},{"line_number":1155,"context_line":"multi_get_instance_by_virtual_addr(struct multi_context *m,"},{"line_number":1156,"context_line":"                                   struct mroute_addr *addr,"},{"line_number":1157,"context_line":"                                   bool cidr_routing)"},{"line_number":1158,"context_line":"{"},{"line_number":1159,"context_line":"    struct multi_route *route;"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"f9fda981_a1023801","line":1156,"in_reply_to":"ff5809d5_e5708d45","updated":"2025-01-24 11:48:44.000000000","message":"Done","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":3353,"context_line":"     */"},{"line_number":3354,"context_line":"    src.proto \u003d 0;"},{"line_number":3355,"context_line":"    dest.proto \u003d src.proto;"},{"line_number":3356,"context_line":""},{"line_number":3357,"context_line":"    if (m-\u003epending)"},{"line_number":3358,"context_line":"    {"},{"line_number":3359,"context_line":"        return true;"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"8164b377_9ec4fcaa","line":3356,"updated":"2025-01-24 08:00:10.000000000","message":"see comment above - now you\u0027re actually setting `proto` in the caller, even if I do not agree this is the right place - so the change to `multi_get_instance_by_virtual_addr()` is definitely not needed.\n\nI\u0027d still move this into `mroute_extract_addr_from_packet()`, with the comment.","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":3353,"context_line":"     */"},{"line_number":3354,"context_line":"    src.proto \u003d 0;"},{"line_number":3355,"context_line":"    dest.proto \u003d src.proto;"},{"line_number":3356,"context_line":""},{"line_number":3357,"context_line":"    if (m-\u003epending)"},{"line_number":3358,"context_line":"    {"},{"line_number":3359,"context_line":"        return true;"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"285a38d0_93d7ac29","line":3356,"in_reply_to":"8164b377_9ec4fcaa","updated":"2025-01-24 11:48:44.000000000","message":"Done","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"bf316bd85a8fd81592fa9d8eda7462990c436f5d","unresolved":true,"context_lines":[{"line_number":3558,"context_line":"        int16_t vid \u003d 0;"},{"line_number":3559,"context_line":""},{"line_number":3560,"context_line":"        src.proto \u003d 0;"},{"line_number":3561,"context_line":"        dest.proto \u003d src.proto;"},{"line_number":3562,"context_line":""},{"line_number":3563,"context_line":"#ifdef MULTI_DEBUG_EVENT_LOOP"},{"line_number":3564,"context_line":"        printf(\"TUN -\u003e TCP/UDP [%d]\\n\", BLEN(\u0026m-\u003etop.c2.buf));"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"81dba5d2_42f25dc3","line":3561,"updated":"2025-01-24 08:00:10.000000000","message":"same thing -\u003e `mroute_extract_addr_from_packet()`","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"325f40cf54aecda355caa586eac4ab1dc5e05d14","unresolved":false,"context_lines":[{"line_number":3558,"context_line":"        int16_t vid \u003d 0;"},{"line_number":3559,"context_line":""},{"line_number":3560,"context_line":"        src.proto \u003d 0;"},{"line_number":3561,"context_line":"        dest.proto \u003d src.proto;"},{"line_number":3562,"context_line":""},{"line_number":3563,"context_line":"#ifdef MULTI_DEBUG_EVENT_LOOP"},{"line_number":3564,"context_line":"        printf(\"TUN -\u003e TCP/UDP [%d]\\n\", BLEN(\u0026m-\u003etop.c2.buf));"}],"source_content_type":"text/x-csrc","patch_set":14,"id":"9738102a_e71eb117","line":3561,"in_reply_to":"81dba5d2_42f25dc3","updated":"2025-01-24 11:48:44.000000000","message":"Done","commit_id":"bfb3a7dd856b353a5c3fee79ee400feb97d2a8ed"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"69aa11844bea7648682fb8b1377b09dbc9fb2a9c","unresolved":true,"context_lines":[{"line_number":3410,"context_line":"                                                               0,"},{"line_number":3411,"context_line":"                                                               \u0026c-\u003ec2.to_tun,"},{"line_number":3412,"context_line":"                                                               DEV_TYPE_TUN);"},{"line_number":3413,"context_line":""},{"line_number":3414,"context_line":"                /* drop packet if extract failed */"},{"line_number":3415,"context_line":"                if (!(mroute_flags \u0026 MROUTE_EXTRACT_SUCCEEDED))"},{"line_number":3416,"context_line":"                {"}],"source_content_type":"text/x-csrc","patch_set":15,"id":"6724d969_5ff543ed","side":"PARENT","line":3413,"updated":"2025-01-24 12:47:14.000000000","message":"spurious deletion of this blank line?  don\u0027t :-)","commit_id":"b394ed1d5ca89bd4f21675eead7f36c344d31f33"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"622252d03bd474a889bb55e7267228de174316bd","unresolved":false,"context_lines":[{"line_number":3410,"context_line":"                                                               0,"},{"line_number":3411,"context_line":"                                                               \u0026c-\u003ec2.to_tun,"},{"line_number":3412,"context_line":"                                                               DEV_TYPE_TUN);"},{"line_number":3413,"context_line":""},{"line_number":3414,"context_line":"                /* drop packet if extract failed */"},{"line_number":3415,"context_line":"                if (!(mroute_flags \u0026 MROUTE_EXTRACT_SUCCEEDED))"},{"line_number":3416,"context_line":"                {"}],"source_content_type":"text/x-csrc","patch_set":15,"id":"63b6b639_1e4d46fc","side":"PARENT","line":3413,"in_reply_to":"6724d969_5ff543ed","updated":"2025-01-24 14:09:04.000000000","message":"Done","commit_id":"b394ed1d5ca89bd4f21675eead7f36c344d31f33"},{"author":{"_account_id":1000002,"name":"cron2","display_name":"Gert Doering","email":"gert@greenie.muc.de","username":"cron2"},"change_message_id":"69aa11844bea7648682fb8b1377b09dbc9fb2a9c","unresolved":true,"context_lines":[{"line_number":1153,"context_line":" */"},{"line_number":1154,"context_line":"static struct multi_instance *"},{"line_number":1155,"context_line":"multi_get_instance_by_virtual_addr(struct multi_context *m,"},{"line_number":1156,"context_line":"                                   struct mroute_addr *addr,"},{"line_number":1157,"context_line":"                                   bool cidr_routing)"},{"line_number":1158,"context_line":"{"},{"line_number":1159,"context_line":"    struct multi_route *route;"}],"source_content_type":"text/x-csrc","patch_set":15,"id":"ee36f236_30cdf224","line":1156,"updated":"2025-01-24 12:47:14.000000000","message":"please bring the \"const\" back...","commit_id":"92f4028d6964104a70a90da9d243bb2ac320358d"},{"author":{"_account_id":1000034,"name":"its_Giaan","display_name":"Gianmarco De Gregori","email":"gianmarco@mandelbit.com","username":"its_Giaan"},"change_message_id":"622252d03bd474a889bb55e7267228de174316bd","unresolved":false,"context_lines":[{"line_number":1153,"context_line":" */"},{"line_number":1154,"context_line":"static struct multi_instance *"},{"line_number":1155,"context_line":"multi_get_instance_by_virtual_addr(struct multi_context *m,"},{"line_number":1156,"context_line":"                                   struct mroute_addr *addr,"},{"line_number":1157,"context_line":"                                   bool cidr_routing)"},{"line_number":1158,"context_line":"{"},{"line_number":1159,"context_line":"    struct multi_route *route;"}],"source_content_type":"text/x-csrc","patch_set":15,"id":"f0994588_93bd3f29","line":1156,"in_reply_to":"ee36f236_30cdf224","updated":"2025-01-24 14:09:04.000000000","message":"Done","commit_id":"92f4028d6964104a70a90da9d243bb2ac320358d"}]}
