)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c2ddd197cfd5ed7fd7d9100103f86bd145c82bf7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"e90f6bb2_20b18476","updated":"2026-01-26 17:00:50.000000000","message":"I think at this point it makes sense to abandon this change as https://review.opendev.org/c/openstack/networking-baremetal/+/973889 superceeds this change at this point.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":36998,"name":"Ilia Baikov","display_name":"Ilia Baikov","email":"ilia.baikov@ib.systems","username":"frct1"},"change_message_id":"28b8ddd24f7f748b62706ad3003a3f85bbded736","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"5a2b18e8_82857d47","updated":"2026-01-27 00:53:33.000000000","message":"I wonder that I have a plan to deploy a lab on playing around with vxlan + ovn networking. Would it lead to OVN\u0027s limitation about 4096 VNIs for vxlan? I guess planned implementation is some sort of bridge between geneve (nova) and vxlan world (ironic + tor switches).\nNot sure how should it workg though, probably we can send traffic to vxlan endpoint (tor switch in this case) using some sort of flow rule that traffic to dest_ip should leave OVN chassis through br-vxlan for example where possible offloads might be applied by NIC","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2c662bf819550d599aa52ca2144b56b47f98cc3b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"d6da31fb_b3757332","in_reply_to":"5a2b18e8_82857d47","updated":"2026-01-27 07:20:14.000000000","message":"So it’s not that simple. VXLAN is not like VLAN. Every switch is like a node and is an endpoint which needs to know how to relay packets to other switches. In the physical world switches handle this with BGP and communicate amongst each other. OVN doesn’t support this out of the box. The approach taken here involves modeling it how real world switches work and thunking through VLANs to ports. Another person’s effort involved using FRR and running an agent in a patched Neutron. This is necessary because the flows need to be established bidirectionally. So your switch needs one too.\n\nUnfortunately neither approach has received much reception from the Neutron team. But you’re welcome to join us in the Ironic IRC channel where we are working on this and discussing it.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"041cb736442b8134f5bf26dfc686b4015492923d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a9a5c14b_b400c8f4","in_reply_to":"d6da31fb_b3757332","updated":"2026-01-27 16:43:23.000000000","message":"Greetings! If you’re interested in the complexity at least as it relates to physical nodes, https://review.opendev.org/c/openstack/ironic-specs/+/959401 May be an interesting read for you. There is quite a bit of complexity, and as Doug has noted, it is sort of different. I’ve had a few people all remark statements along the lines of “wow, this really breaks my brain and mental model of networking” in regards to the way VXLAN really works as it relates to physical networks. Much as Doug said, if you are interesting in collaborating, please feel free to join us in #openstack-ironic on irc.oftc.net.\n\nOne last bit, there will be a 4090-something limit on VLANs per port, One almost needs to think of it as per physnet, but a physnet can be overlapped by VXLAN, so it gives a chance to have multiple physnets engaged with thousands of networks. That model, scaling wise, is more likely to need to scale on physical machine flows to individual routers or between individual hosts before the limit is reached per a physnet. The other reason for physnet based modeling restrictions is different vendors have different ranges. Some block usage of the last few vlans. Others block usage of the last few hundred vlans. It really just depends on what network hardware vendor is being used.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":5890,"name":"Doug Goldstein","email":"cardoe@cardoe.com","username":"cardoe"},"change_message_id":"2c662bf819550d599aa52ca2144b56b47f98cc3b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c16a2c8b_69725f1f","in_reply_to":"e90f6bb2_20b18476","updated":"2026-01-27 07:20:14.000000000","message":"Agreed","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"}],"neutron/plugins/ml2/drivers/evpn_l2vni/mech_driver/mech_evpn_l2vni.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8aee81a513284c07024ef802a5306bdf963b9f77","unresolved":true,"context_lines":[{"line_number":23,"context_line":"SUPPORTED_VNIC_TYPES \u003d [portbindings.VNIC_BAREMETAL]"},{"line_number":24,"context_line":"# This is where we want to use the TYPE from"},{"line_number":25,"context_line":"# https://review.opendev.org/c/openstack/neutron-specs/+/952166"},{"line_number":26,"context_line":"EVPN_TYPES \u003d [p_const.TYPE_VXLAN]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class EvpnL2vniMechanismDriver(api.MechanismDriver):"}],"source_content_type":"text/x-python","patch_set":3,"id":"a6e1cea3_f29162e5","line":26,"updated":"2025-11-17 14:53:52.000000000","message":"Crazy thought: What if this was configurable?\n\nI could see a case where this same basic plugin might be usable to translate from inter-ovn node Geneve to remote endpoint VXLAN since we the OVN support is functionally handicapped to only operate between OVN nodes.\n\nAnd thus, if another plugin or tool is making attachments, it might be feasible to wire that overall attachment up.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78b34fd721d51d47dc17f989f05b014b7c2d95e9","unresolved":true,"context_lines":[{"line_number":23,"context_line":"SUPPORTED_VNIC_TYPES \u003d [portbindings.VNIC_BAREMETAL]"},{"line_number":24,"context_line":"# This is where we want to use the TYPE from"},{"line_number":25,"context_line":"# https://review.opendev.org/c/openstack/neutron-specs/+/952166"},{"line_number":26,"context_line":"EVPN_TYPES \u003d [p_const.TYPE_VXLAN]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class EvpnL2vniMechanismDriver(api.MechanismDriver):"}],"source_content_type":"text/x-python","patch_set":3,"id":"8a425bc7_86633ad0","line":26,"in_reply_to":"a6e1cea3_f29162e5","updated":"2026-01-14 21:29:36.000000000","message":"Open question, can we also support Geneve and take the same approach to bind the geneve network out to a physical vlan?","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e2f8540888882a715bd2b61264ad3593badb4a15","unresolved":true,"context_lines":[{"line_number":54,"context_line":"                if not ports.PortBindingLevel.get_objects(context.plugin_context,"},{"line_number":55,"context_line":"                                                          segment_id\u003dsegment[api.ID]):"},{"line_number":56,"context_line":"                    context.release_dynamic_segment(segment[api.ID])"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def bind_port(self, context):"},{"line_number":59,"context_line":"        if context.current[portbindings.VNIC_TYPE] not in SUPPORTED_VNIC_TYPES:"},{"line_number":60,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":3,"id":"cc9f4dd9_c5284766","line":57,"updated":"2026-01-17 22:38:06.000000000","message":"So, there is an issue with OVN and genericswitch, in cases it looks like OVN thinks the port ends up getting set down, then explicitly records a L2 postbinding event, but the rest of the code ignores it. :\\\n\n      # After genericswitch binds\n      if (context.current[portbindings.VNIC_TYPE] \u003d\u003d portbindings.VNIC_BAREMETAL\n              and context.current[portbindings.VIF_TYPE] \u003d\u003d portbindings.VIF_TYPE_OTHER):\n          # Complete OVN\u0027s L2 provisioning block for baremetal\n          provisioning_blocks.provisioning_complete(\n              context._plugin_context, context.current[\u0027id\u0027],\n              resources.PORT, \u0027L2\u0027)\n              \nThis happens when the logical switchport triggers a creates a logical switchport which is up.\n\nIt looks like OVN thinks \"up\" is false on the external ports which triggers it","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ba1ad9479aabd68363c685d1f0eca53397726e31","unresolved":true,"context_lines":[{"line_number":62,"context_line":"        # This mechanism wants to trigger extra steps against EVPN type networks"},{"line_number":63,"context_line":"        for segment in context.network.network_segments:"},{"line_number":64,"context_line":"            if segment[api.NETWORK_TYPE] in EVPN_TYPES:"},{"line_number":65,"context_line":"                self._bind_port_segment(context, segment)"},{"line_number":66,"context_line":"                # Fast out to avoid walking the rest of the list"},{"line_number":67,"context_line":"                break"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"39b8a809_b9ed19ea","line":65,"updated":"2025-11-16 01:22:47.000000000","message":"An aspect which I\u0027m wondering is from the port binding aspect, which is where it would be *super* awesome to somehow front load some aspects of this. I guess in ML2 plugins, since this should trigger earlier, we might be able to do it in the bind_port at the end of the process. Ultimately it means intermediate vlan management needs to be shuffled into a different sequence on some switches. for the purpose of that flow.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0a4231bc0d2e84d889c38bf83dbac0d3bbec5c06","unresolved":true,"context_lines":[{"line_number":81,"context_line":"            if segment[api.NETWORK_TYPE] \u003d\u003d p_const.TYPE_VLAN and segment[api.PHYSICAL_NETWORK] \u003d\u003d physnet:"},{"line_number":82,"context_line":"                lower_segment \u003d segment"},{"line_number":83,"context_line":"                break"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if not lower_segment:"},{"line_number":86,"context_line":"            lower_segment \u003d context.allocate_dynamic_segment("},{"line_number":87,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":3,"id":"abd7c103_e2b9ccfb","line":84,"updated":"2026-01-17 15:20:40.000000000","message":"FWIW, it wouldn\u0027t be an awful idea to have some debug logging in here.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"94f2c8b646bf451ebafc3c130660d21a318e798e","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                break"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if not lower_segment:"},{"line_number":86,"context_line":"            lower_segment \u003d context.allocate_dynamic_segment("},{"line_number":87,"context_line":"                {"},{"line_number":88,"context_line":"                    api.PHYSICAL_NETWORK: physnet,"},{"line_number":89,"context_line":"                    api.NETWORK_TYPE: p_const.TYPE_VLAN,"},{"line_number":90,"context_line":"                }"},{"line_number":91,"context_line":"            )"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # record the current EVPN segment as bound and move on to binding"},{"line_number":94,"context_line":"        # the VLAN segment"}],"source_content_type":"text/x-python","patch_set":3,"id":"9add55f6_d0369761","line":91,"range":{"start_line":86,"start_character":4,"end_line":91,"end_character":13},"updated":"2026-01-05 20:21:07.000000000","message":"Hey, we discussed this on a call, more description around this would be super helpful to understand what this is doing.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0a4231bc0d2e84d889c38bf83dbac0d3bbec5c06","unresolved":true,"context_lines":[{"line_number":83,"context_line":"                break"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        if not lower_segment:"},{"line_number":86,"context_line":"            lower_segment \u003d context.allocate_dynamic_segment("},{"line_number":87,"context_line":"                {"},{"line_number":88,"context_line":"                    api.PHYSICAL_NETWORK: physnet,"},{"line_number":89,"context_line":"                    api.NETWORK_TYPE: p_const.TYPE_VLAN,"},{"line_number":90,"context_line":"                }"},{"line_number":91,"context_line":"            )"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # record the current EVPN segment as bound and move on to binding"},{"line_number":94,"context_line":"        # the VLAN segment"}],"source_content_type":"text/x-python","patch_set":3,"id":"f0c7a07a_29e61034","line":91,"range":{"start_line":86,"start_character":4,"end_line":91,"end_character":13},"in_reply_to":"9add55f6_d0369761","updated":"2026-01-17 15:20:40.000000000","message":"So, also looks like we\u0027re going to need more configuration here:\n\n\n  Jan 17 14:56:48 devstack-prime devstack@neutron-api.service[703248]: DEBUG neutron.db.segments_db [ESC[01;36mreq-2de7c39b-1dc4-41f3-b3b1-c0932f6819a2 req-63876cdd-6f93-46a4-b39e-a7527dc311d4 ESC[00;36mservice ir\nonic] ESC[01;35mNo dynamic segment found for Network:ff519bb0-0f4b-477d-ad00-4992efede0c9, Physical network:None, segmentation_id:NoneESC[00m ESC[00;33m{{(pid\u003d703248) get_dynamic_segment /opt/stack/neutron/neutr\non/db/segments_db.py:131}}ESC[00m\nJan 17 14:56:48 devstack-prime devstack@neutron-api.service[703248]: DEBUG neutron.plugins.ml2.drivers.helpers [ESC[01;36mreq-2de7c39b-1dc4-41f3-b3b1-c0932f6819a2 req-63876cdd-6f93-46a4-b39e-a7527dc311d4 ESC[00;\n36mservice ironic] ESC[01;35mPartial segment allocation fail:ESC[00m ESC[00;33m{{(pid\u003d703248) allocate_partially_specified_segment /opt/stack/neutron/neutron/plugins/ml2/drivers/helpers.py:154}}ESC[00m\nJan 17 14:56:48 devstack-prime devstack@neutron-api.service[703248]: DEBUG neutron.plugins.ml2.drivers.helpers [ESC[01;36mreq-2de7c39b-1dc4-41f3-b3b1-c0932f6819a2 req-63876cdd-6f93-46a4-b39e-a7527dc311d4 ESC[00;\n36mservice ironic] ESC[01;35m  - Filters: {\u0027physical_network\u0027: \u0027\u0027}ESC[00m ESC[00;33m{{(pid\u003d703248) allocate_partially_specified_segment /opt/stack/neutron/neutron/plugins/ml2/drivers/helpers.py:155}}ESC[00m\nJan 17 14:56:48 devstack-prime devstack@neutron-api.service[703248]: DEBUG neutron.plugins.ml2.drivers.helpers [ESC[01;36mreq-2de7c39b-1dc4-41f3-b3b1-c0932f6819a2 req-63876cdd-6f93-46a4-b39e-a7527dc311d4 ESC[00;\n36mservice ironic] ESC[01;35m  - Non allocated segments:ESC[00m ESC[00;33m{{(pid\u003d703248) allocate_partially_specified_segment /opt/stack/neutron/neutron/plugins/ml2/drivers/helpers.py:156}}ESC[00m\nJan 17 14:56:48 devstack-prime devstack@neutron-api.service[703248]: ERROR neutron.plugins.ml2.managers [ESC[01;36mreq-2de7c39b-1dc4-41f3-b3b1-c0932f6819a2 req-63876cdd-6f93-46a4-b39e-a7527dc311d4 ESC[00;36mserv\nice ironic] ESC[01;35mMechanism driver evpn-l2vni failed in bind_portESC[00m: neutron_lib.exceptions.NoNetworkAvailable: Unable to create the network. No project network is available for allocation.\n\nWhich seems to point back to a lack of a physical network in my case... and line 72-76. In this case, I hadnn\u0027t set a physical_network on the port, but Perhaps an option might be \"if the provided physical_network is none, fallback to a default physical network via configuration\". Ultimately to dial back the number of decoder rings and additional configuration really required.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"}],"pyproject.toml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"78b34fd721d51d47dc17f989f05b014b7c2d95e9","unresolved":true,"context_lines":[{"line_number":114,"context_line":"logger \u003d \"neutron.tests.unit.plugins.ml2.drivers.mechanism_logger:LoggerMechanismDriver\""},{"line_number":115,"context_line":"test \u003d \"neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriver\""},{"line_number":116,"context_line":"test_with_agent \u003d \"neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriverWithAgent\""},{"line_number":117,"context_line":"evpn-l2vni \u003d \"neutron.plugins.ml2.drivers.evpn_l2vni.mech_driver:EvpnL2vniMechanismDriver\""},{"line_number":118,"context_line":"macvtap \u003d \"neutron.plugins.ml2.drivers.macvtap.mech_driver.mech_macvtap:MacvtapMechanismDriver\""},{"line_number":119,"context_line":"openvswitch \u003d \"neutron.plugins.ml2.drivers.openvswitch.mech_driver.mech_openvswitch:OpenvswitchMechanismDriver\""},{"line_number":120,"context_line":"l2population \u003d \"neutron.plugins.ml2.drivers.l2pop.mech_driver:L2populationMechanismDriver\""}],"source_content_type":"text/x-toml","patch_set":3,"id":"45630c38_495c1ea4","line":117,"updated":"2026-01-14 21:29:36.000000000","message":"Part of me wonders if the name should be a bit more explicit it about this relying upon the switch to be the \"translation\" endpoint for the traffic.","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"0a4231bc0d2e84d889c38bf83dbac0d3bbec5c06","unresolved":true,"context_lines":[{"line_number":114,"context_line":"logger \u003d \"neutron.tests.unit.plugins.ml2.drivers.mechanism_logger:LoggerMechanismDriver\""},{"line_number":115,"context_line":"test \u003d \"neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriver\""},{"line_number":116,"context_line":"test_with_agent \u003d \"neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriverWithAgent\""},{"line_number":117,"context_line":"evpn-l2vni \u003d \"neutron.plugins.ml2.drivers.evpn_l2vni.mech_driver:EvpnL2vniMechanismDriver\""},{"line_number":118,"context_line":"macvtap \u003d \"neutron.plugins.ml2.drivers.macvtap.mech_driver.mech_macvtap:MacvtapMechanismDriver\""},{"line_number":119,"context_line":"openvswitch \u003d \"neutron.plugins.ml2.drivers.openvswitch.mech_driver.mech_openvswitch:OpenvswitchMechanismDriver\""},{"line_number":120,"context_line":"l2population \u003d \"neutron.plugins.ml2.drivers.l2pop.mech_driver:L2populationMechanismDriver\""}],"source_content_type":"text/x-toml","patch_set":3,"id":"c1466220_c26f1893","line":117,"in_reply_to":"45630c38_495c1ea4","updated":"2026-01-17 15:20:40.000000000","message":"Also, the entrypoint is wrong. 😊","commit_id":"f4b3626069ca6d6f3b2f0403d59738de2ec82f31"}]}
