)]}'
{"os_vif/objects/vif.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"741ada2785ecc42005ffc5249312b9a4fb077920","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class VIFGeneric(VIFBase):"},{"line_number":59,"context_line":"    \"\"\"A generic-style VIF."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    TODO."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    For libvirt drivers, this maps to type\u003d\"ethernet\" which just implies a bare"},{"line_number":64,"context_line":"    TAP device, all setup delegated to the plugin."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_23c0cb2a","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":9},"updated":"2019-02-19 16:04:48.000000000","message":"i dont think generic need more explanation.\n\nit is just a tun tap device connected to whatever the plugin want to conenct it to.\n\nit has no implicit semantics","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"102f59dcb3457c698e8b031b22a4ad44ee1ddff6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class VIFGeneric(VIFBase):"},{"line_number":59,"context_line":"    \"\"\"A generic-style VIF."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    TODO."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    For libvirt drivers, this maps to type\u003d\"ethernet\" which just implies a bare"},{"line_number":64,"context_line":"    TAP device, all setup delegated to the plugin."}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_7ecbb449","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":9},"in_reply_to":"9fdfeff1_23c0cb2a","updated":"2019-02-20 17:40:33.000000000","message":"Done","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"741ada2785ecc42005ffc5249312b9a4fb077920","unresolved":false,"context_lines":[{"line_number":75,"context_line":"@base.VersionedObjectRegistry.register"},{"line_number":76,"context_line":"class VIFBridge(VIFBase):"},{"line_number":77,"context_line":"    \"\"\"A bridge-style VIF."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    TODO."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027bridge\u0027."},{"line_number":82,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_c38c5f30","line":79,"range":{"start_line":78,"start_character":0,"end_line":79,"end_character":9},"updated":"2019-02-19 16:04:48.000000000","message":"this is for linux bridge.","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"102f59dcb3457c698e8b031b22a4ad44ee1ddff6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"@base.VersionedObjectRegistry.register"},{"line_number":76,"context_line":"class VIFBridge(VIFBase):"},{"line_number":77,"context_line":"    \"\"\"A bridge-style VIF."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    TODO."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027bridge\u0027."},{"line_number":82,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_1e4628c2","line":79,"range":{"start_line":78,"start_character":0,"end_line":79,"end_character":9},"in_reply_to":"9fdfeff1_c38c5f30","updated":"2019-02-20 17:40:33.000000000","message":"Done","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"741ada2785ecc42005ffc5249312b9a4fb077920","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"@base.VersionedObjectRegistry.register"},{"line_number":116,"context_line":"class VIFDirect(VIFBase):"},{"line_number":117,"context_line":"    \"\"\"A direct-style VIF."},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    Despite the confusing name, direct-style VIFs utilize macvtap which is a"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_838177fe","line":116,"range":{"start_line":116,"start_character":0,"end_line":116,"end_character":25},"updated":"2019-02-19 16:04:48.000000000","message":"as far as i know we have no users of this interface so i think we should rename it in train.","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"741ada2785ecc42005ffc5249312b9a4fb077920","unresolved":false,"context_lines":[{"line_number":146,"context_line":"class VIFVHostUser(VIFBase):"},{"line_number":147,"context_line":"    \"\"\"A vhostuser-style VIF."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    vhostuser-style VIFs utilize userspace vhost, which allow traffic to"},{"line_number":150,"context_line":"    traverse between the guest and a host userspace application (commonly a"},{"line_number":151,"context_line":"    virtual switch), bypassing the hypervisor. Constrast this with"},{"line_number":152,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, which uses traditional virtio"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_e33963a3","line":149,"range":{"start_line":149,"start_character":33,"end_line":149,"end_character":48},"updated":"2019-02-19 16:04:48.000000000","message":"usespace vhosts is the name for intels alternitve to vhost-user which was later renamed to vhost-cuse.\n\nso i would either rephrase to\n ... utilize a userspce vhost backend,\n\nor ... untilize a vhost-user offload,","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"741ada2785ecc42005ffc5249312b9a4fb077920","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    vhostuser-style VIFs utilize userspace vhost, which allow traffic to"},{"line_number":150,"context_line":"    traverse between the guest and a host userspace application (commonly a"},{"line_number":151,"context_line":"    virtual switch), bypassing the hypervisor. Constrast this with"},{"line_number":152,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, which uses traditional virtio"},{"line_number":153,"context_line":"    queues, all of which must pass through the hypervisor."},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_e3864366","line":151,"range":{"start_line":151,"start_character":35,"end_line":151,"end_character":45},"updated":"2019-02-19 16:04:48.000000000","message":"nit its bypassing the kernel networking stack not the hypervior.","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"102f59dcb3457c698e8b031b22a4ad44ee1ddff6","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    vhostuser-style VIFs utilize userspace vhost, which allow traffic to"},{"line_number":150,"context_line":"    traverse between the guest and a host userspace application (commonly a"},{"line_number":151,"context_line":"    virtual switch), bypassing the hypervisor. Constrast this with"},{"line_number":152,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, which uses traditional virtio"},{"line_number":153,"context_line":"    queues, all of which must pass through the hypervisor."},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_de1180b1","line":151,"range":{"start_line":151,"start_character":35,"end_line":151,"end_character":45},"in_reply_to":"9fdfeff1_e3864366","updated":"2019-02-20 17:40:33.000000000","message":"Done","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"741ada2785ecc42005ffc5249312b9a4fb077920","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    vhostuser-style VIFs utilize userspace vhost, which allow traffic to"},{"line_number":150,"context_line":"    traverse between the guest and a host userspace application (commonly a"},{"line_number":151,"context_line":"    virtual switch), bypassing the hypervisor. Constrast this with"},{"line_number":152,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, which uses traditional virtio"},{"line_number":153,"context_line":"    queues, all of which must pass through the hypervisor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027vhostuser\u0027"},{"line_number":156,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_a3b83be5","line":153,"range":{"start_line":152,"start_character":66,"end_line":153,"end_character":58},"updated":"2019-02-19 16:04:48.000000000","message":"this is also confusing\n\nboth kenel vhost and vhost user use virtio queue.\n\nthe difference is that with kernel vhost the virtio queue are offloaded to the vhost kernel module requiring a context switch to transmit or recive packets.","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"102f59dcb3457c698e8b031b22a4ad44ee1ddff6","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    vhostuser-style VIFs utilize userspace vhost, which allow traffic to"},{"line_number":150,"context_line":"    traverse between the guest and a host userspace application (commonly a"},{"line_number":151,"context_line":"    virtual switch), bypassing the hypervisor. Constrast this with"},{"line_number":152,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, which uses traditional virtio"},{"line_number":153,"context_line":"    queues, all of which must pass through the hypervisor."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027vhostuser\u0027"},{"line_number":156,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_977bd6bc","line":153,"range":{"start_line":152,"start_character":66,"end_line":153,"end_character":58},"in_reply_to":"9fdfeff1_a3b83be5","updated":"2019-02-20 17:40:33.000000000","message":"Done","commit_id":"a764109f62b63d0fe1848c6d44f4086072f8ebc5"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b54c9a4f15d20080fa4736038139904b7d97fd43","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class VIFGeneric(VIFBase):"},{"line_number":59,"context_line":"    \"\"\"A generic-style VIF."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    Generic-style VIFs are simply TUN/TAP devices connected to whatever the"},{"line_number":62,"context_line":"    plugin want to connect it to."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    For libvirt drivers, this maps to type\u003d\"ethernet\" which just implies a bare"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_1b6863b8","line":61,"range":{"start_line":61,"start_character":27,"end_line":61,"end_character":33},"updated":"2019-02-21 08:43:17.000000000","message":"wonder if \"floating\" or \"unbound\" might be clearer here? \"simply\" or \"simple\" works for me too.\n\nGeneric-style VIFs are unbound, floating TUN/TAP devices that should be setup by the plugin, not the hypervisor.","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class VIFGeneric(VIFBase):"},{"line_number":59,"context_line":"    \"\"\"A generic-style VIF."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    Generic-style VIFs are simply TUN/TAP devices connected to whatever the"},{"line_number":62,"context_line":"    plugin want to connect it to."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    For libvirt drivers, this maps to type\u003d\"ethernet\" which just implies a bare"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_c11bce7d","line":61,"range":{"start_line":61,"start_character":27,"end_line":61,"end_character":33},"in_reply_to":"9fdfeff1_1b6863b8","updated":"2019-02-22 15:56:19.000000000","message":"Good call. Done","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd7f693e2a52ab0defcb354aad97fb091a2b92df","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class VIFBridge(VIFBase):"},{"line_number":78,"context_line":"    \"\"\"A bridge-style VIF."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    Bridge-style VIFs are for use with linux bridge, which is a L2 virtual"},{"line_number":81,"context_line":"    device to which other devices are bound."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027bridge\u0027."}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5287bc62","line":80,"range":{"start_line":80,"start_character":51,"end_line":80,"end_character":58},"updated":"2019-02-20 17:24:29.000000000","message":"\". A linux bridge ...\"\n\nthis sentence reads a little awkardly  i think even with the comma so i would just spit it.","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b54c9a4f15d20080fa4736038139904b7d97fd43","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class VIFBridge(VIFBase):"},{"line_number":78,"context_line":"    \"\"\"A bridge-style VIF."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    Bridge-style VIFs are for use with linux bridge, which is a L2 virtual"},{"line_number":81,"context_line":"    device to which other devices are bound."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027bridge\u0027."}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_fbb8ff11","line":80,"range":{"start_line":80,"start_character":51,"end_line":80,"end_character":58},"in_reply_to":"9fdfeff1_5287bc62","updated":"2019-02-21 08:43:17.000000000","message":"How about:\n\nBridge-style VIFs are bound to a linux bridge by the hypervisor. Other devices may be bound to the same L2 virtual bridge.","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"class VIFBridge(VIFBase):"},{"line_number":78,"context_line":"    \"\"\"A bridge-style VIF."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    Bridge-style VIFs are for use with linux bridge, which is a L2 virtual"},{"line_number":81,"context_line":"    device to which other devices are bound."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027bridge\u0027."}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_4107de1e","line":80,"range":{"start_line":80,"start_character":51,"end_line":80,"end_character":58},"in_reply_to":"9fdfeff1_fbb8ff11","updated":"2019-02-22 15:56:19.000000000","message":"Yup, also better.","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"fd7f693e2a52ab0defcb354aad97fb091a2b92df","unresolved":false,"context_lines":[{"line_number":98,"context_line":"class VIFOpenVSwitch(VIFBase):"},{"line_number":99,"context_line":"    \"\"\"A bridge-style VIF specifically for use with OVS."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    TODO."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    For libvirt drivers, this also maps to type\u003d\u0027bridge\u0027."},{"line_number":104,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_92b3e44d","line":101,"range":{"start_line":101,"start_character":3,"end_line":101,"end_character":9},"updated":"2019-02-20 17:24:29.000000000","message":"you could contrast this with VIFBrige but i would jsut delete the todo.","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b54c9a4f15d20080fa4736038139904b7d97fd43","unresolved":false,"context_lines":[{"line_number":98,"context_line":"class VIFOpenVSwitch(VIFBase):"},{"line_number":99,"context_line":"    \"\"\"A bridge-style VIF specifically for use with OVS."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    TODO."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    For libvirt drivers, this also maps to type\u003d\u0027bridge\u0027."},{"line_number":104,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_fb4d5f3b","line":101,"range":{"start_line":101,"start_character":3,"end_line":101,"end_character":9},"in_reply_to":"9fdfeff1_92b3e44d","updated":"2019-02-21 08:43:17.000000000","message":"How about:\n\nOpen vSwitch VIFs are bound directly (or indirectly) to an Open vSwitch bridge by the hypervisor. Other devices may be bound to the same virtual bridge.","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":98,"context_line":"class VIFOpenVSwitch(VIFBase):"},{"line_number":99,"context_line":"    \"\"\"A bridge-style VIF specifically for use with OVS."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    TODO."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    For libvirt drivers, this also maps to type\u003d\u0027bridge\u0027."},{"line_number":104,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_0101d606","line":101,"range":{"start_line":101,"start_character":3,"end_line":101,"end_character":9},"in_reply_to":"9fdfeff1_fb4d5f3b","updated":"2019-02-22 15:56:19.000000000","message":"I should have had you author this, Jan :) Also good","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b54c9a4f15d20080fa4736038139904b7d97fd43","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    device driver that inserts a software layer between a guest and an SR-IOV"},{"line_number":123,"context_line":"    Virtual Function (VF). Contrast this with"},{"line_number":124,"context_line":"    :class:`~os_vif.objects.vif.VIFHostDevice`, which allows the guest to"},{"line_number":125,"context_line":"    directly connect to the instance."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # For libvirt drivers, this maps to type\u003d\u0027direct\u0027"},{"line_number":128,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_3b6d2799","line":125,"range":{"start_line":125,"start_character":28,"end_line":125,"end_character":36},"updated":"2019-02-21 08:43:17.000000000","message":"VF (or network interface)","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":122,"context_line":"    device driver that inserts a software layer between a guest and an SR-IOV"},{"line_number":123,"context_line":"    Virtual Function (VF). Contrast this with"},{"line_number":124,"context_line":"    :class:`~os_vif.objects.vif.VIFHostDevice`, which allows the guest to"},{"line_number":125,"context_line":"    directly connect to the instance."},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # For libvirt drivers, this maps to type\u003d\u0027direct\u0027"},{"line_number":128,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_7c0ac520","line":125,"range":{"start_line":125,"start_character":28,"end_line":125,"end_character":36},"in_reply_to":"9fdfeff1_3b6d2799","updated":"2019-02-22 15:56:19.000000000","message":"Done","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b54c9a4f15d20080fa4736038139904b7d97fd43","unresolved":false,"context_lines":[{"line_number":148,"context_line":"class VIFVHostUser(VIFBase):"},{"line_number":149,"context_line":"    \"\"\"A vhostuser-style VIF."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    vhostuser-style VIFs utilize a userspace vhost backend, which allow traffic"},{"line_number":152,"context_line":"    to traverse between the guest and a host userspace application (commonly a"},{"line_number":153,"context_line":"    virtual switch), bypassing the kernel network stack. Constrast this with"},{"line_number":154,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, where all packets must be handled"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_fbfb1fbb","line":151,"range":{"start_line":151,"start_character":66,"end_line":151,"end_character":71},"updated":"2019-02-21 08:43:17.000000000","message":"allows","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"class VIFVHostUser(VIFBase):"},{"line_number":149,"context_line":"    \"\"\"A vhostuser-style VIF."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    vhostuser-style VIFs utilize a userspace vhost backend, which allow traffic"},{"line_number":152,"context_line":"    to traverse between the guest and a host userspace application (commonly a"},{"line_number":153,"context_line":"    virtual switch), bypassing the kernel network stack. Constrast this with"},{"line_number":154,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, where all packets must be handled"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_dc1ad16d","line":151,"range":{"start_line":151,"start_character":66,"end_line":151,"end_character":71},"in_reply_to":"9fdfeff1_fbfb1fbb","updated":"2019-02-22 15:56:19.000000000","message":"Done","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"b54c9a4f15d20080fa4736038139904b7d97fd43","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    vhostuser-style VIFs utilize a userspace vhost backend, which allow traffic"},{"line_number":152,"context_line":"    to traverse between the guest and a host userspace application (commonly a"},{"line_number":153,"context_line":"    virtual switch), bypassing the kernel network stack. Constrast this with"},{"line_number":154,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, where all packets must be handled"},{"line_number":155,"context_line":"    by the hypervisor."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_bb2fd73c","line":153,"range":{"start_line":153,"start_character":57,"end_line":153,"end_character":66},"updated":"2019-02-21 08:43:17.000000000","message":"Contrast","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    vhostuser-style VIFs utilize a userspace vhost backend, which allow traffic"},{"line_number":152,"context_line":"    to traverse between the guest and a host userspace application (commonly a"},{"line_number":153,"context_line":"    virtual switch), bypassing the kernel network stack. Constrast this with"},{"line_number":154,"context_line":"    :class:`~os_vif.objects.vif.VIFBridge`, where all packets must be handled"},{"line_number":155,"context_line":"    by the hypervisor."},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_5c20219c","line":153,"range":{"start_line":153,"start_character":57,"end_line":153,"end_character":66},"in_reply_to":"9fdfeff1_bb2fd73c","updated":"2019-02-22 15:56:19.000000000","message":"Doh. Done","commit_id":"18463f1f90214b7a6eeec59b1d0f7948d261cf9f"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"d0ac6da893451b13b4b88f72f0f621adf18e6a74","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        #: Valid values are ``ethernet`` and ``generic``."},{"line_number":207,"context_line":"        #:"},{"line_number":208,"context_line":"        #: - ``ethernet`` is ``\u003cinterface type\u003d\u0027hostdev\u0027\u003e``"},{"line_number":209,"context_line":"        #: - ``generic`` is ``\u003chostdev mode\u003d\u0027subsystem\u0027 type\u003d\u0027pci\u0027\u003e``"},{"line_number":210,"context_line":"        \u0027dev_type\u0027: osv_fields.VIFHostDeviceDevTypeField(),"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        #: The PCI address of the host device."}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_c6775f9f","line":209,"range":{"start_line":209,"start_character":11,"end_line":209,"end_character":69},"updated":"2019-02-21 13:22:46.000000000","message":"Note that the object model supports this, but Nova does not.","commit_id":"f6f67d690f7fee7d235ce07ad31c0d02ff0b9de5"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c7b1e16cc4328a5dee3e3dcc3a77c2a17a5226ec","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"@base.VersionedObjectRegistry.register"},{"line_number":218,"context_line":"class VIFNestedDPDK(VIFBase):"},{"line_number":219,"context_line":"    \"\"\"TODO."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    For kuryr-kubernetes nested DPDK interfaces."},{"line_number":222,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_19fe216b","line":219,"range":{"start_line":219,"start_character":6,"end_line":219,"end_character":12},"updated":"2019-02-21 17:26:35.000000000","message":"i assume you what to finish this before we move forward with this patch?","commit_id":"f6f67d690f7fee7d235ce07ad31c0d02ff0b9de5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0c340bdac664f45b80c7a354ed8470b4fb39925e","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"@base.VersionedObjectRegistry.register"},{"line_number":218,"context_line":"class VIFNestedDPDK(VIFBase):"},{"line_number":219,"context_line":"    \"\"\"TODO."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    For kuryr-kubernetes nested DPDK interfaces."},{"line_number":222,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"9fdfeff1_d2ab7e1b","line":219,"range":{"start_line":219,"start_character":6,"end_line":219,"end_character":12},"in_reply_to":"9fdfeff1_19fe216b","updated":"2019-02-22 15:56:19.000000000","message":"If you know what to say, sure. Otherwise, this is as good as I can do.","commit_id":"f6f67d690f7fee7d235ce07ad31c0d02ff0b9de5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f39438f8c186cb6685d205459477ad12e0de4151","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        #: Unique identifier of the VIF port."},{"line_number":32,"context_line":"        \u0027id\u0027: fields.UUIDField(),"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        #: The guest MAC address."}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_1e38f5d0","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":11},"updated":"2019-02-26 14:10:56.000000000","message":"Is the #: thing a convention?\n\nI don\u0027t see it used anywhere in https://www.python.org/dev/peps/pep-0224/ so I\u0027m wondering where this convention comes from.","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d0befd9ad1d8358ddca4cea51241ee9e741f04ec","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        #: Unique identifier of the VIF port."},{"line_number":32,"context_line":"        \u0027id\u0027: fields.UUIDField(),"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        #: The guest MAC address."}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_1e70f571","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":11},"in_reply_to":"9fdfeff1_1e38f5d0","updated":"2019-02-26 14:26:46.000000000","message":"Found out from stephenfin it\u0027s a sphinx doc thing:\n\nhttp://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#directive-autoattribute","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d0befd9ad1d8358ddca4cea51241ee9e741f04ec","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    device driver that inserts a software layer between a guest and an SR-IOV"},{"line_number":129,"context_line":"    Virtual Function (VF). Contrast this with"},{"line_number":130,"context_line":"    :class:`~os_vif.objects.vif.VIFHostDevice`, which allows the guest to"},{"line_number":131,"context_line":"    directly connect to the VF."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027direct\u0027"},{"line_number":134,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_bec44961","line":131,"updated":"2019-02-26 14:26:46.000000000","message":"++","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d0befd9ad1d8358ddca4cea51241ee9e741f04ec","unresolved":false,"context_lines":[{"line_number":158,"context_line":"    vhostuser-style VIFs utilize a userspace vhost backend, which allows"},{"line_number":159,"context_line":"    traffic to traverse between the guest and a host userspace application"},{"line_number":160,"context_line":"    (commonly a virtual switch), bypassing the kernel network stack. Contrast"},{"line_number":161,"context_line":"    this with :class:`~os_vif.objects.vif.VIFBridge`, where all packets must be"},{"line_number":162,"context_line":"    handled by the hypervisor."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027vhostuser\u0027"},{"line_number":165,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_5e843d0b","line":162,"range":{"start_line":161,"start_character":54,"end_line":162,"end_character":30},"updated":"2019-02-26 14:26:46.000000000","message":"the hypervisor could also be a \"host userspace application\", no? I mean, I know KVM is an in-kernel virtual machine monitor, but there are hypervisors that run in userspace, no?","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d0befd9ad1d8358ddca4cea51241ee9e741f04ec","unresolved":false,"context_lines":[{"line_number":190,"context_line":"class VIFHostDevice(VIFBase):"},{"line_number":191,"context_line":"    \"\"\"A hostdev-style VIF."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    Hostdev-style VIFs provide a guest with direct access to an SR-IOV Virtual"},{"line_number":194,"context_line":"    Function (VF). Contrast this with :class:`~ovs_vif.objects.vif.VIFDirect`,"},{"line_number":195,"context_line":"    which includes a software layer between the VF and the guest."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027hostdev\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_3e94d935","line":194,"range":{"start_line":193,"start_character":64,"end_line":194,"end_character":17},"updated":"2019-02-26 14:26:46.000000000","message":"is this always the case? What about direct access to an SR-IOV Physical Function or a non-SR-IOV host NIC (PCI passthrough-esque)?","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"},{"author":{"_account_id":25733,"name":"Jan Gutter","email":"github@jangutter.com","username":"jangutter"},"change_message_id":"1381572ac3bb4872cfd818df5f6ac9c2cbb37066","unresolved":false,"context_lines":[{"line_number":190,"context_line":"class VIFHostDevice(VIFBase):"},{"line_number":191,"context_line":"    \"\"\"A hostdev-style VIF."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    Hostdev-style VIFs provide a guest with direct access to an SR-IOV Virtual"},{"line_number":194,"context_line":"    Function (VF). Contrast this with :class:`~ovs_vif.objects.vif.VIFDirect`,"},{"line_number":195,"context_line":"    which includes a software layer between the VF and the guest."},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    For libvirt drivers, this maps to type\u003d\u0027hostdev\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_44523014","line":194,"range":{"start_line":193,"start_character":64,"end_line":194,"end_character":17},"in_reply_to":"9fdfeff1_3e94d935","updated":"2019-02-26 15:29:55.000000000","message":"The \u0027ethernet\u0027 type is currently the only one supported in Nova, and that\u0027s pretty much only an SR-IOV VF.\n\n\u0027generic\u0027 is currently unsupported for os-vif/Nova (I know, cuz I added the Nova code that generates the exception). I think the only way \u0027generic\u0027 could work is with privileged or trusted operations... Or maybe the bluefield thingy that they\u0027re working on for Ironic.","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d0befd9ad1d8358ddca4cea51241ee9e741f04ec","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"@base.VersionedObjectRegistry.register"},{"line_number":218,"context_line":"class VIFNestedDPDK(VIFBase):"},{"line_number":219,"context_line":"    \"\"\"TODO."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    For kuryr-kubernetes nested DPDK interfaces."},{"line_number":222,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_dea4ada5","line":219,"range":{"start_line":219,"start_character":7,"end_line":219,"end_character":11},"updated":"2019-02-26 14:26:46.000000000","message":"Yup, that pretty much sums it up. :)","commit_id":"fdcce7138f618236124b4c9e60d08246bfc46a39"}]}
