)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a5aad383c5c0c086ecdb82720f78c30684eaeb0d","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a network configuration specification which will be used for"},{"line_number":10,"context_line":"the Monogon Network component in case autoconfiguration cannot be used"},{"line_number":11,"context_line":"because of environmental constrains."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"It will also be used by netdump, which is capable of deriving such a"},{"line_number":14,"context_line":"spec from a running system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6b784d1d_0d70cad9","line":11,"range":{"start_line":11,"start_character":25,"end_line":11,"end_character":35},"updated":"2023-02-22 12:37:47.000000000","message":"*constraints ;)","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"955daa7042177eeaf55fe3635e43b9254514fa9e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a network configuration specification which will be used for"},{"line_number":10,"context_line":"the Monogon Network component in case autoconfiguration cannot be used"},{"line_number":11,"context_line":"because of environmental constrains."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"It will also be used by netdump, which is capable of deriving such a"},{"line_number":14,"context_line":"spec from a running system."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"c5cf5969_d9e364fe","line":11,"range":{"start_line":11,"start_character":25,"end_line":11,"end_character":35},"in_reply_to":"6b784d1d_0d70cad9","updated":"2023-03-01 12:14:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"}],"/PATCHSET_LEVEL":[{"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}]},"change_message_id":"955daa7042177eeaf55fe3635e43b9254514fa9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8025631e_03e7fa4c","updated":"2023-03-01 12:14:47.000000000","message":"Pushing one revision on top of this for final reordering of the messages, no other changes will be in the next one.","commit_id":"781910bdab48b10111fac771e1c1fcdfd2a54a6a"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b36079a7c5c9dc6ef36eb9e382e7d0f65b2d1760","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5d0ede42_803b5ea4","updated":"2023-03-01 16:57:44.000000000","message":"Meow, am CI","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"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}]},"change_message_id":"a800564e0039f73e1d943ddaec5cde64eadc0670","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0261b07c_261fb6eb","updated":"2023-03-08 16:10:04.000000000","message":"One more round, forgot to remote Address and reformatted/reflowed the thing.","commit_id":"2b6822451949cf37c0e9819112ced603900c745b"}],"net/proto/net.proto":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"syntax \u003d \"proto3\";"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"package net.proto;"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"// Net contains a network configuration for a single network namespace."},{"line_number":6,"context_line":"message Net {"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"d8b92448_b4815b9c","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":18},"updated":"2023-02-21 10:32:40.000000000","message":"My assumptions are that this is primarily to write config files by hand for Monogon, but also autodiscovered by netdump for the cloud project as a secondary feature.\n\nI also assume that we explicitly only support Linux, not other network devices/OSes.\n\nSo I\u0027m reviewing it as I were writing prototext defined by this.\n\nRegardless, these assumptions should be explicitly stated somewhere.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"syntax \u003d \"proto3\";"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"package net.proto;"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"// Net contains a network configuration for a single network namespace."},{"line_number":6,"context_line":"message Net {"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"fafccac6_f897ad1b","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":18},"in_reply_to":"d8b92448_b4815b9c","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"syntax \u003d \"proto3\";"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"package net.proto;"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"// Net contains a network configuration for a single network namespace."},{"line_number":6,"context_line":"message Net {"},{"line_number":7,"context_line":"    repeated Interface interface \u003d 1;"},{"line_number":8,"context_line":"    repeated Route route \u003d 2;"},{"line_number":9,"context_line":"    repeated bytes nameserver \u003d 3;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"466258cb_7b4e100e","line":6,"range":{"start_line":4,"start_character":0,"end_line":6,"end_character":13},"updated":"2023-02-21 10:32:40.000000000","message":"```suggestion\n\n// Net contains a network configuration for a single network namespace.\n//\n// This is effectively the top-level configuration message for a machine, \n// at least for its main routing table.\nmessage Net {\n```","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"syntax \u003d \"proto3\";"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"package net.proto;"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"// Net contains a network configuration for a single network namespace."},{"line_number":6,"context_line":"message Net {"},{"line_number":7,"context_line":"    repeated Interface interface \u003d 1;"},{"line_number":8,"context_line":"    repeated Route route \u003d 2;"},{"line_number":9,"context_line":"    repeated bytes nameserver \u003d 3;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"9bd562b8_882a8921","line":6,"range":{"start_line":4,"start_character":0,"end_line":6,"end_character":13},"in_reply_to":"466258cb_7b4e100e","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":8,"context_line":"    repeated Route route \u003d 2;"},{"line_number":9,"context_line":"    repeated bytes nameserver \u003d 3;"},{"line_number":10,"context_line":"}"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"// IPv4Autoconfig contains settings for the automatic configuration of IPv4"},{"line_number":13,"context_line":"// addresses, routes and further network information."},{"line_number":14,"context_line":"message IPv4Autoconfig {"},{"line_number":15,"context_line":"}"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"258734ad_2010c75c","line":13,"range":{"start_line":11,"start_character":0,"end_line":13,"end_character":53},"updated":"2023-02-21 10:32:40.000000000","message":"Probably worth explicitly mentioning that this is \u0027DHCP\u0027.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    repeated Route route \u003d 2;"},{"line_number":9,"context_line":"    repeated bytes nameserver \u003d 3;"},{"line_number":10,"context_line":"}"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"// IPv4Autoconfig contains settings for the automatic configuration of IPv4"},{"line_number":13,"context_line":"// addresses, routes and further network information."},{"line_number":14,"context_line":"message IPv4Autoconfig {"},{"line_number":15,"context_line":"}"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"12a51d09_db2dfc29","line":13,"range":{"start_line":11,"start_character":0,"end_line":13,"end_character":53},"in_reply_to":"258734ad_2010c75c","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":14,"context_line":"message IPv4Autoconfig {"},{"line_number":15,"context_line":"}"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"// IPv6Autoconfig contains settings for the automatic configuration of IPv6"},{"line_number":18,"context_line":"// addreses, routes and further network information."},{"line_number":19,"context_line":"message IPv6Autoconfig {"},{"line_number":20,"context_line":"    enum Privacy {"},{"line_number":21,"context_line":"        // Do not generate privacy addresses."}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"426a320b_6cbcc13a","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":52},"updated":"2023-02-21 10:32:40.000000000","message":"Probably worth explicitly mentioning that this is \u0027SLAAC/NDP\u0027 and not \u0027DHCPv6\u0027.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":14,"context_line":"message IPv4Autoconfig {"},{"line_number":15,"context_line":"}"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"// IPv6Autoconfig contains settings for the automatic configuration of IPv6"},{"line_number":18,"context_line":"// addreses, routes and further network information."},{"line_number":19,"context_line":"message IPv6Autoconfig {"},{"line_number":20,"context_line":"    enum Privacy {"},{"line_number":21,"context_line":"        // Do not generate privacy addresses."}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"1d515ff6_1e50f5d7","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":52},"in_reply_to":"426a320b_6cbcc13a","updated":"2023-02-28 13:02:47.000000000","message":"This is not restricted to SLAAC/NDP and may also use DHCPv6 if advertised in a network via routing advertisement.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":46,"context_line":"    // point link. Do not set if mask_bits is not zero/unset."},{"line_number":47,"context_line":"    bytes peer_ip \u003d 3;"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    // Human-readable label of the address."},{"line_number":50,"context_line":"    string label \u003d 4;"},{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"// Device references one or more network adapters, i.e. network"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"4a7d6223_d4f080db","line":50,"range":{"start_line":49,"start_character":0,"end_line":50,"end_character":21},"updated":"2023-02-21 10:32:40.000000000","message":"What populates this? What should consumers do with it? What should I write there?","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    // point link. Do not set if mask_bits is not zero/unset."},{"line_number":47,"context_line":"    bytes peer_ip \u003d 3;"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    // Human-readable label of the address."},{"line_number":50,"context_line":"    string label \u003d 4;"},{"line_number":51,"context_line":"}"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"// Device references one or more network adapters, i.e. network"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"77d004e5_53c4bf8f","line":50,"range":{"start_line":49,"start_character":0,"end_line":50,"end_character":21},"in_reply_to":"4a7d6223_d4f080db","updated":"2023-02-28 13:02:47.000000000","message":"Basically a comment, but gets populated by various systems so I kept it in here. Nothing interprets it.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":55,"context_line":"message Device {"},{"line_number":56,"context_line":"    // Matches the permanent MAC of the network interface"},{"line_number":57,"context_line":"    bytes mac \u003d 1;"},{"line_number":58,"context_line":"    // Matches the Linux driver of the network interface"},{"line_number":59,"context_line":"    string driver \u003d 2;"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":"// Bond defines an aggregate of physical layer 2 links which behave as one"},{"line_number":62,"context_line":"// virtual layer 2 link. This includes active-passive as well as active-"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"f53f1a26_3bd5feb9","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":22},"updated":"2023-02-21 10:32:40.000000000","message":"What will the consumer do with this? Is it just informative?","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"955daa7042177eeaf55fe3635e43b9254514fa9e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"message Device {"},{"line_number":56,"context_line":"    // Matches the permanent MAC of the network interface"},{"line_number":57,"context_line":"    bytes mac \u003d 1;"},{"line_number":58,"context_line":"    // Matches the Linux driver of the network interface"},{"line_number":59,"context_line":"    string driver \u003d 2;"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":"// Bond defines an aggregate of physical layer 2 links which behave as one"},{"line_number":62,"context_line":"// virtual layer 2 link. This includes active-passive as well as active-"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"4c4f93d4_55dbc2e6","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":22},"in_reply_to":"f53f1a26_3bd5feb9","updated":"2023-03-01 12:14:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":57,"context_line":"    bytes mac \u003d 1;"},{"line_number":58,"context_line":"    // Matches the Linux driver of the network interface"},{"line_number":59,"context_line":"    string driver \u003d 2;"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":"// Bond defines an aggregate of physical layer 2 links which behave as one"},{"line_number":62,"context_line":"// virtual layer 2 link. This includes active-passive as well as active-"},{"line_number":63,"context_line":"// active configurations with two or more links."}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"a39af6cd_63afb569","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":1},"updated":"2023-02-21 10:32:40.000000000","message":"If this is a generic Device, this should have a oneof/enum that lets you determine if this is Ethernet or something else. Probably a oneof to make it easier for prototext writers.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"955daa7042177eeaf55fe3635e43b9254514fa9e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    bytes mac \u003d 1;"},{"line_number":58,"context_line":"    // Matches the Linux driver of the network interface"},{"line_number":59,"context_line":"    string driver \u003d 2;"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":"// Bond defines an aggregate of physical layer 2 links which behave as one"},{"line_number":62,"context_line":"// virtual layer 2 link. This includes active-passive as well as active-"},{"line_number":63,"context_line":"// active configurations with two or more links."}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"3bb8faa6_c41d4ff9","line":60,"range":{"start_line":60,"start_character":0,"end_line":60,"end_character":1},"in_reply_to":"a39af6cd_63afb569","updated":"2023-03-01 12:14:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":135,"context_line":"}"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"message VLAN {"},{"line_number":138,"context_line":"    // Name of the parent interface passing tagged packets."},{"line_number":139,"context_line":"    string parent \u003d 1;"},{"line_number":140,"context_line":"    // VLAN ID (1-4094)"},{"line_number":141,"context_line":"    int32 id \u003d 2;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"ecb7fdd5_375a4cf8","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":59},"updated":"2023-02-21 10:32:40.000000000","message":"Is the parent guaranteed to exist as another device with that name in this config?","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":135,"context_line":"}"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"message VLAN {"},{"line_number":138,"context_line":"    // Name of the parent interface passing tagged packets."},{"line_number":139,"context_line":"    string parent \u003d 1;"},{"line_number":140,"context_line":"    // VLAN ID (1-4094)"},{"line_number":141,"context_line":"    int32 id \u003d 2;"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"f77ca704_bc4c3e96","line":138,"range":{"start_line":138,"start_character":4,"end_line":138,"end_character":59},"in_reply_to":"ecb7fdd5_375a4cf8","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"message Interface {"},{"line_number":158,"context_line":"    // Name of the interface"},{"line_number":159,"context_line":"    string name \u003d 1;"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    // Type of interface"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"032b43d7_69e88925","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":28},"updated":"2023-02-21 10:32:40.000000000","message":"... as seen by the operating system, ie. Linux? Vs. the name potentially physically printed on the machine.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"message Interface {"},{"line_number":158,"context_line":"    // Name of the interface"},{"line_number":159,"context_line":"    string name \u003d 1;"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    // Type of interface"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"8c8694eb_3020ac6d","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":28},"in_reply_to":"032b43d7_69e88925","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":180,"context_line":"}"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"message Route {"},{"line_number":183,"context_line":"    // First IP of the destination network"},{"line_number":184,"context_line":"    bytes destination_ip \u003d 1;"},{"line_number":185,"context_line":"    // Number of bits in the destination network"},{"line_number":186,"context_line":"    int32 destination_bits \u003d 2;"},{"line_number":187,"context_line":"    // IP of the next hop"},{"line_number":188,"context_line":"    bytes next_hop_ip \u003d 3;"},{"line_number":189,"context_line":"    // Priority of the route. A lower metric route wins over a route with a"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"be5827e1_24d06811","line":186,"range":{"start_line":183,"start_character":0,"end_line":186,"end_character":31},"updated":"2023-02-21 10:32:40.000000000","message":"If this is meant to be a config file, this needs to be a CIDR string.\n\nSame for the nexthop below, that needs to be af string.\n\nSame for the fields in Address.","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":180,"context_line":"}"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"message Route {"},{"line_number":183,"context_line":"    // First IP of the destination network"},{"line_number":184,"context_line":"    bytes destination_ip \u003d 1;"},{"line_number":185,"context_line":"    // Number of bits in the destination network"},{"line_number":186,"context_line":"    int32 destination_bits \u003d 2;"},{"line_number":187,"context_line":"    // IP of the next hop"},{"line_number":188,"context_line":"    bytes next_hop_ip \u003d 3;"},{"line_number":189,"context_line":"    // Priority of the route. A lower metric route wins over a route with a"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"615e1acd_4173b362","line":186,"range":{"start_line":183,"start_character":0,"end_line":186,"end_character":31},"in_reply_to":"be5827e1_24d06811","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d23ec05c30599673f6f574f3f628f11a9af09a9a","unresolved":true,"context_lines":[{"line_number":188,"context_line":"    bytes next_hop_ip \u003d 3;"},{"line_number":189,"context_line":"    // Priority of the route. A lower metric route wins over a route with a"},{"line_number":190,"context_line":"    // higher metric."},{"line_number":191,"context_line":"    int32 metric \u003d 4;"},{"line_number":192,"context_line":"}"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"53d072eb_465ac66f","line":191,"range":{"start_line":191,"start_character":4,"end_line":191,"end_character":21},"updated":"2023-02-21 10:32:40.000000000","message":"What happens if this is zero, ie. the default?","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"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}]},"change_message_id":"1018062d9707bb2d6d2a4eda0aeeef4632ce546b","unresolved":false,"context_lines":[{"line_number":188,"context_line":"    bytes next_hop_ip \u003d 3;"},{"line_number":189,"context_line":"    // Priority of the route. A lower metric route wins over a route with a"},{"line_number":190,"context_line":"    // higher metric."},{"line_number":191,"context_line":"    int32 metric \u003d 4;"},{"line_number":192,"context_line":"}"}],"source_content_type":"text/x-protobuf","patch_set":1,"id":"57ca5a76_bf36187f","line":191,"range":{"start_line":191,"start_character":4,"end_line":191,"end_character":21},"in_reply_to":"53d072eb_465ac66f","updated":"2023-02-28 13:02:47.000000000","message":"Done","commit_id":"ac5c19e0b4589598985f816accca0c29bc19796c"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"394446e5482a0af022e8d551de1c50b4093d692f","unresolved":true,"context_lines":[{"line_number":15,"context_line":"message Net {"},{"line_number":16,"context_line":"    repeated Interface interface \u003d 1;"},{"line_number":17,"context_line":"    repeated Route route \u003d 2;"},{"line_number":18,"context_line":"    repeated bytes nameserver \u003d 3;"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"// IPv4Autoconfig contains settings for the automatic configuration of IPv4"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"69d0c42d_34fbf8c8","line":18,"range":{"start_line":18,"start_character":13,"end_line":18,"end_character":18},"updated":"2023-02-28 13:07:47.000000000","message":"string?\n\nAlso we probably want to wrap it in a message just in case.","commit_id":"781910bdab48b10111fac771e1c1fcdfd2a54a6a"},{"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}]},"change_message_id":"955daa7042177eeaf55fe3635e43b9254514fa9e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"message Net {"},{"line_number":16,"context_line":"    repeated Interface interface \u003d 1;"},{"line_number":17,"context_line":"    repeated Route route \u003d 2;"},{"line_number":18,"context_line":"    repeated bytes nameserver \u003d 3;"},{"line_number":19,"context_line":"}"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"// IPv4Autoconfig contains settings for the automatic configuration of IPv4"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"da2fd69d_08d63eb7","line":18,"range":{"start_line":18,"start_character":13,"end_line":18,"end_character":18},"in_reply_to":"69d0c42d_34fbf8c8","updated":"2023-03-01 12:14:47.000000000","message":"Done","commit_id":"781910bdab48b10111fac771e1c1fcdfd2a54a6a"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1db198a399fab45236d6c0c8dd4a5328b39edba6","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        int32 polling_interval_ms \u003d 1;"},{"line_number":42,"context_line":"        // Disable the use of Linux\u0027s carrier monitoring which can use"},{"line_number":43,"context_line":"        // interrupts and force polling in all cases."},{"line_number":44,"context_line":"        bool force_polling \u003d 4;"},{"line_number":45,"context_line":"        // Amount of time to delay marking the link as down in the bond after"},{"line_number":46,"context_line":"        // the carrier has been lost. Should be a multiple of"},{"line_number":47,"context_line":"        // polling_interval_ms."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"d3cfdbaa_4ca3c443","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":31},"updated":"2023-03-02 11:52:11.000000000","message":"If this isn\u0027t representing some external bool in other software, it should be an enum instead (eg. implementation: CARRIER_MONITORING, POLLING). I assume we still want to default to carrier monitoring.","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"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}]},"change_message_id":"cd15290163dadf6a77d460e71e45deb5029ba4f2","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        int32 polling_interval_ms \u003d 1;"},{"line_number":42,"context_line":"        // Disable the use of Linux\u0027s carrier monitoring which can use"},{"line_number":43,"context_line":"        // interrupts and force polling in all cases."},{"line_number":44,"context_line":"        bool force_polling \u003d 4;"},{"line_number":45,"context_line":"        // Amount of time to delay marking the link as down in the bond after"},{"line_number":46,"context_line":"        // the carrier has been lost. Should be a multiple of"},{"line_number":47,"context_line":"        // polling_interval_ms."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"3bfde3e4_de29148c","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":31},"in_reply_to":"d3cfdbaa_4ca3c443","updated":"2023-03-07 14:56:16.000000000","message":"This is a bool on Netlink\u0027s side, so I\u0027m keeping it.","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1db198a399fab45236d6c0c8dd4a5328b39edba6","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    // (point-to-point)."},{"line_number":128,"context_line":"    string ip \u003d 1;"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    // The IP address of the peer on a point-to-point link in string form."},{"line_number":131,"context_line":"    // Should only be set if ip contains a single IP without network mask."},{"line_number":132,"context_line":"    string peer_ip \u003d 3;"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    // Optional comment attached to the address. Not interpreted by any system."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"047ef1dc_c313a4a1","line":131,"range":{"start_line":130,"start_character":4,"end_line":131,"end_character":74},"updated":"2023-03-02 11:52:11.000000000","message":"Put that in a oneof like this?\n\n```\nmessage Broadcast {\n    string ip \u003d 1; // address and associated network prefix in CIDR form\n}\nmessage PointToPoint {\n    string ip \u003d 1; // just the address\n    string peer_ip \u003d 2;\n}\n```\n\nI don\u0027t like that \u0027ip\u0027 changes between being being CIDR and non-CIDR based on peer_ip being set.","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"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}]},"change_message_id":"dc797879b0ef6d851b1ffdb43d4503cb47c15047","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    // (point-to-point)."},{"line_number":128,"context_line":"    string ip \u003d 1;"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    // The IP address of the peer on a point-to-point link in string form."},{"line_number":131,"context_line":"    // Should only be set if ip contains a single IP without network mask."},{"line_number":132,"context_line":"    string peer_ip \u003d 3;"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    // Optional comment attached to the address. Not interpreted by any system."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"af2ae412_39a4cf78","line":131,"range":{"start_line":130,"start_character":4,"end_line":131,"end_character":74},"in_reply_to":"047ef1dc_c313a4a1","updated":"2023-03-07 12:01:17.000000000","message":"Done","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1db198a399fab45236d6c0c8dd4a5328b39edba6","unresolved":true,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    // Maximum transmission unit of the interface. If unset it will be"},{"line_number":187,"context_line":"    // automatically configured by DHCP or LLDP or left at the interface"},{"line_number":188,"context_line":"    // default value. Minimum value is 1280 bytes, "},{"line_number":189,"context_line":"    int32 mtu \u003d 13;"},{"line_number":190,"context_line":"}"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"de1985e9_c23876e7","line":188,"range":{"start_line":188,"start_character":49,"end_line":188,"end_character":51},"updated":"2023-03-02 11:52:11.000000000","message":"```suggestion\n    // default value. Minimum value is 1280 bytes.\n```","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"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}]},"change_message_id":"dc797879b0ef6d851b1ffdb43d4503cb47c15047","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    // Maximum transmission unit of the interface. If unset it will be"},{"line_number":187,"context_line":"    // automatically configured by DHCP or LLDP or left at the interface"},{"line_number":188,"context_line":"    // default value. Minimum value is 1280 bytes, "},{"line_number":189,"context_line":"    int32 mtu \u003d 13;"},{"line_number":190,"context_line":"}"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"54f95d1e_67a8dd33","line":188,"range":{"start_line":188,"start_character":49,"end_line":188,"end_character":51},"in_reply_to":"de1985e9_c23876e7","updated":"2023-03-07 12:01:17.000000000","message":"Done","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1db198a399fab45236d6c0c8dd4a5328b39edba6","unresolved":false,"context_lines":[{"line_number":192,"context_line":"message Route {"},{"line_number":193,"context_line":"    // Destination network in CIDR string form."},{"line_number":194,"context_line":"    string destination_net \u003d 1;"},{"line_number":195,"context_line":"    // IP address of the next hop."},{"line_number":196,"context_line":"    string next_hop_ip \u003d 3;"},{"line_number":197,"context_line":"    // Priority of the route. A lower metric route wins over a route with a"},{"line_number":198,"context_line":"    // higher metric. If unset, defaults to 0 which is the default metric in"},{"line_number":199,"context_line":"    // Linux."}],"source_content_type":"text/x-protobuf","patch_set":4,"id":"9f3554f4_07fd04bd","line":196,"range":{"start_line":195,"start_character":4,"end_line":196,"end_character":27},"updated":"2023-03-02 11:52:11.000000000","message":"In the future, this will probably end up being in a oneof with an alternative being \u0027via device\u0027 (eg. for Wireguard). But it\u0027s fine for now I guess.","commit_id":"2266cc1c0d22c443c324d4d57daefbee86a7518d"}]}
