)]}'
{"specs/rocky/approved/vrouter-hw-offloads.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":15,"context_line":"combination of VIF and vRouter plugging they support. This spec proposes a"},{"line_number":16,"context_line":"hybrid SR-IOV and vRouter model to enable acceleration."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Note: In this spec, Contrail and Tungsten Fabric will be used interchangeably."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4d503833","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":6},"updated":"2018-05-09 10:58:24.000000000","message":"nit:\n\n  .. note:: In this spec, ...","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":15,"context_line":"combination of VIF and vRouter plugging they support. This spec proposes a"},{"line_number":16,"context_line":"hybrid SR-IOV and vRouter model to enable acceleration."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Note: In this spec, Contrail and Tungsten Fabric will be used interchangeably."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_a3131d5c","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":6},"in_reply_to":"5f7c97a3_4d503833","updated":"2018-05-09 11:36:29.000000000","message":"Thanks, will fix","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":43,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type while consuming a PCIe"},{"line_number":44,"context_line":"Virtual Function resource. The estabished method for Open vSwitch offloads"},{"line_number":45,"context_line":"is to use VNIC types to distinguish between them:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* The \u0027normal\u0027 (or default) VNIC type indicates that the Instance is plugged"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2dde1c11","line":44,"range":{"start_line":44,"start_character":31,"end_line":44,"end_character":41},"updated":"2018-05-09 10:58:24.000000000","message":"established","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":43,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type while consuming a PCIe"},{"line_number":44,"context_line":"Virtual Function resource. The estabished method for Open vSwitch offloads"},{"line_number":45,"context_line":"is to use VNIC types to distinguish between them:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* The \u0027normal\u0027 (or default) VNIC type indicates that the Instance is plugged"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_c0e2cf01","line":44,"range":{"start_line":44,"start_character":31,"end_line":44,"end_character":41},"in_reply_to":"5f7c97a3_2dde1c11","updated":"2018-05-09 11:36:29.000000000","message":"argh, will rerun through spellcheck.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":40,"context_line":"  vfio-pci passthrough."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":43,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type while consuming a PCIe"},{"line_number":44,"context_line":"Virtual Function resource. The estabished method for Open vSwitch offloads"},{"line_number":45,"context_line":"is to use VNIC types to distinguish between them:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* The \u0027normal\u0027 (or default) VNIC type indicates that the Instance is plugged"},{"line_number":48,"context_line":"  into the software bridge."},{"line_number":49,"context_line":"* The \u0027direct\u0027 VNIC type indicates that a VF is passed through to the"},{"line_number":50,"context_line":"  Instance."},{"line_number":51,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":52,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_8d2ad08d","line":52,"range":{"start_line":42,"start_character":0,"end_line":52,"end_character":76},"updated":"2018-05-09 10:58:24.000000000","message":"There\u0027s a disconnect here. You go from talking about needing two new VIF types to talking about three types of VNIC. Perhaps you could clarify what you mean by the two terms because I personally use them interchangeably.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":39,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":40,"context_line":"  vfio-pci passthrough."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":43,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type while consuming a PCIe"},{"line_number":44,"context_line":"Virtual Function resource. The estabished method for Open vSwitch offloads"},{"line_number":45,"context_line":"is to use VNIC types to distinguish between them:"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"* The \u0027normal\u0027 (or default) VNIC type indicates that the Instance is plugged"},{"line_number":48,"context_line":"  into the software bridge."},{"line_number":49,"context_line":"* The \u0027direct\u0027 VNIC type indicates that a VF is passed through to the"},{"line_number":50,"context_line":"  Instance."},{"line_number":51,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":52,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Use Cases"},{"line_number":55,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_2015c39c","line":52,"range":{"start_line":42,"start_character":0,"end_line":52,"end_character":76},"in_reply_to":"5f7c97a3_8d2ad08d","updated":"2018-05-09 11:36:29.000000000","message":"OK, I think some explanatory paragraphs is in order here, something like:\n\nIn Nova, a VIF should fully describe how an instance is plugged into the datapath. This includes information for the hypervisor to perform the required plugging, and also for the datapath control software. For ovs, the hypervisor is generally \"smart enough\" not to require extra commands, but not for every VIF type.\n\nThe vnic_type is a property of a VIF. It\u0027s taken on the semantics of describing a specific \"plugging mode\" for the VIF. In the Nova network API, there\u0027s a list of vnic_types that will trigger a PCI request, if the VIF has that set.\n\nIt\u0027s possible to break each of the use cases into separate VIF\u0027s, but it\u0027s unnecessary, and worse, a user would still have to pick \u0027direct\u0027 or \u0027virtio-forwarder\u0027 to trigger PCI requests.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  * Normal: Standard kernel based plugging."},{"line_number":61,"context_line":"  * Passthrough: Accelerated IOMMU passthrough, ideal for NFV-like"},{"line_number":62,"context_line":"    applications."},{"line_number":63,"context_line":"  * Virtio Forwarder: Accelerated vhost-user passthrough, maximum"},{"line_number":64,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":65,"context_line":"    live migration."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Proposed change"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ed358447","line":65,"range":{"start_line":63,"start_character":0,"end_line":65,"end_character":19},"updated":"2018-05-09 10:58:24.000000000","message":"Which is different again from macvtap? Boy, networking is strange","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"  * Normal: Standard kernel based plugging."},{"line_number":61,"context_line":"  * Passthrough: Accelerated IOMMU passthrough, ideal for NFV-like"},{"line_number":62,"context_line":"    applications."},{"line_number":63,"context_line":"  * Virtio Forwarder: Accelerated vhost-user passthrough, maximum"},{"line_number":64,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":65,"context_line":"    live migration."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Proposed change"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_c0688f22","line":65,"range":{"start_line":63,"start_character":0,"end_line":65,"end_character":19},"in_reply_to":"5f7c97a3_ed358447","updated":"2018-05-09 11:36:29.000000000","message":"Yep it is, because macvtap is a kernel based forwarder, and this one is a vhost-user DPDK based forwarder. Wait till vDPA picks up speed.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  * Virtio Forwarder: Accelerated vhost-user passthrough, maximum"},{"line_number":64,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":65,"context_line":"    live migration."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Proposed change"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ad0eac38","line":66,"updated":"2018-05-09 10:58:24.000000000","message":"This will complement the existing port types supported, namely X, Y and Z. ?","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"  * Virtio Forwarder: Accelerated vhost-user passthrough, maximum"},{"line_number":64,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":65,"context_line":"    live migration."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"Proposed change"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_20638344","line":66,"in_reply_to":"5f7c97a3_ad0eac38","updated":"2018-05-09 11:36:29.000000000","message":"Currently, only \"Normal\" is supported, will update the spec to reflect that.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":67,"context_line":"Proposed change"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* In `nova/virt/libvirt/vif.py`:"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  * In `LibvirtGenericVIFDriver.get_config_vrouter()`:"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_cd3a0833","line":70,"range":{"start_line":70,"start_character":5,"end_line":70,"end_character":31},"updated":"2018-05-09 10:58:24.000000000","message":"nit: Double backticks would make more sense here","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"Proposed change"},{"line_number":68,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"* In `nova/virt/libvirt/vif.py`:"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"  * In `LibvirtGenericVIFDriver.get_config_vrouter()`:"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_e05cab7f","line":70,"range":{"start_line":70,"start_character":5,"end_line":70,"end_character":31},"in_reply_to":"5f7c97a3_cd3a0833","updated":"2018-05-09 11:36:29.000000000","message":"Thanks, will fix.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":90,"context_line":"* Additional notes:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  * These changes are proposed on the legacy plugging mechanism, and are"},{"line_number":93,"context_line":"    primarily done for the reason of enbabling feature backports and not"},{"line_number":94,"context_line":"    introducing additional dependencies. In addition to this spec, a separate"},{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_cd7208e4","line":93,"range":{"start_line":93,"start_character":47,"end_line":93,"end_character":64},"updated":"2018-05-09 10:58:24.000000000","message":"This one could prove contentious. I\u0027m not sure what upstream\u0027s policy on feature backports is, tbh","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":90,"context_line":"* Additional notes:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  * These changes are proposed on the legacy plugging mechanism, and are"},{"line_number":93,"context_line":"    primarily done for the reason of enbabling feature backports and not"},{"line_number":94,"context_line":"    introducing additional dependencies. In addition to this spec, a separate"},{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0d71e0e0","line":93,"range":{"start_line":93,"start_character":37,"end_line":93,"end_character":46},"updated":"2018-05-09 10:58:24.000000000","message":"enabling","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"* Additional notes:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  * These changes are proposed on the legacy plugging mechanism, and are"},{"line_number":93,"context_line":"    primarily done for the reason of enbabling feature backports and not"},{"line_number":94,"context_line":"    introducing additional dependencies. In addition to this spec, a separate"},{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_209623f2","line":93,"range":{"start_line":93,"start_character":37,"end_line":93,"end_character":46},"in_reply_to":"5f7c97a3_0d71e0e0","updated":"2018-05-09 11:36:29.000000000","message":"cut and paste... I forgot to ispell.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":90,"context_line":"* Additional notes:"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  * These changes are proposed on the legacy plugging mechanism, and are"},{"line_number":93,"context_line":"    primarily done for the reason of enbabling feature backports and not"},{"line_number":94,"context_line":"    introducing additional dependencies. In addition to this spec, a separate"},{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_60e5fba7","line":93,"range":{"start_line":93,"start_character":47,"end_line":93,"end_character":64},"in_reply_to":"5f7c97a3_cd7208e4","updated":"2018-05-09 11:36:29.000000000","message":"Yeah, well, we live in hope.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  * These changes are proposed on the legacy plugging mechanism, and are"},{"line_number":93,"context_line":"    primarily done for the reason of enbabling feature backports and not"},{"line_number":94,"context_line":"    introducing additional dependencies. In addition to this spec, a separate"},{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  * To enable a smooth transition between the in-tree and OS-VIF plugging"},{"line_number":99,"context_line":"    logic, the functionality of the \u0027vrouter\u0027 VIF plugging will be duplicated"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_4dcb581d","line":96,"range":{"start_line":94,"start_character":41,"end_line":96,"end_character":18},"updated":"2018-05-09 10:58:24.000000000","message":"OK, good to see. I\u0027d probably call this out earlier in the spec (e.g. with a \u0027note\u0027 admonition), with a note that \"more information is provided below\" (i.e. here).","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  * These changes are proposed on the legacy plugging mechanism, and are"},{"line_number":93,"context_line":"    primarily done for the reason of enbabling feature backports and not"},{"line_number":94,"context_line":"    introducing additional dependencies. In addition to this spec, a separate"},{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  * To enable a smooth transition between the in-tree and OS-VIF plugging"},{"line_number":99,"context_line":"    logic, the functionality of the \u0027vrouter\u0027 VIF plugging will be duplicated"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_20f1436c","line":96,"range":{"start_line":94,"start_character":41,"end_line":96,"end_character":18},"in_reply_to":"5f7c97a3_4dcb581d","updated":"2018-05-09 11:36:29.000000000","message":"Will add.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  * To enable a smooth transition between the in-tree and OS-VIF plugging"},{"line_number":99,"context_line":"    logic, the functionality of the \u0027vrouter\u0027 VIF plugging will be duplicated"},{"line_number":100,"context_line":"    in Nova and OS-VIF for the Rocky cycle, with the OS-VIF plugin taking"},{"line_number":101,"context_line":"    precedence, if installed."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  * There is risk in maintaining the parallel code paths (if they diverge)."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_0deec087","line":101,"range":{"start_line":98,"start_character":0,"end_line":101,"end_character":29},"updated":"2018-05-09 10:58:24.000000000","message":"Do we need to do this? Could you note implement it in the legacy way (to allow for backporting) and then migrate to os-vif in master? Far as I can tell, if there\u0027s an os-vif path, the legacy path will never be used","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    spec will be filed to convert these semantics to the corresponding"},{"line_number":96,"context_line":"    OS-VIF plugin."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  * To enable a smooth transition between the in-tree and OS-VIF plugging"},{"line_number":99,"context_line":"    logic, the functionality of the \u0027vrouter\u0027 VIF plugging will be duplicated"},{"line_number":100,"context_line":"    in Nova and OS-VIF for the Rocky cycle, with the OS-VIF plugin taking"},{"line_number":101,"context_line":"    precedence, if installed."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  * There is risk in maintaining the parallel code paths (if they diverge)."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_a00eb338","line":101,"range":{"start_line":98,"start_character":0,"end_line":101,"end_character":29},"in_reply_to":"5f7c97a3_0deec087","updated":"2018-05-09 11:36:29.000000000","message":"I don\u0027t think it\u0027ll be an issue to _only_ implement os-vif in Rocky. My main concern was the sequence of events that happen during an upgrade. The following components require updates:\n\nnova, os-vif, vif-plug-vrouter\n\nWith the legacy path in place, they could be upgraded in any order. Without the legacy path, upgrades have to be:\n\n(os-vif, vif-plug-vrouter) -\u003e nova\n\nSo a checkpoint in orchestration might likely be required, something that\u0027s not necessarily there.\n\nHowever, if the legacy removal happens between Queens and Rocky, I think that\u0027s perfectly reasonable to require. That does mean that the Queens path will look fundamentally different to the Rocky path, which is not really a problem IMHO.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":116,"context_line":"  * A deployer/administrator still has to register the PCI devices on the"},{"line_number":117,"context_line":"    hypervisor with `pci_passthrough_whitelist` in `nova.conf`."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"  * SmartNIC enabled nodes and classic nodes can run side-by-side. Standard"},{"line_number":120,"context_line":"    scheduling filters allocate and place Instances according to port types"},{"line_number":121,"context_line":"    and driver capabilities."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_6dfe5438","line":119,"range":{"start_line":119,"start_character":4,"end_line":119,"end_character":20},"updated":"2018-05-09 10:58:24.000000000","message":"SmartNIC-enabled","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d8ccde2eeac2d10671f51a536530fca937a208","unresolved":false,"context_lines":[{"line_number":218,"context_line":"Dependencies"},{"line_number":219,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* Include specific references to specs and/or blueprints in nova, or in other"},{"line_number":222,"context_line":"  projects, that this one either depends on or is related to."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* If this requires functionality of another project that is not currently used"},{"line_number":225,"context_line":"  by Nova (such as the glance v2 API when we previously only required v1),"},{"line_number":226,"context_line":"  document that fact."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"* Does this feature require any new library dependencies or code otherwise not"},{"line_number":229,"context_line":"  included in OpenStack? Or does it depend on a specific version of library?"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_ed6d8404","line":229,"range":{"start_line":221,"start_character":0,"end_line":229,"end_character":76},"updated":"2018-05-09 10:58:24.000000000","message":"Guess this section could be dropped","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"247f8ea0206ae8ae159a76903e6158caf6735c0f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"Dependencies"},{"line_number":219,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"* Include specific references to specs and/or blueprints in nova, or in other"},{"line_number":222,"context_line":"  projects, that this one either depends on or is related to."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"* If this requires functionality of another project that is not currently used"},{"line_number":225,"context_line":"  by Nova (such as the glance v2 API when we previously only required v1),"},{"line_number":226,"context_line":"  document that fact."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"* Does this feature require any new library dependencies or code otherwise not"},{"line_number":229,"context_line":"  included in OpenStack? Or does it depend on a specific version of library?"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"Testing"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f7c97a3_a0223351","line":229,"range":{"start_line":221,"start_character":0,"end_line":229,"end_character":76},"in_reply_to":"5f7c97a3_ed6d8404","updated":"2018-05-09 11:36:29.000000000","message":"Argh, forgot to update with the required Contrail review.","commit_id":"adbdc6041c53b0dfdab81daa97c098b9c8030d6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"705b6e6120348ce41c353230623cf425c5fd7b03","unresolved":false,"context_lines":[{"line_number":29,"context_line":"Tungsten Fabric agent, which has support for enabling hardware acceleration"},{"line_number":30,"context_line":"of the datapath match/action rules."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"In Nova, a VIF should fully describe how an instance is plugged into the"},{"line_number":33,"context_line":"datapath. This includes information for the hypervisor to perform the required"},{"line_number":34,"context_line":"plugging, and also info for the datapath control software. For the \u0027ovs\u0027 VIF,"},{"line_number":35,"context_line":"the hypervisor is generally able to also perform the datapath control, but this"},{"line_number":36,"context_line":"is not the case for every VIF type (hence the existence of OS-VIF)."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"The \u0027vrouter\u0027 VIF type has not been converted to the OS-VIF plugin model. In a"},{"line_number":39,"context_line":"separate forthcoming spec, work will be done to convert this VIF."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":".. note:: More information is provided in additional notes in the \u0027Proposed"},{"line_number":42,"context_line":"          change\u0027 section."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"The VNIC type is a property of a VIF. It has recently taken on the semantics of"},{"line_number":45,"context_line":"describing a specific \"plugging mode\" for the VIF. In the Nova network API,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_cf099831","line":42,"range":{"start_line":32,"start_character":0,"end_line":42,"end_character":26},"updated":"2018-05-09 15:00:22.000000000","message":"++","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"705b6e6120348ce41c353230623cf425c5fd7b03","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* The \u0027vrouter\u0027 VIF type plugs a TAP device into the kernel vrouter.ko"},{"line_number":54,"context_line":"  datapath."},{"line_number":55,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":56,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":57,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_eff6d3f9","line":55,"range":{"start_line":55,"start_character":61,"end_line":55,"end_character":65},"updated":"2018-05-09 15:00:22.000000000","message":"VNIC type? (if not, could you expand on what you mean by mode in this context)","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"49a20c9824a8e6d715ed28c28603befb06cddbe6","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"* The \u0027vrouter\u0027 VIF type plugs a TAP device into the kernel vrouter.ko"},{"line_number":54,"context_line":"  datapath."},{"line_number":55,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":56,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":57,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_38c09350","line":55,"range":{"start_line":55,"start_character":61,"end_line":55,"end_character":65},"in_reply_to":"5f7c97a3_eff6d3f9","updated":"2018-05-09 16:49:16.000000000","message":"Ah, this one is a weird one. The \u0027vhostuser\u0027 VIF has got another non-VNIC way of differentiating which particular os-vif plugin needs to be loaded:\nhttps://git.openstack.org/cgit/openstack/nova/tree/nova/network/os_vif_util.py#n401\n\nFor example, in vif_details if vhostuser_vrouter_plug is set to True, it selects the os-vif plugin for contrail_vrouter. Yes. There\u0027s another way of multiplexing a VIF. This might be a weird and confusing digression, which is why I omitted it. I can expound in the spec, if needed.","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"705b6e6120348ce41c353230623cf425c5fd7b03","unresolved":false,"context_lines":[{"line_number":53,"context_line":"* The \u0027vrouter\u0027 VIF type plugs a TAP device into the kernel vrouter.ko"},{"line_number":54,"context_line":"  datapath."},{"line_number":55,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":56,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":57,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_ef2573ac","line":56,"range":{"start_line":56,"start_character":17,"end_line":56,"end_character":34},"updated":"2018-05-09 15:00:22.000000000","message":"side note: I\u0027m assuming this is roughly equivalent to the netdev datapath in OVS while ``vrouter.ko`` is equivalent to OVS\u0027 ``openvswitch.ko``?","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"49a20c9824a8e6d715ed28c28603befb06cddbe6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"* The \u0027vrouter\u0027 VIF type plugs a TAP device into the kernel vrouter.ko"},{"line_number":54,"context_line":"  datapath."},{"line_number":55,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":56,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":57,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_58c6af4a","line":56,"range":{"start_line":56,"start_character":17,"end_line":56,"end_character":34},"in_reply_to":"5f7c97a3_ef2573ac","updated":"2018-05-09 16:49:16.000000000","message":"Correct","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"705b6e6120348ce41c353230623cf425c5fd7b03","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  datapath."},{"line_number":55,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":56,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":57,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_6f464352","line":57,"range":{"start_line":57,"start_character":44,"end_line":57,"end_character":47},"updated":"2018-05-09 15:00:22.000000000","message":"note to self: Virtual Ethernet Bridge [1]. I\u0027d forgotten about these.\n\n[1] http://www.ieee802.org/1/files/public/docs2009/new-hudson-vepa_seminar-20090514d.pdf","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"705b6e6120348ce41c353230623cf425c5fd7b03","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Virtual Function resource. The established method for Open vSwitch offloads"},{"line_number":63,"context_line":"is to use VNIC types to distinguish between them:"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* The \u0027normal\u0027 (or default) VNIC type indicates that the Instance is plugged"},{"line_number":66,"context_line":"  into the software bridge."},{"line_number":67,"context_line":"* The \u0027direct\u0027 VNIC type indicates that a VF is passed through to the"},{"line_number":68,"context_line":"  Instance."},{"line_number":69,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_0f9c6fbe","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":27},"updated":"2018-05-09 15:00:22.000000000","message":"This is the current behavior, right?","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"49a20c9824a8e6d715ed28c28603befb06cddbe6","unresolved":false,"context_lines":[{"line_number":62,"context_line":"Virtual Function resource. The established method for Open vSwitch offloads"},{"line_number":63,"context_line":"is to use VNIC types to distinguish between them:"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"* The \u0027normal\u0027 (or default) VNIC type indicates that the Instance is plugged"},{"line_number":66,"context_line":"  into the software bridge."},{"line_number":67,"context_line":"* The \u0027direct\u0027 VNIC type indicates that a VF is passed through to the"},{"line_number":68,"context_line":"  Instance."},{"line_number":69,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_f8ea1baa","line":66,"range":{"start_line":65,"start_character":0,"end_line":66,"end_character":27},"in_reply_to":"5f7c97a3_0f9c6fbe","updated":"2018-05-09 16:49:16.000000000","message":"The first two works with ovs, the third one also works with agilio-ovs. Fingers crossed, with an upcoming CI we can at least show it running on any NIC supporting TC offloads.","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"705b6e6120348ce41c353230623cf425c5fd7b03","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  Instance."},{"line_number":69,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":70,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Use Cases"},{"line_number":73,"context_line":"---------"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_8f95df42","line":71,"updated":"2018-05-09 15:00:22.000000000","message":"So after this, we\u0027ll have:\n\n- VIF type\n  - VNIC type\n\n- vhostuser\n  - vhostuser_vrouter_plug\n- hw_veb\n  - ??\n- vrouter\n  - normal\n  - direct\n  - virtio-forwarder\n\n?","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"32958ced7d090ac8089665a7421410d5c03f566c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  Instance."},{"line_number":69,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":70,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Use Cases"},{"line_number":73,"context_line":"---------"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_e496dff0","line":71,"in_reply_to":"5f7c97a3_18bfd761","updated":"2018-05-10 14:21:38.000000000","message":"OK, this clears up the last few things in my mind. Could you add this if you rework?","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"49a20c9824a8e6d715ed28c28603befb06cddbe6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  Instance."},{"line_number":69,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":70,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Use Cases"},{"line_number":73,"context_line":"---------"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_18bfd761","line":71,"in_reply_to":"5f7c97a3_8f95df42","updated":"2018-05-09 16:49:16.000000000","message":"From the point of view of Nova:\n\nexisting:\n- VIF type: hw_veb (legacy)\n  - VNIC type: direct\n- VIF type: vhostuser (os-vif -\u003e contrail_vrouter)\n  - VNIC type: normal\n  - details: vhostuser_vrouter_plug: True\n- VIF type: vrouter (legacy)\n  - VNIC type: normal\nnew:\n- VIF type: vrouter (legacy)\n  - VNIC type: direct\n- VIF type: vrouter (legacy)\n  - VNIC type: virtio-forwarder\n\nNeutron gives a port to the contrail controller and depending on what\u0027s on the compute node, the Neutron network it needs to plug into and the VNIC type selected by the user, it picks one of the above VIF types to pass to Nova. From there on, Nova\u0027s got everything it needs to plug the instance into the datapath.","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b2f964b8028c7ddeea79f0446d11f3cbee609952","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  Instance."},{"line_number":69,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":70,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Use Cases"},{"line_number":73,"context_line":"---------"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f7c97a3_4402330d","line":71,"in_reply_to":"5f7c97a3_e496dff0","updated":"2018-05-10 14:31:27.000000000","message":"Will do on next spin.","commit_id":"4e15504bd4618f92d45684d4c3176c18a0cfb77b"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5c79bb3d59db09e33ba3fee079238f843681e3c8","unresolved":false,"context_lines":[{"line_number":8,"context_line":"vRouter Hardware Offload Enablement"},{"line_number":9,"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\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/vrouter-hw-offloads"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"SmartNICs allow complex packet processing on the NIC. In order to support"},{"line_number":14,"context_line":"hardware acceleration for them, Nova core and os-vif needs modifications to"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f98cb32f","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":63},"updated":"2018-06-05 07:45:11.000000000","message":"A sub-blueprint has also been registered tracking the os-vif conversion portion of Stage 1\n\nhttps://blueprints.launchpad.net/nova/+spec/vrouter-os-vif-conversion","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a0efbb01b4e0100d67c91906e56ce9493059ae3b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  datapath."},{"line_number":54,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":55,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":56,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":57,"context_line":"  vfio-pci passthrough."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":60,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type, while consuming a PCIe"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_43962541","line":57,"range":{"start_line":56,"start_character":2,"end_line":57,"end_character":23},"updated":"2018-06-04 14:31:14.000000000","message":"Is that not more something like the NIC is already plugged into the VEB and the VF is then (plugged)attached to the VM?\n\nBut perhaps I just don\u0027t understand the phrasing :)","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3ae1d109daab164ba9c1ff721bd30251804ea015","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  datapath."},{"line_number":54,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":55,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":56,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":57,"context_line":"  vfio-pci passthrough."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":60,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type, while consuming a PCIe"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_e304101b","line":57,"range":{"start_line":56,"start_character":2,"end_line":57,"end_character":23},"in_reply_to":"5f7c97a3_23cd2886","updated":"2018-06-04 14:52:30.000000000","message":"I see, my thinking was like the NIC is already connected to the virtual bridge. The VFs are already allocated (Nova requirements) So we just passthrough them via vfio-pci to the guest and correctly set the vlan tag.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"2112d84aba58e20c06af9eceea96fa5a16b8df71","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  datapath."},{"line_number":54,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":55,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":56,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":57,"context_line":"  vfio-pci passthrough."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":60,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type, while consuming a PCIe"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_23cd2886","line":57,"range":{"start_line":56,"start_character":2,"end_line":57,"end_character":23},"in_reply_to":"5f7c97a3_43962541","updated":"2018-06-04 14:43:22.000000000","message":"I might be misleading in the phrasing, because I usually consider the VF as the thing that connects the VEB and the VM, and vfio-pci is the mechanism to pass the VF to the VM.\n\nIn this case, I assume the VEB is on the NIC itself, and it has multiple VF\u0027s and at least one physical port connected to it.\n\nhttps://wiki.openstack.org/wiki/SR-IOV-Passthrough-For-Networking","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"82794d5e273ca7a897634c4619995140db6eb4d6","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  datapath."},{"line_number":54,"context_line":"* The \u0027vhostuser\u0027 VIF type with the \u0027vhostuser_vrouter_plug\u0027 mode plugs into"},{"line_number":55,"context_line":"  the DPDK-based vrouter datapath."},{"line_number":56,"context_line":"* The \u0027hw_veb\u0027 VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":57,"context_line":"  vfio-pci passthrough."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":60,"context_line":"methods to plug a VM with the \u0027vrouter\u0027 VIF type, while consuming a PCIe"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_26a0d691","line":57,"range":{"start_line":56,"start_character":2,"end_line":57,"end_character":23},"in_reply_to":"5f7c97a3_e304101b","updated":"2018-06-04 15:33:47.000000000","message":"Your mental model has exactly the same effect as my mental model, I believe. If you regard the VF as a NIC, (which is a perfectly valid view) it makes perfect sense.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a0efbb01b4e0100d67c91906e56ce9493059ae3b","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Normal: Standard kernel based plugging, or vhost-user based plugging"},{"line_number":78,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":79,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":82,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_033cad2e","line":79,"updated":"2018-06-04 14:31:14.000000000","message":"We also have the direct-physical where we pass-through the whole device. I don\u0027t see any reason why this is not supported by vrouter? the PF is still well connected to the VEB datapath, right?","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"2112d84aba58e20c06af9eceea96fa5a16b8df71","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Normal: Standard kernel based plugging, or vhost-user based plugging"},{"line_number":78,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":79,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":82,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_03434cb1","line":79,"in_reply_to":"5f7c97a3_033cad2e","updated":"2018-06-04 14:43:22.000000000","message":"Yeah, but isn\u0027t Direct Physical mostly used by Ironic? In the Contrail controller code, I see no mention of it. It\u0027s simple to add, but I don\u0027t think it\u0027s supported upstream by the controller.\n\nI have to go check, but there might also be some subtle libvirt interactions between os-vif and the method direct-physical works... I recall something about osvif only able to output \u003cinterface\u003e xml tags, but I\u0027ll have to check the code.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"3ae1d109daab164ba9c1ff721bd30251804ea015","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Normal: Standard kernel based plugging, or vhost-user based plugging"},{"line_number":78,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":79,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":82,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_836f5cfb","line":79,"in_reply_to":"5f7c97a3_03434cb1","updated":"2018-06-04 14:52:30.000000000","message":"Yes, when passthrough the whole device, we don\u0027t use \u003cinterface\u003e element but \u003chostdev\u003e. I don\u0027t think there is any relation with osvif when we do that.\n\nSo the issue is that the vlan tag are not set because hostdev does not do that, meaning that the guest should get the metadata do to that job by itself.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"82794d5e273ca7a897634c4619995140db6eb4d6","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Normal: Standard kernel based plugging, or vhost-user based plugging"},{"line_number":78,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":79,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":82,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_89a77b0c","line":79,"in_reply_to":"5f7c97a3_836f5cfb","updated":"2018-06-04 15:33:47.000000000","message":"Ah, you just reminded me of some of my past sins:\n\nhttps://github.com/openstack/nova/commit/b4c1a2059d281d81395b00f5acd102d7822b788c\n\n(Notice the big TODO)\n\nCore issue is that os-vif plugins only returns things that eventually translate to \u003cinterface\u003e.\nhttps://github.com/openstack/nova/blob/master/nova/virt/libvirt/vif.py#L541","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"32079dab4027228c8910631b2f82262d0cec09a9","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Normal: Standard kernel based plugging, or vhost-user based plugging"},{"line_number":78,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":79,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":82,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_28e08fcc","line":79,"in_reply_to":"5f7c97a3_886763eb","updated":"2018-06-05 11:09:53.000000000","message":"I\u0027ve got an idea of os-vif-fing the hw_veb VIF entirely, it\u0027s going to mean some mucking about in _get_config_os_vif. Would it mean hw_veb would become one of the reference os-vif plugins (effectively doing null plugging)?\n\nSide-question: aside from vrouter, who is using it?","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"127e7bb411a2514f95b55fcc0cf03436a573bfae","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"  * Normal: Standard kernel based plugging, or vhost-user based plugging"},{"line_number":78,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":79,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":82,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_886763eb","line":79,"in_reply_to":"5f7c97a3_89a77b0c","updated":"2018-06-05 10:53:59.000000000","message":"To be clear, are you suggesting this _already is_ currently supported by Contrail or _should be_ supported, Sahid? I guess neither are blockers, really, given that (a) is a nice-to-know and (b) presumably hasn\u0027t been requested by anyone yet?","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"127e7bb411a2514f95b55fcc0cf03436a573bfae","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":89,"context_line":"    live migration."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" * Selecting between the VEB passthrough mode and the offloaded vrouter"},{"line_number":92,"context_line":"   datapath passthrough mode happens at the Contrail controller. This is keyed"},{"line_number":93,"context_line":"   on the provider network associated with the Neutron port."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Proposed change"},{"line_number":96,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_a8a9ffdd","line":93,"range":{"start_line":91,"start_character":0,"end_line":93,"end_character":60},"updated":"2018-06-05 10:53:59.000000000","message":"I\u0027m not sure what indentation level this should be at, as there\u0027s either an extra or missing space at the top here","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"32079dab4027228c8910631b2f82262d0cec09a9","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":89,"context_line":"    live migration."},{"line_number":90,"context_line":""},{"line_number":91,"context_line":" * Selecting between the VEB passthrough mode and the offloaded vrouter"},{"line_number":92,"context_line":"   datapath passthrough mode happens at the Contrail controller. This is keyed"},{"line_number":93,"context_line":"   on the provider network associated with the Neutron port."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"Proposed change"},{"line_number":96,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_288def30","line":93,"range":{"start_line":91,"start_character":0,"end_line":93,"end_character":60},"in_reply_to":"5f7c97a3_a8a9ffdd","updated":"2018-06-05 11:09:53.000000000","message":"Good catch, needs to be one less.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d85e8b4013c98989844a1f80919ce8595c74e46f","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f5e9f9b6","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"updated":"2018-06-06 08:43:20.000000000","message":"We have the VIFHostDevice which is used to passthrough devices (direct/phy-direct). Is that not enough information for vrouter?\n\nOr can you elaborate a bit more what data do you need for your representor.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"c945f5884ee46a3a165cf527e33ea2de17d29b9c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_950c3795","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"in_reply_to":"5f7c97a3_0676c33f","updated":"2018-06-06 18:04:03.000000000","message":"added","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d2d968a17734dd798b69065fda348e26caac9c59","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_8c01976d","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"in_reply_to":"5f7c97a3_1df7fbd6","updated":"2018-06-06 13:07:55.000000000","message":"OK so can you make clear that the step 2 is only to handle VIRTIO_FORWARDED in you spec, like: The new introduced \u0027VIFPortProfileVrouterRepresentor\u0027 (let\u0027s consider one specific for vrouter, we could still make some inheritance things during the implementation) will be used by vnic_type VIRTIO_FOWARDER that to allow passing metadata like PCI slot to the VIFVhostUser. (With a better phrasing ;) ).","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"712b4a9905c1e34a23b9404d9a73a56c0ce216db","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f70018ae","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"in_reply_to":"5f7c97a3_8c01976d","updated":"2018-06-06 13:32:34.000000000","message":"(also note the next comment)\n\nHow about something like this:\n\n OS-VIF either requires a port profile to be added, or an existing one\n extended, to allow for the passing of representor information to Nova.\n At a minimum the representor\u0027s PCI address is required, with an\n optional name to allow for friendly renaming by the OS-VIF plugin.\n\n For \u0027direct\u0027 plugging, the VIFHostDevice OS-VIF object has sufficient\n capability of carrying the required information. However, for the\n \u0027virtio-forwarder\u0027 case, the VIFVHostUser object does not have the\n capability to pass the PCI address.\n\n The suggested name for this object is:\n\n  * VIFPortProfileVrouterRepresentor","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"18888e7d67b77af37c577bd2559f7cc93af6efb5","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_1df7fbd6","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"in_reply_to":"5f7c97a3_dd6183d5","updated":"2018-06-06 09:22:22.000000000","message":"In fact, this is the same design as in standard OVS too:\n\nhttps://git.openstack.org/cgit/openstack/nova/tree/nova/network/os_vif_util.py?h\u003drefs/changes/82/572082/1#n286\n\nAn OVSRepresentor port profile is also _technically_ usable, but it would carry too much metadata... and be named awkwardly.\n\nThe extra \"dummy\" fields would be:\ninterface_id\nprofile_id\ndatapath_type\n\nIdeally, multiple inheritance could also solve this problem, but I have no idea if that would just mess the ovo types up:\n\n           /--PPRepr-\\\n PPBase---+           +---PPOVSRepr\n           \\--PPOVS--/","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"4fd0180664d3589f15f8dbc2d24838aa46e8e64a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_dd6183d5","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"in_reply_to":"5f7c97a3_f5e9f9b6","updated":"2018-06-06 09:04:11.000000000","message":"By virtue of the PCI device being the same, it has enough information for the VNIC \u0027direct\u0027 case, but not for the VNIC \u0027virtio-forwarder\u0027 case.\n\nThe following lines illustrates the problem:\nVNIC \u0027direct\u0027: the representor port_profile is used in the os-vif plugin can be used to distinguish between hw_veb plugging, if it ever needs to be unified with the vrouter VIF type.\n\nhttps://git.openstack.org/cgit/openstack/nova/tree/nova/network/os_vif_util.py?h\u003drefs/changes/82/572082/1#n451\n\nVNIC \u0027virtio-forwarder\u0027:  the VIFVHostUser VIF type cannot pass the metadata.\n\nhttps://git.openstack.org/cgit/openstack/nova/tree/nova/network/os_vif_util.py?h\u003drefs/changes/82/572082/1#n464\n\nThe _minimum_ info on the representor is the PCI device. It\u0027s also useful to get the plugin to rename the representor during plugging to match up with the VIF name, so that\u0027s a secondary nicety. It can be done away with, if need be, but it\u0027s a nice-to-have.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"680b1ee1f10a2869ec6786a0b95a95fdca35f51e","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":121,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    The primary suggestion is:"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    * VIFPortProfileGenericRepresentor"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Alternative suggestion:"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    * VIFPortProfileVrouterRepresentor"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":132,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_0676c33f","line":129,"range":{"start_line":123,"start_character":0,"end_line":129,"end_character":38},"in_reply_to":"5f7c97a3_f70018ae","updated":"2018-06-06 14:58:12.000000000","message":"+1\n\nYou can also add the fields and type that will be necessary:\n\n  dev_address: PCIAddressField()","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"127e7bb411a2514f95b55fcc0cf03436a573bfae","unresolved":false,"context_lines":[{"line_number":144,"context_line":"  Code impact to Nova will be to pass through the PCI information to the"},{"line_number":145,"context_line":"  OS-VIF plugin using the port profile developed in Stage 2."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"* Summary of plugging methods:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  * Existing methods supported by Contrail:"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_68e1a72a","line":147,"range":{"start_line":147,"start_character":0,"end_line":147,"end_character":30},"updated":"2018-06-05 10:53:59.000000000","message":"nit: This would probably make sense as a sub-heading","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"32079dab4027228c8910631b2f82262d0cec09a9","unresolved":false,"context_lines":[{"line_number":144,"context_line":"  Code impact to Nova will be to pass through the PCI information to the"},{"line_number":145,"context_line":"  OS-VIF plugin using the port profile developed in Stage 2."},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"* Summary of plugging methods:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"  * Existing methods supported by Contrail:"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_e8e937b7","line":147,"range":{"start_line":147,"start_character":0,"end_line":147,"end_character":30},"in_reply_to":"5f7c97a3_68e1a72a","updated":"2018-06-05 11:09:53.000000000","message":"Agreed, will fix on respin.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"d2d968a17734dd798b69065fda348e26caac9c59","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"      * VNIC type: direct"},{"line_number":193,"context_line":"      * OS-VIF object: VIFHostDevice"},{"line_number":194,"context_line":"      * OS-VIF port-profile: VIFPortProfile...Representor"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    * VIF type: vrouter (OS-VIF plugin: vrouter)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_0c1b47ca","line":194,"range":{"start_line":194,"start_character":9,"end_line":194,"end_character":57},"updated":"2018-06-06 13:07:55.000000000","message":"My thinking is that you don\u0027t need a port profile here, VIFHostDevice already carries all what you need.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"712b4a9905c1e34a23b9404d9a73a56c0ce216db","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"      * VNIC type: direct"},{"line_number":193,"context_line":"      * OS-VIF object: VIFHostDevice"},{"line_number":194,"context_line":"      * OS-VIF port-profile: VIFPortProfile...Representor"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    * VIF type: vrouter (OS-VIF plugin: vrouter)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_ac4a5380","line":194,"range":{"start_line":194,"start_character":9,"end_line":194,"end_character":57},"in_reply_to":"5f7c97a3_0c1b47ca","updated":"2018-06-06 13:32:34.000000000","message":"Yes, but it would mean we\u0027re not following the pattern in \u0027ovs\u0027 and \u0027agilio_ovs\u0027:\nhttps://github.com/openstack/nova/blob/stable/queens/nova/network/os_vif_util.py#L287-L297\n\nhttps://github.com/openstack/nova/blob/stable/queens/nova/network/os_vif_util.py#L329-L347\n\nAside from breaking the pattern, I have no strong feelings, so I\u0027d be happy to amend the spec here.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"c945f5884ee46a3a165cf527e33ea2de17d29b9c","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"      * VNIC type: direct"},{"line_number":193,"context_line":"      * OS-VIF object: VIFHostDevice"},{"line_number":194,"context_line":"      * OS-VIF port-profile: VIFPortProfile...Representor"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    * VIF type: vrouter (OS-VIF plugin: vrouter)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_f596cbef","line":194,"range":{"start_line":194,"start_character":9,"end_line":194,"end_character":57},"in_reply_to":"5f7c97a3_a684afd4","updated":"2018-06-06 18:04:03.000000000","message":"I\u0027m pretty ambivalent. I think it boils down to how the code in the os-vif plugin looks vs. how the code in Nova looks. But if it causes confusion, it does help mentioning in the spec.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"680b1ee1f10a2869ec6786a0b95a95fdca35f51e","unresolved":false,"context_lines":[{"line_number":191,"context_line":""},{"line_number":192,"context_line":"      * VNIC type: direct"},{"line_number":193,"context_line":"      * OS-VIF object: VIFHostDevice"},{"line_number":194,"context_line":"      * OS-VIF port-profile: VIFPortProfile...Representor"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    * VIF type: vrouter (OS-VIF plugin: vrouter)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_a684afd4","line":194,"range":{"start_line":194,"start_character":9,"end_line":194,"end_character":57},"in_reply_to":"5f7c97a3_ac4a5380","updated":"2018-06-06 14:58:12.000000000","message":"I don\u0027t really understand the argument saying that the VIF kind is for libvirt and port_profile to configure datapath. My thinking is the whole data-structure is used for both.\n\nSo I would prefer we avoid redundancy. Also my feeling is to clean the code but that means that first we will have to check plugins to ensure that they use the pci address from VIFHostDevice and not from profile (out of the scope of the spec).\n\nIt\u0027s my feeling but I can hear any other arguments.","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"c91a18d9e1b7d153a7185057dd0f6d0d90d7ac5a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"      * OS-VIF object: VIFVHostUser"},{"line_number":200,"context_line":"      * OS-VIF port-profile: VIFPortProfile...Representor"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"* Additional notes:"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  * In order to retain backwards compatibility with the current"},{"line_number":205,"context_line":"    \u0027contrail_vrouter\u0027 OS-VIF plugin, it is recommended to adopt \u0027vrouter\u0027 as"}],"source_content_type":"text/x-rst","patch_set":4,"id":"5f7c97a3_1134dbfa","line":202,"updated":"2018-06-05 19:31:47.000000000","message":"Also promoting this to a sub-heading","commit_id":"2b08d862e1f1062f209b8b93306cae67f79aa61e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":17,"context_line":"support the combination of VIF and vRouter plugging they support. This spec"},{"line_number":18,"context_line":"proposes a hybrid SR-IOV and vRouter model to enable acceleration."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":".. note:: In this spec, Contrail and Tungsten Fabric will be used"},{"line_number":21,"context_line":"          interchangeably."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_2bde20da","line":20,"range":{"start_line":20,"start_character":24,"end_line":20,"end_character":52},"updated":"2018-06-06 21:11:07.000000000","message":"shows you how out of touch I am... this was the first I\u0027d heard of Juniper\u0027s rebranding efforts of OpenContrail...","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":27,"context_line":"SmartNICs are able to route packets directly to individual SR-IOV Virtual"},{"line_number":28,"context_line":"Functions. These can be connected to instances using IOMMU (vfio-pci"},{"line_number":29,"context_line":"passthrough) or a low-latency vhost-user virtio-forwarder running on the"},{"line_number":30,"context_line":"compute node. The packet processing pipeline is managed by a Contrail /"},{"line_number":31,"context_line":"Tungsten Fabric agent, which has support for enabling hardware acceleration"},{"line_number":32,"context_line":"of the datapath match/action rules."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In Nova, a VIF should fully describe how an instance is plugged into the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_6b597859","line":31,"range":{"start_line":30,"start_character":14,"end_line":31,"end_character":21},"updated":"2018-06-06 21:11:07.000000000","message":"might be useful to have a link to some source code where we can look at these agents.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":27,"context_line":"SmartNICs are able to route packets directly to individual SR-IOV Virtual"},{"line_number":28,"context_line":"Functions. These can be connected to instances using IOMMU (vfio-pci"},{"line_number":29,"context_line":"passthrough) or a low-latency vhost-user virtio-forwarder running on the"},{"line_number":30,"context_line":"compute node. The packet processing pipeline is managed by a Contrail /"},{"line_number":31,"context_line":"Tungsten Fabric agent, which has support for enabling hardware acceleration"},{"line_number":32,"context_line":"of the datapath match/action rules."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"In Nova, a VIF should fully describe how an instance is plugged into the"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_080c7c40","line":31,"range":{"start_line":30,"start_character":14,"end_line":31,"end_character":21},"in_reply_to":"5f7c97a3_6b597859","updated":"2018-06-07 09:53:02.000000000","message":"will do","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":35,"context_line":"datapath. This includes information for the hypervisor to perform the required"},{"line_number":36,"context_line":"plugging, and also info for the datapath control software. For the \u0027ovs\u0027 VIF,"},{"line_number":37,"context_line":"the hypervisor is generally able to also perform the datapath control, but this"},{"line_number":38,"context_line":"is not the case for every VIF type (hence the existence of OS-VIF)."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The \u0027vrouter\u0027 VIF type has not been converted to the OS-VIF plugin model. This"},{"line_number":41,"context_line":"spec proposes completing the conversion to an OS-VIF plugin as the first stage."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ab15504b","line":38,"range":{"start_line":38,"start_character":59,"end_line":38,"end_character":65},"updated":"2018-06-06 21:11:07.000000000","message":"here and throughout, it\u0027s \"os-vif\" (lowercase).","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":35,"context_line":"datapath. This includes information for the hypervisor to perform the required"},{"line_number":36,"context_line":"plugging, and also info for the datapath control software. For the \u0027ovs\u0027 VIF,"},{"line_number":37,"context_line":"the hypervisor is generally able to also perform the datapath control, but this"},{"line_number":38,"context_line":"is not the case for every VIF type (hence the existence of OS-VIF)."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"The \u0027vrouter\u0027 VIF type has not been converted to the OS-VIF plugin model. This"},{"line_number":41,"context_line":"spec proposes completing the conversion to an OS-VIF plugin as the first stage."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_a3000b02","line":38,"range":{"start_line":38,"start_character":59,"end_line":38,"end_character":65},"in_reply_to":"5f7c97a3_ab15504b","updated":"2018-06-07 09:53:02.000000000","message":"will s/OS-VIF/os-vif/g","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":84,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"},{"line_number":85,"context_line":"  the following methods:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Passthrough: Accelerated IOMMU passthrough to an offloaded vRouter"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ce1459ec","line":84,"range":{"start_line":84,"start_character":15,"end_line":84,"end_character":41},"updated":"2018-06-06 21:11:07.000000000","message":"Not entirely sure what a \"vRouter enabled hypervisor\" is. Perhaps you mean \"a hypervisor with support for plugging vRouter VIFs\"?","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":81,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":84,"context_line":"  running on a vRouter enabled hypervisor equipped with a SmartNIC using one of"},{"line_number":85,"context_line":"  the following methods:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Passthrough: Accelerated IOMMU passthrough to an offloaded vRouter"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_c333c7f5","line":84,"range":{"start_line":84,"start_character":15,"end_line":84,"end_character":41},"in_reply_to":"5f7c97a3_ce1459ec","updated":"2018-06-07 09:53:02.000000000","message":"That is definitely a much better phraseology than my lumpy one. Will modify.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":91,"context_line":"    live migration."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Selecting between the VEB passthrough mode and the offloaded vRouter"},{"line_number":94,"context_line":"  datapath passthrough mode happens at the Contrail controller. This is keyed"},{"line_number":95,"context_line":"  on the provider network associated with the Neutron port."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Proposed change"},{"line_number":98,"context_line":"\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":"5f7c97a3_6ebae5e1","line":95,"range":{"start_line":93,"start_character":0,"end_line":95,"end_character":59},"updated":"2018-06-06 21:11:07.000000000","message":"This isn\u0027t a use case. Perhaps meant for the \"Proposed change\" section?","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":91,"context_line":"    live migration."},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"* Selecting between the VEB passthrough mode and the offloaded vRouter"},{"line_number":94,"context_line":"  datapath passthrough mode happens at the Contrail controller. This is keyed"},{"line_number":95,"context_line":"  on the provider network associated with the Neutron port."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Proposed change"},{"line_number":98,"context_line":"\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":"5f7c97a3_6358b330","line":95,"range":{"start_line":93,"start_character":0,"end_line":95,"end_character":59},"in_reply_to":"5f7c97a3_6ebae5e1","updated":"2018-06-07 09:53:02.000000000","message":"will move","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":102,"context_line":"  * In ``nova/virt/libvirt/vif.py``:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    Migrate the Legacy vRouter plugging code to OS-VIF objects. The methods in"},{"line_number":105,"context_line":"    question are ``LibvirtGenericVIFDriver.get_config_vrouter()`` and"},{"line_number":106,"context_line":"    ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    For kernel-based plugging, VIFGeneric will be used. A separate section for"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_4eacc99e","line":105,"range":{"start_line":105,"start_character":17,"end_line":105,"end_character":65},"updated":"2018-06-06 21:11:07.000000000","message":"This won\u0027t be going to os-vif. Only the plug/unplug stuff.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":102,"context_line":"  * In ``nova/virt/libvirt/vif.py``:"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    Migrate the Legacy vRouter plugging code to OS-VIF objects. The methods in"},{"line_number":105,"context_line":"    question are ``LibvirtGenericVIFDriver.get_config_vrouter()`` and"},{"line_number":106,"context_line":"    ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    For kernel-based plugging, VIFGeneric will be used. A separate section for"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e35cc31a","line":105,"range":{"start_line":105,"start_character":17,"end_line":105,"end_character":65},"in_reply_to":"5f7c97a3_4eacc99e","updated":"2018-06-07 09:53:02.000000000","message":"Ah, I meant to say \"delete these methods with fire\".","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    question are ``LibvirtGenericVIFDriver.get_config_vrouter()`` and"},{"line_number":106,"context_line":"    ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    For kernel-based plugging, VIFGeneric will be used. A separate section for"},{"line_number":109,"context_line":"    VIFVHostUser can also be added with little extra complexity, in order to"},{"line_number":110,"context_line":"    allow for a unified plugin model, should Contrail decide to adopt it in"},{"line_number":111,"context_line":"    future."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_2ee5cddc","line":109,"range":{"start_line":108,"start_character":56,"end_line":109,"end_character":63},"updated":"2018-06-06 21:11:07.000000000","message":"what do you mean by \"a separate section for VIFVHostUser can also be added\"? Added where? To os-vif? We already have a VIFVHostUser in os-vif...\n\nhttps://github.com/openstack/os-vif/blob/master/os_vif/objects/vif.py#L121","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    question are ``LibvirtGenericVIFDriver.get_config_vrouter()`` and"},{"line_number":106,"context_line":"    ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    For kernel-based plugging, VIFGeneric will be used. A separate section for"},{"line_number":109,"context_line":"    VIFVHostUser can also be added with little extra complexity, in order to"},{"line_number":110,"context_line":"    allow for a unified plugin model, should Contrail decide to adopt it in"},{"line_number":111,"context_line":"    future."},{"line_number":112,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_43b497f2","line":109,"range":{"start_line":108,"start_character":56,"end_line":109,"end_character":63},"in_reply_to":"5f7c97a3_2ee5cddc","updated":"2018-06-07 09:53:02.000000000","message":"Yeah, sorry, badly phrased.\n\nI meant a separate translation for the \u0027vrouter\u0027 Nova VIF to VIFVHostUser can be added in the nova-to-os-vif conversion section. So in stead of contrail sending a  \u0027vhostuser\u0027 Nova VIF, it can send a \u0027vrouter\u0027 VIF and do the same plugging on Nova. It\u0027s definitely not a must-have, and I can take it out without fuss.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"* Stage 2: Extend OS-VIF to allow generic representors."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":123,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":124,"context_line":"    At a minimum the representor\u0027s PCI address is required, with an"},{"line_number":125,"context_line":"    optional name to allow for friendly renaming by the OS-VIF plugin."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_6e04257f","line":123,"range":{"start_line":122,"start_character":4,"end_line":123,"end_character":74},"updated":"2018-06-06 21:11:07.000000000","message":"Don\u0027t we already have this?\n\nhttps://github.com/openstack/os-vif/blob/master/os_vif/objects/vif.py#L217\n\nor is that so specific to OVS that it\u0027s not useful for anything else?\n\nI\u0027m a little confused why VF representor information (which AFAICT is only the representor_name and representor_address attributes) should ever have been placed in a VIFPortProfileBase subclass). Why not just have a VFRepresentor object that contains the representor name and address and then have the VIFPortProfileBase subclass have a representor_info attribute that is of type ObjectField(\u0027VFRepresentor\u0027)?\n\nThat would seem to me much cleaner than creating endless VIFPortProfileBase subclasses for each type of VIF.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"* Stage 2: Extend OS-VIF to allow generic representors."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":123,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":124,"context_line":"    At a minimum the representor\u0027s PCI address is required, with an"},{"line_number":125,"context_line":"    optional name to allow for friendly renaming by the OS-VIF plugin."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_e3dda3dd","line":123,"range":{"start_line":122,"start_character":4,"end_line":123,"end_character":74},"in_reply_to":"5f7c97a3_08e55c0a","updated":"2018-06-07 09:53:02.000000000","message":"Currently, there are two users of representors in os-vif and Nova: the reference os-vif plugin for OVS, and the external agilio_ovs plugin. This would make a third.\n\n(once is happenstance, twice is coincidence, the third time is enemy action)\n\nFor the agilio_ovs plugin, I can issue an update, and the reference plugin should be updated in the same review as the model changes. I was thinking of modifying the os-vif plugin like this:\n\n * Check if the port_profile object\u0027s version is recent enough.\n * Check if the \u0027offloaded\u0027 attribute is set.\n * Verify the type of the \u0027offloaded\u0027 attribute (VFRepresentor, mdev, whatever).\n\nIf any of the above checks fail, fall back to pulling the info out of the VIFPortProfileOvsRepresentor.\n\nThat should take care of making plugins compatible with multiple versions of Nova.\n\nFor the case of making Nova compatible with older os-vif plugins, I think the describe method of the plugin _should_ return the supported port profiles. Would bumping VIFHostDev and VIFVHostUser a version and adding a make_compatible method that translates the port profiles in question be sufficient to do do this?\n\nI\u0027m not sure of any plugins in the wild that uses the Representor (except agilio_ovs, of course).","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ad042d66633b04e5dd8be8d277a2216778cf2c4e","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"* Stage 2: Extend OS-VIF to allow generic representors."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":123,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":124,"context_line":"    At a minimum the representor\u0027s PCI address is required, with an"},{"line_number":125,"context_line":"    optional name to allow for friendly renaming by the OS-VIF plugin."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_08e55c0a","line":123,"range":{"start_line":122,"start_character":4,"end_line":123,"end_character":74},"in_reply_to":"5f7c97a3_48ca74a1","updated":"2018-06-07 08:51:37.000000000","message":"Hum... my schema is bad, there is a multiple inheritance:\n\n  VIFPortProfileFPOpenVSwitch(VIFPortProfileOpenVSwitch, VIFPortProfileRepresentor)","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"870f86f608a7073573b1fb9ba937ee9824fcd80c","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"* Stage 2: Extend OS-VIF to allow generic representors."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    OS-VIF either requires a port profile to be added, or an existing one"},{"line_number":123,"context_line":"    extended, to allow for the passing of representor information to Nova."},{"line_number":124,"context_line":"    At a minimum the representor\u0027s PCI address is required, with an"},{"line_number":125,"context_line":"    optional name to allow for friendly renaming by the OS-VIF plugin."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_48ca74a1","line":123,"range":{"start_line":122,"start_character":4,"end_line":123,"end_character":74},"in_reply_to":"5f7c97a3_6e04257f","updated":"2018-06-07 08:45:47.000000000","message":"I think the problem is that \u0027VIFPortProfileOpenVSwitch\u0027 is carring more fields than the vrouter is needed. so instead of having \u0027interface_id\u0027, \u0027profile_id\u0027 and \u0027datapath_type\u0027 always NULL we suggested to provide a new VIFPortProfileVrouter. We were considering to change the inheritance during the implementation to something like:\n\n                                        VIFPortProfilBase\n\n                     VIFPortProfileOpenVSwitch  VIFPortProfileRepresentor\n\n             VIFPortProfileRepresentor                        VIFPortProfileVrouter\n\nVIFPortProfileFPOpenVSwitch\n\n\nBut and in that case you are right we don\u0027t need of VIFPortProfileVRouter. The VIFPortProfilRepresentor will be enough.\n\n \u003e I\u0027m a little confused why VF representor information (which AFAICT\n \u003e is only the representor_name and representor_address attributes)\n \u003e should ever have been placed in a VIFPortProfileBase subclass). Why\n \u003e not just have a VFRepresentor object that contains the representor\n \u003e name and address and then have the VIFPortProfileBase subclass have\n \u003e a representor_info attribute that is of type ObjectField(\u0027VFRepresentor\u0027)?\n\nYou probably have the good design, but if we change that now, we have to find some mechanisms to do not break plugins until they update their code.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        * VIFPortProfileVRouterRepresentor"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            * representor_name: StringField()"},{"line_number":137,"context_line":"            * representor_address: PCIAddressField()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":140,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_0efd713a","line":137,"updated":"2018-06-06 21:11:07.000000000","message":"This definitely seems like awkward modeling of the representor concepts. As mentioned above, it would be useful to have just a VFRepresentor object and have a nullable field in the base VIFPortProfileBase object:\n\n \"representor\": fields.ObjectField(\u0027VFRepresentor\u0027, nullable\u003dTrue)\n\nthat would contain a VFRepresentor object when the port happens to use a VF representor for the data path implementation.\n\nThat way we wouldn\u0027t need all these different subclasses of VIFPortProfileBase where the only difference between them is whether or not the port profile contains a VF representor struct...","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        * VIFPortProfileVRouterRepresentor"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            * representor_name: StringField()"},{"line_number":137,"context_line":"            * representor_address: PCIAddressField()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    OS-VIF needs to issue a release before this profile will be available to"},{"line_number":140,"context_line":"    general CI testing in Nova. Stage 3 will happen in parallel to stage 2, but"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_08231cc0","line":137,"in_reply_to":"5f7c97a3_0efd713a","updated":"2018-06-07 09:53:02.000000000","message":"How about \u0027offloaded\u0027 ? That way, OffloadedBase can be subclassed by OffloadedVFRepresentor, and in the hypothetical future case another offloaded mechanism (dpdk_representor or something) comes along with a path or something, it won\u0027t cause issues.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":155,"context_line":"Summary of plugging methods"},{"line_number":156,"context_line":"---------------------------"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* Existing methods supported by Contrail:"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  * VIF type: hw_veb (legacy)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_ae90fdee","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":40},"updated":"2018-06-06 21:11:07.000000000","message":"might be useful to link to https://github.com/Juniper/contrail-nova-vif-driver/blob/master/vif_plug_vrouter/vrouter.py....","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":155,"context_line":"Summary of plugging methods"},{"line_number":156,"context_line":"---------------------------"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"* Existing methods supported by Contrail:"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  * VIF type: hw_veb (legacy)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_c39c276c","line":158,"range":{"start_line":158,"start_character":19,"end_line":158,"end_character":40},"in_reply_to":"5f7c97a3_ae90fdee","updated":"2018-06-07 09:53:02.000000000","message":"Will add","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Additional notes"},{"line_number":211,"context_line":"----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"* In order to retain backwards compatibility with the current"},{"line_number":214,"context_line":"  \u0027contrail_vrouter\u0027 OS-VIF plugin, it is recommended to adopt \u0027vrouter\u0027 as"},{"line_number":215,"context_line":"  the new OS-VIF plugin name. This will prevent namespace fragmentation."},{"line_number":216,"context_line":"  Tungsten Fabric, OpenContrail and Contrail can use a single OS-VIF plugin"},{"line_number":217,"context_line":"  for the vRouter datapath."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_9185265c","line":214,"range":{"start_line":213,"start_character":54,"end_line":214,"end_character":35},"updated":"2018-06-06 21:11:07.000000000","message":"Note to reviewers, this is referring to this: \n\nhttps://github.com/Juniper/contrail-nova-vif-driver/blob/master/vif_plug_vrouter/vrouter.py","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":210,"context_line":"Additional notes"},{"line_number":211,"context_line":"----------------"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"* In order to retain backwards compatibility with the current"},{"line_number":214,"context_line":"  \u0027contrail_vrouter\u0027 OS-VIF plugin, it is recommended to adopt \u0027vrouter\u0027 as"},{"line_number":215,"context_line":"  the new OS-VIF plugin name. This will prevent namespace fragmentation."},{"line_number":216,"context_line":"  Tungsten Fabric, OpenContrail and Contrail can use a single OS-VIF plugin"},{"line_number":217,"context_line":"  for the vRouter datapath."}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_4381f7c2","line":214,"range":{"start_line":213,"start_character":54,"end_line":214,"end_character":35},"in_reply_to":"5f7c97a3_9185265c","updated":"2018-06-07 09:53:02.000000000","message":"Will add a link in references.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a5a4cfec3eec781a9900070db067f767f0c16128","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"* Stage 3: contrail-controller review implementing the semantics has been"},{"line_number":330,"context_line":"  submitted:"},{"line_number":331,"context_line":"  https://review.opencontrail.org/42850"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"* Stage 1-3: OpenContrail OS-VIF reference plugin has been submitted:"},{"line_number":334,"context_line":"  https://review.opencontrail.org/43399"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_91ea060c","line":331,"updated":"2018-06-06 21:11:07.000000000","message":"Don\u0027t forget to jump on the Golang bandwagon, too... :P\n\nhttps://github.com/Juniper/contrail","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"5ed11dc964be24bb94a207ec9c99d9778af5c261","unresolved":false,"context_lines":[{"line_number":328,"context_line":""},{"line_number":329,"context_line":"* Stage 3: contrail-controller review implementing the semantics has been"},{"line_number":330,"context_line":"  submitted:"},{"line_number":331,"context_line":"  https://review.opencontrail.org/42850"},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"* Stage 1-3: OpenContrail OS-VIF reference plugin has been submitted:"},{"line_number":334,"context_line":"  https://review.opencontrail.org/43399"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f7c97a3_033d3f2b","line":331,"in_reply_to":"5f7c97a3_91ea060c","updated":"2018-06-07 09:53:02.000000000","message":"I\u0027d prefer switching to C64 Terrapin Logo with proper Turtle graphics and multiple HW sprite support.","commit_id":"a94921e31a2b31844fd5951acadbc451da98da6c"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c586a961eeb4c82cfb62920ec75e4698ae4969ee","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    The call to ``vrouter-port-control`` will be migrated to the external"},{"line_number":113,"context_line":"    os-vif plugin, and further changes will be beyond the scope of Nova."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"* Stage 2: Extend os-vif with better abstraction for representors."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    In order for an os-vif plugin to plug a representor into the datapath, the"},{"line_number":118,"context_line":"    representor\u0027s PCI address is required. Optionally, a name can also be"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_f8ad09ea","line":115,"range":{"start_line":115,"start_character":11,"end_line":115,"end_character":66},"updated":"2018-06-11 13:24:11.000000000","message":"i have left some comments on the os-vif review\nhttps://review.openstack.org/#/c/572081\n\nim currently not in favor of this design change but i have not had reviewed this spec properly so im open to being persuaded. i need to run to a meetin gbut ill try and review this properly later today.","commit_id":"49f5bc48bcdbb43692a1e0fff691cf6f3ce2a8fc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"2c0e0e9ede0fa7b3f74fef98d3f6adc0c5a4de12","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    capability to pass the PCI address."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    The existing method in os-vif is to pass these via a"},{"line_number":127,"context_line":"    VIFPortProfileOVSRepresentor port profile object. This is used by the"},{"line_number":128,"context_line":"    \u0027ovs\u0027 reference plugin and the external \u0027agilio_ovs\u0027 plugin."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    With \u0027vrouter\u0027 being the third user of such metadata, it would be more"}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_beee99b2","line":127,"range":{"start_line":127,"start_character":4,"end_line":127,"end_character":32},"updated":"2018-06-11 14:48:30.000000000","message":"a less invasive change would be to use the moved decorator from  openstack/debtcollector to rename this class to VIFPortProfileRepresentor and just us that port profile for all cases where vf representors are used.\n\nhttps://github.com/openstack/debtcollector/blob/master/debtcollector/moves.py\ni refered to this as oslo.deprecation incorrectly in another review so \"s/oslo.deprecation/debtcollector/\" if you see that in other comments.\n\nfor things like mdev offloads, a different generic profile could be used VIFPortProfileMdev. as with VIFPortProfileRepresentor we would simply not reference the backend that consumes the profile in the profile so they can be shared.\n\nthis has the advadage of not intoduces a new type of resouce into the api.","commit_id":"49f5bc48bcdbb43692a1e0fff691cf6f3ce2a8fc"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fc71ea7bedf769c9b018b67857c680d044e47309","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    VIFPortProfileOVSRepresentor port profile object. This is used by the"},{"line_number":128,"context_line":"    \u0027ovs\u0027 reference plugin and the external \u0027agilio_ovs\u0027 plugin."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    With \u0027vrouter\u0027 being the third user of such metadata, it would be more"},{"line_number":131,"context_line":"    elegant to clean up this interface by using a composition pattern rather"},{"line_number":132,"context_line":"    than an inheritance based pattern."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    A suggested method of implementing this would be to:"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_f66d5a99","line":132,"range":{"start_line":130,"start_character":1,"end_line":132,"end_character":38},"updated":"2018-06-07 14:43:33.000000000","message":"+1","commit_id":"49f5bc48bcdbb43692a1e0fff691cf6f3ce2a8fc"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fc71ea7bedf769c9b018b67857c680d044e47309","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            * representor_name: StringField()"},{"line_number":142,"context_line":"            * representor_address: PCIAddressField()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        * Add an \u0027offload_type\u0027 member to VIFPortProfileBase:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            * offload_type: ObjectField(\u0027OffloadTypeBase\u0027, nullable\u003dTrue)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_365c32ec","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":61},"updated":"2018-06-07 14:43:33.000000000","message":"Honestly I\u0027m not convinced, even if using that composition looks nicer we will now have that new \u0027offload_type\u0027 everywhere. All our PortProfile are extending VIFPortProfileBase.\n\nWhat about to have a new VIFPortProfileRepresentor which extends VIFPortProfileBase. \n\n  VIFPortProfileRepresentor(VIFPortProfileBase):\n     offload_type: ObjectField(\u0027OffloadTypeBase\u0027, nullable\u003dFalse)\n\nSo we can then have different kind of OffloadType based on mdev, sriov....","commit_id":"49f5bc48bcdbb43692a1e0fff691cf6f3ce2a8fc"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"12a1760c448f9c3ea6f2766c9df7c05ceb2c5d07","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            * representor_name: StringField()"},{"line_number":142,"context_line":"            * representor_address: PCIAddressField()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        * Add an \u0027offload_type\u0027 member to VIFPortProfileBase:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            * offload_type: ObjectField(\u0027OffloadTypeBase\u0027, nullable\u003dTrue)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_aa72127b","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":61},"in_reply_to":"5f7c97a3_365c32ec","updated":"2018-06-07 15:11:21.000000000","message":"Yeah, the trick then is that yet another VIFPortProfile is needed for the representors that _also_ passes the OVS info...\n\nYet another option would be to add the offload_type field one by one to every port profile that gains acceleration. Discount multiple inheritance by way of duck typing?\n\nThat way, only one extra port profile is needed (VIFPortProfileRepresentor). It does mean os-vif needs manual extension, but I\u0027m happy with that.","commit_id":"49f5bc48bcdbb43692a1e0fff691cf6f3ce2a8fc"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"b20cbbea8df499a5f9ff06fd5259096d057873f6","unresolved":false,"context_lines":[{"line_number":141,"context_line":"            * representor_name: StringField()"},{"line_number":142,"context_line":"            * representor_address: PCIAddressField()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        * Add an \u0027offload_type\u0027 member to VIFPortProfileBase:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"            * offload_type: ObjectField(\u0027OffloadTypeBase\u0027, nullable\u003dTrue)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"5f7c97a3_0d1000a8","line":144,"range":{"start_line":144,"start_character":0,"end_line":144,"end_character":61},"in_reply_to":"5f7c97a3_aa72127b","updated":"2018-06-07 16:15:09.000000000","message":"I don\u0027t know Jan... let\u0027s see what Jay is thinking.","commit_id":"49f5bc48bcdbb43692a1e0fff691cf6f3ce2a8fc"}],"specs/stein/approved/vrouter-hw-offloads.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c392b9ad56c56516655b19244ad0d1a3c8c1104","unresolved":false,"context_lines":[{"line_number":44,"context_line":"passed a VIF to Nova with one of those VNIC types set."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"Currently, Nova supports multiple types of Contrail plugging: TAP plugs,"},{"line_number":47,"context_line":"vhost-user socket plugs or VEB SR-IOV plugs. Neutron and the Contrail"},{"line_number":48,"context_line":"controller decides what VIF type to pass to Nova based on the Neutron port"},{"line_number":49,"context_line":"semantics and the configuration of the compute node. This VIF type is then"},{"line_number":50,"context_line":"passed to Nova:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_7299111d","line":47,"range":{"start_line":47,"start_character":27,"end_line":47,"end_character":30},"updated":"2018-09-05 13:40:09.000000000","message":"nit: can you expand this (Virtual Ethernet Bridge)","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c392b9ad56c56516655b19244ad0d1a3c8c1104","unresolved":false,"context_lines":[{"line_number":67,"context_line":"  Instance."},{"line_number":68,"context_line":"* The \u0027virtio-forwarder\u0027 VNIC type indicates that a VF is attached via a"},{"line_number":69,"context_line":"  virtio-forwarder such as http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Use Cases"},{"line_number":72,"context_line":"---------"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_928dcdd5","line":70,"updated":"2018-09-05 13:40:09.000000000","message":"A table of VIF types, VNIC types, modes and \"currently supported?\" might be helpful, as it would summarize the above in a graphical form\n\nEDIT: I see this is actually done below in \"Summary of plugging methods\". Maybe link to that from here?","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c392b9ad56c56516655b19244ad0d1a3c8c1104","unresolved":false,"context_lines":[{"line_number":71,"context_line":"Use Cases"},{"line_number":72,"context_line":"---------"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Currently, an end user is able to attach a port to an Instance, running on a"},{"line_number":75,"context_line":"  hypervisor with support for plugging vRouter VIFs, by using one of the"},{"line_number":76,"context_line":"  following methods:"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_d27585cd","line":74,"range":{"start_line":74,"start_character":0,"end_line":74,"end_character":2},"updated":"2018-09-05 13:40:09.000000000","message":"super nit: The way I\u0027m reading this, these aren\u0027t really two separate points so much as the same point. I\u0027d remove the bullets at this level.","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"75c736a70aa4706ec3695c4d8c52066b7ce07696","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    issued on that project in order to reflect the specific version required"},{"line_number":100,"context_line":"    in the release notes."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    Progress on this task is tracked on the `vRouter os-vif conversion`_"},{"line_number":103,"context_line":"    blueprint."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"  * In ``nova/virt/libvirt/vif.py``:"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_cccc1a63","line":103,"range":{"start_line":102,"start_character":44,"end_line":103,"end_character":13},"updated":"2018-09-18 03:06:52.000000000","message":"`vRouter os-vif conversion blueprint`_","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c392b9ad56c56516655b19244ad0d1a3c8c1104","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \u0027virtio-forwarder\u0027 case, the VIFVHostUser object does not have the"},{"line_number":130,"context_line":"    capability to pass the PCI address."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    The existing method in os-vif is to pass these via a"},{"line_number":133,"context_line":"    VIFPortProfileOVSRepresentor port profile object. This is used by the"},{"line_number":134,"context_line":"    \u0027ovs\u0027 reference plugin and the external \u0027agilio_ovs\u0027 plugin."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    With \u0027vrouter\u0027 being the third user of such metadata, it would be more"},{"line_number":137,"context_line":"    elegant to clean up this interface by using a composition pattern rather"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_3246397d","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":64},"updated":"2018-09-05 13:40:09.000000000","message":"nit: link(s)?","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c392b9ad56c56516655b19244ad0d1a3c8c1104","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    A suggested method of implementing this would be to:"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        * Implement an DPOffloadTypeBase class."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        * Subclass this to DPOffloadTypeVFRepresentor with the following"},{"line_number":145,"context_line":"          members:"}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_b251e932","line":142,"range":{"start_line":142,"start_character":23,"end_line":142,"end_character":40},"updated":"2018-09-05 13:40:09.000000000","message":"nit: As is always the case with me, ``DPOffloadTypeBase``. Ditto for other symbols below","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c392b9ad56c56516655b19244ad0d1a3c8c1104","unresolved":false,"context_lines":[{"line_number":181,"context_line":"  Code impact to Nova will be to pass through the representor information to"},{"line_number":182,"context_line":"  the os-vif plugin using the extensions developed in Stage 2."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"Summary of plugging methods"},{"line_number":185,"context_line":"---------------------------"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"* Existing methods supported by Contrail:"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3f79a3b5_52197585","line":185,"range":{"start_line":184,"start_character":0,"end_line":185,"end_character":27},"updated":"2018-09-05 13:40:09.000000000","message":"++ to this section. Very much appreciated","commit_id":"893cae769913cede79f00eb14ba4f4fe94d1bf20"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* The ``hw_veb`` VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":61,"context_line":"methods to plug a VM with the ``vrouter`` VIF type, while consuming a PCIe"},{"line_number":62,"context_line":"Virtual Function resource. `Open vSwitch offloads`_ established the method of"},{"line_number":63,"context_line":"using VNIC types to distinguish between them:"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_8674418c","line":61,"range":{"start_line":60,"start_character":46,"end_line":61,"end_character":50},"updated":"2018-11-30 03:43:35.000000000","message":"you say \"two additional methods\" here, but list three methods below (corresponding to three vNIC types).","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b231883c62b171c94dc80f6b4d011db491729a90","unresolved":false,"context_lines":[{"line_number":57,"context_line":"* The ``hw_veb`` VIF type plugs a VM into the VEB datapath of a NIC using"},{"line_number":58,"context_line":"  vfio-pci passthrough."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"In order to enable acceleration for SmartNICs, Nova needs two additional"},{"line_number":61,"context_line":"methods to plug a VM with the ``vrouter`` VIF type, while consuming a PCIe"},{"line_number":62,"context_line":"Virtual Function resource. `Open vSwitch offloads`_ established the method of"},{"line_number":63,"context_line":"using VNIC types to distinguish between them:"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"dfd5e7cf_8e620116","line":61,"range":{"start_line":60,"start_character":46,"end_line":61,"end_character":50},"in_reply_to":"3f79a3b5_8674418c","updated":"2019-01-07 15:20:24.000000000","message":"Apologies for the confusion: ``normal`` exists, but ``direct`` and ``virtio-forwarder`` are proposed to be added. I\u0027ll update the sentence.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":81,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":84,"context_line":"  running on a properly configured hypervisor, equipped with a SmartNIC, using"},{"line_number":85,"context_line":"  one of the following methods:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Passthrough: Accelerated IOMMU passthrough to an offloaded vRouter"},{"line_number":88,"context_line":"    datapath, ideal for NFV-like applications."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_064b5129","line":85,"range":{"start_line":83,"start_character":2,"end_line":85,"end_character":31},"updated":"2018-11-30 03:43:35.000000000","message":"OK, so to summarize, the use case is for Juniper (and partners like Netronome) to achieve functional parity with the existing OVS/DPDK VFRepresentor datapath offloads for Juniper\u0027s vRouter technology.\n\nIs that an appropriate summary?","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b231883c62b171c94dc80f6b4d011db491729a90","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    depending on the datapath running on the hypervisor."},{"line_number":81,"context_line":"  * Direct: PCI passthrough plugging into the VEB of an SR-IOV NIC."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* In addition, an end user should be able to attach a port to an Instance"},{"line_number":84,"context_line":"  running on a properly configured hypervisor, equipped with a SmartNIC, using"},{"line_number":85,"context_line":"  one of the following methods:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Passthrough: Accelerated IOMMU passthrough to an offloaded vRouter"},{"line_number":88,"context_line":"    datapath, ideal for NFV-like applications."}],"source_content_type":"text/x-rst","patch_set":10,"id":"dfd5e7cf_ee7cedb6","line":85,"range":{"start_line":83,"start_character":2,"end_line":85,"end_character":31},"in_reply_to":"3f79a3b5_064b5129","updated":"2019-01-07 15:20:24.000000000","message":"That\u0027s accurate, Juniper / Tungsten Fabric in this case.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  running on a properly configured hypervisor, equipped with a SmartNIC, using"},{"line_number":85,"context_line":"  one of the following methods:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Passthrough: Accelerated IOMMU passthrough to an offloaded vRouter"},{"line_number":88,"context_line":"    datapath, ideal for NFV-like applications."},{"line_number":89,"context_line":"  * Virtio Forwarder: Accelerated vhost-user passthrough, maximum"},{"line_number":90,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":91,"context_line":"    live migration."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_86c20188","line":88,"range":{"start_line":87,"start_character":63,"end_line":88,"end_character":12},"updated":"2018-11-30 03:43:35.000000000","message":"I\u0027m just curious, but what is the difference between a vRouter datapath and a OVS/DPDK datapath? In a couple sentences, no need for a lengthy discussion.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b231883c62b171c94dc80f6b4d011db491729a90","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  running on a properly configured hypervisor, equipped with a SmartNIC, using"},{"line_number":85,"context_line":"  one of the following methods:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Passthrough: Accelerated IOMMU passthrough to an offloaded vRouter"},{"line_number":88,"context_line":"    datapath, ideal for NFV-like applications."},{"line_number":89,"context_line":"  * Virtio Forwarder: Accelerated vhost-user passthrough, maximum"},{"line_number":90,"context_line":"    software compatibility with standard virtio drivers and with support for"},{"line_number":91,"context_line":"    live migration."}],"source_content_type":"text/x-rst","patch_set":10,"id":"dfd5e7cf_99d1ed5a","line":88,"range":{"start_line":87,"start_character":63,"end_line":88,"end_character":12},"in_reply_to":"3f79a3b5_86c20188","updated":"2019-01-07 15:20:24.000000000","message":"The OVS in-kernel datapath was originally designed to be a hash-based match/action table to fit the OVS implementation of OpenFlow\u0027s needs. It basic principles are:\n\n  1. There\u0027s a non-overlapping set of keys and masks sent to the datapath.\n  2. A packet can match one, and one only action set (there are no priorities).\n  3. One of the actions allows \"recirculation\", i.e. restart the match/action pipeline.\n  4. The OVS userspace bridge renders the datapath rules in response to the packets it receives: the kernel datapath is empty if no traffic flows.\n\nThis fits L2 operations incredibly well, but some L3 operations less so.\n\nThe vrouter kernel model implements a fixed function pipeline with fixed actions and multiple tables. Instead of a single table, multiple matches are performed on the same packet, branching into different processing paths.\n\nOne of these tables allows for LPM matching which fits particularly well with L3 operations like routing. In essence, vrouter hard-coded a particular overlay/underlay solution in software with more branches, resulting in theoretically smaller traffic over the control channel.\n\nIn addition, vrouter implements a number of actions, like pre-populating tables in response to topology changes that OVS cannot do.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    to allow representors to be applicable to the ``vrouter`` datapath."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    Progress on this task is tracked in the `Generic os-vif offloads"},{"line_number":128,"context_line":"    blueprint`_."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"* Stage 3: Extend the ``vrouter`` VIF type in Nova."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_c656b9d1","line":128,"updated":"2018-11-30 03:43:35.000000000","message":"++","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    * VNIC type: ``virtio-forwarder``"},{"line_number":191,"context_line":"    * os-vif object: ``VIFVHostUser``"},{"line_number":192,"context_line":"    * ``port_profile.datapath_offload_type: DatapathOffloadTypeRepresentor``"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Additional notes"},{"line_number":195,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_8650c1d3","line":192,"updated":"2018-11-30 03:43:35.000000000","message":"bueno.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":212,"context_line":"  to propagate correctly."},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"* This change is agnostic to the SmartNIC datapath: should Contrail switch"},{"line_number":215,"context_line":"  to TC based offloads, eBPF or a third-party method, the Nova plugging"},{"line_number":216,"context_line":"  logic will remain the same."},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"* A deployer/administrator still has to register the PCI devices on the"},{"line_number":219,"context_line":"  hypervisor with ``pci_passthrough_whitelist`` in ``nova.conf``."}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_a655bdc3","line":216,"range":{"start_line":215,"start_character":54,"end_line":216,"end_character":29},"updated":"2018-11-30 03:43:35.000000000","message":"thank goodness. ++","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":284,"context_line":"Developer impact"},{"line_number":285,"context_line":"----------------"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Core Nova semantics will be slightly changed. \u0027vrouter\u0027 networks will support"},{"line_number":288,"context_line":"more VNIC types."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"Upgrade impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_e60095b3","line":287,"range":{"start_line":287,"start_character":46,"end_line":287,"end_character":64},"updated":"2018-11-30 03:43:35.000000000","message":"I don\u0027t believe there is such a thing as a \"vrouter network\", in Nova or Neutron... perhaps you meant \"vrouter VIFs\"?","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b231883c62b171c94dc80f6b4d011db491729a90","unresolved":false,"context_lines":[{"line_number":284,"context_line":"Developer impact"},{"line_number":285,"context_line":"----------------"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"Core Nova semantics will be slightly changed. \u0027vrouter\u0027 networks will support"},{"line_number":288,"context_line":"more VNIC types."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"Upgrade impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"dfd5e7cf_3947a120","line":287,"range":{"start_line":287,"start_character":46,"end_line":287,"end_character":64},"in_reply_to":"3f79a3b5_e60095b3","updated":"2019-01-07 15:20:24.000000000","message":"Heh, nice catch.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"c2a411313c79ce0eae874309b626fe8b032653e0","unresolved":false,"context_lines":[{"line_number":340,"context_line":"* Unit tests have been refreshed and now cover the VIF operations more"},{"line_number":341,"context_line":"  completely."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"* Third-party CI testing will be necessary to validate the Contrail and"},{"line_number":344,"context_line":"  Tungsten Fabric compatibility."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_06f911c5","line":344,"range":{"start_line":343,"start_character":2,"end_line":344,"end_character":32},"updated":"2018-11-30 03:43:35.000000000","message":"What 3rd party functional testing *currently* exists for Juniper/Contrail code that runs on a modern version of OpenStack? Last I checked they were way behind current versions but perhaps you have good news for me on that front...","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b231883c62b171c94dc80f6b4d011db491729a90","unresolved":false,"context_lines":[{"line_number":340,"context_line":"* Unit tests have been refreshed and now cover the VIF operations more"},{"line_number":341,"context_line":"  completely."},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"* Third-party CI testing will be necessary to validate the Contrail and"},{"line_number":344,"context_line":"  Tungsten Fabric compatibility."},{"line_number":345,"context_line":""},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":10,"id":"dfd5e7cf_19a2dd9b","line":344,"range":{"start_line":343,"start_character":2,"end_line":344,"end_character":32},"in_reply_to":"3f79a3b5_06f911c5","updated":"2019-01-07 15:20:24.000000000","message":"On the one hand, the \"good news\" is that there\u0027s a qualified version for Queens... On the other hand, TF is running their own broken-out testing, however, with no reporting back to OpenStack.\n\nOn the gripping hand, there\u0027s also work progressing in https://github.com/openstack/networking-opencontrail in order to become a Neutron Stadium project.","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":11347,"name":"Rui Zang","email":"rui.zang@yandex.com","username":"rzang"},"change_message_id":"aa9e4838ffd4c134b858c1e42d5b55550650cb4d","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":".. _`Juniper Contrail`: https://www.juniper.net/us/en/products-services/sdn/contrail/"},{"line_number":376,"context_line":".. _`OpenContrail`: http://www.opencontrail.org/"},{"line_number":377,"context_line":".. _`Tungsten Fabric`: https://tungstenfabric.io/"},{"line_number":378,"context_line":".. _`virtio-forwarder`: http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":379,"context_line":".. _`vRouter packet processing pipeline`: https://github.com/Juniper/contrail-vrouter"},{"line_number":380,"context_line":".. _`Offload hooks in kernel vRouter`: https://github.com/Juniper/contrail-vrouter/blob/R4.1/include/vr_offloads.h"}],"source_content_type":"text/x-rst","patch_set":10,"id":"3f79a3b5_22978439","line":377,"range":{"start_line":377,"start_character":23,"end_line":377,"end_character":49},"updated":"2018-12-11 07:27:30.000000000","message":"https://tungsten.io/  ??","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b231883c62b171c94dc80f6b4d011db491729a90","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":".. _`Juniper Contrail`: https://www.juniper.net/us/en/products-services/sdn/contrail/"},{"line_number":376,"context_line":".. _`OpenContrail`: http://www.opencontrail.org/"},{"line_number":377,"context_line":".. _`Tungsten Fabric`: https://tungstenfabric.io/"},{"line_number":378,"context_line":".. _`virtio-forwarder`: http://virtio-forwarder.readthedocs.io/en/latest/"},{"line_number":379,"context_line":".. _`vRouter packet processing pipeline`: https://github.com/Juniper/contrail-vrouter"},{"line_number":380,"context_line":".. _`Offload hooks in kernel vRouter`: https://github.com/Juniper/contrail-vrouter/blob/R4.1/include/vr_offloads.h"}],"source_content_type":"text/x-rst","patch_set":10,"id":"dfd5e7cf_5982a5ca","line":377,"range":{"start_line":377,"start_character":23,"end_line":377,"end_character":49},"in_reply_to":"3f79a3b5_22978439","updated":"2019-01-07 15:20:24.000000000","message":"Thanks, at the time of submission that link redirected to tungsten.io","commit_id":"ddf78ca34c8e8b5edfe6d358ea73dcdb92bea383"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cd4e244b799d2dce973fd4d76a7378204ed6b586","unresolved":false,"context_lines":[{"line_number":16,"context_line":"proposes a hybrid SR-IOV and vRouter model to enable acceleration."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":".. note:: In this spec, `Juniper Contrail`_, `OpenContrail`_ and"},{"line_number":19,"context_line":"          `Tungsten Fabric`_ will be used interchangeably."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Problem description"},{"line_number":22,"context_line":"\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":12,"id":"dfd5e7cf_83f62af9","line":19,"updated":"2019-01-09 15:18:53.000000000","message":"++","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cd4e244b799d2dce973fd4d76a7378204ed6b586","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    Remove the Legacy vRouter config generation code,"},{"line_number":110,"context_line":"    ``LibvirtGenericVIFDriver.get_config_vrouter()``, and migrate the plugging"},{"line_number":111,"context_line":"    code, ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``, to an external"},{"line_number":112,"context_line":"    os-vif plugin."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    For kernel-based plugging, VIFGeneric will be used."},{"line_number":115,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_d2087dda","line":112,"updated":"2019-01-09 15:18:53.000000000","message":"maybe a bit too explicit, but fine with me.","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a9cf3ee7e6dd1de199dc68464f74bbd45699289","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    code, ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``, to an external"},{"line_number":112,"context_line":"    os-vif plugin."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    For kernel-based plugging, VIFGeneric will be used."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"  * In ``privsep/libvirt.py``"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_c819dc88","line":114,"updated":"2019-01-07 16:56:23.000000000","message":"++","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"7df925bf685742021af1a05587cdbfc482ae926f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    code, ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``, to an external"},{"line_number":112,"context_line":"    os-vif plugin."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    For kernel-based plugging, VIFGeneric will be used."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"  * In ``privsep/libvirt.py``"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_a166eaec","line":114,"in_reply_to":"dfd5e7cf_336334df","updated":"2019-01-08 08:18:06.000000000","message":"I wonder if you might have hit https://bugs.launchpad.net/nova/+bug/1783551 fixed in https://review.openstack.org/#/c/571461/","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"440a8925471baef04d7958053b1c716ec5bf4a5f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    code, ``LibvirtGenericVIFDriver.{plug,unplug}_vrouter()``, to an external"},{"line_number":112,"context_line":"    os-vif plugin."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    For kernel-based plugging, VIFGeneric will be used."},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"  * In ``privsep/libvirt.py``"},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_336334df","line":114,"in_reply_to":"dfd5e7cf_c819dc88","updated":"2019-01-08 05:17:05.000000000","message":"on a related note let me know how that goes.\nevery time i have tried to use libvirt generic ethernet type it has worked localy in my testing and broke the gate...\n\nVIFGeneric makes sense from an os-vif perspective for the kenel datapath.","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"440a8925471baef04d7958053b1c716ec5bf4a5f","unresolved":false,"context_lines":[{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  Modify ``_nova_to_osvif_vif_vrouter`` to support two additional VNIC types:"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"  * ``VNIC_TYPE_DIRECT``: os-vif ``VIFHostDevice`` will be used."},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"  * ``VNIC_TYPE_VIRTIO_FORWARDER``: os-vif ``VIFVHostUser`` will be used."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  Code impact to Nova will be to pass through the representor information to"},{"line_number":140,"context_line":"  the os-vif plugin using the extensions developed in Stage 2."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_d382e84f","line":137,"range":{"start_line":135,"start_character":1,"end_line":137,"end_character":73},"updated":"2019-01-08 05:17:05.000000000","message":"yep that makes sense.\n\nyou could also consider mapping VNIC_TYPE_DIRECT to os-vifs VIFDirect also https://github.com/openstack/os-vif/blob/master/os_vif/objects/vif.py#L99-L117 instead of VIFHostDevice\nhttps://github.com/openstack/os-vif/blob/master/os_vif/objects/vif.py#L145-L162\n\nthat said i think VIFHostDevice is the correct choice for your usecase.","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"5a9cf3ee7e6dd1de199dc68464f74bbd45699289","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"* This change is agnostic to the SmartNIC datapath: should Contrail switch"},{"line_number":213,"context_line":"  to TC based offloads, eBPF or a third-party method, the Nova plugging"},{"line_number":214,"context_line":"  logic will remain the same for full offloads."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"* A deployer/administrator still has to register the PCI devices on the"},{"line_number":217,"context_line":"  hypervisor with ``pci_passthrough_whitelist`` in ``nova.conf``."}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_ab0d7238","line":214,"updated":"2019-01-07 16:56:23.000000000","message":"\\o/","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5aa1225d5a7b63878cd9ae7faa04d87f43f70277","unresolved":false,"context_lines":[{"line_number":217,"context_line":"  hypervisor with ``pci_passthrough_whitelist`` in ``nova.conf``."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"* SmartNIC-enabled nodes and standard compute nodes can run side-by-side."},{"line_number":220,"context_line":"  Standard scheduling filters allocate and place Instances according to port"},{"line_number":221,"context_line":"  types and driver capabilities."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Alternatives"},{"line_number":224,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_93f540ce","line":221,"range":{"start_line":220,"start_character":2,"end_line":221,"end_character":32},"updated":"2019-01-08 05:31:24.000000000","message":"nit: actully they dont but they really really should.\n\nwhat actully happens is nova assumes all network backed are availabel on all host when vnic_type\u003dnormal  and just hopes it will work.\n\nthen when it goes to spawn the instance nova binds the port and the neutron ml2 drivers in preferce order as set in the ml2_conf.ini try to bind the prot and the first one to succeeds wins. \n\nif you have a host where the only way to get network connectivity would have been to set vnic_type\u003ddirect or virtio-forworder then no neutron ml2 mech driver will bind the port and the vm will fail to spwan and hit the retry filter.\n\nin the case of vnic_type direct or virtio-forworder because \nit is claiming a pci device nova will atleast guarentee that\nthere is a free vf for the instance on the selected host but in the case of virtio-forworder it will not do any checks to see if the host has a network backend that support virtio-forwarder. as such for virtio-forworder this to can fail when nova tries to bind the port in neutron.\n\nbut you are correct coexistence will work without any code changes. it is still a good idea to use the AggregateInstanceExtraSpecsFilter or json filter and host aggrates to partion your sriov hosts and vrouter hosts using custom flavor for each.\n\nanyway fixing that is our of scope of this spec and this is knonw behavior so this is just an fyi.","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"7df925bf685742021af1a05587cdbfc482ae926f","unresolved":false,"context_lines":[{"line_number":217,"context_line":"  hypervisor with ``pci_passthrough_whitelist`` in ``nova.conf``."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"* SmartNIC-enabled nodes and standard compute nodes can run side-by-side."},{"line_number":220,"context_line":"  Standard scheduling filters allocate and place Instances according to port"},{"line_number":221,"context_line":"  types and driver capabilities."},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"Alternatives"},{"line_number":224,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_e145d218","line":221,"range":{"start_line":220,"start_character":2,"end_line":221,"end_character":32},"in_reply_to":"dfd5e7cf_93f540ce","updated":"2019-01-08 08:18:06.000000000","message":"Yep, that is correct... In most of our usecases, virtio-forwarder is installed by default, and there\u0027s no good internal mechanism to detect support on a per-compute-node basis, and the use of filters in NFV environments is almost a given.","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"cd4e244b799d2dce973fd4d76a7378204ed6b586","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"A deployer would be mandated to install the os-vif plugin to retain existing"},{"line_number":294,"context_line":"functionality in Nova. This is expected to be handled by minimum required"},{"line_number":295,"context_line":"versions in Contrail."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Implementation"},{"line_number":298,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_d2d63d28","line":295,"updated":"2019-01-09 15:18:53.000000000","message":"Just make sure the os-vif version and the plugin to be there, but cool with me.\n\nFWIW, migrating an instance from an old Rocky compute to a Stein one will still work, right ?","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1f92e6cc024ed0b4180624fa6619159110e39524","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"A deployer would be mandated to install the os-vif plugin to retain existing"},{"line_number":294,"context_line":"functionality in Nova. This is expected to be handled by minimum required"},{"line_number":295,"context_line":"versions in Contrail."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Implementation"},{"line_number":298,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_76c73314","line":295,"in_reply_to":"dfd5e7cf_3256a95e","updated":"2019-01-10 11:20:17.000000000","message":"Fair enough. At least I want to make sure that if operators follow an upgrade note, they won\u0027t have regressions.","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b510981a10f3ba2d3b1168222ea2b2d840079aa3","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"A deployer would be mandated to install the os-vif plugin to retain existing"},{"line_number":294,"context_line":"functionality in Nova. This is expected to be handled by minimum required"},{"line_number":295,"context_line":"versions in Contrail."},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"Implementation"},{"line_number":298,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"dfd5e7cf_3256a95e","line":295,"in_reply_to":"dfd5e7cf_d2d63d28","updated":"2019-01-09 15:32:53.000000000","message":"From the point of view of an operator, or user (and even on the wire protocol) there would be no regressions, there\u0027s pretty much no upgrade impact for this particular change. Existing instances will be blissfully unaware that this happened.\n\nHowever, Tungsten Fabric\u0027s itself does not necessarily follow the OpenStack upgrade policies in practice. It\u0027s not in the scope of this spec to fix them, but at least this change won\u0027t cause Nova to regress (provided the plugin is in place).","commit_id":"ff8ab40706383e56b612ac20d090c5fdbcbadc04"}]}
