)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"20c43601_d406f2e0","updated":"2026-04-09 15:11:37.000000000","message":"Some question inline","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"12cce44b_afb81561","updated":"2026-04-17 20:59:47.000000000","message":"Overall, LGTM. Lets work on resolving some of these open topics","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":26359,"name":"Andrew Austin","email":"aaustin@redhat.com","username":"aaustin"},"change_message_id":"c2cd527d9e184ea39d2356408b9ce2857d8c8112","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d67b851a_9b32985c","updated":"2026-04-17 07:17:19.000000000","message":"Will this be able to handle floating IPs within an EVPN L3 VNI (i.e. FIPs that come from tenant-owned IP space)? With ovn-bgp-agent today, as an operator I am able to mark a network / LS with a VNI and then allow a tenant to use that network as external to attach their own routers and allocate FIPs. That is required for example to allow the tenant to create OpenShift clusters using fully automated installation where the installer creates a neutron router and uses FIPs for API and ingress addresses.\n\nWith the VNI controlled by router objects, would OVN and the agent handle a topology where there is an admin-created VNI router with a network attached and set to advertise host routes that itself is the external gateway network of a non-EVPN neutron router?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":26359,"name":"Andrew Austin","email":"aaustin@redhat.com","username":"aaustin"},"change_message_id":"da630a66ba94ec54845b8bc16863be640bdc89f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"a3d5ad26_dac7b895","in_reply_to":"730990b2_9da14495","updated":"2026-04-22 19:23:05.000000000","message":"Thanks! Marking resolved.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bf52ba9651fcb85787d27d42a30eb461706ea219","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"730990b2_9da14495","in_reply_to":"b04e6c87_a9333752","updated":"2026-04-21 14:40:54.000000000","message":"The architecture/model in the spec can support advertising of floating IPs within the VNI (implied in line 509), although the spec currently doesn\u0027t call out the setting the option to advertise floating IPs.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"28e33a4494bdc6ec098a0f1eb1f05802dce762bf","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"dd25ed89_6a274d11","in_reply_to":"d67b851a_9b32985c","updated":"2026-04-17 17:08:28.000000000","message":"Is use case similar to Figure 3, where lr-3 is connected to ls-public-2 and floating IPs are created from ls-public-2?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":26359,"name":"Andrew Austin","email":"aaustin@redhat.com","username":"aaustin"},"change_message_id":"b6336ed857ed4914a40f9286c17c689d6a70d3b0","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b04e6c87_a9333752","in_reply_to":"dd25ed89_6a274d11","updated":"2026-04-20 14:01:09.000000000","message":"Sort of, but not fully. In my use case (multi-tenant bring-your-own-IP), we need to make it to where the FIP / SNAT IPs of a given set of user-created routers are exposed in the VNI VRF rather than being a shared \"public\" resource.\n\nIn the proposed model, the only way I see to do that would be to have an admin router on the VNI and then the \"external\" LS that the customer sees coming off of that router so that its ports go into the right table.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"e1a6fd3e3e5036554d0949d964b694e72d7206a1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a3e7e732_e64b2e3e","updated":"2026-04-22 06:35:20.000000000","message":"Two questions.\n\n1. Should the implementation not actually be a separate router flavor? https://specs.openstack.org/openstack/neutron-specs/specs/2023.2/ml2ovn-router-flavors.html In theory some of the added flags for the openstack router command could instead be done as a generic way to send extra parameters to router flavors?\n\n2. The default VNI range is the entire 24-bit range but isn\u0027t this a problem if the user is using vxlan with OVN and there\u0027s a collision in the space?","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"66a3dba0_65355983","in_reply_to":"95520d22_6a7451ae","updated":"2026-04-23 16:44:09.000000000","message":"About question 1, the team decided to not create a new flavor of router, since the router supports all the L3 features implemented in the OVN driver.\n\nAbout question 2, the EVPN vxlan tunnel is created separate using external-ids:ovn-evpn-local-ip\u003d$vtep_ip.  So, there will be two vxlan tunnels and two different VNI spaces.","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"c0b7ecb2de22223efd3b67d124d4862ffcd6763e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"95520d22_6a7451ae","in_reply_to":"a3e7e732_e64b2e3e","updated":"2026-04-22 15:28:06.000000000","message":"About question 2, assuming that the question is about east-west traffic, could you use a different local IP for the east-west vxlan tunnel?","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"b06eb2f73a72f1c1a3e0e465d3f422306f7e3c6b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"e19879cb_f85ade14","updated":"2026-04-30 01:38:53.000000000","message":"Looks good to me, I am sure we will discover some nuances later 😇","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe64740c03b59070161593360a9002bde4dd1d30","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"f2e05c2d_d0786281","updated":"2026-04-29 14:58:33.000000000","message":"Thanks for your patience :)","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"}],"specs/2026.2/bgp_evpn_type_5_route_support.rst":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"24e198245df010494564ef7d0227fdfe6460e35b","unresolved":true,"context_lines":[{"line_number":36,"context_line":"- EVPN: Ethernet VPN, first defined in RFC 7432 for IP/MPLS network and later"},{"line_number":37,"context_line":"  updated in RFC 9135 (https://datatracker.ietf.org/doc/html/rfc9135.html) and"},{"line_number":38,"context_line":"  RFC 9136 (https://datatracker.ietf.org/doc/html/rfc9136.html) for data center"},{"line_number":39,"context_line":"  environments "},{"line_number":40,"context_line":"- VRF: Virtual Routing and Forwarding, a virtual routing and forwarding domain"},{"line_number":41,"context_line":"  that can span a wide area network.  Linux models this as a Linux table and"},{"line_number":42,"context_line":"  uses the term VRF synonymously with Linux table."}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf35574a_9ab03d91","line":39,"updated":"2026-03-31 14:03:24.000000000","message":"nit: whitespace 😊","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":36,"context_line":"- EVPN: Ethernet VPN, first defined in RFC 7432 for IP/MPLS network and later"},{"line_number":37,"context_line":"  updated in RFC 9135 (https://datatracker.ietf.org/doc/html/rfc9135.html) and"},{"line_number":38,"context_line":"  RFC 9136 (https://datatracker.ietf.org/doc/html/rfc9136.html) for data center"},{"line_number":39,"context_line":"  environments "},{"line_number":40,"context_line":"- VRF: Virtual Routing and Forwarding, a virtual routing and forwarding domain"},{"line_number":41,"context_line":"  that can span a wide area network.  Linux models this as a Linux table and"},{"line_number":42,"context_line":"  uses the term VRF synonymously with Linux table."}],"source_content_type":"text/x-rst","patch_set":1,"id":"12174e10_56b79b22","line":39,"in_reply_to":"bf35574a_9ab03d91","updated":"2026-04-03 14:10:54.000000000","message":"Acknowledged","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":108,"context_line":"Installation Requirements"},{"line_number":109,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Neutron installation must include creation of a VxLAN tunnel terminated at "},{"line_number":112,"context_line":"an IP address of the host that is reachable globally.  A reasonable IP"},{"line_number":113,"context_line":"address is the host\u0027s loopback address.  The VxLAN tunnel uses the default"},{"line_number":114,"context_line":"VxLAN UDP port 4789.  The VxLAN tunnel is created as follows."},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"4f043917_968d7c79","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":53},"updated":"2026-03-26 17:51:13.000000000","message":"I thought the tunnel itself is created by OVN. Or does the sentence mean we need to provide an IP to the installer and then the installer sets the ovn-evpn-local-ip ?","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":true,"context_lines":[{"line_number":108,"context_line":"Installation Requirements"},{"line_number":109,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Neutron installation must include creation of a VxLAN tunnel terminated at "},{"line_number":112,"context_line":"an IP address of the host that is reachable globally.  A reasonable IP"},{"line_number":113,"context_line":"address is the host\u0027s loopback address.  The VxLAN tunnel uses the default"},{"line_number":114,"context_line":"VxLAN UDP port 4789.  The VxLAN tunnel is created as follows."},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"d44655d9_e8f3db3e","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":53},"in_reply_to":"4f043917_968d7c79","updated":"2026-04-03 14:10:54.000000000","message":"OVN only provides the mechanisms to create the tunnel but does not create it.  This sentence means that Neutron software installation on a compute node includes creating a VxLAN tunnel, whose local IP is one of the host\u0027s IPs that is reachable.  The way to create this VxLAN tunnel is using the snippet of code.  This sentence applies to any tool used to install Neutron.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2e03a866978a1700670147b3abfa7c63399d84aa","unresolved":false,"context_lines":[{"line_number":108,"context_line":"Installation Requirements"},{"line_number":109,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"Neutron installation must include creation of a VxLAN tunnel terminated at "},{"line_number":112,"context_line":"an IP address of the host that is reachable globally.  A reasonable IP"},{"line_number":113,"context_line":"address is the host\u0027s loopback address.  The VxLAN tunnel uses the default"},{"line_number":114,"context_line":"VxLAN UDP port 4789.  The VxLAN tunnel is created as follows."},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"cd54a293_5d477fdb","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":53},"in_reply_to":"d44655d9_e8f3db3e","updated":"2026-04-06 21:19:01.000000000","message":"Done","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":150,"context_line":"the EVPN.  The changes occur in three parts."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* The first part is to modify Neutron CLI to allow a user to create a router"},{"line_number":153,"context_line":"  associated with an EVPN."},{"line_number":154,"context_line":"* The second part is to extend Neutron BGP Service Plugin such that the newly"},{"line_number":155,"context_line":"  created router associated with an EVPN has a corresponding OVN logical"},{"line_number":156,"context_line":"  router associated with a Linux table, using OVN\u0027s dynamic-routing-vrf-id"}],"source_content_type":"text/x-rst","patch_set":1,"id":"2a1c1501_e734b57c","line":153,"updated":"2026-03-26 17:51:13.000000000","message":"nit: I think the first and second part need to be swapped, API first and then test the client against the API change.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":true,"context_lines":[{"line_number":150,"context_line":"the EVPN.  The changes occur in three parts."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* The first part is to modify Neutron CLI to allow a user to create a router"},{"line_number":153,"context_line":"  associated with an EVPN."},{"line_number":154,"context_line":"* The second part is to extend Neutron BGP Service Plugin such that the newly"},{"line_number":155,"context_line":"  created router associated with an EVPN has a corresponding OVN logical"},{"line_number":156,"context_line":"  router associated with a Linux table, using OVN\u0027s dynamic-routing-vrf-id"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b6f31511_fca8ae96","line":153,"in_reply_to":"2a1c1501_e734b57c","updated":"2026-04-03 14:10:54.000000000","message":"I did not have the sequence of implementation in mind and only meant for this to describe the changes roughly grouped by functionality, e.g., the API, the service plugin, and the agent extension.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2e03a866978a1700670147b3abfa7c63399d84aa","unresolved":false,"context_lines":[{"line_number":150,"context_line":"the EVPN.  The changes occur in three parts."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* The first part is to modify Neutron CLI to allow a user to create a router"},{"line_number":153,"context_line":"  associated with an EVPN."},{"line_number":154,"context_line":"* The second part is to extend Neutron BGP Service Plugin such that the newly"},{"line_number":155,"context_line":"  created router associated with an EVPN has a corresponding OVN logical"},{"line_number":156,"context_line":"  router associated with a Linux table, using OVN\u0027s dynamic-routing-vrf-id"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c13370c9_dfd33f39","line":153,"in_reply_to":"b6f31511_fca8ae96","updated":"2026-04-06 21:19:01.000000000","message":"Patch 3 has some edits to clarify that different parts of Neutron are identified rather than the order of implementation.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":156,"context_line":"  router associated with a Linux table, using OVN\u0027s dynamic-routing-vrf-id"},{"line_number":157,"context_line":"  setting."},{"line_number":158,"context_line":"* The third part is to extend Neutron OVN agent BGP extension to provision"},{"line_number":159,"context_line":"  each computer or network node, with necessary changes to Linux setup and FRR"},{"line_number":160,"context_line":"  configuration."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Figure 1 provides an overview of the objects and configurations that Neutron"}],"source_content_type":"text/x-rst","patch_set":1,"id":"a9b943b3_8ade4799","line":159,"range":{"start_line":159,"start_character":7,"end_line":159,"end_character":15},"updated":"2026-03-26 17:51:13.000000000","message":"nit: typo `compute`","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":156,"context_line":"  router associated with a Linux table, using OVN\u0027s dynamic-routing-vrf-id"},{"line_number":157,"context_line":"  setting."},{"line_number":158,"context_line":"* The third part is to extend Neutron OVN agent BGP extension to provision"},{"line_number":159,"context_line":"  each computer or network node, with necessary changes to Linux setup and FRR"},{"line_number":160,"context_line":"  configuration."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"Figure 1 provides an overview of the objects and configurations that Neutron"}],"source_content_type":"text/x-rst","patch_set":1,"id":"8f11b15d_27901bea","line":159,"range":{"start_line":159,"start_character":7,"end_line":159,"end_character":15},"in_reply_to":"a9b943b3_8ade4799","updated":"2026-04-03 14:10:54.000000000","message":"Acknowledged","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"24e198245df010494564ef7d0227fdfe6460e35b","unresolved":true,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":".. code-block:: text"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    openstack router create --vni [vni] \u003crouter_name\u003e"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"REST API request body:"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"c42b9e9c_87b70a05","line":184,"range":{"start_line":184,"start_character":27,"end_line":184,"end_character":39},"updated":"2026-03-31 14:03:24.000000000","message":"Is the purpose of passing the vni to the router to singal upfront \"your going to bridge this vni number?\" At that point, might it make more sense to say \"I need to create a flavor of router which is special for x network which has a pre-established vni number?\" The latter would be less risk, imho.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2e03a866978a1700670147b3abfa7c63399d84aa","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":".. code-block:: text"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    openstack router create --vni [vni] \u003crouter_name\u003e"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"REST API request body:"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"e9dc3e96_efe768ab","line":184,"range":{"start_line":184,"start_character":27,"end_line":184,"end_character":39},"in_reply_to":"c42b9e9c_87b70a05","updated":"2026-04-06 21:19:01.000000000","message":"As discussed, Patch 3 clarifies that the option is only available at time of creation.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":204,"context_line":"            \"vni\": 10000,"},{"line_number":205,"context_line":"        }"},{"line_number":206,"context_line":"    }"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Changes to BGP Service Plugin"},{"line_number":209,"context_line":"-----------------------------"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"289446d5_72368c24","line":207,"updated":"2026-03-26 17:51:13.000000000","message":"I think we need another section here with the changes made to the DB model because we need to store the VNI value somewhere.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            \"vni\": 10000,"},{"line_number":205,"context_line":"        }"},{"line_number":206,"context_line":"    }"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Changes to BGP Service Plugin"},{"line_number":209,"context_line":"-----------------------------"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7207c99b_e29af614","line":207,"in_reply_to":"289446d5_72368c24","updated":"2026-04-03 14:10:54.000000000","message":"Acknowledged","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Changes to BGP Service Plugin"},{"line_number":209,"context_line":"-----------------------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The VNI option during Neutron router creation causes the BGP Service Plugin"},{"line_number":212,"context_line":"to set options related to EVPN on the resulting OVN logical router."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"The option dynamic-routing is necessary to enable participation of dynamic"},{"line_number":215,"context_line":"routing outside of OVN.  The dynamic routing is provided by FRR BGP in this"}],"source_content_type":"text/x-rst","patch_set":1,"id":"d0b9d566_67eabfda","line":212,"range":{"start_line":210,"start_character":0,"end_line":212,"end_character":67},"updated":"2026-03-26 17:51:13.000000000","message":"This piece is problematic because the BGP Service Plugin runs only as a part of periodic worker process. In other words, the BGP Service Plugin does not see the API requests but monitors only the changes made to the OVN database.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2e03a866978a1700670147b3abfa7c63399d84aa","unresolved":false,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Changes to BGP Service Plugin"},{"line_number":209,"context_line":"-----------------------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The VNI option during Neutron router creation causes the BGP Service Plugin"},{"line_number":212,"context_line":"to set options related to EVPN on the resulting OVN logical router."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"The option dynamic-routing is necessary to enable participation of dynamic"},{"line_number":215,"context_line":"routing outside of OVN.  The dynamic routing is provided by FRR BGP in this"}],"source_content_type":"text/x-rst","patch_set":1,"id":"87d29152_2f98fb1c","line":212,"range":{"start_line":210,"start_character":0,"end_line":212,"end_character":67},"in_reply_to":"c38e9d08_43bc19b1","updated":"2026-04-06 21:19:01.000000000","message":"Done","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":true,"context_lines":[{"line_number":207,"context_line":""},{"line_number":208,"context_line":"Changes to BGP Service Plugin"},{"line_number":209,"context_line":"-----------------------------"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"The VNI option during Neutron router creation causes the BGP Service Plugin"},{"line_number":212,"context_line":"to set options related to EVPN on the resulting OVN logical router."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"The option dynamic-routing is necessary to enable participation of dynamic"},{"line_number":215,"context_line":"routing outside of OVN.  The dynamic routing is provided by FRR BGP in this"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c38e9d08_43bc19b1","line":212,"range":{"start_line":210,"start_character":0,"end_line":212,"end_character":67},"in_reply_to":"d0b9d566_67eabfda","updated":"2026-04-03 14:10:54.000000000","message":"I will incorporate some API extension details similar to what is already in place with trunk implementation.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":212,"context_line":"to set options related to EVPN on the resulting OVN logical router."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"The option dynamic-routing is necessary to enable participation of dynamic"},{"line_number":215,"context_line":"routing outside of OVN.  The dynamic routing is provided by FRR BGP in this"},{"line_number":216,"context_line":"case."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"The option dynamic-routing-vrf-id associates an OVN logical router with a"},{"line_number":219,"context_line":"Linux table with the ID specified by dynamic-routing-vrf-id.  Neutron sets"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b77b64b7_d253f904","line":216,"range":{"start_line":215,"start_character":25,"end_line":216,"end_character":5},"updated":"2026-03-26 17:51:13.000000000","message":"As the original core BGP service plugin was routing suite agnostic and only the agent extension was FRR specific, shall we also treat this work as such? I know there were companies that wanted to use Bird as their routing suite.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":true,"context_lines":[{"line_number":212,"context_line":"to set options related to EVPN on the resulting OVN logical router."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"The option dynamic-routing is necessary to enable participation of dynamic"},{"line_number":215,"context_line":"routing outside of OVN.  The dynamic routing is provided by FRR BGP in this"},{"line_number":216,"context_line":"case."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"The option dynamic-routing-vrf-id associates an OVN logical router with a"},{"line_number":219,"context_line":"Linux table with the ID specified by dynamic-routing-vrf-id.  Neutron sets"}],"source_content_type":"text/x-rst","patch_set":1,"id":"dea98f23_58842ce8","line":216,"range":{"start_line":215,"start_character":25,"end_line":216,"end_character":5},"in_reply_to":"b77b64b7_d253f904","updated":"2026-04-03 14:10:54.000000000","message":"Yes, it should be.  Only the changes in the agent extension is specific to FRR.  Do you have suggestions on potential text to use instead?","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2e03a866978a1700670147b3abfa7c63399d84aa","unresolved":false,"context_lines":[{"line_number":212,"context_line":"to set options related to EVPN on the resulting OVN logical router."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"The option dynamic-routing is necessary to enable participation of dynamic"},{"line_number":215,"context_line":"routing outside of OVN.  The dynamic routing is provided by FRR BGP in this"},{"line_number":216,"context_line":"case."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"The option dynamic-routing-vrf-id associates an OVN logical router with a"},{"line_number":219,"context_line":"Linux table with the ID specified by dynamic-routing-vrf-id.  Neutron sets"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c4ebaa2b_ef76c6b9","line":216,"range":{"start_line":215,"start_character":25,"end_line":216,"end_character":5},"in_reply_to":"dea98f23_58842ce8","updated":"2026-04-06 21:19:01.000000000","message":"I added a paragraph discussing the implementation dependency. It is actually OVN\u0027s implementation that has certain expectations, specifically the logical switch with dynamic-routing-bridge-ifname, dynamic-routing-vxlan-ifname, and dynamic-routing-advertise-ifname.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":296,"context_line":"OVN agent BGP extension should monitor Linux table creations on the compute"},{"line_number":297,"context_line":"and network nodes."},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"Neutron OVN agent BGP extension detects the creation of Linux tables by"},{"line_number":300,"context_line":"monitoring netlink RTM_NEWLINK messages using pyroute2.  In particular,"},{"line_number":301,"context_line":"Neutron OVN agent BGP extension should monitor for the creation of Linux"},{"line_number":302,"context_line":"tables with the name evpnvrf-$VNI.  When a new Linux table with the name"},{"line_number":303,"context_line":"evpnvrf-$VNI is detected on a compute or network node, Neutron OVN agent BGP"}],"source_content_type":"text/x-rst","patch_set":1,"id":"cdee451c_2893adf9","line":300,"range":{"start_line":299,"start_character":0,"end_line":300,"end_character":55},"updated":"2026-03-26 17:51:13.000000000","message":"It feels to me like this needs a design of some generic netlink monitor in Neutron. Maybe we need to expand on the implementation of this as well?","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":296,"context_line":"OVN agent BGP extension should monitor Linux table creations on the compute"},{"line_number":297,"context_line":"and network nodes."},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"Neutron OVN agent BGP extension detects the creation of Linux tables by"},{"line_number":300,"context_line":"monitoring netlink RTM_NEWLINK messages using pyroute2.  In particular,"},{"line_number":301,"context_line":"Neutron OVN agent BGP extension should monitor for the creation of Linux"},{"line_number":302,"context_line":"tables with the name evpnvrf-$VNI.  When a new Linux table with the name"},{"line_number":303,"context_line":"evpnvrf-$VNI is detected on a compute or network node, Neutron OVN agent BGP"}],"source_content_type":"text/x-rst","patch_set":1,"id":"aba83e96_390eb16d","line":300,"range":{"start_line":299,"start_character":0,"end_line":300,"end_character":55},"in_reply_to":"cdee451c_2893adf9","updated":"2026-04-03 14:10:54.000000000","message":"Acknowledged","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":334,"context_line":"    ip link set lo-$VNI master br-$VNI"},{"line_number":335,"context_line":"    ip link set lo-$VNI up"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"After the pre-requisite Linux environment is ready, the OVN agent BGP"},{"line_number":338,"context_line":"extension provisions FRR to begin to advertise BGP EVPN Type-5 routes.  This"},{"line_number":339,"context_line":"spec supports only IPv4 routes."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":".. code-block:: text"}],"source_content_type":"text/x-rst","patch_set":1,"id":"b4eb0a6b_8c6a7050","line":338,"range":{"start_line":337,"start_character":0,"end_line":338,"end_character":70},"updated":"2026-03-26 17:51:13.000000000","message":"I think similarly to the netlink monitoring, we need a section here for some structure that would handle the changes to the FRR.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    ip link set lo-$VNI master br-$VNI"},{"line_number":335,"context_line":"    ip link set lo-$VNI up"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"After the pre-requisite Linux environment is ready, the OVN agent BGP"},{"line_number":338,"context_line":"extension provisions FRR to begin to advertise BGP EVPN Type-5 routes.  This"},{"line_number":339,"context_line":"spec supports only IPv4 routes."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":".. code-block:: text"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c2881960_f89d46c1","line":338,"range":{"start_line":337,"start_character":0,"end_line":338,"end_character":70},"in_reply_to":"b4eb0a6b_8c6a7050","updated":"2026-04-03 14:10:54.000000000","message":"Acknowledged","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    ip link set lo-$VNI master br-$VNI"},{"line_number":335,"context_line":"    ip link set lo-$VNI up"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"After the pre-requisite Linux environment is ready, the OVN agent BGP"},{"line_number":338,"context_line":"extension provisions FRR to begin to advertise BGP EVPN Type-5 routes.  This"},{"line_number":339,"context_line":"spec supports only IPv4 routes."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":".. code-block:: text"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6c9fd078_12ce891d","line":338,"range":{"start_line":337,"start_character":0,"end_line":338,"end_character":70},"in_reply_to":"c2881960_f89d46c1","updated":"2026-04-23 16:44:09.000000000","message":"will add a few more details about netlink monitoring","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fe7c4ad9106299f08b59ae173ec9d1046f813a84","unresolved":true,"context_lines":[{"line_number":374,"context_line":"routable floating IPs."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":".. figure:: ../../images/core-bgp-evpn-co-existence.jpg"},{"line_number":377,"context_line":"   :target: ../../_images/core-bgp-evpn-co-existence.jpg"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"   Figure 2: Initial OVN BGP integration and the EVPN capability co-existing"},{"line_number":380,"context_line":"   largely in parallel."}],"source_content_type":"text/x-rst","patch_set":1,"id":"d67231a7_01cd1ae9","line":377,"updated":"2026-03-26 17:51:13.000000000","message":"I do not understand the connections between ls-public1 and br-bgp-0, and the same ls-public-3 to br-bgp-1. The link between eth0/eth1 and the leaf switch is only a peer-to-peer connection on a /30 network. I don\u0027t think bridging ls-public-1 provider network to the network between a compute and a leaf switch would work, or am I missing something?","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2e03a866978a1700670147b3abfa7c63399d84aa","unresolved":false,"context_lines":[{"line_number":374,"context_line":"routable floating IPs."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":".. figure:: ../../images/core-bgp-evpn-co-existence.jpg"},{"line_number":377,"context_line":"   :target: ../../_images/core-bgp-evpn-co-existence.jpg"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"   Figure 2: Initial OVN BGP integration and the EVPN capability co-existing"},{"line_number":380,"context_line":"   largely in parallel."}],"source_content_type":"text/x-rst","patch_set":1,"id":"8082526f_68ca3fef","line":377,"in_reply_to":"6920742e_7d309bc3","updated":"2026-04-06 21:19:01.000000000","message":"Done","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":true,"context_lines":[{"line_number":374,"context_line":"routable floating IPs."},{"line_number":375,"context_line":""},{"line_number":376,"context_line":".. figure:: ../../images/core-bgp-evpn-co-existence.jpg"},{"line_number":377,"context_line":"   :target: ../../_images/core-bgp-evpn-co-existence.jpg"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"   Figure 2: Initial OVN BGP integration and the EVPN capability co-existing"},{"line_number":380,"context_line":"   largely in parallel."}],"source_content_type":"text/x-rst","patch_set":1,"id":"6920742e_7d309bc3","line":377,"in_reply_to":"d67231a7_01cd1ae9","updated":"2026-04-03 14:10:54.000000000","message":"OVN\u0027s implementation for EVPN actually does not require the localnet port at all, so the connections between ls-public-1 and br-bgp-0 and between ls-public-3 to br-bgp-1 are just incidental, part of creating the provider network.  EVPN packets use the vxlan tunnel instead.\n\nWhat EVPN really needs is to bind the logical router to a chassis to trigger OVN\u0027s dynamic-routing-maintain-vrf\u003dtrue setting to create a Linux VRF in the chassis.  The next revision will include a cleaner topology.","commit_id":"9edfcbfcb73bd401bc0bf77ce8a0e561600e4b90"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"28a315d2a3444dada6ba99b7d3ad60882b73d110","unresolved":true,"context_lines":[{"line_number":26,"context_line":"configure OVN with new options.  It is also necessary to extend the OVN agent"},{"line_number":27,"context_line":"BGP extension to prepare the Linux environment for FRR EVPN as well as to"},{"line_number":28,"context_line":"enable EVPN in FRR on each compute/network node."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Acronyms used in this spec"},{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1895b4da_bf4ed11c","line":29,"updated":"2026-04-09 21:26:58.000000000","message":"An idea: write out a simple use case this problem description addresses, because everyone is going to read the \"problem\", what are we solving with type-5 routes? i.e. is it just single network cloud to cloud peering for tunneling.... or something else?","commit_id":"5cbeb84e25549034c079b42047045032c4e48708"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2474fe79c27cc49c78fcb85ebcca9c74d528f66c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"configure OVN with new options.  It is also necessary to extend the OVN agent"},{"line_number":27,"context_line":"BGP extension to prepare the Linux environment for FRR EVPN as well as to"},{"line_number":28,"context_line":"enable EVPN in FRR on each compute/network node."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Acronyms used in this spec"},{"line_number":31,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"2f16da20_5ba7f068","line":29,"in_reply_to":"1895b4da_bf4ed11c","updated":"2026-04-10 14:04:18.000000000","message":"Acknowledged","commit_id":"5cbeb84e25549034c079b42047045032c4e48708"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"f109368e73d76c404add9747503e047bdeb252a6","unresolved":true,"context_lines":[{"line_number":145,"context_line":"--------------"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"The spec proposes to extend Neutron BGP Service Plugin and Neutron OVN agent"},{"line_number":148,"context_line":"BGP extension to create use new settings in OVN 26.03 to create an EVPN and"},{"line_number":149,"context_line":"to provision the compute and network nodes where to advertise routes within"},{"line_number":150,"context_line":"the EVPN.  The changes occur in three parts."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"8da31651_5309b653","line":148,"range":{"start_line":148,"start_character":14,"end_line":148,"end_character":28},"updated":"2026-04-01 00:13:54.000000000","message":"nit: to \"create use\" new ..., suggest `to use new settings` or `to utilize new settings` ?","commit_id":"5cbeb84e25549034c079b42047045032c4e48708"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":145,"context_line":"--------------"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"The spec proposes to extend Neutron BGP Service Plugin and Neutron OVN agent"},{"line_number":148,"context_line":"BGP extension to create use new settings in OVN 26.03 to create an EVPN and"},{"line_number":149,"context_line":"to provision the compute and network nodes where to advertise routes within"},{"line_number":150,"context_line":"the EVPN.  The changes occur in three parts."},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"a3f6c0dc_1e30098b","line":148,"range":{"start_line":148,"start_character":14,"end_line":148,"end_character":28},"in_reply_to":"8da31651_5309b653","updated":"2026-04-03 14:10:54.000000000","message":"Acknowledged","commit_id":"5cbeb84e25549034c079b42047045032c4e48708"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"f109368e73d76c404add9747503e047bdeb252a6","unresolved":true,"context_lines":[{"line_number":172,"context_line":"---------------------------"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":175,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":176,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":177,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":178,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":2,"id":"19f32bd9_1a96ce26","line":175,"range":{"start_line":175,"start_character":0,"end_line":175,"end_character":19},"updated":"2026-04-01 00:13:54.000000000","message":"Does this need to be per-external gateway?\nIs it not possible to have one router with attachment to different external gateway networks - which would be separate EVPN/VNI?\n\nReading further down, I see OVN options `options:dynamic-routing-vrf-id\u003d$VNI` for logical router in OVN. If that can only be 1 then I guess this is fine.","commit_id":"5cbeb84e25549034c079b42047045032c4e48708"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"4a7543f8c2732e092487ea3465052d6cdbc7aeb5","unresolved":false,"context_lines":[{"line_number":172,"context_line":"---------------------------"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":175,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":176,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":177,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":178,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5119153c_adc52b58","line":175,"range":{"start_line":175,"start_character":0,"end_line":175,"end_character":19},"in_reply_to":"19f32bd9_1a96ce26","updated":"2026-04-03 14:10:54.000000000","message":"OVN logical router is not VRF aware, so each logical router can only be associated with one Linux table ID.","commit_id":"5cbeb84e25549034c079b42047045032c4e48708"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":true,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code:: text"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    BGP_AS \u003d 64999"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Installation Requirements"},{"line_number":129,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"a94786cd_c592af82","line":126,"range":{"start_line":126,"start_character":4,"end_line":126,"end_character":10},"updated":"2026-04-09 15:11:37.000000000","message":"configuration variables usually are defined in lower case","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code:: text"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    BGP_AS \u003d 64999"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"Installation Requirements"},{"line_number":129,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1ef32797_a1d6fee0","line":126,"range":{"start_line":126,"start_character":4,"end_line":126,"end_character":10},"in_reply_to":"a94786cd_c592af82","updated":"2026-04-09 19:12:15.000000000","message":"Acknowledged","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":true,"context_lines":[{"line_number":150,"context_line":"    router bgp $BGP_AS"},{"line_number":151,"context_line":"     ! Enable EVPN address family"},{"line_number":152,"context_line":"     address-family l2vpn evpn"},{"line_number":153,"context_line":"      ! $PEER_IP should already be part of the IPv4 unicast address family"},{"line_number":154,"context_line":"      ! configuration that is not included in this snippet"},{"line_number":155,"context_line":"      neighbor $PEER_IP activate"},{"line_number":156,"context_line":"      advertise-all-vni"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f1f49488_a6789388","line":153,"range":{"start_line":153,"start_character":9,"end_line":153,"end_character":16},"updated":"2026-04-09 15:11:37.000000000","message":"There is this PEER_IP defined? Where is used? This IPv4 address, in what network/broadcast domain should be located?","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"28a315d2a3444dada6ba99b7d3ad60882b73d110","unresolved":true,"context_lines":[{"line_number":150,"context_line":"    router bgp $BGP_AS"},{"line_number":151,"context_line":"     ! Enable EVPN address family"},{"line_number":152,"context_line":"     address-family l2vpn evpn"},{"line_number":153,"context_line":"      ! $PEER_IP should already be part of the IPv4 unicast address family"},{"line_number":154,"context_line":"      ! configuration that is not included in this snippet"},{"line_number":155,"context_line":"      neighbor $PEER_IP activate"},{"line_number":156,"context_line":"      advertise-all-vni"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7f0efe93_f2787a17","line":153,"range":{"start_line":153,"start_character":9,"end_line":153,"end_character":16},"in_reply_to":"06f91b6d_8812c78b","updated":"2026-04-09 21:26:58.000000000","message":"An interesting question, and this is totally PTG worthy, but “should” the goal be to eventually not require the cloud operator to also manage FRR configuration at that detail?","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"851011c10f0c16e7d3d60d839a87f42e0d2b6d3a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"    router bgp $BGP_AS"},{"line_number":151,"context_line":"     ! Enable EVPN address family"},{"line_number":152,"context_line":"     address-family l2vpn evpn"},{"line_number":153,"context_line":"      ! $PEER_IP should already be part of the IPv4 unicast address family"},{"line_number":154,"context_line":"      ! configuration that is not included in this snippet"},{"line_number":155,"context_line":"      neighbor $PEER_IP activate"},{"line_number":156,"context_line":"      advertise-all-vni"}],"source_content_type":"text/x-rst","patch_set":3,"id":"cd835e92_68d49e98","line":153,"range":{"start_line":153,"start_character":9,"end_line":153,"end_character":16},"in_reply_to":"4a2fd3b5_80bd276d","updated":"2026-04-10 20:36:59.000000000","message":"Done","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2474fe79c27cc49c78fcb85ebcca9c74d528f66c","unresolved":true,"context_lines":[{"line_number":150,"context_line":"    router bgp $BGP_AS"},{"line_number":151,"context_line":"     ! Enable EVPN address family"},{"line_number":152,"context_line":"     address-family l2vpn evpn"},{"line_number":153,"context_line":"      ! $PEER_IP should already be part of the IPv4 unicast address family"},{"line_number":154,"context_line":"      ! configuration that is not included in this snippet"},{"line_number":155,"context_line":"      neighbor $PEER_IP activate"},{"line_number":156,"context_line":"      advertise-all-vni"}],"source_content_type":"text/x-rst","patch_set":3,"id":"4a2fd3b5_80bd276d","line":153,"range":{"start_line":153,"start_character":9,"end_line":153,"end_character":16},"in_reply_to":"7f0efe93_f2787a17","updated":"2026-04-10 14:04:18.000000000","message":"The unnumbered approach that @libosvar@redhat.com mentioned is meant to auto-discover BGP peers.  However, that still requires at least identifying the interfaces to use to discover BGP peers.  These BGP interfaces probably could and even should be derived from some other configuration file.  So, I think it\u0027s a worthy goal to reduce the amount of manual configurations.  I don\u0027t know which part of the OpenStack ecosystem should do it.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2ab327c1c4e1564559f87ffc8f469f9f406379c2","unresolved":true,"context_lines":[{"line_number":150,"context_line":"    router bgp $BGP_AS"},{"line_number":151,"context_line":"     ! Enable EVPN address family"},{"line_number":152,"context_line":"     address-family l2vpn evpn"},{"line_number":153,"context_line":"      ! $PEER_IP should already be part of the IPv4 unicast address family"},{"line_number":154,"context_line":"      ! configuration that is not included in this snippet"},{"line_number":155,"context_line":"      neighbor $PEER_IP activate"},{"line_number":156,"context_line":"      advertise-all-vni"}],"source_content_type":"text/x-rst","patch_set":3,"id":"734ef10b_579bb414","line":153,"range":{"start_line":153,"start_character":9,"end_line":153,"end_character":16},"in_reply_to":"f1f49488_a6789388","updated":"2026-04-09 16:48:10.000000000","message":"I think this is an implementation detail that is just a matter of FRR config being used. That said, I\u0027d go with unnumbered by default and avoid having peer IPs completely.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":true,"context_lines":[{"line_number":150,"context_line":"    router bgp $BGP_AS"},{"line_number":151,"context_line":"     ! Enable EVPN address family"},{"line_number":152,"context_line":"     address-family l2vpn evpn"},{"line_number":153,"context_line":"      ! $PEER_IP should already be part of the IPv4 unicast address family"},{"line_number":154,"context_line":"      ! configuration that is not included in this snippet"},{"line_number":155,"context_line":"      neighbor $PEER_IP activate"},{"line_number":156,"context_line":"      advertise-all-vni"}],"source_content_type":"text/x-rst","patch_set":3,"id":"06f91b6d_8812c78b","line":153,"range":{"start_line":153,"start_character":9,"end_line":153,"end_character":16},"in_reply_to":"f1f49488_a6789388","updated":"2026-04-09 19:12:15.000000000","message":"PEER_IP is not defined.  The cloud administrator is required to provide an initial FRR configuration file that specifies the BGP peer(s), so this variable $PEER_IP here is just a placeholder for the real peer information in the initial FRR configuration.  Unlike $bgp_as, Neutron does not require the peer information at runtime.  In the next revision, I\u0027ll use \u003cpeer\u003e to indicate an actual value rather than implying this is a variable.\n\nAs an aside, core BGP\u0027s initial FRR specifies the interface to the peers, so in the next revision, I\u0027ll change this sample configuration file to use interfaces.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":true,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":".. code-block:: text"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    POST /v2.0/routers"},{"line_number":235,"context_line":"    {"},{"line_number":236,"context_line":"        \"router\": {"},{"line_number":237,"context_line":"            \"name\": \"evpn-router-10000\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"717e7f59_254688b4","line":234,"range":{"start_line":234,"start_character":4,"end_line":234,"end_character":22},"updated":"2026-04-09 15:11:37.000000000","message":"Just asking: not the router API nor the network one have PUT commands. It is assumed that a router or a network created with/without VNI will be as is forever. It won\u0027t be possible to change the router VNI neither.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":true,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":".. code-block:: text"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    POST /v2.0/routers"},{"line_number":235,"context_line":"    {"},{"line_number":236,"context_line":"        \"router\": {"},{"line_number":237,"context_line":"            \"name\": \"evpn-router-10000\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"f1440e49_7ce7240e","line":234,"range":{"start_line":234,"start_character":4,"end_line":234,"end_character":22},"in_reply_to":"23ae1a9e_9a40b305","updated":"2026-04-17 20:59:47.000000000","message":"Maybe for the initial release we can leave it such that `l3vni` flag is only allowed during create. But we should leave the door open to maybe later at `openstack router set / unset --l3vni operation`. I think it will be a bad user experience to only allow it at creation. A user would have to delete the network / router if they forgot to include --l3vni","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":true,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":".. code-block:: text"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    POST /v2.0/routers"},{"line_number":235,"context_line":"    {"},{"line_number":236,"context_line":"        \"router\": {"},{"line_number":237,"context_line":"            \"name\": \"evpn-router-10000\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"23ae1a9e_9a40b305","line":234,"range":{"start_line":234,"start_character":4,"end_line":234,"end_character":22},"in_reply_to":"717e7f59_254688b4","updated":"2026-04-09 19:12:15.000000000","message":"Yes, the new desired behavior is that a Neutron router or a Neutron network is created with --l3vni or without --l3vni.  The VNI setting cannot be changed, added, or deleted after the initial creation.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":".. code-block:: text"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    POST /v2.0/routers"},{"line_number":235,"context_line":"    {"},{"line_number":236,"context_line":"        \"router\": {"},{"line_number":237,"context_line":"            \"name\": \"evpn-router-10000\","}],"source_content_type":"text/x-rst","patch_set":3,"id":"22d278b6_cecc6386","line":234,"range":{"start_line":234,"start_character":4,"end_line":234,"end_character":22},"in_reply_to":"f1440e49_7ce7240e","updated":"2026-04-19 16:46:09.000000000","message":"Acknowledged","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b835feecd240c4554f4dc65e9635da010d646787","unresolved":true,"context_lines":[{"line_number":315,"context_line":"                            primary_key\u003dTrue)"},{"line_number":316,"context_line":"        l3vni \u003d Column(Boolean, nullable\u003dFalse, default\u003dFalse)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Following the trunk service plugin, BGP Service Plugin subscribes to router"},{"line_number":319,"context_line":"and network lifecycle events to process the l3vni attribute:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3587c831_9fe897d4","line":318,"range":{"start_line":318,"start_character":0,"end_line":318,"end_character":34},"updated":"2026-04-07 15:44:28.000000000","message":"I don\u0027t think we should be mentioning the trunk plugin here, it was more like an inspiration to understand how the service plugin extension interacts with other components.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"851011c10f0c16e7d3d60d839a87f42e0d2b6d3a","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                            primary_key\u003dTrue)"},{"line_number":316,"context_line":"        l3vni \u003d Column(Boolean, nullable\u003dFalse, default\u003dFalse)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Following the trunk service plugin, BGP Service Plugin subscribes to router"},{"line_number":319,"context_line":"and network lifecycle events to process the l3vni attribute:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":3,"id":"a7f545d2_9c419186","line":318,"range":{"start_line":318,"start_character":0,"end_line":318,"end_character":34},"in_reply_to":"08ee420d_a4d34470","updated":"2026-04-10 20:36:59.000000000","message":"Done","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"28a7813529b2c16d4209ca501cac51e164281e08","unresolved":true,"context_lines":[{"line_number":315,"context_line":"                            primary_key\u003dTrue)"},{"line_number":316,"context_line":"        l3vni \u003d Column(Boolean, nullable\u003dFalse, default\u003dFalse)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"Following the trunk service plugin, BGP Service Plugin subscribes to router"},{"line_number":319,"context_line":"and network lifecycle events to process the l3vni attribute:"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":3,"id":"08ee420d_a4d34470","line":318,"range":{"start_line":318,"start_character":0,"end_line":318,"end_character":34},"in_reply_to":"3587c831_9fe897d4","updated":"2026-04-07 15:52:36.000000000","message":"ok.  I will remove the reference.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b835feecd240c4554f4dc65e9635da010d646787","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"aeea08e5_d9b7bd84","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"updated":"2026-04-07 15:44:28.000000000","message":"Does it mean we will implement an API extension for networks to be able to specify VNI on a logical switch (is this the Type-2 EVPN use case?). And we will automatically create an LS per each router with VNI?","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"2254e25d_84cba99e","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"12bbc961_aff419f3","updated":"2026-04-17 20:59:47.000000000","message":"Maybe explicitly calling out that `ls-evpn-$VNI`(naming convention TBD) is automatically created by neutron when a user creates a EVPN router.\nSo this operation `openstack router create --l3vni router1` in openstack will perform following operations in OVN:\n- Creates router1 LRP and sets dynamic-routing-* attributes\n- Creates ls-evpn-$VNI LS, sets dynamic-routing-* attributes and connects it to the router 1.\n- Then sets dynamic-routing-* on the LRP that was created whem the router1 and ls-evpn-$VNI\n\nTake a look at figure 2, router-1, ls-evpn-10 for illustration","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"0d57574c_11b8225f","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"2254e25d_84cba99e","updated":"2026-04-19 16:46:09.000000000","message":"Added suggested text.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4fcf75dacf9b1808146c39fe37fb88b398c2131a","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f55a99f0_04aea037","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"4a4b193f_bbeef01f","updated":"2026-04-09 16:53:24.000000000","message":"Marking as unresolved","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"1467303ee0c867f54d5561ca904852a86d3b61b1","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"85b2d672_d7facf55","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"85a2be3e_79eabe03","updated":"2026-04-09 20:11:37.000000000","message":"ls-evpn-$VNI is the logical switch representing the L3 VNI.  (I probably should name it ls-l3evpn-$VNI.)  Neutron silently creates ls-evpn-$VNI when processing \"openstack router create exampleRouter1 --l3vni\".  This is the logical switch where Neutron sets dynamic-routing-vni, dynamic-routing-bridge-ifname, dynamic-routing-vxlan-ifname, and dynamic-routing-advertise-ifname.  Assume that the VNI value, auto-generated when exampleRouter1 was created, is the number 100 in this example.\n\nexampleNetwork1 created with --l3vni means that Neutron will set dynamic-routing-redistribute\u003dconnected-as-host on the LRP connecting exampleRouter1 to exampleNetwork1, and exampleNetwork1\u0027s prefixes will be advertised in VNI 100.\n\nOne constraint I didn\u0027t mention is that each dynamic-routing-vni setting must have a unique VNI number.  In this example, exampleNetwork1 does not have dynamic-routing-vni setting.  If exampleNetwork1 has the dynamic-routing-vni\u003d100 setting, then it will not be possible to add another Neutron network into VNI 100.  For L3 VNI, instead of setting dynamic-routing-vni on tenant networks, Neutron creates a logical switch, ls-evpn-100, one that is independent of tenant networks, to set dynamic-routing-vni\u003d100, to support more than one Neutron networks within an L3 VNI.\n\n(Each L3 VNI may consist of multiple networks, since it\u0027s a routed EVPN.  L2 VNI is different and each L2 VNI represents only one network.  If we support L2 VNI in the future, then each Neutron network is assigned its unique VNI.)","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"28a315d2a3444dada6ba99b7d3ad60882b73d110","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"8a16a169_73719c9d","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"85b2d672_d7facf55","updated":"2026-04-09 21:26:58.000000000","message":"As a side note, for the L2VNI case, it should just be ideally what neutron allocates should match out to the remote side, because if your making actual attachments for Type-2 routes, your going to need it to be the same, or at least to be understood by remote consumers. In such cases, your *more likely* attaching to physical servers and their directly attached networks then a remote cloud.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"2474fe79c27cc49c78fcb85ebcca9c74d528f66c","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"12bbc961_aff419f3","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"8a16a169_73719c9d","updated":"2026-04-10 14:04:18.000000000","message":"@juliaashleykreger@gmail.com ACK.  For L3 VNI, the \"openstack router create --l3vni VNI \u003crouterName\u003e\" option is meant for the use case where the L3 VNI must match the VNI at the remote site.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"28a7813529b2c16d4209ca501cac51e164281e08","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"cbc21b0e_7db85bcc","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"aeea08e5_d9b7bd84","updated":"2026-04-07 15:52:36.000000000","message":"Yes, an API extension for networks is necessary and Neutron creates an LS for each router with VNI.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a1551faaec3ab60b815d5188b03b9d8353ec1d76","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"f8f8146b_1b036ee3","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"ba5220a9_1a1ab817","updated":"2026-04-07 19:20:53.000000000","message":"Right :) that\u0027s why I asked as it\u0027s not clear to me when will we want to do it manually as opposed to let Neutron handle the LS creation. Given that the spec if Type-5 route support - is the manually passed \"--vni\" value for the Neutron Networks still in the scope of this spec?","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"4ab511b8ded09de2519100fe56b47f0e816bdae0","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"85a2be3e_79eabe03","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"cb587b63_d4081ee5","updated":"2026-04-09 19:23:38.000000000","message":"So according to the sentence - running the 3 commands above results in having 3 LSs:\n1. exampleNetwork1 with vni\n2. exampleNetwork2 without vni\nand 3. ls-evpn-$VNI with vni of the router vni\n\nand I\u0027m puzzled what is exampleNetwork1 and ls-evpn-$VNI for in such case","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"5782296615e24b8ae76552ff2a5715719435b1dd","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"ba5220a9_1a1ab817","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"cbc21b0e_7db85bcc","updated":"2026-04-07 19:10:22.000000000","message":"around line 327.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":true,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"cb587b63_d4081ee5","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"f55a99f0_04aea037","updated":"2026-04-09 19:12:15.000000000","message":"I was thinking of a use case like this:\nopenstack router create exampleRouter1 --l3vni\nopenstack network create exampleNetwork1 --l3vni\nopenstack network create exampleNetwork2\n\nBoth exampleNetwork1 and exampleNetwork2 are connected to exampleRouter1, an EVPN router.  Only the prefixes in exampleNetwork1 are advertised within the EVPN.  The prefixes in exampleNetwork2 are not advertised.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"b37de2e7e7760c081d5657f706a36dded2628bf3","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fc8b81b6_5f40361f","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"f8f8146b_1b036ee3","updated":"2026-04-07 21:23:21.000000000","message":"For router, there are three possibilities.  Options 1 and 2 are new.  Neutron auto-generates the vni in option 1, and the corresponding logical router gets assigned the auto-generated vni.  The administrator specifies the vni in option 2, and the corresponding router gets assigned the administrator-specified vni.\n1. openstack router create --l3vni\n2. openstack router create --l3vni \u003cvni\u003e\n3. openstack router create\n\nFor network, there are two possibilities.  Option 1 is new, to indicate that the prefixes in this network should be advertised within the attached L3 EVPN router to be advertised in the router\u0027s vni.  The network inherits the router\u0027s vni and this network\u0027s prefixes are advertised in the router\u0027s vni.\n1. openstack network create --l3vni\n2. openstack network create\n\nIn the future, if we support Type-2 routes, then I expect a new CLI such as \"openstack network create --l2vni \u003cvni\u003e\" to indicate that the network is advertised in the specified L2 vni.\n\nIf this discussion is clear, I\u0027ll add it to the spec in the next revision.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2ab327c1c4e1564559f87ffc8f469f9f406379c2","unresolved":false,"context_lines":[{"line_number":402,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":403,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":406,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":407,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [10]_,"},{"line_number":408,"context_line":"dynamic-routing-bridge-ifname [11]_, dynamic-routing-vxlan-ifname [12]_, and"}],"source_content_type":"text/x-rst","patch_set":3,"id":"4a4b193f_bbeef01f","line":405,"range":{"start_line":405,"start_character":0,"end_line":405,"end_character":70},"in_reply_to":"fc8b81b6_5f40361f","updated":"2026-04-09 16:48:10.000000000","message":"I didn\u0027t mean to differentiate the l2vni vs l3vni - but that there are two ways how an OVS LS with a vni specified is created.\n1. With \"openstack network create\"\n2. With \"openstack router create\"\n\nBoth actions result in an existing LS with a VNI configured. It is not clear to me why do we have two ways and what would be the use cases for each (or rather the manual explicit `network create` action).","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":true,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"BGP Service Plugin follows the same principle as floating IP advertisement to"},{"line_number":445,"context_line":"use the option dynamic-routing-maintain-vrf [9]_ on the logical router port to"},{"line_number":446,"context_line":"trigger OVN to manage the Linux VRF associated with the EVPN.  Thus, an"},{"line_number":447,"context_line":"HA_Chassis_Group consisting of all chassis is necessary to bind"},{"line_number":448,"context_line":"lrp-to-evpn-$VNI.  The option dynamic-routing-maintain-vrf and a bound"},{"line_number":449,"context_line":"lrp-to-evpn-$VNI together trigger OVN to create a Linux VRF, the route table"},{"line_number":450,"context_line":"with ID $VNI specified in the logical router earlier."}],"source_content_type":"text/x-rst","patch_set":3,"id":"f7a8f415_d94be6de","line":447,"range":{"start_line":446,"start_character":63,"end_line":447,"end_character":42},"updated":"2026-04-09 15:11:37.000000000","message":"Sorry, I don\u0027t understand this and I don\u0027t want to have additional logic, if possible, handling the `HA_Chassis_Group`. The LRP `lrp-to-evpn-$VNI` will be an external gateway port in this `Logical_Router`, right? If so, you can use the OVN L3 scheduler.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"28a315d2a3444dada6ba99b7d3ad60882b73d110","unresolved":true,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"BGP Service Plugin follows the same principle as floating IP advertisement to"},{"line_number":445,"context_line":"use the option dynamic-routing-maintain-vrf [9]_ on the logical router port to"},{"line_number":446,"context_line":"trigger OVN to manage the Linux VRF associated with the EVPN.  Thus, an"},{"line_number":447,"context_line":"HA_Chassis_Group consisting of all chassis is necessary to bind"},{"line_number":448,"context_line":"lrp-to-evpn-$VNI.  The option dynamic-routing-maintain-vrf and a bound"},{"line_number":449,"context_line":"lrp-to-evpn-$VNI together trigger OVN to create a Linux VRF, the route table"},{"line_number":450,"context_line":"with ID $VNI specified in the logical router earlier."}],"source_content_type":"text/x-rst","patch_set":3,"id":"be3abbc0_d016b2f9","line":447,"range":{"start_line":446,"start_character":63,"end_line":447,"end_character":42},"in_reply_to":"b34a8803_1b0e6fe5","updated":"2026-04-09 21:26:58.000000000","message":"I suspect there is some cross-mingling of concepts at play, because while it feels like it should be handled like l3 traffic, your kind of dealing with a hybrid mix of traffic and it would also be weird to try and shove it into a single box. The key aspect is connection into the chassis group bound traffic to enable efficient traffic flows, and where should the choke point be. Looking at it through that weird lens which results, I suspect that treating it all as routed traffic could equally be problematic. The traffic could be going north, but in a sense it could also be going west/east at the same time to adjacent hardware in some cases, or to entirely far off clouds.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"86ebf59ec34ff102f69c25d7e63d4e2a00d2ac64","unresolved":true,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"BGP Service Plugin follows the same principle as floating IP advertisement to"},{"line_number":445,"context_line":"use the option dynamic-routing-maintain-vrf [9]_ on the logical router port to"},{"line_number":446,"context_line":"trigger OVN to manage the Linux VRF associated with the EVPN.  Thus, an"},{"line_number":447,"context_line":"HA_Chassis_Group consisting of all chassis is necessary to bind"},{"line_number":448,"context_line":"lrp-to-evpn-$VNI.  The option dynamic-routing-maintain-vrf and a bound"},{"line_number":449,"context_line":"lrp-to-evpn-$VNI together trigger OVN to create a Linux VRF, the route table"},{"line_number":450,"context_line":"with ID $VNI specified in the logical router earlier."}],"source_content_type":"text/x-rst","patch_set":3,"id":"f2ae5f4c_6eec0938","line":447,"range":{"start_line":446,"start_character":63,"end_line":447,"end_character":42},"in_reply_to":"be3abbc0_d016b2f9","updated":"2026-04-10 10:21:32.000000000","message":"The OVN L3 scheduler mechanism only works for GW LRPs. In this case, as you mentioned, these BGP LRs won\u0027t have external (GW) ports so the OVN L3 scheduler will do nothing.\n\nAlso we don\u0027t use `HA_Chassis_Group` for `Logical_Router` in 18.0 but we do now (*) in master branch. I really need urgently to check if the current BGP feature can interact somehow with the OVN L3 scheduler or if the current events (for example, chassis changes) modify the existing `HA_Chassis_Group` associated to the `Logical_Router`. That could be disastrous for BGP because we expect the `HA_Chassis_Group` to be bound to the specific compute node only.\n\n(*) feature almost merged","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"BGP Service Plugin follows the same principle as floating IP advertisement to"},{"line_number":445,"context_line":"use the option dynamic-routing-maintain-vrf [9]_ on the logical router port to"},{"line_number":446,"context_line":"trigger OVN to manage the Linux VRF associated with the EVPN.  Thus, an"},{"line_number":447,"context_line":"HA_Chassis_Group consisting of all chassis is necessary to bind"},{"line_number":448,"context_line":"lrp-to-evpn-$VNI.  The option dynamic-routing-maintain-vrf and a bound"},{"line_number":449,"context_line":"lrp-to-evpn-$VNI together trigger OVN to create a Linux VRF, the route table"},{"line_number":450,"context_line":"with ID $VNI specified in the logical router earlier."}],"source_content_type":"text/x-rst","patch_set":3,"id":"b82d99e0_45066733","line":447,"range":{"start_line":446,"start_character":63,"end_line":447,"end_character":42},"in_reply_to":"f2ae5f4c_6eec0938","updated":"2026-04-19 16:46:09.000000000","message":"Done","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":true,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"BGP Service Plugin follows the same principle as floating IP advertisement to"},{"line_number":445,"context_line":"use the option dynamic-routing-maintain-vrf [9]_ on the logical router port to"},{"line_number":446,"context_line":"trigger OVN to manage the Linux VRF associated with the EVPN.  Thus, an"},{"line_number":447,"context_line":"HA_Chassis_Group consisting of all chassis is necessary to bind"},{"line_number":448,"context_line":"lrp-to-evpn-$VNI.  The option dynamic-routing-maintain-vrf and a bound"},{"line_number":449,"context_line":"lrp-to-evpn-$VNI together trigger OVN to create a Linux VRF, the route table"},{"line_number":450,"context_line":"with ID $VNI specified in the logical router earlier."}],"source_content_type":"text/x-rst","patch_set":3,"id":"b34a8803_1b0e6fe5","line":447,"range":{"start_line":446,"start_character":63,"end_line":447,"end_character":42},"in_reply_to":"f7a8f415_d94be6de","updated":"2026-04-09 19:12:15.000000000","message":"A Neutron router created using \"openstack router create --l3vni\", does not have an external gateway, even though the router needs one logical router port to be bound to a chassis.  (This Neutron router doesn\u0027t have an external gateway, since its traffic should go out the vxlan tunnel, so the vxlan tunnel is sort of the EVPN router\u0027s gateway.)\n\nSetting an ha_chassis_group on a logical_router_port forces the logical_router_port to be bound to a chassis, which together with the option \"dynamic-routing-maintain-vrf\" triggers OVN to creates a Linux VRF on the chassis where the logical_router_port is bound.\n\nThis use of ha_chassi_group is similar to the existing OVN BGP integration, where there is one ha_chassis_group per chassis to cause OVN to create a Linux VRF created on each chassis.\n\nThe current spec supports only centralized routing and so it is only necessary for one chassis to have a Linux VRF.\n\nSince the EVPN Neutron router does not and should not use --external-gateway and does not have an external gateway, is OVN L3 scheduler still the right mechanism to use?","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":true,"context_lines":[{"line_number":469,"context_line":".. code-block:: text"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    # Options to set on the logical router port"},{"line_number":472,"context_line":"    options:dynamic-routing-redistribute\u003dconnected-as-host"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"Changes to OVN Agent BGP Extension"},{"line_number":475,"context_line":"----------------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"0a7fc4ac_e9b6e8e8","line":472,"range":{"start_line":472,"start_character":4,"end_line":472,"end_character":58},"updated":"2026-04-09 15:11:37.000000000","message":"Help me to understand this: is this `Logical_Router` the local router \"assigned\" to a specific compute node? Same as in BGP. For example, in https://review.opendev.org/c/openstack/neutron-specs/+/982256/3/images/evpn-core-bgp-co-existence.jpg, the lr-bgp-chassis-1. In this LR and this graph, what is the external network?","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":true,"context_lines":[{"line_number":469,"context_line":".. code-block:: text"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    # Options to set on the logical router port"},{"line_number":472,"context_line":"    options:dynamic-routing-redistribute\u003dconnected-as-host"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"Changes to OVN Agent BGP Extension"},{"line_number":475,"context_line":"----------------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"cd34f16b_816a950f","line":472,"range":{"start_line":472,"start_character":4,"end_line":472,"end_character":58},"in_reply_to":"0a7fc4ac_e9b6e8e8","updated":"2026-04-09 19:12:15.000000000","message":"The logical router is the one corresponding to the Neutron router created using \"openstack router create --l3vni exampleRouter1\".  For ease of explanation later, assume that the corresponding logical router is lr-exampleRouter1.\n\nAfter that, the typical flow is to create a Neutron network, add a Neutron subnet to the network, and then add the Neutron subnet to exampleRouter1.  To advertise this Neutron network\u0027s host routes, the Neutron network much be created using \"openstack network create --l3vni exampleNetwork1\".  For ease of explanation later, assume that the corresponding logical network is lr-exampleNetwork1.\n\nWhen a Neutron subnet on exampleNetwork1 is added to exampleRouter1, the logical router port connecting lr-exampleRouter1 and lr-exampleNetwork1\u0027 should have the option \"dynamic-routing-redistribute\" set as shown in line 472.","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":469,"context_line":".. code-block:: text"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    # Options to set on the logical router port"},{"line_number":472,"context_line":"    options:dynamic-routing-redistribute\u003dconnected-as-host"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"Changes to OVN Agent BGP Extension"},{"line_number":475,"context_line":"----------------------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"d7b6c9a9_415a9705","line":472,"range":{"start_line":472,"start_character":4,"end_line":472,"end_character":58},"in_reply_to":"cd34f16b_816a950f","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2a8a00094be513529c0e78114fb82b6a9e52ba65","unresolved":true,"context_lines":[{"line_number":701,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":".. [1] Planned OVN 26.03 BGP EVPN Type-5 route advertisement,"},{"line_number":704,"context_line":"   https://github.com/ovn-org/ovn/blob/11ac424d501b528d5913a04b4ff3e33d0ed27d2c/tests/multinode.at#L4224"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":".. [2] Neutron BGP Service Plugin,"},{"line_number":707,"context_line":"   https://github.com/openstack/neutron/tree/master/neutron/services/bgp"}],"source_content_type":"text/x-rst","patch_set":3,"id":"17f83068_4f756e27","line":704,"range":{"start_line":704,"start_character":3,"end_line":704,"end_character":104},"updated":"2026-04-09 15:11:37.000000000","message":"I would use the patch series reference: https://patchwork.ozlabs.org/project/ovn/list/?series\u003d477639\u0026state\u003d%2A\u0026archive\u003dboth","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bc90aef157caf3fa0d965311b69481fac4b481c7","unresolved":false,"context_lines":[{"line_number":701,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":".. [1] Planned OVN 26.03 BGP EVPN Type-5 route advertisement,"},{"line_number":704,"context_line":"   https://github.com/ovn-org/ovn/blob/11ac424d501b528d5913a04b4ff3e33d0ed27d2c/tests/multinode.at#L4224"},{"line_number":705,"context_line":""},{"line_number":706,"context_line":".. [2] Neutron BGP Service Plugin,"},{"line_number":707,"context_line":"   https://github.com/openstack/neutron/tree/master/neutron/services/bgp"}],"source_content_type":"text/x-rst","patch_set":3,"id":"337f3ee6_01fe01a0","line":704,"range":{"start_line":704,"start_character":3,"end_line":704,"end_character":104},"in_reply_to":"17f83068_4f756e27","updated":"2026-04-09 19:12:15.000000000","message":"Acknowledged","commit_id":"1c2e5dafd6abb8c82af4b053207e1872ed994ae5"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a0f4e972357091fa9c4e6c7549876418af7cea68","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. code:: text"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    bgp_as \u003d 64999"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Installation Requirements"},{"line_number":142,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1755c818_fbc2be28","line":139,"updated":"2026-04-17 08:47:09.000000000","message":"is this in \"ovn\" section of the config file? Or some other? Maybe it is worth to mention it here too, wdyt?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"91f2d0c31c7c1173f8d9c6ded8c529e523aef91e","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. code:: text"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    bgp_as \u003d 64999"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Installation Requirements"},{"line_number":142,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"62b06660_035221f3","line":139,"in_reply_to":"1755c818_fbc2be28","updated":"2026-04-17 15:29:21.000000000","message":"This should be in /etc/neutron/plugins/ml2/ovn_agent.ini .  Are lines 134-135 enough or would you suggest other text?  I\u0027m happy to add.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"9068f0d2bcabd7f2a214718198cbf2f215960ec7","unresolved":true,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. code:: text"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    bgp_as \u003d 64999"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Installation Requirements"},{"line_number":142,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c4a5a20b_b6a879ec","line":139,"in_reply_to":"62b06660_035221f3","updated":"2026-04-20 06:45:49.000000000","message":"We don\u0027t have a convention for this in the OVN agent, but it could be nice to have the specific configuration parameters inside a section named the same as the extension, in this case `ovn_bgp`","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":".. code:: text"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    bgp_as \u003d 64999"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Installation Requirements"},{"line_number":142,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d60d2cfd_749e248b","line":139,"in_reply_to":"c4a5a20b_b6a879ec","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":true,"context_lines":[{"line_number":189,"context_line":"* Modifications to extend BGP Service Plugin to process the new"},{"line_number":190,"context_line":"  configurations, storing necessary EVPN information and creating OVN logical"},{"line_number":191,"context_line":"  topology for EVPN."},{"line_number":192,"context_line":"* Modifications to extend Neutron OVN agent BGP extension to provision"},{"line_number":193,"context_line":"  each compute or network node, with necessary changes to Linux setup and FRR"},{"line_number":194,"context_line":"  configuration."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Figure 2 provides an overview of the objects and configurations that Neutron"},{"line_number":197,"context_line":"provisions to realize EVPN Type-5 advertisements."}],"source_content_type":"text/x-rst","patch_set":5,"id":"b1b8e8cf_9ae54b54","line":194,"range":{"start_line":192,"start_character":2,"end_line":194,"end_character":16},"updated":"2026-04-17 20:59:47.000000000","message":"I am not sure if this bullet point includes this or if we should call out following in a new bullet point.\nWe need to implement an extension which will handle frr configuration changes as well as linux interfaces(`br-10`, `vxlan-10` and `lo-10` as shown in figure2) required for frr.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"* Modifications to extend BGP Service Plugin to process the new"},{"line_number":190,"context_line":"  configurations, storing necessary EVPN information and creating OVN logical"},{"line_number":191,"context_line":"  topology for EVPN."},{"line_number":192,"context_line":"* Modifications to extend Neutron OVN agent BGP extension to provision"},{"line_number":193,"context_line":"  each compute or network node, with necessary changes to Linux setup and FRR"},{"line_number":194,"context_line":"  configuration."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Figure 2 provides an overview of the objects and configurations that Neutron"},{"line_number":197,"context_line":"provisions to realize EVPN Type-5 advertisements."}],"source_content_type":"text/x-rst","patch_set":5,"id":"8cff1ba5_e72498f1","line":194,"range":{"start_line":192,"start_character":2,"end_line":194,"end_character":16},"in_reply_to":"9c3fc74d_50a86d32","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":true,"context_lines":[{"line_number":189,"context_line":"* Modifications to extend BGP Service Plugin to process the new"},{"line_number":190,"context_line":"  configurations, storing necessary EVPN information and creating OVN logical"},{"line_number":191,"context_line":"  topology for EVPN."},{"line_number":192,"context_line":"* Modifications to extend Neutron OVN agent BGP extension to provision"},{"line_number":193,"context_line":"  each compute or network node, with necessary changes to Linux setup and FRR"},{"line_number":194,"context_line":"  configuration."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"Figure 2 provides an overview of the objects and configurations that Neutron"},{"line_number":197,"context_line":"provisions to realize EVPN Type-5 advertisements."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9c3fc74d_50a86d32","line":194,"range":{"start_line":192,"start_character":2,"end_line":194,"end_character":16},"in_reply_to":"b1b8e8cf_9ae54b54","updated":"2026-04-19 16:46:09.000000000","message":"Latest update still left the section more high-level but has minor edits that are more specifically about interface additions.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":26359,"name":"Andrew Austin","email":"aaustin@redhat.com","username":"aaustin"},"change_message_id":"c2cd527d9e184ea39d2356408b9ce2857d8c8112","unresolved":true,"context_lines":[{"line_number":210,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":211,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":214,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":215,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":216,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":217,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":5,"id":"d0bc1513_8d5adb89","line":214,"range":{"start_line":213,"start_character":56,"end_line":214,"end_character":60},"updated":"2026-04-17 07:17:19.000000000","message":"How will this be controllable by the operator to prevent tenant users from allocating their own VNIs in environments where that needs to be strictly controlled to match external infrastructure and/or prevent tenants from inadvertently connecting themselves to another tenant\u0027s routing table?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":26359,"name":"Andrew Austin","email":"aaustin@redhat.com","username":"aaustin"},"change_message_id":"2ad7eef2d2ca00fe5f0f8c8f3603aa9d538d67ac","unresolved":true,"context_lines":[{"line_number":210,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":211,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":214,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":215,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":216,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":217,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5dcf75a1_3a360766","line":214,"range":{"start_line":213,"start_character":56,"end_line":214,"end_character":60},"in_reply_to":"3ac4ea80_9650b179","updated":"2026-04-17 15:49:22.000000000","message":"I would suggest that the default be admin-only for both calls and operators can open it up if they want. Alternatively, that the pool of auto-assign VNIs be configurable and be able to be an empty range to prevent automatic assignment by users.\n\nWhat is the expected use case for auto-assignment anyway? I don\u0027t see how this can be useful without VNI coordination with some external infrastructure or another cloud with its own Neutron that won\u0027t have knowledge of the local assignemnts.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"91f2d0c31c7c1173f8d9c6ded8c529e523aef91e","unresolved":true,"context_lines":[{"line_number":210,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":211,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":214,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":215,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":216,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":217,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ac4ea80_9650b179","line":214,"range":{"start_line":213,"start_character":56,"end_line":214,"end_character":60},"in_reply_to":"495e20dd_f7e2d92c","updated":"2026-04-17 15:29:21.000000000","message":"Yes, there are two versions, \"openstack router create --l3vni\" and \"openstack router create --l3vni \u003cVNI\u003e\".  \nThe first command is available to all users and Neutron auto-generates a non-conflicting VNI.  The second version is only for a cloud administrator and the cloud administrator can assign a specific number.  I would expect Neutron would still reject a conflicting VNI.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"28e33a4494bdc6ec098a0f1eb1f05802dce762bf","unresolved":true,"context_lines":[{"line_number":210,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":211,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":214,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":215,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":216,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":217,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ec9e4126_b3edae08","line":214,"range":{"start_line":213,"start_character":56,"end_line":214,"end_character":60},"in_reply_to":"5dcf75a1_3a360766","updated":"2026-04-17 17:08:28.000000000","message":"It is unrealistic to expect different data centers to allocate VNIs from the same VNI space.\n\nData center gateways should map data center specific VNIs to globally unique VNIs, much like this: https://www.ietf.org/rfc/rfc9014.html#name-integrated-interconnect-sol","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a0f4e972357091fa9c4e6c7549876418af7cea68","unresolved":true,"context_lines":[{"line_number":210,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":211,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":214,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":215,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":216,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":217,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":5,"id":"495e20dd_f7e2d92c","line":214,"range":{"start_line":213,"start_character":56,"end_line":214,"end_character":60},"in_reply_to":"d0bc1513_8d5adb89","updated":"2026-04-17 08:47:09.000000000","message":"We have API RBAC policies where we can limit access to each attribute, both to read and write them. So those new attributes can be \"admin only\" in the policy.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":false,"context_lines":[{"line_number":210,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":211,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"Neutron router creation CLI and REST API are updated to allow a user to create"},{"line_number":214,"context_line":"a router associated with an EVPN identified by the VNI value.  Neutron"},{"line_number":215,"context_line":"automatically assigns the VNI value, much like VLAN IDs.  The cloud"},{"line_number":216,"context_line":"administrator may specify a VNI for the EVPN when creating the router.  In"},{"line_number":217,"context_line":"both cases, Neutron ensures that each router has a unique VNI."}],"source_content_type":"text/x-rst","patch_set":5,"id":"11c174c7_d110b0f4","line":214,"range":{"start_line":213,"start_character":56,"end_line":214,"end_character":60},"in_reply_to":"ec9e4126_b3edae08","updated":"2026-04-19 16:46:09.000000000","message":"Added VNI range for auto-assignment and changed both versions of the command to only be available to the cloud administrator by default.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a0f4e972357091fa9c4e6c7549876418af7cea68","unresolved":true,"context_lines":[{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"router\": {"},{"line_number":251,"context_line":"            \"name\": \"evpn-router-10000\","},{"line_number":252,"context_line":"            \"l3vni\": 10000"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"cc89bef6_547016c4","line":252,"updated":"2026-04-17 08:47:09.000000000","message":"I\u0027m not sure if it is good idea to mix types of that new attribute and accept both boolean and integers. If you want to have one option, maybe instead of \"true\" we should have something like \"auto\" as default value? Or split it into 2 attributes maybe","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e21bc6b3c7728b40020408746d23d2188e2634c4","unresolved":true,"context_lines":[{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"router\": {"},{"line_number":251,"context_line":"            \"name\": \"evpn-router-10000\","},{"line_number":252,"context_line":"            \"l3vni\": 10000"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"e05690bc_7cccbce4","line":252,"in_reply_to":"98e822e1_ceaf7d66","updated":"2026-04-20 13:25:11.000000000","message":"I agree with Slawek. I think it would make sense to use \"auto\" or a number 1-2^24 for the CLI but the API should be integer. I\u0027d suggest to use number 0 - as it is not included in the VXLAN VNI number range, therefore the CLI accepts `auto` as an argument but sends `0` to the API.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":true,"context_lines":[{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"router\": {"},{"line_number":251,"context_line":"            \"name\": \"evpn-router-10000\","},{"line_number":252,"context_line":"            \"l3vni\": 10000"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"98e822e1_ceaf7d66","line":252,"in_reply_to":"c0d52634_acf2e817","updated":"2026-04-19 16:46:09.000000000","message":"Latest update uses the approach\nopenstack router create --l3vni auto|\u003cVNI\u003e","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"91f2d0c31c7c1173f8d9c6ded8c529e523aef91e","unresolved":true,"context_lines":[{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"router\": {"},{"line_number":251,"context_line":"            \"name\": \"evpn-router-10000\","},{"line_number":252,"context_line":"            \"l3vni\": 10000"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"c0d52634_acf2e817","line":252,"in_reply_to":"cc89bef6_547016c4","updated":"2026-04-17 15:29:21.000000000","message":"Is this acceptable?\n\nopenstack router create --l3vni auto\nopenstack router create --l3vni \u003cVNI\u003e","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":249,"context_line":"    {"},{"line_number":250,"context_line":"        \"router\": {"},{"line_number":251,"context_line":"            \"name\": \"evpn-router-10000\","},{"line_number":252,"context_line":"            \"l3vni\": 10000"},{"line_number":253,"context_line":"        }"},{"line_number":254,"context_line":"    }"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"59d65eda_ae504c06","line":252,"in_reply_to":"e05690bc_7cccbce4","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"045c980eceb39ab721781c0759e1cfc2fefe13a5","unresolved":true,"context_lines":[{"line_number":289,"context_line":"    {"},{"line_number":290,"context_line":"        \"network\": {"},{"line_number":291,"context_line":"            \"name\": \"expose-network\","},{"line_number":292,"context_line":"            \"advertise\": true"},{"line_number":293,"context_line":"        }"},{"line_number":294,"context_line":"    }"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"ed8d781c_845d2f43","line":292,"updated":"2026-04-11 03:23:31.000000000","message":"in the futher, if we want the network to support Type-2 route,how to extand this value?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"af51aada2998adf35e65b0f1e5bd821864c5fb8e","unresolved":true,"context_lines":[{"line_number":289,"context_line":"    {"},{"line_number":290,"context_line":"        \"network\": {"},{"line_number":291,"context_line":"            \"name\": \"expose-network\","},{"line_number":292,"context_line":"            \"advertise\": true"},{"line_number":293,"context_line":"        }"},{"line_number":294,"context_line":"    }"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"37b44156_ebae7ab8","line":292,"in_reply_to":"0ce9333b_82469e3f","updated":"2026-04-13 03:39:22.000000000","message":"No, I would not expect it to need --advertised.  I would expect Neutron to simply set on the corresponding OVN logical switch the option \"dynamic-routing-redistribute\u003dfdb,ip\", at the same time when Neutron sets dynamic-routing-vni\u003d$VNI.\n\nhttps://github.com/ovn-org/ovn/blob/4bab00d57e5cc3d8d7a6670660fc8f6d63c2bdf9/ovn-nb.xml#L987\nhttps://github.com/ovn-org/ovn/blob/c55f5643c12bb617dae0eb5955f20ad43d7414ba/tests/multinode.at#L3729-L3733","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"d24e66ec6065dfd591605f0335480741aff1453e","unresolved":false,"context_lines":[{"line_number":289,"context_line":"    {"},{"line_number":290,"context_line":"        \"network\": {"},{"line_number":291,"context_line":"            \"name\": \"expose-network\","},{"line_number":292,"context_line":"            \"advertise\": true"},{"line_number":293,"context_line":"        }"},{"line_number":294,"context_line":"    }"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"3b6bc334_e2649211","line":292,"in_reply_to":"37b44156_ebae7ab8","updated":"2026-04-13 09:17:43.000000000","message":"Done","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"eb2c3683fa4b9f045e473521ed96dc47364c7b28","unresolved":true,"context_lines":[{"line_number":289,"context_line":"    {"},{"line_number":290,"context_line":"        \"network\": {"},{"line_number":291,"context_line":"            \"name\": \"expose-network\","},{"line_number":292,"context_line":"            \"advertise\": true"},{"line_number":293,"context_line":"        }"},{"line_number":294,"context_line":"    }"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"0ce9333b_82469e3f","line":292,"in_reply_to":"d5aaed04_a9431393","updated":"2026-04-13 02:58:30.000000000","message":"got it, thx. another question, if network has l2vni, it still need value \"advertise\"?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"406feeca7a9632078bc411abf2958eec5a188d05","unresolved":true,"context_lines":[{"line_number":289,"context_line":"    {"},{"line_number":290,"context_line":"        \"network\": {"},{"line_number":291,"context_line":"            \"name\": \"expose-network\","},{"line_number":292,"context_line":"            \"advertise\": true"},{"line_number":293,"context_line":"        }"},{"line_number":294,"context_line":"    }"},{"line_number":295,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"d5aaed04_a9431393","line":292,"in_reply_to":"ed8d781c_845d2f43","updated":"2026-04-12 01:14:14.000000000","message":"In the future, for Type-2 route, it could be \"openstack network create --l2vni [\u003cVNI\u003e] \u003cnetworkName\u003e\", similar to the proposed changes to \"openstack router create --l3vni [\u003cVNI\u003e] \u003crouterName\u003e\".","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a0f4e972357091fa9c4e6c7549876418af7cea68","unresolved":true,"context_lines":[{"line_number":303,"context_line":"            \"name\": \"expose-network\","},{"line_number":304,"context_line":"            \"advertise\": true,"},{"line_number":305,"context_line":"            ..."},{"line_number":306,"context_line":"        }"},{"line_number":307,"context_line":"    }"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"BGP service plugin includes the following two new database models."}],"source_content_type":"text/x-rst","patch_set":5,"id":"6334359e_72c97abe","line":306,"updated":"2026-04-17 08:47:09.000000000","message":"today network can be set as \"external\". Does it makes sense to allow setting \"advertize\u003dtrue\" on such external network or should be mention that those 2 will be mutually exclusive?","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"91f2d0c31c7c1173f8d9c6ded8c529e523aef91e","unresolved":true,"context_lines":[{"line_number":303,"context_line":"            \"name\": \"expose-network\","},{"line_number":304,"context_line":"            \"advertise\": true,"},{"line_number":305,"context_line":"            ..."},{"line_number":306,"context_line":"        }"},{"line_number":307,"context_line":"    }"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"BGP service plugin includes the following two new database models."}],"source_content_type":"text/x-rst","patch_set":5,"id":"f582cadc_dbb5d3da","line":306,"in_reply_to":"6334359e_72c97abe","updated":"2026-04-17 15:29:21.000000000","message":"There is a use case to advertise prefixes even on external networks.  So, we do want to allow --advertise also for external networks.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            \"name\": \"expose-network\","},{"line_number":304,"context_line":"            \"advertise\": true,"},{"line_number":305,"context_line":"            ..."},{"line_number":306,"context_line":"        }"},{"line_number":307,"context_line":"    }"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"BGP service plugin includes the following two new database models."}],"source_content_type":"text/x-rst","patch_set":5,"id":"2fe2c24a_2863613f","line":306,"in_reply_to":"f582cadc_dbb5d3da","updated":"2026-04-23 16:44:09.000000000","message":"Patch 8 removes the --advertise option from \"openstack network create\".  The option is now in \"openstackrouter add subnet --advertise-host\"","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":true,"context_lines":[{"line_number":400,"context_line":"while Linux route table ID is a 32-bit integer.  Neutron exposes VNI"},{"line_number":401,"context_line":"configuration rather than the Linux table ID configuration, because the VNI"},{"line_number":402,"context_line":"is a VxLAN network-wide external value while Linux table ID is a value local"},{"line_number":403,"context_line":"only to a Linux host.  When Neutron assigns a Neutron router a VNI, Neutron"},{"line_number":404,"context_line":"ensures that the numbers 10 and 42 are not used, since table 10 is already"},{"line_number":405,"context_line":"used by the initial OVN BGP integration for learned routes and table 42 is"},{"line_number":406,"context_line":"already used for routes to be advertised."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"The option dynamic-routing-vrf-name [9]_ is an optional setting to use a more"},{"line_number":409,"context_line":"distinctive name as the name of the Linux table for better visualization"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8a92e12b_4da2534e","line":406,"range":{"start_line":403,"start_character":22,"end_line":406,"end_character":41},"updated":"2026-04-17 20:59:47.000000000","message":"nit: We need to create explicit message for this and display it to the user","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":400,"context_line":"while Linux route table ID is a 32-bit integer.  Neutron exposes VNI"},{"line_number":401,"context_line":"configuration rather than the Linux table ID configuration, because the VNI"},{"line_number":402,"context_line":"is a VxLAN network-wide external value while Linux table ID is a value local"},{"line_number":403,"context_line":"only to a Linux host.  When Neutron assigns a Neutron router a VNI, Neutron"},{"line_number":404,"context_line":"ensures that the numbers 10 and 42 are not used, since table 10 is already"},{"line_number":405,"context_line":"used by the initial OVN BGP integration for learned routes and table 42 is"},{"line_number":406,"context_line":"already used for routes to be advertised."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"The option dynamic-routing-vrf-name [9]_ is an optional setting to use a more"},{"line_number":409,"context_line":"distinctive name as the name of the Linux table for better visualization"}],"source_content_type":"text/x-rst","patch_set":5,"id":"d9faa968_1ba828af","line":406,"range":{"start_line":403,"start_character":22,"end_line":406,"end_character":41},"in_reply_to":"626abf0d_b972db91","updated":"2026-04-23 16:44:09.000000000","message":"It turns out that the comment is about providing an error message and not failing silently if the request VNI cannot be honored.  Will add this in the next patch.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":true,"context_lines":[{"line_number":400,"context_line":"while Linux route table ID is a 32-bit integer.  Neutron exposes VNI"},{"line_number":401,"context_line":"configuration rather than the Linux table ID configuration, because the VNI"},{"line_number":402,"context_line":"is a VxLAN network-wide external value while Linux table ID is a value local"},{"line_number":403,"context_line":"only to a Linux host.  When Neutron assigns a Neutron router a VNI, Neutron"},{"line_number":404,"context_line":"ensures that the numbers 10 and 42 are not used, since table 10 is already"},{"line_number":405,"context_line":"used by the initial OVN BGP integration for learned routes and table 42 is"},{"line_number":406,"context_line":"already used for routes to be advertised."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"The option dynamic-routing-vrf-name [9]_ is an optional setting to use a more"},{"line_number":409,"context_line":"distinctive name as the name of the Linux table for better visualization"}],"source_content_type":"text/x-rst","patch_set":5,"id":"626abf0d_b972db91","line":406,"range":{"start_line":403,"start_character":22,"end_line":406,"end_character":41},"in_reply_to":"8a92e12b_4da2534e","updated":"2026-04-19 16:46:09.000000000","message":"Latest update added in the CLI/API section about helper text to inform user of values taken by the system.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":true,"context_lines":[{"line_number":405,"context_line":"used by the initial OVN BGP integration for learned routes and table 42 is"},{"line_number":406,"context_line":"already used for routes to be advertised."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"The option dynamic-routing-vrf-name [9]_ is an optional setting to use a more"},{"line_number":409,"context_line":"distinctive name as the name of the Linux table for better visualization"},{"line_number":410,"context_line":"during debugging."},{"line_number":411,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"84cd6a15_2a9c4119","line":408,"range":{"start_line":408,"start_character":11,"end_line":408,"end_character":35},"updated":"2026-04-17 20:59:47.000000000","message":"Just asking, should the `dynamic-routing-vrf-name` go to neutron.conf for user to be able to configure it? At the moment I cant think of any use case\n\nIf not, should neutron initiate some naming convention? For example, `\u003cfirst few characters of router ID\u003e-vrf-\u003cvni\u003e`","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":true,"context_lines":[{"line_number":405,"context_line":"used by the initial OVN BGP integration for learned routes and table 42 is"},{"line_number":406,"context_line":"already used for routes to be advertised."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"The option dynamic-routing-vrf-name [9]_ is an optional setting to use a more"},{"line_number":409,"context_line":"distinctive name as the name of the Linux table for better visualization"},{"line_number":410,"context_line":"during debugging."},{"line_number":411,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"e16526ef_25e017ad","line":408,"range":{"start_line":408,"start_character":11,"end_line":408,"end_character":35},"in_reply_to":"84cd6a15_2a9c4119","updated":"2026-04-19 16:46:09.000000000","message":"For naming conventions, the update explains that the naming convention is TBD.  Is that adequate?  On the one hand, I agree it\u0027s better to state the naming convention in the spec.  On the other hand, a shorter name is more readable and is better in diagrams.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"ed600b763360d16cf2324f47e92dc0dc47667e10","unresolved":false,"context_lines":[{"line_number":405,"context_line":"used by the initial OVN BGP integration for learned routes and table 42 is"},{"line_number":406,"context_line":"already used for routes to be advertised."},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"The option dynamic-routing-vrf-name [9]_ is an optional setting to use a more"},{"line_number":409,"context_line":"distinctive name as the name of the Linux table for better visualization"},{"line_number":410,"context_line":"during debugging."},{"line_number":411,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"f189cadf_9ff78725","line":408,"range":{"start_line":408,"start_character":11,"end_line":408,"end_character":35},"in_reply_to":"e16526ef_25e017ad","updated":"2026-04-22 18:58:32.000000000","message":"And also I thought about it, and I dont think we should put `dynamic-routing-vrf-name` in neutron.conf. I dont see a reason why a user would ever care or need to change this. We(neutron) should however, set it to some know format. but you are already taking care of that with your \"naming convention\" update. I am marking this thread resolved.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2f906ff94ed9d12a82f91c3226543d9bfa8290d6","unresolved":true,"context_lines":[{"line_number":416,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":417,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":420,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":421,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [11]_,"},{"line_number":422,"context_line":"dynamic-routing-bridge-ifname [12]_, dynamic-routing-vxlan-ifname [13]_, and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"12398419_21093999","line":419,"range":{"start_line":419,"start_character":57,"end_line":419,"end_character":70},"updated":"2026-04-17 20:59:47.000000000","message":"I dont want diverge the thread we already have around use case of the `ls-evpn-$VNI` so I want to start this thread around naming of this network.\n\nRegardless of that thread resolves we should have better naming convention. Although the network will not be created by the user, but by the neutron implicitly, it will still show up in outputs like `ovn-nbctl show`\n`\u003cfirst x characters of evpn router id itconnects\u003e-ls-\u003cvni\u003e`\nor along the line","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bbd507b3871213b9b241d40747ca2a7d060dbd63","unresolved":true,"context_lines":[{"line_number":416,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":417,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":420,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":421,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [11]_,"},{"line_number":422,"context_line":"dynamic-routing-bridge-ifname [12]_, dynamic-routing-vxlan-ifname [13]_, and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8e98b7f9_e2080c9a","line":419,"range":{"start_line":419,"start_character":57,"end_line":419,"end_character":70},"in_reply_to":"12398419_21093999","updated":"2026-04-19 16:46:09.000000000","message":"Same comment as above.  For naming conventions, the update explains that the naming convention is TBD. Is that adequate? On the one hand, I agree it\u0027s better to state the naming convention in the spec. On the other hand, a shorter name is more readable and is better in diagrams.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    options:dynamic-routing-vrf-id\u003d$VNI"},{"line_number":417,"context_line":"    options:dynamic-routing-vrf-name\u003devpnvrf-$VNI"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"BGP Service Plugin further creates an OVN logical switch, ls-evpn-$VNI, to"},{"line_number":420,"context_line":"represent the VNI, since OVN uses a logical switch to model a VNI."},{"line_number":421,"context_line":"ls-evpn-$VNI has the following configurations: dynamic-routing-vni [11]_,"},{"line_number":422,"context_line":"dynamic-routing-bridge-ifname [12]_, dynamic-routing-vxlan-ifname [13]_, and"}],"source_content_type":"text/x-rst","patch_set":5,"id":"8ae48836_4f575080","line":419,"range":{"start_line":419,"start_character":57,"end_line":419,"end_character":70},"in_reply_to":"8e98b7f9_e2080c9a","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"fe47631a0343c2dd826c5fa43dc67631becb2d62","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \"\"\"VRF_UP -\u003e LINUX_READY: create bridge, vxlan, loopback.\"\"\""},{"line_number":636,"context_line":"            vni \u003d l3evpn.vni"},{"line_number":637,"context_line":"            with IPRoute() as ipr:"},{"line_number":638,"context_line":"                vrf_idx \u003d ipr.link_lookup(ifname\u003df\u0027evpnvrf-{vni}\u0027)[0]"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"                # Create bridge and enslave to VRF"},{"line_number":641,"context_line":"                ipr.link(\u0027add\u0027, ifname\u003df\u0027br-{vni}\u0027, kind\u003d\u0027bridge\u0027)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"b273a293_46b655df","line":638,"updated":"2026-04-13 01:48:07.000000000","message":"No issue, just asking.\nI see we are using `dynamic-routing-maintain-vrf\u003dtrue` on a LRP. This means that OVN will create the VRF only on a chassis where that LRP is bound. This means that other chassis in the cluster will not have the vrf present and the agent should create it. \n\nWith that in mind, I am wondering if we should keep `dynamic-routing-maintain-vrf\u003dfalse` on LRP and have the agent fully handle creation and deletion of vrf\u0027s on all cluster chassis.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"34f479326a6266af5ec24d91774d08dc5621057f","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            \"\"\"VRF_UP -\u003e LINUX_READY: create bridge, vxlan, loopback.\"\"\""},{"line_number":636,"context_line":"            vni \u003d l3evpn.vni"},{"line_number":637,"context_line":"            with IPRoute() as ipr:"},{"line_number":638,"context_line":"                vrf_idx \u003d ipr.link_lookup(ifname\u003df\u0027evpnvrf-{vni}\u0027)[0]"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"                # Create bridge and enslave to VRF"},{"line_number":641,"context_line":"                ipr.link(\u0027add\u0027, ifname\u003df\u0027br-{vni}\u0027, kind\u003d\u0027bridge\u0027)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3b3c41b8_35439e72","line":638,"in_reply_to":"4bc5f10a_d41da3b1","updated":"2026-04-17 21:04:01.000000000","message":"Aaaar sorry, I meant to say \"for OVN to handle vrf creation\"","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"740f832192b68405552d3bb1f2376bbc6f67fd42","unresolved":true,"context_lines":[{"line_number":635,"context_line":"            \"\"\"VRF_UP -\u003e LINUX_READY: create bridge, vxlan, loopback.\"\"\""},{"line_number":636,"context_line":"            vni \u003d l3evpn.vni"},{"line_number":637,"context_line":"            with IPRoute() as ipr:"},{"line_number":638,"context_line":"                vrf_idx \u003d ipr.link_lookup(ifname\u003df\u0027evpnvrf-{vni}\u0027)[0]"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"                # Create bridge and enslave to VRF"},{"line_number":641,"context_line":"                ipr.link(\u0027add\u0027, ifname\u003df\u0027br-{vni}\u0027, kind\u003d\u0027bridge\u0027)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"effb2be9_5999fa83","line":638,"in_reply_to":"b273a293_46b655df","updated":"2026-04-13 02:06:53.000000000","message":"The spec is for centralized routing, so the intention is to only create an EVPN\u0027s VRF in one chassis.\n\nWhen the scale and performance concern with OVN is studied and determined to not be a concern, then distributed routing, where a VRF is created on each chassis, can be supported using the approach currently taken in OVN BGP integration, where a chassis router is created on each chassis for each EVPN and each chassis router\u0027s LRP is bound and triggers OVN to create a VRF on the chassis.\n\nUsing OVN to create VRFs eliminates code complexity in Neutron.  I was told similar code in the metadata agent that monitored for events in the chassis was complex and buggy.","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":34271,"name":"Miro Tomaska","display_name":"Miro Tomaska","email":"mtomaska@redhat.com","username":"mtomaska"},"change_message_id":"2c1966a418927725e2b52cb3d2299bc5beaa59fa","unresolved":false,"context_lines":[{"line_number":635,"context_line":"            \"\"\"VRF_UP -\u003e LINUX_READY: create bridge, vxlan, loopback.\"\"\""},{"line_number":636,"context_line":"            vni \u003d l3evpn.vni"},{"line_number":637,"context_line":"            with IPRoute() as ipr:"},{"line_number":638,"context_line":"                vrf_idx \u003d ipr.link_lookup(ifname\u003df\u0027evpnvrf-{vni}\u0027)[0]"},{"line_number":639,"context_line":""},{"line_number":640,"context_line":"                # Create bridge and enslave to VRF"},{"line_number":641,"context_line":"                ipr.link(\u0027add\u0027, ifname\u003df\u0027br-{vni}\u0027, kind\u003d\u0027bridge\u0027)"}],"source_content_type":"text/x-rst","patch_set":5,"id":"4bc5f10a_d41da3b1","line":638,"in_reply_to":"effb2be9_5999fa83","updated":"2026-04-17 21:02:59.000000000","message":"When I first made that comment, I did not realize we will be centralizing traffic to only the chassis where the lrp is bound. In this case, I agree it is better for neutron to handle creation of vrf (dynamic-routing-maintain-vrf\u003dtrue)","commit_id":"568599b499c1478e3f8137f35f7ad4b8e5748ef8"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e21bc6b3c7728b40020408746d23d2188e2634c4","unresolved":true,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    bgp_as \u003d 64999"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The VNI range for auto-generation should also be provided in the ML2/OVN agent"},{"line_number":142,"context_line":"configuration file.  The default range is the entire 24-bit range."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":".. code:: text"}],"source_content_type":"text/x-rst","patch_set":7,"id":"472050fc_1e11e647","line":141,"range":{"start_line":141,"start_character":65,"end_line":141,"end_character":78},"updated":"2026-04-20 13:25:11.000000000","message":"Shouldn\u0027t this be in the ml2 plugin file?","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    bgp_as \u003d 64999"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"The VNI range for auto-generation should also be provided in the ML2/OVN agent"},{"line_number":142,"context_line":"configuration file.  The default range is the entire 24-bit range."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":".. code:: text"}],"source_content_type":"text/x-rst","patch_set":7,"id":"4a2c305b_c38584bf","line":141,"range":{"start_line":141,"start_character":65,"end_line":141,"end_character":78},"in_reply_to":"472050fc_1e11e647","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"fa55998fff5facb51e7421c6104a0726e5c36189","unresolved":true,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Changes to Neutron router creation and Neutron network creation are necessary"},{"line_number":217,"context_line":"to associate Neutron router and Neutron network with an EVPN identified by a"},{"line_number":218,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":219,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Neutron router creation CLI and REST API are updated to allow for creation of"},{"line_number":222,"context_line":"a router associated with an EVPN identified by the VNI value.  There are two"}],"source_content_type":"text/x-rst","patch_set":7,"id":"27654d6d_90f3ce03","line":219,"range":{"start_line":218,"start_character":6,"end_line":219,"end_character":54},"updated":"2026-04-20 18:33:39.000000000","message":"Is there a reason to not implement the full CRUD operations over the VNI router configuration?","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"bf52ba9651fcb85787d27d42a30eb461706ea219","unresolved":true,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Changes to Neutron router creation and Neutron network creation are necessary"},{"line_number":217,"context_line":"to associate Neutron router and Neutron network with an EVPN identified by a"},{"line_number":218,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":219,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Neutron router creation CLI and REST API are updated to allow for creation of"},{"line_number":222,"context_line":"a router associated with an EVPN identified by the VNI value.  There are two"}],"source_content_type":"text/x-rst","patch_set":7,"id":"87c1e2f2_70405399","line":219,"range":{"start_line":218,"start_character":6,"end_line":219,"end_character":54},"in_reply_to":"27654d6d_90f3ce03","updated":"2026-04-21 14:40:54.000000000","message":"The main reason is that there is no requirement for it yet.","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Changes to Neutron router creation and Neutron network creation are necessary"},{"line_number":217,"context_line":"to associate Neutron router and Neutron network with an EVPN identified by a"},{"line_number":218,"context_line":"VNI.  The VNI association occurs only at creation time and cannot be changed"},{"line_number":219,"context_line":"once a Neutron router or a Neutron network is created."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Neutron router creation CLI and REST API are updated to allow for creation of"},{"line_number":222,"context_line":"a router associated with an EVPN identified by the VNI value.  There are two"}],"source_content_type":"text/x-rst","patch_set":7,"id":"17ca9ecb_b46a8c8a","line":219,"range":{"start_line":218,"start_character":6,"end_line":219,"end_character":54},"in_reply_to":"87c1e2f2_70405399","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"e21bc6b3c7728b40020408746d23d2188e2634c4","unresolved":true,"context_lines":[{"line_number":557,"context_line":"Below is the code template of the finite state machine to handle input events"},{"line_number":558,"context_line":"such as Port_Binding updates and Netlink messages related to VRF creation and"},{"line_number":559,"context_line":"deletion."},{"line_number":560,"context_line":""},{"line_number":561,"context_line":".. code-block:: python"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    class L3EvpnFSM:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"d3097f0f_384bd61d","line":560,"updated":"2026-04-20 13:25:11.000000000","message":"Opinion: I\u0027d refrain from any coding specifics in the spec but rather just explain the idea about components we will require. It\u0027s a great idea with the FSM but I think it should be enough to state we\u0027ll use FSM to monitor EVPN instance lifecycle.","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":557,"context_line":"Below is the code template of the finite state machine to handle input events"},{"line_number":558,"context_line":"such as Port_Binding updates and Netlink messages related to VRF creation and"},{"line_number":559,"context_line":"deletion."},{"line_number":560,"context_line":""},{"line_number":561,"context_line":".. code-block:: python"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"    class L3EvpnFSM:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"080d351a_edda637b","line":560,"in_reply_to":"d3097f0f_384bd61d","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"fe01e3da02857d2a0400b36231a81a53605394e9"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"6a41800138dfb9a1ba2d4182154b767650688239","unresolved":true,"context_lines":[{"line_number":143,"context_line":"   vtep_ip \u003d 1.1.1.1"},{"line_number":144,"context_line":"   child_vxlan_port \u003d 49152"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The ML2/OVN agent server configuration file"},{"line_number":147,"context_line":"/etc/neutron/plugins/ml2/ml2_conf.ini should also include a new section called"},{"line_number":148,"context_line":"[ovn_bgp] with evpn_vni_auto_ranges specifying the VNI ranges used for"},{"line_number":149,"context_line":"auto-assignment.  The default range is the entire 24-bit range, except the value"}],"source_content_type":"text/x-rst","patch_set":8,"id":"b3339ab1_3c7989a9","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":24},"updated":"2026-04-22 23:27:00.000000000","message":"Nit: This is not an agent config file. It is the ML2 plugin configuration file","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":143,"context_line":"   vtep_ip \u003d 1.1.1.1"},{"line_number":144,"context_line":"   child_vxlan_port \u003d 49152"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The ML2/OVN agent server configuration file"},{"line_number":147,"context_line":"/etc/neutron/plugins/ml2/ml2_conf.ini should also include a new section called"},{"line_number":148,"context_line":"[ovn_bgp] with evpn_vni_auto_ranges specifying the VNI ranges used for"},{"line_number":149,"context_line":"auto-assignment.  The default range is the entire 24-bit range, except the value"}],"source_content_type":"text/x-rst","patch_set":8,"id":"7d309c80_dc51e9aa","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":24},"in_reply_to":"b3339ab1_3c7989a9","updated":"2026-04-23 16:44:09.000000000","message":"Done","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"38745cde21720be44617ab4fab92c59279bac8bf","unresolved":true,"context_lines":[{"line_number":190,"context_line":"Proposed Changes"},{"line_number":191,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Neutron Design"},{"line_number":194,"context_line":"--------------"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"The spec proposes to extend BGP Service Plugin and Neutron OVN agent BGP"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5b063178_d48023d2","line":193,"updated":"2026-04-23 15:06:33.000000000","message":"After our internal Friday discussion about VLAN provider networks support, I think we need to have a section to introduce the evpn-vxlan type driver in the ML2 plugin - or would that be for the future EVPN Type 2 routes support?","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":190,"context_line":"Proposed Changes"},{"line_number":191,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"Neutron Design"},{"line_number":194,"context_line":"--------------"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"The spec proposes to extend BGP Service Plugin and Neutron OVN agent BGP"}],"source_content_type":"text/x-rst","patch_set":8,"id":"f144d403_893abfbf","line":193,"in_reply_to":"5b063178_d48023d2","updated":"2026-04-23 16:44:09.000000000","message":"I\u0027d to keep this spec narrower and develop an MVP.  The provider network support should have a new spec, a generic spec not tied to type-2.","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"25813d69c55c85c9e37f4070341650f6b4814130","unresolved":true,"context_lines":[{"line_number":327,"context_line":"    from neutron_lib.db import model_base"},{"line_number":328,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":331,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":332,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":333,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ddf4c1da_ef3c9b98","line":330,"updated":"2026-04-23 14:17:37.000000000","message":"I\u0027m having trouble thinking of a benefit to having this table as opposed to just a column on the router or router_extra_attributes. evpn_vni is just a unique integer with a 1:1 relationship with the router.\n\nAllocations can be tracked just as easily in the column (e.g. SELECT evpn_id from router_extra_attributes). If there was a chance that we\u0027d need to associate a VNI with different types of objects, then having a separate L3VNI table where allocations could be tracked in a single place makes sense to me. But if it will only ever be a property of a router, I don\u0027t understand why we\u0027d complicate it.","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"6f808db85b02ec91085d48aa9d3f36c91a2ce6f6","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    from neutron_lib.db import model_base"},{"line_number":328,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":331,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":332,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":333,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":8,"id":"04487ffc_4216ef02","line":330,"in_reply_to":"ddf4c1da_ef3c9b98","updated":"2026-04-23 16:44:09.000000000","message":"I added text about making the final decision during code development whether new databases should be created, given the 1:1 relationship between router and VNI as well as subnet and advertise options.","commit_id":"6fefc583b81386414b969291cf2e29e7e79531b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b582c42f87b3620dc0c460205a496ee5694fc68b","unresolved":true,"context_lines":[{"line_number":133,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"The ML2/OVN agent configuration file on each compute host "},{"line_number":136,"context_line":"/etc/neutron/plugins/ml2/ovn_agent.ini should include a new section called"},{"line_number":137,"context_line":"[ovn_evpn].  The new section contains the BGP AS number, the VxLAN tunnel"},{"line_number":138,"context_line":"endpoint\u0027s IP address, and the child VxLAN\u0027s UDP port number that is different"},{"line_number":139,"context_line":"from 4789."}],"source_content_type":"text/x-rst","patch_set":10,"id":"9274b141_a5aaecb3","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":38},"updated":"2026-04-27 18:23:27.000000000","message":"nit: I\u0027d refrain from using the paths as they depend on the installer.","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"908f31f6a1a9075dc962e3393ace50d349e96328","unresolved":false,"context_lines":[{"line_number":133,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"The ML2/OVN agent configuration file on each compute host "},{"line_number":136,"context_line":"/etc/neutron/plugins/ml2/ovn_agent.ini should include a new section called"},{"line_number":137,"context_line":"[ovn_evpn].  The new section contains the BGP AS number, the VxLAN tunnel"},{"line_number":138,"context_line":"endpoint\u0027s IP address, and the child VxLAN\u0027s UDP port number that is different"},{"line_number":139,"context_line":"from 4789."}],"source_content_type":"text/x-rst","patch_set":10,"id":"e26af9ff_a92f9cd7","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":38},"in_reply_to":"9274b141_a5aaecb3","updated":"2026-04-28 21:27:41.000000000","message":"Done","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b582c42f87b3620dc0c460205a496ee5694fc68b","unresolved":true,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"The ML2/OVN agent configuration file on each compute host "},{"line_number":136,"context_line":"/etc/neutron/plugins/ml2/ovn_agent.ini should include a new section called"},{"line_number":137,"context_line":"[ovn_evpn].  The new section contains the BGP AS number, the VxLAN tunnel"},{"line_number":138,"context_line":"endpoint\u0027s IP address, and the child VxLAN\u0027s UDP port number that is different"},{"line_number":139,"context_line":"from 4789."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":".. code:: text"}],"source_content_type":"text/x-rst","patch_set":10,"id":"f955d4ae_45d91880","line":138,"range":{"start_line":137,"start_character":57,"end_line":138,"end_character":21},"updated":"2026-04-27 18:23:27.000000000","message":"Why do we need it in the agent config file? I thought this would be in the local Open_vSwitch table.","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"908f31f6a1a9075dc962e3393ace50d349e96328","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"The ML2/OVN agent configuration file on each compute host "},{"line_number":136,"context_line":"/etc/neutron/plugins/ml2/ovn_agent.ini should include a new section called"},{"line_number":137,"context_line":"[ovn_evpn].  The new section contains the BGP AS number, the VxLAN tunnel"},{"line_number":138,"context_line":"endpoint\u0027s IP address, and the child VxLAN\u0027s UDP port number that is different"},{"line_number":139,"context_line":"from 4789."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":".. code:: text"}],"source_content_type":"text/x-rst","patch_set":10,"id":"0eb2c9af_db9bf814","line":138,"range":{"start_line":137,"start_character":57,"end_line":138,"end_character":21},"in_reply_to":"f955d4ae_45d91880","updated":"2026-04-28 21:27:41.000000000","message":"Done","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b582c42f87b3620dc0c460205a496ee5694fc68b","unresolved":true,"context_lines":[{"line_number":146,"context_line":"   child_vxlan_port \u003d 49152"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"The ML2/OVN plugin configuration file on the server"},{"line_number":149,"context_line":"/etc/neutron/plugins/ml2/ml2_conf.ini should also include a new section called"},{"line_number":150,"context_line":"[ovn_evpn] with evpn_vni_auto_ranges specifying the VNI ranges used for"},{"line_number":151,"context_line":"auto-assignment.  The default range is the entire 24-bit range, except the value"},{"line_number":152,"context_line":"0."}],"source_content_type":"text/x-rst","patch_set":10,"id":"54b73a92_97efdb08","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":37},"updated":"2026-04-27 18:23:27.000000000","message":"nit: I\u0027d refrain from using the paths as they depend on the installer.","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"908f31f6a1a9075dc962e3393ace50d349e96328","unresolved":false,"context_lines":[{"line_number":146,"context_line":"   child_vxlan_port \u003d 49152"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"The ML2/OVN plugin configuration file on the server"},{"line_number":149,"context_line":"/etc/neutron/plugins/ml2/ml2_conf.ini should also include a new section called"},{"line_number":150,"context_line":"[ovn_evpn] with evpn_vni_auto_ranges specifying the VNI ranges used for"},{"line_number":151,"context_line":"auto-assignment.  The default range is the entire 24-bit range, except the value"},{"line_number":152,"context_line":"0."}],"source_content_type":"text/x-rst","patch_set":10,"id":"48f3d281_9f6b5a68","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":37},"in_reply_to":"54b73a92_97efdb08","updated":"2026-04-28 21:27:41.000000000","message":"Done","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"11e63009221562a7aba97f6bf6d600540f1f5a4b","unresolved":true,"context_lines":[{"line_number":256,"context_line":"    {"},{"line_number":257,"context_line":"        \"router\": {"},{"line_number":258,"context_line":"            \"name\": \"evpn-router\","},{"line_number":259,"context_line":"            \"evpn-vni\": 0"},{"line_number":260,"context_line":"        }"},{"line_number":261,"context_line":"    }"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"a777ff95_c6275ec4","line":259,"range":{"start_line":259,"start_character":17,"end_line":259,"end_character":18},"updated":"2026-04-28 17:35:23.000000000","message":"nit: I noticed while working on the API - this should be an underscore","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"908f31f6a1a9075dc962e3393ace50d349e96328","unresolved":false,"context_lines":[{"line_number":256,"context_line":"    {"},{"line_number":257,"context_line":"        \"router\": {"},{"line_number":258,"context_line":"            \"name\": \"evpn-router\","},{"line_number":259,"context_line":"            \"evpn-vni\": 0"},{"line_number":260,"context_line":"        }"},{"line_number":261,"context_line":"    }"},{"line_number":262,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3159ce81_25742f53","line":259,"range":{"start_line":259,"start_character":17,"end_line":259,"end_character":18},"in_reply_to":"a777ff95_c6275ec4","updated":"2026-04-28 21:27:41.000000000","message":"Done","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"b582c42f87b3620dc0c460205a496ee5694fc68b","unresolved":true,"context_lines":[{"line_number":630,"context_line":"parallel with BGP Service Plugin.  Figure 4 identifies a use case where the"},{"line_number":631,"context_line":"two capabilities cross paths, when an EVPN has need to advertise globally"},{"line_number":632,"context_line":"routable floating IPs."},{"line_number":633,"context_line":""},{"line_number":634,"context_line":".. figure:: ../../images/evpn-core-bgp-co-existence.jpg"},{"line_number":635,"context_line":"   :target: ../../_images/evpn-core-bgp-co-existence.jpg"},{"line_number":636,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3084b414_65be0e3a","line":633,"updated":"2026-04-27 18:23:27.000000000","message":"I think now that we separate the two, we may want to describe here how do we want to test they can cooperate together, as the testing complexity increases big time with the separation.","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"908f31f6a1a9075dc962e3393ace50d349e96328","unresolved":false,"context_lines":[{"line_number":630,"context_line":"parallel with BGP Service Plugin.  Figure 4 identifies a use case where the"},{"line_number":631,"context_line":"two capabilities cross paths, when an EVPN has need to advertise globally"},{"line_number":632,"context_line":"routable floating IPs."},{"line_number":633,"context_line":""},{"line_number":634,"context_line":".. figure:: ../../images/evpn-core-bgp-co-existence.jpg"},{"line_number":635,"context_line":"   :target: ../../_images/evpn-core-bgp-co-existence.jpg"},{"line_number":636,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e3fab0c8_933611e1","line":633,"in_reply_to":"3084b414_65be0e3a","updated":"2026-04-28 21:27:41.000000000","message":"Added a section on testing.","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"a93ff8455cadd28692605d69e50f62db91133676","unresolved":true,"context_lines":[{"line_number":674,"context_line":"   * - vlan-$VNI"},{"line_number":675,"context_line":"     - VLAN interface (SVI) in the VRF"},{"line_number":676,"context_line":"     - vl-$j-$vid, where j \u003d (total_vni_now % 4094) and $vid is the VLAN ID mapped to the VNI"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"References"},{"line_number":679,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":680,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ed12eb6a_0827ee23","line":677,"updated":"2026-04-28 08:36:48.000000000","message":"I think it\u0027s best to clarify the OVN and OVS versions that this feature depends on","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"ea1d79906aed2900f8d9233ceeef46c0fd0cfda0","unresolved":false,"context_lines":[{"line_number":674,"context_line":"   * - vlan-$VNI"},{"line_number":675,"context_line":"     - VLAN interface (SVI) in the VRF"},{"line_number":676,"context_line":"     - vl-$j-$vid, where j \u003d (total_vni_now % 4094) and $vid is the VLAN ID mapped to the VNI"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"References"},{"line_number":679,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":680,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"df035eca_482df4ed","line":677,"in_reply_to":"e348f5e2_2c12b6b6","updated":"2026-04-29 01:08:38.000000000","message":"done","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"908f31f6a1a9075dc962e3393ace50d349e96328","unresolved":false,"context_lines":[{"line_number":674,"context_line":"   * - vlan-$VNI"},{"line_number":675,"context_line":"     - VLAN interface (SVI) in the VRF"},{"line_number":676,"context_line":"     - vl-$j-$vid, where j \u003d (total_vni_now % 4094) and $vid is the VLAN ID mapped to the VNI"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"References"},{"line_number":679,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":680,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"e348f5e2_2c12b6b6","line":677,"in_reply_to":"ed12eb6a_0827ee23","updated":"2026-04-28 21:27:41.000000000","message":"Done","commit_id":"94b5f49929957d5cfd96caabb13852f205a055b1"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"39433d7947fb2a6a7246006abe3f60686d40b1cb","unresolved":true,"context_lines":[{"line_number":336,"context_line":"    from neutron_lib.db import model_base"},{"line_number":337,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":340,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":341,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":342,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1904ff3c_d7ba8b4e","line":339,"range":{"start_line":339,"start_character":10,"end_line":339,"end_character":21},"updated":"2026-04-30 15:26:17.000000000","message":"So if we\u0027re going to share VNI between routers and networks, then we should make a dedicated table for VNI and not link it to a router only. We should be aware of the future extension to networks with the Type 2 evpn routes.","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":5756,"name":"Terry Wilson","email":"twilson@redhat.com","username":"otherwiseguy"},"change_message_id":"0111ce0cf401f40bfdcf2cbd74583814b44761c8","unresolved":true,"context_lines":[{"line_number":336,"context_line":"    from neutron_lib.db import model_base"},{"line_number":337,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":340,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":341,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":342,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"ff262f62_7e8bde56","line":339,"range":{"start_line":339,"start_character":10,"end_line":339,"end_character":21},"in_reply_to":"1904ff3c_d7ba8b4e","updated":"2026-04-30 15:50:06.000000000","message":"Are L3VNI a completely different entity than the type 2 L2VNI that might exist? Is it ok if they overlap in some or all cases? Are there situations where they absolutely cannot overlap, e.g. a router with an L3VNI having an attached network with an L2VNI? Just trying to get a feel for what the constraints will need to be as I get up to speed.","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"d4d009922d6d419038741a7585b83f11e1000ebd","unresolved":false,"context_lines":[{"line_number":336,"context_line":"    from neutron_lib.db import model_base"},{"line_number":337,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":340,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":341,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":342,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"74f08d3f_559c5826","line":339,"range":{"start_line":339,"start_character":10,"end_line":339,"end_character":21},"in_reply_to":"2a9a6886_5bfb0b87","updated":"2026-05-01 14:27:14.000000000","message":"Done","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"bfb6dd9614d93148832c4c4001b3eef4dba11996","unresolved":true,"context_lines":[{"line_number":336,"context_line":"    from neutron_lib.db import model_base"},{"line_number":337,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":340,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":341,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":342,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"f901c6f8_cd4f7678","line":339,"range":{"start_line":339,"start_character":10,"end_line":339,"end_character":21},"in_reply_to":"ff262f62_7e8bde56","updated":"2026-04-30 21:19:53.000000000","message":"It depends on the hardware vendor. This was part of the motivation for https://review.opendev.org/c/openstack/neutron-specs/+/952166 and https://review.opendev.org/c/openstack/neutron/+/985837\n\nThe former providing the ability to differentiate between different usages of VNI ranges. And the later being a stepping stone without a breaking change.","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"a4d10f3bc27f9911bba5a46bae9a8855445b6557","unresolved":true,"context_lines":[{"line_number":336,"context_line":"    from neutron_lib.db import model_base"},{"line_number":337,"context_line":"    from sqlalchemy import Column, Integer, String, Boolean, ForeignKey"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"    class RouterL3VNI(model_base.BASEV2):"},{"line_number":340,"context_line":"        \"\"\"Associates a router with an L3 VNI.\"\"\""},{"line_number":341,"context_line":"        __tablename__ \u003d \u0027router_l3vnis\u0027"},{"line_number":342,"context_line":"        router_id \u003d Column(String(36),"}],"source_content_type":"text/x-rst","patch_set":11,"id":"2a9a6886_5bfb0b87","line":339,"range":{"start_line":339,"start_character":10,"end_line":339,"end_character":21},"in_reply_to":"ff262f62_7e8bde56","updated":"2026-05-01 13:59:44.000000000","message":"Since this spec is to support overlay EVPN, Neutron should treat L2VNI and L3VNI the same, each is simply just an EVPN.","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"a0709de161f8c10001d1c063307f87ac63440a30","unresolved":true,"context_lines":[{"line_number":362,"context_line":"            super().__init__()"},{"line_number":363,"context_line":"            registry.subscribe(self._process_router_create,"},{"line_number":364,"context_line":"                               resources.ROUTER, events.PRECOMMIT_CREATE)"},{"line_number":365,"context_line":"            registry.subscribe(self._process_router_delete,"},{"line_number":366,"context_line":"                               resources.ROUTER, events.PRECOMMIT_DELETE)"},{"line_number":367,"context_line":"            registry.subscribe(self._process_router_after_create,"},{"line_number":368,"context_line":"                               resources.ROUTER, events.AFTER_CREATE)"},{"line_number":369,"context_line":"            # etc."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"09acebee_83740bd8","line":368,"range":{"start_line":365,"start_character":0,"end_line":368,"end_character":69},"updated":"2026-04-30 15:29:30.000000000","message":"another thing I noticed while working on the plugin side - if the code is referenced, it should be clear for what. I don\u0027t think we\u0027ll need to subscribe to these - or do we?","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"a4d10f3bc27f9911bba5a46bae9a8855445b6557","unresolved":true,"context_lines":[{"line_number":362,"context_line":"            super().__init__()"},{"line_number":363,"context_line":"            registry.subscribe(self._process_router_create,"},{"line_number":364,"context_line":"                               resources.ROUTER, events.PRECOMMIT_CREATE)"},{"line_number":365,"context_line":"            registry.subscribe(self._process_router_delete,"},{"line_number":366,"context_line":"                               resources.ROUTER, events.PRECOMMIT_DELETE)"},{"line_number":367,"context_line":"            registry.subscribe(self._process_router_after_create,"},{"line_number":368,"context_line":"                               resources.ROUTER, events.AFTER_CREATE)"},{"line_number":369,"context_line":"            # etc."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"96e4a7bf_597b3346","line":368,"range":{"start_line":365,"start_character":0,"end_line":368,"end_character":69},"in_reply_to":"09acebee_83740bd8","updated":"2026-05-01 13:59:44.000000000","message":"I\u0027ll remove the code, since it is meant to be an example not a recipe.  Neutron doesn\u0027t need to subscribe to DELETE.  Whether to subscribe to PRECOMMIT_CREATE or AFTER_CREATE is left up to implementation, since there might be different approaches that work.","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"},{"author":{"_account_id":38298,"name":"Helen Chen","display_name":"Helen Chen","email":"ichen@redhat.com","username":"ingwherchen"},"change_message_id":"d4d009922d6d419038741a7585b83f11e1000ebd","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            super().__init__()"},{"line_number":363,"context_line":"            registry.subscribe(self._process_router_create,"},{"line_number":364,"context_line":"                               resources.ROUTER, events.PRECOMMIT_CREATE)"},{"line_number":365,"context_line":"            registry.subscribe(self._process_router_delete,"},{"line_number":366,"context_line":"                               resources.ROUTER, events.PRECOMMIT_DELETE)"},{"line_number":367,"context_line":"            registry.subscribe(self._process_router_after_create,"},{"line_number":368,"context_line":"                               resources.ROUTER, events.AFTER_CREATE)"},{"line_number":369,"context_line":"            # etc."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"916264ca_ee015131","line":368,"range":{"start_line":365,"start_character":0,"end_line":368,"end_character":69},"in_reply_to":"96e4a7bf_597b3346","updated":"2026-05-01 14:27:14.000000000","message":"Done","commit_id":"5c60a9eab2b7aaab33abeadd0478c68536db8167"}]}
