)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3e973eefb09b8ad72ec56caaeed3bd5389f41f3e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c3868e37_43102a79","updated":"2026-09-03 08:02:00.000000000","message":"recheck - missing bridge in functional test","commit_id":"91bf1ca7da93a045faadc2a6ecb2ffd0a1698a14"}],"neutron/db/l3_db.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36988c2ab15bd49244f793284ef725a912813654","unresolved":true,"context_lines":[{"line_number":1347,"context_line":"        self._get_router(context, router_id)"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        gateway_port_ids \u003d l3_obj.RouterPort.get_gw_port_ids_by_router_id("},{"line_number":1350,"context_line":"            context.elevated(), router_id)"},{"line_number":1351,"context_line":"        for port_id in gateway_port_ids:"},{"line_number":1352,"context_line":"            gateway_port \u003d port_obj.Port.get_object("},{"line_number":1353,"context_line":"                context.elevated(), id\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c5995e8c_dd9a1f69","line":1350,"range":{"start_line":1350,"start_character":11,"end_line":1350,"end_character":30},"updated":"2026-09-02 09:23:42.000000000","message":"This is not needed, the method `get_gw_port_ids_by_router_id` is doing a direct sql query, no RBAC check is done","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bcb4bccf049efa61cc0ad6206bef64488a2875d4","unresolved":true,"context_lines":[{"line_number":1347,"context_line":"        self._get_router(context, router_id)"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        gateway_port_ids \u003d l3_obj.RouterPort.get_gw_port_ids_by_router_id("},{"line_number":1350,"context_line":"            context.elevated(), router_id)"},{"line_number":1351,"context_line":"        for port_id in gateway_port_ids:"},{"line_number":1352,"context_line":"            gateway_port \u003d port_obj.Port.get_object("},{"line_number":1353,"context_line":"                context.elevated(), id\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ead2e051_220680aa","line":1350,"range":{"start_line":1350,"start_character":11,"end_line":1350,"end_character":30},"in_reply_to":"c5995e8c_dd9a1f69","updated":"2026-09-02 10:27:00.000000000","message":"are you sure? Every other place in neutron is using that method with elevated context too","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5993f5960b9bc929c82b67e26ca55320884bfd60","unresolved":false,"context_lines":[{"line_number":1347,"context_line":"        self._get_router(context, router_id)"},{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        gateway_port_ids \u003d l3_obj.RouterPort.get_gw_port_ids_by_router_id("},{"line_number":1350,"context_line":"            context.elevated(), router_id)"},{"line_number":1351,"context_line":"        for port_id in gateway_port_ids:"},{"line_number":1352,"context_line":"            gateway_port \u003d port_obj.Port.get_object("},{"line_number":1353,"context_line":"                context.elevated(), id\u003dport_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"70f81301_5ca36d22","line":1350,"range":{"start_line":1350,"start_character":11,"end_line":1350,"end_character":30},"in_reply_to":"ead2e051_220680aa","updated":"2026-09-07 12:33:49.000000000","message":"Yes, I\u0027m sure about this. If we do a direct query, the RBAC check is orthogonal to SQLAlchemy and the SQL query. The RBAC check is done in the OVO (for example, in PS5 `Port.get_objects`).\n\nIn any case, this is no longer relevant due to the latest changes.","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36988c2ab15bd49244f793284ef725a912813654","unresolved":true,"context_lines":[{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        gateway_port_ids \u003d l3_obj.RouterPort.get_gw_port_ids_by_router_id("},{"line_number":1350,"context_line":"            context.elevated(), router_id)"},{"line_number":1351,"context_line":"        for port_id in gateway_port_ids:"},{"line_number":1352,"context_line":"            gateway_port \u003d port_obj.Port.get_object("},{"line_number":1353,"context_line":"                context.elevated(), id\u003dport_id)"},{"line_number":1354,"context_line":"            if (gateway_port and"},{"line_number":1355,"context_line":"                    gateway_port.network_id \u003d\u003d external_network_id):"},{"line_number":1356,"context_line":"                return"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"        msg \u003d (_(\u0027Router %(router_id)s has no external gateway on \u0027"},{"line_number":1359,"context_line":"                 \u0027network %(network_id)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a7b3c24_cacfbff7","line":1356,"range":{"start_line":1351,"start_character":8,"end_line":1356,"end_character":22},"updated":"2026-09-02 09:23:42.000000000","message":"Why don\u0027t you directly retrieve the `RouterPort` OVO? That contains the `Port` OVO. You can do `l3_obj.RouterPort.get_objects(context.elevated(), router_id\u003drouter_id)`","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bcb4bccf049efa61cc0ad6206bef64488a2875d4","unresolved":false,"context_lines":[{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"        gateway_port_ids \u003d l3_obj.RouterPort.get_gw_port_ids_by_router_id("},{"line_number":1350,"context_line":"            context.elevated(), router_id)"},{"line_number":1351,"context_line":"        for port_id in gateway_port_ids:"},{"line_number":1352,"context_line":"            gateway_port \u003d port_obj.Port.get_object("},{"line_number":1353,"context_line":"                context.elevated(), id\u003dport_id)"},{"line_number":1354,"context_line":"            if (gateway_port and"},{"line_number":1355,"context_line":"                    gateway_port.network_id \u003d\u003d external_network_id):"},{"line_number":1356,"context_line":"                return"},{"line_number":1357,"context_line":""},{"line_number":1358,"context_line":"        msg \u003d (_(\u0027Router %(router_id)s has no external gateway on \u0027"},{"line_number":1359,"context_line":"                 \u0027network %(network_id)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":2,"id":"47b5498f_cc83ce4d","line":1356,"range":{"start_line":1351,"start_character":8,"end_line":1356,"end_character":22},"in_reply_to":"1a7b3c24_cacfbff7","updated":"2026-09-02 10:27:00.000000000","message":"it\u0027s changed now","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"}],"neutron/extensions/floatingip_router_writable.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3e5698c1cc9d9489c8375debb41cc485bc5471cf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron_lib.api import extensions"},{"line_number":14,"context_line":"from neutron_lib.api.definitions import floatingip_router_writable as apidef"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class Floatingip_router_writable(extensions.APIExtensionDescriptor):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bd5fade8_aab68e5d","line":14,"updated":"2026-09-01 14:13:49.000000000","message":"pep8: H306: imports not in alphabetical order (neutron_lib.api.extensions, neutron_lib.api.definitions.floatingip_router_writable)","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"}],"neutron/services/l3_router/l3_router_plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36988c2ab15bd49244f793284ef725a912813654","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                                    fip_port_details.ALIAS,"},{"line_number":116,"context_line":"                                    fip_pf_detail.ALIAS,"},{"line_number":117,"context_line":"                                    floatingip_pools.ALIAS,"},{"line_number":118,"context_line":"                                    floatingip_router_writable.ALIAS,"},{"line_number":119,"context_line":"                                    qos_gateway_ip.ALIAS,"},{"line_number":120,"context_line":"                                    l3_port_ip_change_not_allowed.ALIAS,"},{"line_number":121,"context_line":"                                    r_admin_state_down_before_update.ALIAS,"}],"source_content_type":"text/x-python","patch_set":2,"id":"2f72f34b_2b34fd32","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":69},"updated":"2026-09-02 09:23:42.000000000","message":"Why is that supported in the L3 router plugin? I thought that was supported only in the OVN L3 plugin only","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bcb4bccf049efa61cc0ad6206bef64488a2875d4","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                                    fip_port_details.ALIAS,"},{"line_number":116,"context_line":"                                    fip_pf_detail.ALIAS,"},{"line_number":117,"context_line":"                                    floatingip_pools.ALIAS,"},{"line_number":118,"context_line":"                                    floatingip_router_writable.ALIAS,"},{"line_number":119,"context_line":"                                    qos_gateway_ip.ALIAS,"},{"line_number":120,"context_line":"                                    l3_port_ip_change_not_allowed.ALIAS,"},{"line_number":121,"context_line":"                                    r_admin_state_down_before_update.ALIAS,"}],"source_content_type":"text/x-python","patch_set":2,"id":"6459c729_a01f2a14","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":69},"in_reply_to":"2f72f34b_2b34fd32","updated":"2026-09-02 10:27:00.000000000","message":"I just tested locally on both ML2/OVS L3-ha and DVR environments and this works fine there too. So I think we can say it is available on all those backends.","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"038bdabc391454b63ab1d75aebc0661edd03f5aa","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                                    fip_port_details.ALIAS,"},{"line_number":116,"context_line":"                                    fip_pf_detail.ALIAS,"},{"line_number":117,"context_line":"                                    floatingip_pools.ALIAS,"},{"line_number":118,"context_line":"                                    floatingip_router_writable.ALIAS,"},{"line_number":119,"context_line":"                                    qos_gateway_ip.ALIAS,"},{"line_number":120,"context_line":"                                    l3_port_ip_change_not_allowed.ALIAS,"},{"line_number":121,"context_line":"                                    r_admin_state_down_before_update.ALIAS,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d5f911e0_a9c428e9","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":69},"in_reply_to":"6459c729_a01f2a14","updated":"2026-09-03 17:22:42.000000000","message":"My guess is it works since (i think) non-OVN routers were pretty permissive in doing SNAT for traffic, like using 0.0.0.0/0 for a filter. OVN routers were difference hence the snat setting Ihar added.","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"147a6c8d2f458273785906eeccf0ae01e2239369","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                                    fip_port_details.ALIAS,"},{"line_number":116,"context_line":"                                    fip_pf_detail.ALIAS,"},{"line_number":117,"context_line":"                                    floatingip_pools.ALIAS,"},{"line_number":118,"context_line":"                                    floatingip_router_writable.ALIAS,"},{"line_number":119,"context_line":"                                    qos_gateway_ip.ALIAS,"},{"line_number":120,"context_line":"                                    l3_port_ip_change_not_allowed.ALIAS,"},{"line_number":121,"context_line":"                                    r_admin_state_down_before_update.ALIAS,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f3d9f608_11774135","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":69},"in_reply_to":"d5f911e0_a9c428e9","updated":"2026-09-04 08:24:57.000000000","message":"yes, and as there have to be static routes configured on each router to have path to the other network it works fine in both those cases.","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"84084ba9084ad76d9ad62b6fb53c2771f329fe87","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                                    fip_port_details.ALIAS,"},{"line_number":116,"context_line":"                                    fip_pf_detail.ALIAS,"},{"line_number":117,"context_line":"                                    floatingip_pools.ALIAS,"},{"line_number":118,"context_line":"                                    floatingip_router_writable.ALIAS,"},{"line_number":119,"context_line":"                                    qos_gateway_ip.ALIAS,"},{"line_number":120,"context_line":"                                    l3_port_ip_change_not_allowed.ALIAS,"},{"line_number":121,"context_line":"                                    r_admin_state_down_before_update.ALIAS,"}],"source_content_type":"text/x-python","patch_set":2,"id":"d6efee74_274dbb90","line":118,"range":{"start_line":118,"start_character":36,"end_line":118,"end_character":69},"in_reply_to":"f3d9f608_11774135","updated":"2026-09-04 09:49:08.000000000","message":"thanks for checking for non-OVN deployment also","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"}],"neutron/services/ovn_l3/plugin.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36988c2ab15bd49244f793284ef725a912813654","unresolved":true,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @staticmethod"},{"line_number":117,"context_line":"    def _disable_fip_router_writable_extension(aliases):"},{"line_number":118,"context_line":"        if not ovn_conf.is_ovn_router_indirect_snat_enabled():"},{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"0bbdb967_c3d204ee","line":118,"range":{"start_line":118,"start_character":24,"end_line":118,"end_character":59},"updated":"2026-09-02 09:23:42.000000000","message":"Why is that needed?\n\nUpdate: ok, for the nested router case. For the VM router case, the traffic should reach the VM router and this traffic should be redirected to the router selected in the FIP.router_id, right?","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bcb4bccf049efa61cc0ad6206bef64488a2875d4","unresolved":true,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @staticmethod"},{"line_number":117,"context_line":"    def _disable_fip_router_writable_extension(aliases):"},{"line_number":118,"context_line":"        if not ovn_conf.is_ovn_router_indirect_snat_enabled():"},{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fb614eb5_a5770ea1","line":118,"range":{"start_line":118,"start_character":24,"end_line":118,"end_character":59},"in_reply_to":"0bbdb967_c3d204ee","updated":"2026-09-02 10:27:00.000000000","message":"yes","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"147a6c8d2f458273785906eeccf0ae01e2239369","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @staticmethod"},{"line_number":117,"context_line":"    def _disable_fip_router_writable_extension(aliases):"},{"line_number":118,"context_line":"        if not ovn_conf.is_ovn_router_indirect_snat_enabled():"},{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"127bee23_8e161215","line":118,"range":{"start_line":118,"start_character":24,"end_line":118,"end_character":59},"in_reply_to":"451b0d57_99fca76d","updated":"2026-09-04 08:24:57.000000000","message":"yes, once we will be removing that config option and that helper function it will naturally be removed from here too","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"038bdabc391454b63ab1d75aebc0661edd03f5aa","unresolved":true,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    @staticmethod"},{"line_number":117,"context_line":"    def _disable_fip_router_writable_extension(aliases):"},{"line_number":118,"context_line":"        if not ovn_conf.is_ovn_router_indirect_snat_enabled():"},{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"451b0d57_99fca76d","line":118,"range":{"start_line":118,"start_character":24,"end_line":118,"end_character":59},"in_reply_to":"fb614eb5_a5770ea1","updated":"2026-09-03 17:22:42.000000000","message":"BTW, this defaults to true since 782b07dc60eea and is deprecated, so guess this check can go away when that happens.","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36988c2ab15bd49244f793284ef725a912813654","unresolved":true,"context_lines":[{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @staticmethod"},{"line_number":124,"context_line":"    def _disable_qos_extensions_by_extension_drivers(aliases):"},{"line_number":125,"context_line":"        qos_service_plugin \u003d directory.get_plugin(plugin_constants.QOS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"2c8f3f85_dc0877df","line":122,"updated":"2026-09-02 09:23:42.000000000","message":"And what happens if distributed FIP is enabled?","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bcb4bccf049efa61cc0ad6206bef64488a2875d4","unresolved":true,"context_lines":[{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @staticmethod"},{"line_number":124,"context_line":"    def _disable_qos_extensions_by_extension_drivers(aliases):"},{"line_number":125,"context_line":"        qos_service_plugin \u003d directory.get_plugin(plugin_constants.QOS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"45dd2d1d_968f599e","line":122,"in_reply_to":"2c8f3f85_dc0877df","updated":"2026-09-02 10:27:00.000000000","message":"as far as I tested it it worked fine","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5993f5960b9bc929c82b67e26ca55320884bfd60","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            LOG.info(\u0027Disabled floating-ip-router-writable extension because \u0027"},{"line_number":120,"context_line":"                     \u0027ovn_router_indirect_snat is disabled.\u0027)"},{"line_number":121,"context_line":"            aliases.remove(\u0027floating-ip-router-writable\u0027)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @staticmethod"},{"line_number":124,"context_line":"    def _disable_qos_extensions_by_extension_drivers(aliases):"},{"line_number":125,"context_line":"        qos_service_plugin \u003d directory.get_plugin(plugin_constants.QOS)"}],"source_content_type":"text/x-python","patch_set":2,"id":"68fca2a6_d3aba6b7","line":122,"in_reply_to":"45dd2d1d_968f599e","updated":"2026-09-07 12:33:49.000000000","message":"Done","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"}],"releasenotes/notes/floating-ip-router-writable-5e7c16ca0f2140fd.yaml":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"36988c2ab15bd49244f793284ef725a912813654","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    floating IP by setting ``router_id`` when associating or updating the"},{"line_number":7,"context_line":"    floating IP. The selected router must be visible to the caller and have an"},{"line_number":8,"context_line":"    external gateway on the floating IP network."},{"line_number":9,"context_line":"    Operators must configure routes"},{"line_number":10,"context_line":"    across every transit hop. Neutron does not validate reachability to the"},{"line_number":11,"context_line":"    fixed IP subnet and does not protect intermediate router interfaces or"},{"line_number":12,"context_line":"    static routes from changes that can interrupt connectivity. Distributed"},{"line_number":13,"context_line":"    virtual routing deployments do not advertise this extension."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"af13761e_c4a2f8fa","line":10,"range":{"start_line":9,"start_character":4,"end_line":10,"end_character":28},"updated":"2026-09-02 09:23:42.000000000","message":"That looks like the line was returned here","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"bcb4bccf049efa61cc0ad6206bef64488a2875d4","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    floating IP by setting ``router_id`` when associating or updating the"},{"line_number":7,"context_line":"    floating IP. The selected router must be visible to the caller and have an"},{"line_number":8,"context_line":"    external gateway on the floating IP network."},{"line_number":9,"context_line":"    Operators must configure routes"},{"line_number":10,"context_line":"    across every transit hop. Neutron does not validate reachability to the"},{"line_number":11,"context_line":"    fixed IP subnet and does not protect intermediate router interfaces or"},{"line_number":12,"context_line":"    static routes from changes that can interrupt connectivity. Distributed"},{"line_number":13,"context_line":"    virtual routing deployments do not advertise this extension."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7faef1bd_fd8602e8","line":10,"range":{"start_line":9,"start_character":4,"end_line":10,"end_character":28},"in_reply_to":"af13761e_c4a2f8fa","updated":"2026-09-02 10:27:00.000000000","message":"Done","commit_id":"837fd046ff769837860ae0c312c2a8da4b9ff4bf"}]}
