)]}'
{"id":"monogon~4496","triplet_id":"monogon~main~I46c604b7dfd58da9e6ddd0a29241680d25a2a745","project":"monogon","branch":"main","attention_set":{},"removed_from_attention_set":{"1000001":{"account":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"last_update":"2025-08-11 21:44:47.000000000","reason":"Change was submitted"},"1000038":{"account":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"last_update":"2025-08-11 15:27:38.000000000","reason":"removed on reply"}},"hashtags":[],"change_id":"I46c604b7dfd58da9e6ddd0a29241680d25a2a745","subject":"m/node: implement container networking ourselves","status":"MERGED","created":"2025-08-06 05:21:58.000000000","updated":"2025-08-11 21:44:47.000000000","submitted":"2025-08-11 21:44:47.000000000","submitter":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"total_comment_count":53,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"4496","meta_rev_id":"d50d148ccc1bd28347ef4c6f10822a7c0ced9c81","_number":4496,"virtual_id_number":4496,"owner":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"actions":{},"labels":{"Code-Review":{"approved":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"all":[{"value":0,"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},{"value":0,"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},{"tag":"autogenerated:gerrit:merged","value":1,"date":"2025-08-11 21:44:47.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}],"values":{" 0":"No score","+1":"LGTM"},"description":"","default_value":0,"optional":true},"Vouch-Run-CI":{"all":[{"value":0,"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},{"value":0,"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},{"value":0,"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}],"values":{" 0":"If CI approval needed, vote +1 after reviewing for safety.","+1":"Okay to run CI"},"description":"","default_value":0,"optional":true},"Verified":{"approved":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:gerrit:merged","value":1,"date":"2025-08-11 21:44:47.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},{"value":0,"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},{"value":0,"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}],"values":{"-1":"Fails"," 0":"No score","+1":"Great success"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2025-08-06 05:21:58.000000000","updated_by":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"reviewer":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"state":"REVIEWER"},{"updated":"2025-08-06 05:52:17.000000000","updated_by":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"9bf1631220a64b16a52fdda353c7c77c37809f9c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-06 05:21:58.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"4f19c9a12531fd2e8cea7c5ca30413e420aa9240","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-06 05:52:17.000000000","message":"Patch Set 1: Verified+1","accounts_in_message":[],"_revision_number":1},{"id":"0766570fd27f525d16a4db32ec2a605ef6591e07","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-06 15:04:18.000000000","message":"Uploaded patch set 2.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":2},{"id":"28e22c7b26ff560b20b54627c43c18c8f8a10c65","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-06 15:05:21.000000000","message":"Patch Set 2: Verified-1","accounts_in_message":[],"_revision_number":2},{"id":"2a1f76ac7967df85bb60b9b4a6e5413c04068eb9","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-06 15:11:14.000000000","message":"Uploaded patch set 3: Patch Set 2 was rebased.\n\nCopied Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR **changekind:TRIVIAL_REBASE**\")\n","accounts_in_message":[],"_revision_number":3},{"id":"8631ee10f58e262b07d671d1667e3655112b9253","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-06 15:24:08.000000000","message":"Patch Set 3: Verified+1","accounts_in_message":[],"_revision_number":3},{"id":"db95260ad47652605f5ca71893eb9dc326f60f2d","author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-07 16:17:35.000000000","message":"Patch Set 3:\n\n(21 comments)","accounts_in_message":[],"_revision_number":3},{"id":"55f814e986c06ea30f45839bcaa136b48f00b7ad","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-07 20:24:35.000000000","message":"Patch Set 3:\n\n(21 comments)","accounts_in_message":[],"_revision_number":3},{"id":"7362ebcc17d7e39b0c4aab03c43fb352aa8c5a8b","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-07 20:25:40.000000000","message":"Uploaded patch set 4.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":4},{"id":"ed596e391fe4b72ea958843eb82a94d246fa8b48","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-07 20:30:42.000000000","message":"Patch Set 4: Verified-1","accounts_in_message":[],"_revision_number":4},{"id":"ca629ecc2175170e359e2f7ff6678073914a5988","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 09:34:29.000000000","message":"Uploaded patch set 5.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":5},{"id":"f11a1ebf38b29438d66381a2961ec25a462bda64","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 09:36:33.000000000","message":"Patch Set 5: Verified-1","accounts_in_message":[],"_revision_number":5},{"id":"297dd5b33981686d0046720d3bc355882e8c21db","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 09:47:29.000000000","message":"Uploaded patch set 6.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":6},{"id":"45a12faf6fec04e18c09d12ef3db2d2557ce8b5c","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 10:01:07.000000000","message":"Patch Set 6: Verified-1","accounts_in_message":[],"_revision_number":6},{"id":"db32a67482f29e701e610e2745161efdc4fb5501","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 10:10:59.000000000","message":"Uploaded patch set 7.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":7},{"id":"5055df688fc5bb168c59f658ecadd2f5cae28244","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 10:24:39.000000000","message":"Patch Set 7: Verified-1","accounts_in_message":[],"_revision_number":7},{"id":"7cccbf332924cbe6ddc5910f5e3abb99051d669c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 10:31:44.000000000","message":"Uploaded patch set 8.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":8},{"id":"15d310fbe445581ad261506c911de8ae5b28501e","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 10:43:20.000000000","message":"Patch Set 8: Verified-1","accounts_in_message":[],"_revision_number":8},{"id":"5680259326c7160d506e36bc60a2f8fd125ff804","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 11:41:12.000000000","message":"Uploaded patch set 9.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":9},{"id":"8e814d49281054ca3be875ec9b547ee14f0bf2b6","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 11:42:01.000000000","message":"Patch Set 9: Verified-1","accounts_in_message":[],"_revision_number":9},{"id":"18dc003a290688b60994d62ab811a96eba782be0","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 11:42:06.000000000","message":"Uploaded patch set 10.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":10},{"id":"4e1bb1fae81cf6f978b638e288e8b2d035529883","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 11:54:03.000000000","message":"Patch Set 10: Verified+1","accounts_in_message":[],"_revision_number":10},{"id":"117dd0d843b43718c90324f674a56406905825ef","author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 14:29:36.000000000","message":"Patch Set 10:\n\n(5 comments)","accounts_in_message":[],"_revision_number":10},{"id":"a5f90891640986c0d2afe4a974dbe1dbac05af72","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 15:01:54.000000000","message":"Uploaded patch set 11.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"changekind:NO_CODE_CHANGE OR changekind:TRIVIAL_REBASE\")\n","accounts_in_message":[],"_revision_number":11},{"id":"cb250cc7ee8487700e5dd0a88eb141d2a7b14394","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 15:01:54.000000000","message":"Patch Set 11:\n\n(6 comments)","accounts_in_message":[],"_revision_number":11},{"id":"e6d00db91731e5d57be9798720171fcba3daf077","tag":"autogenerated:jenkins","author":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]},"date":"2025-08-11 15:13:48.000000000","message":"Patch Set 11: Verified+1","accounts_in_message":[],"_revision_number":11},{"id":"453bc9a20387746854918f74e9daa5daf56f81c8","author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 15:27:38.000000000","message":"Patch Set 11: Code-Review+1","accounts_in_message":[],"_revision_number":11},{"id":"d50d148ccc1bd28347ef4c6f10822a7c0ced9c81","tag":"autogenerated:gerrit:merged","author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"date":"2025-08-11 21:44:47.000000000","message":"Change has been successfully rebased and submitted as c607bf67ae20b17e8f254a7e3817e2d1a93114be","accounts_in_message":[],"_revision_number":12}],"current_revision_number":12,"current_revision":"c607bf67ae20b17e8f254a7e3817e2d1a93114be","revisions":{"3eeb11d393d0245d82498efdd99ff4c5cf278585":{"kind":"REWORK","_number":1,"created":"2025-08-06 05:21:58.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/1","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/1","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/1 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/1","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/1 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"b46fc48b3942a9df55d387bad13ccd3a7fba05c3","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/b46fc48b3942a9df55d387bad13ccd3a7fba05c3"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-06 05:21:48.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/3eeb11d393d0245d82498efdd99ff4c5cf278585"}]},"branch":"refs/heads/main"},"99d9eab84850d4d8b8a749e656f9c189c1d7f235":{"kind":"REWORK","_number":2,"created":"2025-08-06 15:04:18.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/2","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/2","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/2 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/2","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/2 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"77310a9653f65260c8d68ddb1fbe4103ade8dd7a","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/77310a9653f65260c8d68ddb1fbe4103ade8dd7a"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-06 15:00:37.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/99d9eab84850d4d8b8a749e656f9c189c1d7f235"}]},"branch":"refs/heads/main"},"26fd20c538d034f416664e6e4ddc16535caccf11":{"kind":"TRIVIAL_REBASE","_number":3,"created":"2025-08-06 15:11:14.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/3","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/3","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/3 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/3","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/3 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"474d0431ca056ac77ba5928962c6a3b758f8a11e","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/474d0431ca056ac77ba5928962c6a3b758f8a11e"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-06 15:05:02.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/26fd20c538d034f416664e6e4ddc16535caccf11"}]},"branch":"refs/heads/main"},"204c3410c7cb231420c1cb3ba353d25de5f67e12":{"kind":"REWORK","_number":4,"created":"2025-08-07 20:25:40.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/4","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/4","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/4 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/4","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/4 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"8dc988ef5d94eb3ae522b4bfa51e5e44a1922d1f","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/8dc988ef5d94eb3ae522b4bfa51e5e44a1922d1f"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-07 20:23:29.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/204c3410c7cb231420c1cb3ba353d25de5f67e12"}]},"branch":"refs/heads/main"},"7ada7c132b61cf1c233a1978d7723d5972df1664":{"kind":"REWORK","_number":5,"created":"2025-08-11 09:34:29.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/5","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/5","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/5 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/5","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/5 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"8dc988ef5d94eb3ae522b4bfa51e5e44a1922d1f","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/8dc988ef5d94eb3ae522b4bfa51e5e44a1922d1f"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 09:34:11.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/7ada7c132b61cf1c233a1978d7723d5972df1664"}]},"branch":"refs/heads/main"},"3abf8546e1b33816e323d9ba174ab8e4f55abc9a":{"kind":"REWORK","_number":6,"created":"2025-08-11 09:47:29.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/6","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/6","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/6 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/6","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/6 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 09:46:00.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/3abf8546e1b33816e323d9ba174ab8e4f55abc9a"}]},"branch":"refs/heads/main"},"63409a8caa237f02b0d42ae3aa7b09b723b557a3":{"kind":"REWORK","_number":7,"created":"2025-08-11 10:10:59.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/7","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/7","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/7 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/7","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/7 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 10:10:53.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/63409a8caa237f02b0d42ae3aa7b09b723b557a3"}]},"branch":"refs/heads/main"},"88f65dbbd9ba1d63f1a785334de6929b48ae9faf":{"kind":"REWORK","_number":8,"created":"2025-08-11 10:31:44.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/8","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/8","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/8 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/8","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/8 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 10:31:42.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/88f65dbbd9ba1d63f1a785334de6929b48ae9faf"}]},"branch":"refs/heads/main"},"818171d55f1ced613ec976f2436aadfa1d5a19dc":{"kind":"REWORK","_number":9,"created":"2025-08-11 11:41:12.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/9","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/9","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/9 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/9","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/9 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 11:41:01.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/818171d55f1ced613ec976f2436aadfa1d5a19dc"}]},"branch":"refs/heads/main"},"bfac115c1a10739b40678465970471f8aaf9aef1":{"kind":"REWORK","_number":10,"created":"2025-08-11 11:42:06.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/10","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/10","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/10 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/10","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/10 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 11:42:04.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/bfac115c1a10739b40678465970471f8aaf9aef1"}]},"branch":"refs/heads/main"},"f22e5751891c64adeb0fde524c4e1e49b65c4564":{"kind":"REWORK","_number":11,"created":"2025-08-11 15:01:54.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/11","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/11","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/11 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/11","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/11 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 15:01:39.000000000","tz":120},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/f22e5751891c64adeb0fde524c4e1e49b65c4564"}]},"branch":"refs/heads/main"},"c607bf67ae20b17e8f254a7e3817e2d1a93114be":{"kind":"NO_CODE_CHANGE","_number":12,"created":"2025-08-11 21:44:47.000000000","uploader":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"ref":"refs/changes/96/4496/12","fetch":{"anonymous http":{"url":"https://review.monogon.dev/monogon","ref":"refs/changes/96/4496/12","commands":{"Branch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/12 \u0026\u0026 git checkout -b change-4496 FETCH_HEAD","Checkout":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.monogon.dev/monogon refs/changes/96/4496/12","Reset To":"git fetch https://review.monogon.dev/monogon refs/changes/96/4496/12 \u0026\u0026 git reset --hard FETCH_HEAD"}}},"commit":{"parents":[{"commit":"4bde9313d653c7a3714d824f9904aa4081796560","subject":"m/node: extract network.Status to node.NetStatus","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/4bde9313d653c7a3714d824f9904aa4081796560"}]}],"author":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-07-22 18:25:26.000000000","tz":120},"committer":{"name":"Lorenz Brun","email":"lorenz@monogon.tech","date":"2025-08-11 21:44:47.000000000","tz":0},"subject":"m/node: implement container networking ourselves","message":"m/node: implement container networking ourselves\n\nThis change gets rid of the CNI mechanism for configuring container\nnetworking in favour of a split approach where the network service is\nextended by a gRPC workload network service which handles all of the\nwork as well as a library which exposes just enough of go-cni\u0027s\ninterface to be a drop-in replacement in containerd, which then talks\nto the workload network service.\n\nThis is a rather unconventional approach do doing things as CNI itself\nis a pluggable interface. The reason for doing it this way is that the\nbinary executing interface of CNI has a huge spec which is also horrible\nto convert into decent Go types and being a binary-calling interface has\ninherent lifecycle, complexity and image size disadvantages. The part of\nCNI that is actually used by containerd is tiny and its arguments are\nwell-specified and have decent Go types. It also avoids the whole CNI\ncaching mechanic which adds further unnecessary complexity.\n\nThe reason for the split service model instead of implementing\neverything in cniproxy is to allow for more complex logic and Monogon\ncontrol plane interfacing from the workload network service. Also this\nwill allow offloading the actual service to things like DPUs.\n\nRight now there is some uglyness left to make this self-contained. Two\nobvious examples are the piping through of the pod network event value\nand the exclusion of the first (non-network) IP from the IP allocator.\nThese will eventually go away but are necessary to get this to work as a\nstandalone change.\n\nChange-Id: I46c604b7dfd58da9e6ddd0a29241680d25a2a745\nReviewed-on: https://review.monogon.dev/c/monogon/+/4496\nReviewed-by: Jan Schär \u003cjan@monogon.tech\u003e\nTested-by: Jenkins CI\n","web_links":[{"name":"browse","url":"/plugins/gitiles/monogon/+/c607bf67ae20b17e8f254a7e3817e2d1a93114be"}]},"branch":"refs/heads/main","description":"Rebase"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Code-Review","status":"OK","applied_by":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]}},{"label":"Vouch-Run-CI","status":"MAY"},{"label":"Verified","status":"MAY","applied_by":{"_account_id":1000003,"name":"Jenkins CI","username":"jenkins","avatars":[{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/00000000000000000000000000000000.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}],"tags":["SERVICE_USER"]}}]}],"submit_requirements":[{"name":"Code-Review","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":[],"atom_explanations":{}}},{"name":"Verified","description":"Code passes CI checks","status":"SATISFIED","is_legacy":false,"applicability_expression_result":{"fulfilled":true,"status":"PASS"},"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{}}},{"name":"No-Unresolved-Comments","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"-has:unresolved","fulfilled":true,"status":"PASS","passing_atoms":[],"failing_atoms":["has:unresolved"],"atom_explanations":{}}},{"name":"Allow-Run-CI","description":"Change needs project owner approval for CI runs","status":"OVERRIDDEN","is_legacy":false,"applicability_expression_result":{"fulfilled":true,"status":"PASS"},"submittability_expression_result":{"expression":"label:Vouch-Run-CI\u003dMAX","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Vouch-Run-CI\u003dMAX"],"atom_explanations":{}},"override_expression_result":{"expression":"authoremail:\"^.*@(nexantic\\.com|monogon\\.tech)$\"","fulfilled":true,"status":"PASS","passing_atoms":["authoremail:\"^.*@(nexantic\\.com|monogon\\.tech)$\""],"failing_atoms":[],"atom_explanations":{}}}]}
