)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"f4432fdb8826a5c5620203b60d06ac8108024691","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Moshe Levi \u003cmoshele@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-09 22:14:21 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVS acceleration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I90120119800cc2d3083b832700cc3d2ca655e638"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ba5201f7_33345549","line":7,"updated":"2017-01-09 20:18:00.000000000","message":"Can you please link to... Something? The commit message is quite context-less \u003dD","commit_id":"aab697b62e036f3ca4603bb00f42cf1301653136"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ffe62b97_8a73af4d","updated":"2017-03-27 11:07:40.000000000","message":"Who thing could do with being rewrapped at ~72 characters","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":7,"context_line":"HW offload support for openvswitch"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Kernel 4.8 we introduced TC HW offloads framework"},{"line_number":10,"context_line":"for SR-IOV VF which allow to configure the NIC. [1]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These OVS patches [2] allow to use the TC"},{"line_number":13,"context_line":"framework to offload ovs datapath rules."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_0aaf9f94","line":10,"range":{"start_line":10,"start_character":46,"end_line":10,"end_character":51},"updated":"2017-03-27 11:07:40.000000000","message":"a little more context would be helpful here. Configure it how?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":7,"context_line":"HW offload support for openvswitch"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Kernel 4.8 we introduced TC HW offloads framework"},{"line_number":10,"context_line":"for SR-IOV VF which allow to configure the NIC. [1]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These OVS patches [2] allow to use the TC"},{"line_number":13,"context_line":"framework to offload ovs datapath rules."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_4aa5a7b4","line":10,"updated":"2017-03-27 11:07:40.000000000","message":"allows us to configure","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"HW offload support for openvswitch"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Kernel 4.8 we introduced TC HW offloads framework"},{"line_number":10,"context_line":"for SR-IOV VF which allow to configure the NIC. [1]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These OVS patches [2] allow to use the TC"},{"line_number":13,"context_line":"framework to offload ovs datapath rules."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_d6612b07","line":10,"range":{"start_line":10,"start_character":46,"end_line":10,"end_character":51},"in_reply_to":"ffe62b97_0aaf9f94","updated":"2017-04-02 10:44:52.000000000","message":"Usual SR-IOV VF can be configured with ip link tool.\nNow in newer kernel we can configure the VF using Linux TC tool. We are working with OVS community to using tc tool to do  offload ovs datapth to the SR-IOV NIC. \nThis will allow us to manage the VF with ovs.","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"da34a4c8860e2ebae4cfaff9c6769e4d45d8acc3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"HW offload support for openvswitch"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Kernel 4.8 we introduced TC HW offloads framework"},{"line_number":10,"context_line":"for SR-IOV VF which allow to configure the NIC. [1]"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"These OVS patches [2] allow to use the TC"},{"line_number":13,"context_line":"framework to offload ovs datapath rules."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"dfeb2761_e739683f","line":10,"range":{"start_line":10,"start_character":46,"end_line":10,"end_character":51},"in_reply_to":"ffe62b97_d6612b07","updated":"2017-04-03 09:17:19.000000000","message":"Can you put this additional information into the commit message for future reviewers? Could do with being documented somewhere too. Does os-vif have built-in documentation?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":12,"context_line":"These OVS patches [2] allow to use the TC"},{"line_number":13,"context_line":"framework to offload ovs datapath rules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch addes plug/unplug when ovs vif OVS_ACCELERATION."},{"line_number":16,"context_line":"The plug method lookup VF represontor and plug it to br-int."},{"line_number":17,"context_line":"The unplug remove the VF representor  from the br-int."},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_6a8bcb1e","line":15,"range":{"start_line":15,"start_character":11,"end_line":15,"end_character":16},"updated":"2017-03-27 11:07:40.000000000","message":"adds","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":13,"context_line":"framework to offload ovs datapath rules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch addes plug/unplug when ovs vif OVS_ACCELERATION."},{"line_number":16,"context_line":"The plug method lookup VF represontor and plug it to br-int."},{"line_number":17,"context_line":"The unplug remove the VF representor  from the br-int."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[1] http://netdevconf.org/1.2/papers/efraim-gerlitz-sriov-ovs-final.pdf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_4ac00751","line":16,"range":{"start_line":16,"start_character":26,"end_line":16,"end_character":37},"updated":"2017-03-27 11:07:40.000000000","message":"representor, whatever that is","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"framework to offload ovs datapath rules."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch addes plug/unplug when ovs vif OVS_ACCELERATION."},{"line_number":16,"context_line":"The plug method lookup VF represontor and plug it to br-int."},{"line_number":17,"context_line":"The unplug remove the VF representor  from the br-int."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[1] http://netdevconf.org/1.2/papers/efraim-gerlitz-sriov-ovs-final.pdf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_76725f4b","line":16,"range":{"start_line":16,"start_character":26,"end_line":16,"end_character":37},"in_reply_to":"ffe62b97_4ac00751","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch addes plug/unplug when ovs vif OVS_ACCELERATION."},{"line_number":16,"context_line":"The plug method lookup VF represontor and plug it to br-int."},{"line_number":17,"context_line":"The unplug remove the VF representor  from the br-int."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[1] http://netdevconf.org/1.2/papers/efraim-gerlitz-sriov-ovs-final.pdf"},{"line_number":20,"context_line":"[2] https://patchwork.ozlabs.org/patch/738176/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_0a88bf1c","line":17,"range":{"start_line":17,"start_character":36,"end_line":17,"end_character":37},"updated":"2017-03-27 11:07:40.000000000","message":"extra space","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"This patch addes plug/unplug when ovs vif OVS_ACCELERATION."},{"line_number":16,"context_line":"The plug method lookup VF represontor and plug it to br-int."},{"line_number":17,"context_line":"The unplug remove the VF representor  from the br-int."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"[1] http://netdevconf.org/1.2/papers/efraim-gerlitz-sriov-ovs-final.pdf"},{"line_number":20,"context_line":"[2] https://patchwork.ozlabs.org/patch/738176/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"ffe62b97_96572327","line":17,"range":{"start_line":17,"start_character":36,"end_line":17,"end_character":37},"in_reply_to":"ffe62b97_0a88bf1c","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Stephen Finucane \u003csfinucan@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-04-24 17:16:35 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"HW offload support for openvswitch"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Kernel 4.8 we introduced TC HW offloads framework for SR-IOV VFs which"},{"line_number":10,"context_line":"allows us to configure the NIC [1]. Subsequent OVS patches [2] allow us"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5ff73747_9e033043","line":7,"updated":"2017-04-24 20:52:20.000000000","message":"This is specific to TCP checksum offload, not all offloads, right?","commit_id":"902d05636574185638174c3f8c134b49a46e242f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"HW offload support for openvswitch"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In Kernel 4.8 we introduced TC HW offloads framework for SR-IOV VFs which"},{"line_number":10,"context_line":"allows us to configure the NIC [1]. Subsequent OVS patches [2] allow us"},{"line_number":11,"context_line":"to use the TC framework to offload OVS datapath rules."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"5ff73747_7e006435","line":9,"updated":"2017-04-24 20:52:20.000000000","message":"Would be nice to spell out the various acronyms here and in the doc content included in this patch. At least, spell out once and include the acronym in parens afterwards, e.g. TCP Checksum (TC) hardware (HW) offloads framework. At least, I *think* that\u0027s what TC stands for? :)","commit_id":"902d05636574185638174c3f8c134b49a46e242f"}],"doc/source/plugins/ovs.rst":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"      ethtool -K \u003cPF\u003e hw-tc-offload"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"  This will create *VF representor* per VF. The VF representor plays the same"},{"line_number":46,"context_line":"  role as TAP devices in Para-Virtual (PV) setup. In this case the ``plug()``"},{"line_number":47,"context_line":"  method connects the VF representor to the OpenVSwitch bridge."},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"5ff73747_3efadc41","line":45,"updated":"2017-04-24 20:52:20.000000000","message":"I don\u0027t believe that whether the HW offload is enabled on the PF or not makes any difference whether a VF representor is created for the guest, right? As the above reads, it makes it look like the VF representor is only created if the TC offload is enabled...","commit_id":"902d05636574185638174c3f8c134b49a46e242f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"  This will create *VF representor* per VF. The VF representor plays the same"},{"line_number":46,"context_line":"  role as TAP devices in Para-Virtual (PV) setup. In this case the ``plug()``"},{"line_number":47,"context_line":"  method connects the VF representor to the OpenVSwitch bridge."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  Refer to :ref:`vif-hostdevice` for more information."},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"5ff73747_1e95e0e4","line":47,"updated":"2017-04-24 20:52:20.000000000","message":"I guess I\u0027m OK having this documentation about a particular HW offload in the plugin\u0027s documentation, but this seems very much like it belongs in an operator guide (too)?","commit_id":"902d05636574185638174c3f8c134b49a46e242f"}],"os_vif/objects/vif.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1f49b8fc850b358d71bab5210ea9124559473f08","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        \u0027dev_address\u0027: osv_fields.PCIAddressField(),"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        # Name of the physical device to connect to (eg br0)"},{"line_number":152,"context_line":"        \u0027bridge_name\u0027: fields.StringField(),"},{"line_number":153,"context_line":"    }"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_da196c7b","line":152,"range":{"start_line":152,"start_character":8,"end_line":152,"end_character":20},"updated":"2016-11-21 17:29:46.000000000","message":"should this not be dev_name based on the comment?","commit_id":"5343b2bed92a85b75d0edb5a9752480f697f5854"}],"test_plug_ovs_acceleration":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ffe62b97_7ff94f4b","updated":"2017-03-27 11:07:40.000000000","message":"Mind elaborating what this is for?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ffe62b97_1639d3f0","in_reply_to":"ffe62b97_7ff94f4b","updated":"2017-04-02 10:44:52.000000000","message":"it a mistake","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"}],"vif_plug_ovs/exception.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class RepresentorNotFound(osv_exception.ExceptionBase):"},{"line_number":32,"context_line":"    msg_fmt \u003d _(\u0027Failed getting representor port for PF %(ifname)s with \u0027"},{"line_number":33,"context_line":"                \u0027%(vf_num)s\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_ffa2ff4a","line":32,"range":{"start_line":32,"start_character":32,"end_line":32,"end_character":43},"updated":"2017-03-27 11:07:40.000000000","message":"What do you mean by \u0027representor port\u0027? Typo?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class RepresentorNotFound(osv_exception.ExceptionBase):"},{"line_number":32,"context_line":"    msg_fmt \u003d _(\u0027Failed getting representor port for PF %(ifname)s with \u0027"},{"line_number":33,"context_line":"                \u0027%(vf_num)s\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_91484d5c","line":32,"range":{"start_line":32,"start_character":32,"end_line":32,"end_character":43},"in_reply_to":"ffe62b97_257174aa","updated":"2017-04-02 10:44:52.000000000","message":"yes that is correct, to be able to manage the VF with ovs the linux kernel can create netdevice which is representation of the VF in the hypervisor (that why we call it representor port). \nThis can be done by doing ethtool -K \u003cPF\u003e hw-tc-offload on than each VF will have also netdevice which can be plug to OVS bridge and be manage by it","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a1dfa9724016629e12654775fbf9d967bcf6db31","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class RepresentorNotFound(osv_exception.ExceptionBase):"},{"line_number":32,"context_line":"    msg_fmt \u003d _(\u0027Failed getting representor port for PF %(ifname)s with \u0027"},{"line_number":33,"context_line":"                \u0027%(vf_num)s\u0027)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_257174aa","line":32,"range":{"start_line":32,"start_character":32,"end_line":32,"end_character":43},"in_reply_to":"ffe62b97_ffa2ff4a","updated":"2017-03-27 11:23:16.000000000","message":"if i rember correctly you do not actully add VFs to ovs you add poxy ports the reference the vf so that ovs can control them but the vf is passed through to the guest.\n\ne.g. control plan is via ovs but dataplane uses sriov.\n\nmoshe can confirm if that is right but that is why its called a representor port as it is not the actual vf/pf","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class PciDeviceNotFoundById(osv_exception.ExceptionBase):"},{"line_number":37,"context_line":"    msg_fmt \u003d _(\"PCI device %()s not found\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"5ff73747_fe99141f","line":37,"updated":"2017-04-24 20:52:20.000000000","message":"%()s is not a valid format string :) I think you wanted %(id)s","commit_id":"902d05636574185638174c3f8c134b49a46e242f"}],"vif_plug_ovs/linux_net.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c242ac690a85638639da851499eed6bbd838c543","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def get_representor_port(pf_ifname, vf_num):"},{"line_number":184,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        for device in os.listdir(path):"},{"line_number":187,"context_line":"            if device !\u003d pf_ifname:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_b4e8fd11","line":184,"updated":"2017-01-03 17:15:20.000000000","message":"am i correct in saying the new datapath type will not work on windows? if it will be supported then we should plan to make these functions cross platform in a later patch.","commit_id":"e7aaad042ccd2c0537617ee3d4003dfcdac490fa"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e5f9a597d01c53682ec6cb15e9626beb05cc9ad2","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"def get_representor_port(pf_ifname, vf_num):"},{"line_number":184,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":185,"context_line":"    try:"},{"line_number":186,"context_line":"        for device in os.listdir(path):"},{"line_number":187,"context_line":"            if device !\u003d pf_ifname:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_40ac6c35","line":184,"in_reply_to":"ba5201f7_b4e8fd11","updated":"2017-01-03 19:17:36.000000000","message":"yes I will check and get back to you on this","commit_id":"e7aaad042ccd2c0537617ee3d4003dfcdac490fa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4a8a70f85258027b7f16f8a31b90cecb4dbc81cc","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"@privsep.vif_plug.entrypoint"},{"line_number":167,"context_line":"def add_bridge_port(bridge, dev):"},{"line_number":168,"context_line":"    processutils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, bridge, \u0027up\u0027)"},{"line_number":169,"context_line":"    processutils.execute(\u0027brctl\u0027, \u0027addif\u0027, bridge, dev)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_e948318a","side":"PARENT","line":168,"range":{"start_line":168,"start_character":3,"end_line":168,"end_character":59},"updated":"2017-03-16 17:20:58.000000000","message":"can you split this into a seperate patch as it closes https://bugs.launchpad.net/os-vif/+bug/1597287","commit_id":"414a35768d9bbeb09dd73163a2bae441534e2ca6"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d777488f3e0c32f45a2f0c3feca29429fd4ace6a","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"@privsep.vif_plug.entrypoint"},{"line_number":167,"context_line":"def add_bridge_port(bridge, dev):"},{"line_number":168,"context_line":"    processutils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, bridge, \u0027up\u0027)"},{"line_number":169,"context_line":"    processutils.execute(\u0027brctl\u0027, \u0027addif\u0027, bridge, dev)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_df8f6321","side":"PARENT","line":168,"range":{"start_line":168,"start_character":3,"end_line":168,"end_character":59},"in_reply_to":"1a1ced50_e948318a","updated":"2017-03-19 09:04:23.000000000","message":"Done","commit_id":"414a35768d9bbeb09dd73163a2bae441534e2ca6"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    processutils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, interface_name, port_state,"},{"line_number":205,"context_line":"                         check_exit_code\u003d[0, 2, 254])"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _set_mtu_request(dev, mtu, timeout\u003dNone):"},{"line_number":209,"context_line":"    args \u003d [\u0027--\u0027, \u0027set\u0027, \u0027interface\u0027, dev,"},{"line_number":210,"context_line":"            \u0027mtu_request\u003d%s\u0027 % mtu]"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_9fac1335","line":207,"updated":"2017-03-27 11:07:40.000000000","message":"You\u0027ve dropped the decorator here. Intentional?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    processutils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, interface_name, port_state,"},{"line_number":205,"context_line":"                         check_exit_code\u003d[0, 2, 254])"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _set_mtu_request(dev, mtu, timeout\u003dNone):"},{"line_number":209,"context_line":"    args \u003d [\u0027--\u0027, \u0027set\u0027, \u0027interface\u0027, dev,"},{"line_number":210,"context_line":"            \u0027mtu_request\u003d%s\u0027 % mtu]"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_20a36d02","line":207,"in_reply_to":"ffe62b97_25429411","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a1dfa9724016629e12654775fbf9d967bcf6db31","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    processutils.execute(\u0027ip\u0027, \u0027link\u0027, \u0027set\u0027, interface_name, port_state,"},{"line_number":205,"context_line":"                         check_exit_code\u003d[0, 2, 254])"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def _set_mtu_request(dev, mtu, timeout\u003dNone):"},{"line_number":209,"context_line":"    args \u003d [\u0027--\u0027, \u0027set\u0027, \u0027interface\u0027, dev,"},{"line_number":210,"context_line":"            \u0027mtu_request\u003d%s\u0027 % mtu]"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_25429411","line":207,"in_reply_to":"ffe62b97_9fac1335","updated":"2017-03-27 11:23:16.000000000","message":"ovs-vsctl will need to be invoked with root so good catch this will not work correctly without the decorator","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    return True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"def get_representor_port(pf_ifname, vf_num):"},{"line_number":225,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        for device in os.listdir(path):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_1f6ec300","line":224,"range":{"start_line":224,"start_character":4,"end_line":224,"end_character":24},"updated":"2017-03-27 11:07:40.000000000","message":"I personally have no idea what a representor port is. Docstring?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    return True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"def get_representor_port(pf_ifname, vf_num):"},{"line_number":225,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        for device in os.listdir(path):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_1801cf06","line":224,"range":{"start_line":224,"start_character":4,"end_line":224,"end_character":24},"in_reply_to":"ffe62b97_1f6ec300","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        for device in os.listdir(path):"},{"line_number":228,"context_line":"            if device !\u003d pf_ifname:"},{"line_number":229,"context_line":"                file_name \u003d os.path.join(path, device, \u0027phys_port_name\u0027)"},{"line_number":230,"context_line":"                if os.path.isfile(file_name):"},{"line_number":231,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_bf5b5752","line":228,"range":{"start_line":228,"start_character":12,"end_line":228,"end_character":35},"updated":"2017-03-27 11:07:40.000000000","message":"nit: You could fast escape this and remove some indentation:\n\n  if device \u003d\u003d pf_ifname:\n      continue","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":225,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        for device in os.listdir(path):"},{"line_number":228,"context_line":"            if device !\u003d pf_ifname:"},{"line_number":229,"context_line":"                file_name \u003d os.path.join(path, device, \u0027phys_port_name\u0027)"},{"line_number":230,"context_line":"                if os.path.isfile(file_name):"},{"line_number":231,"context_line":"                    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_18c30f59","line":228,"range":{"start_line":228,"start_character":12,"end_line":228,"end_character":35},"in_reply_to":"ffe62b97_bf5b5752","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        for device in os.listdir(path):"},{"line_number":228,"context_line":"            if device !\u003d pf_ifname:"},{"line_number":229,"context_line":"                file_name \u003d os.path.join(path, device, \u0027phys_port_name\u0027)"},{"line_number":230,"context_line":"                if os.path.isfile(file_name):"},{"line_number":231,"context_line":"                    try:"},{"line_number":232,"context_line":"                        representor_num \u003d open(\"%s/%s/phys_port_name\" %"},{"line_number":233,"context_line":"                            (path, device)).readline().rstrip()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_7f55cf1c","line":230,"range":{"start_line":230,"start_character":16,"end_line":230,"end_character":45},"updated":"2017-03-27 11:07:40.000000000","message":"ditto?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        for device in os.listdir(path):"},{"line_number":228,"context_line":"            if device !\u003d pf_ifname:"},{"line_number":229,"context_line":"                file_name \u003d os.path.join(path, device, \u0027phys_port_name\u0027)"},{"line_number":230,"context_line":"                if os.path.isfile(file_name):"},{"line_number":231,"context_line":"                    try:"},{"line_number":232,"context_line":"                        representor_num \u003d open(\"%s/%s/phys_port_name\" %"},{"line_number":233,"context_line":"                            (path, device)).readline().rstrip()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_98acbf9f","line":230,"range":{"start_line":230,"start_character":16,"end_line":230,"end_character":45},"in_reply_to":"ffe62b97_7f55cf1c","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                            return device"},{"line_number":236,"context_line":"                    except IOError as e:"},{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_bf20f7b1","line":238,"range":{"start_line":238,"start_character":28,"end_line":238,"end_character":59},"updated":"2017-03-27 11:07:40.000000000","message":"What would cause this to happen? perhaps some docs would help","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                            return device"},{"line_number":236,"context_line":"                    except IOError as e:"},{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_5b6751ea","line":238,"range":{"start_line":238,"start_character":28,"end_line":238,"end_character":59},"in_reply_to":"ffe62b97_bf20f7b1","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"},{"line_number":242,"context_line":"    raise exception.RepresentorNotFound(ifname\u003dpf_ifname, vf_num\u003dvf_num)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_4a03670e","line":240,"range":{"start_line":240,"start_character":4,"end_line":240,"end_character":19},"updated":"2017-03-27 11:07:40.000000000","message":"Aren\u0027t you already handling this on line 236?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"},{"line_number":242,"context_line":"    raise exception.RepresentorNotFound(ifname\u003dpf_ifname, vf_num\u003dvf_num)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_38ab7375","line":240,"range":{"start_line":240,"start_character":4,"end_line":240,"end_character":19},"in_reply_to":"ffe62b97_458eb82e","updated":"2017-04-02 10:44:52.000000000","message":"it for line 227 when we list /sys/class/net/%s/subsystem/","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a1dfa9724016629e12654775fbf9d967bcf6db31","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"},{"line_number":242,"context_line":"    raise exception.RepresentorNotFound(ifname\u003dpf_ifname, vf_num\u003dvf_num)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_458eb82e","line":240,"range":{"start_line":240,"start_character":4,"end_line":240,"end_character":19},"in_reply_to":"ffe62b97_4a03670e","updated":"2017-03-27 11:23:16.000000000","message":"maybe this is for line 230\nim not sure if you will get an io error if you dont have permission to read a file and tey to test if it is a file?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    return True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"def get_representor_port(pf_ifname, vf_num):"},{"line_number":225,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        for device in os.listdir(path):"},{"line_number":228,"context_line":"            if device !\u003d pf_ifname:"},{"line_number":229,"context_line":"                file_name \u003d os.path.join(path, device, \u0027phys_port_name\u0027)"},{"line_number":230,"context_line":"                if os.path.isfile(file_name):"},{"line_number":231,"context_line":"                    try:"},{"line_number":232,"context_line":"                        representor_num \u003d open(\"%s/%s/phys_port_name\" %"},{"line_number":233,"context_line":"                            (path, device)).readline().rstrip()"},{"line_number":234,"context_line":"                        if representor_num \u003d\u003d vf_num:"},{"line_number":235,"context_line":"                            return device"},{"line_number":236,"context_line":"                    except IOError as e:"},{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"},{"line_number":242,"context_line":"    raise exception.RepresentorNotFound(ifname\u003dpf_ifname, vf_num\u003dvf_num)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"def _get_sysfs_netdev_path(pci_addr, pf_interface):"},{"line_number":246,"context_line":"    \"\"\"Get the sysfs path based on the PCI address of the device."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    Assumes a networking device - will not check for the existence of the path."},{"line_number":249,"context_line":"    \"\"\""},{"line_number":250,"context_line":"    if pf_interface:"},{"line_number":251,"context_line":"        return \"/sys/bus/pci/devices/%s/physfn/net\" % (pci_addr)"},{"line_number":252,"context_line":"    return \"/sys/bus/pci/devices/%s/net\" % (pci_addr)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"def get_ifname_by_pci_address(pci_addr, pf_interface\u003dFalse):"},{"line_number":256,"context_line":"    \"\"\"Get the interface name based on a VF\u0027s pci address"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    The returned interface name is either the parent PF\u0027s or that of the VF"},{"line_number":259,"context_line":"    itself based on the argument of pf_interface."},{"line_number":260,"context_line":"    \"\"\""},{"line_number":261,"context_line":"    dev_path \u003d _get_sysfs_netdev_path(pci_addr, pf_interface)"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        dev_info \u003d os.listdir(dev_path)"},{"line_number":264,"context_line":"        return dev_info.pop()"},{"line_number":265,"context_line":"    except Exception:"},{"line_number":266,"context_line":"        raise exception.PciDeviceNotFoundById(id\u003dpci_addr)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"def get_vf_num_by_pci_address(pci_addr):"},{"line_number":270,"context_line":"    \"\"\"Get the VF number based on a VF\u0027s pci address"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    A VF is associated with an VF number, which ip link command uses to"},{"line_number":273,"context_line":"    configure it. This number can be obtained from the PCI device filesystem."},{"line_number":274,"context_line":"    \"\"\""},{"line_number":275,"context_line":"    VIRTFN_RE \u003d re.compile(\"virtfn(\\d+)\")"},{"line_number":276,"context_line":"    virtfns_path \u003d \"/sys/bus/pci/devices/%s/physfn/virtfn*\" % (pci_addr)"},{"line_number":277,"context_line":"    vf_num \u003d None"},{"line_number":278,"context_line":"    try:"},{"line_number":279,"context_line":"        for vf_path in glob.iglob(virtfns_path):"},{"line_number":280,"context_line":"            if re.search(pci_addr, os.readlink(vf_path)):"},{"line_number":281,"context_line":"                t \u003d VIRTFN_RE.search(vf_path)"},{"line_number":282,"context_line":"                vf_num \u003d t.group(1)"},{"line_number":283,"context_line":"                break"},{"line_number":284,"context_line":"    except Exception:"},{"line_number":285,"context_line":"        pass"},{"line_number":286,"context_line":"    if vf_num is None:"},{"line_number":287,"context_line":"        raise exception.PciDeviceNotFoundById(id\u003dpci_addr)"},{"line_number":288,"context_line":"    return vf_num"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_6a4e2b70","line":288,"range":{"start_line":224,"start_character":0,"end_line":288,"end_character":17},"updated":"2017-03-27 11:07:40.000000000","message":"I wonder if this really belongs here or should it go into its own file. There isn\u0027t really anything Linux net\u0027y about this.","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"a1dfa9724016629e12654775fbf9d967bcf6db31","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    return True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"def get_representor_port(pf_ifname, vf_num):"},{"line_number":225,"context_line":"    path \u003d \"/sys/class/net/%s/subsystem/\" % pf_ifname"},{"line_number":226,"context_line":"    try:"},{"line_number":227,"context_line":"        for device in os.listdir(path):"},{"line_number":228,"context_line":"            if device !\u003d pf_ifname:"},{"line_number":229,"context_line":"                file_name \u003d os.path.join(path, device, \u0027phys_port_name\u0027)"},{"line_number":230,"context_line":"                if os.path.isfile(file_name):"},{"line_number":231,"context_line":"                    try:"},{"line_number":232,"context_line":"                        representor_num \u003d open(\"%s/%s/phys_port_name\" %"},{"line_number":233,"context_line":"                            (path, device)).readline().rstrip()"},{"line_number":234,"context_line":"                        if representor_num \u003d\u003d vf_num:"},{"line_number":235,"context_line":"                            return device"},{"line_number":236,"context_line":"                    except IOError as e:"},{"line_number":237,"context_line":"                        with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":238,"context_line":"                            if e.errno \u003d\u003d errno.EOPNOTSUPP:"},{"line_number":239,"context_line":"                                ctxt.reraise \u003d False"},{"line_number":240,"context_line":"    except IOError:"},{"line_number":241,"context_line":"        pass"},{"line_number":242,"context_line":"    raise exception.RepresentorNotFound(ifname\u003dpf_ifname, vf_num\u003dvf_num)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"def _get_sysfs_netdev_path(pci_addr, pf_interface):"},{"line_number":246,"context_line":"    \"\"\"Get the sysfs path based on the PCI address of the device."},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    Assumes a networking device - will not check for the existence of the path."},{"line_number":249,"context_line":"    \"\"\""},{"line_number":250,"context_line":"    if pf_interface:"},{"line_number":251,"context_line":"        return \"/sys/bus/pci/devices/%s/physfn/net\" % (pci_addr)"},{"line_number":252,"context_line":"    return \"/sys/bus/pci/devices/%s/net\" % (pci_addr)"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"def get_ifname_by_pci_address(pci_addr, pf_interface\u003dFalse):"},{"line_number":256,"context_line":"    \"\"\"Get the interface name based on a VF\u0027s pci address"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    The returned interface name is either the parent PF\u0027s or that of the VF"},{"line_number":259,"context_line":"    itself based on the argument of pf_interface."},{"line_number":260,"context_line":"    \"\"\""},{"line_number":261,"context_line":"    dev_path \u003d _get_sysfs_netdev_path(pci_addr, pf_interface)"},{"line_number":262,"context_line":"    try:"},{"line_number":263,"context_line":"        dev_info \u003d os.listdir(dev_path)"},{"line_number":264,"context_line":"        return dev_info.pop()"},{"line_number":265,"context_line":"    except Exception:"},{"line_number":266,"context_line":"        raise exception.PciDeviceNotFoundById(id\u003dpci_addr)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"def get_vf_num_by_pci_address(pci_addr):"},{"line_number":270,"context_line":"    \"\"\"Get the VF number based on a VF\u0027s pci address"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    A VF is associated with an VF number, which ip link command uses to"},{"line_number":273,"context_line":"    configure it. This number can be obtained from the PCI device filesystem."},{"line_number":274,"context_line":"    \"\"\""},{"line_number":275,"context_line":"    VIRTFN_RE \u003d re.compile(\"virtfn(\\d+)\")"},{"line_number":276,"context_line":"    virtfns_path \u003d \"/sys/bus/pci/devices/%s/physfn/virtfn*\" % (pci_addr)"},{"line_number":277,"context_line":"    vf_num \u003d None"},{"line_number":278,"context_line":"    try:"},{"line_number":279,"context_line":"        for vf_path in glob.iglob(virtfns_path):"},{"line_number":280,"context_line":"            if re.search(pci_addr, os.readlink(vf_path)):"},{"line_number":281,"context_line":"                t \u003d VIRTFN_RE.search(vf_path)"},{"line_number":282,"context_line":"                vf_num \u003d t.group(1)"},{"line_number":283,"context_line":"                break"},{"line_number":284,"context_line":"    except Exception:"},{"line_number":285,"context_line":"        pass"},{"line_number":286,"context_line":"    if vf_num is None:"},{"line_number":287,"context_line":"        raise exception.PciDeviceNotFoundById(id\u003dpci_addr)"},{"line_number":288,"context_line":"    return vf_num"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_e53f0c23","line":288,"range":{"start_line":224,"start_character":0,"end_line":288,"end_character":17},"in_reply_to":"ffe62b97_6a4e2b70","updated":"2017-03-27 11:23:16.000000000","message":"this is liunx specific... so maybe.\ni would like to split out all the ip tools commands into there own file at some point and then replace them with a python lib.\n\nthes commands are not really used by anything other then the hardware offload case so i can see why they would be in a different module but again im not sure that buys you a lot other than a nicer grouping as both will be imported in the ovs plugin everywhere we import linus_net today.","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    \"\"\"Get the representor netdevice which is corresponding to the VF."},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    This method gets PF interface name and number of VF. It is"},{"line_number":230,"context_line":"    go over all the interfaces under the PF location and look"},{"line_number":231,"context_line":"    for interface that has the VF number in the phys_port_name."},{"line_number":232,"context_line":"    That interface is the representor for the requested VF."},{"line_number":233,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"5ff73747_1ef04067","line":230,"updated":"2017-04-24 20:52:20.000000000","message":"s/It is go over all/It iterates over all/\ns/look for/looks for/","commit_id":"902d05636574185638174c3f8c134b49a46e242f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            try:"},{"line_number":243,"context_line":"                representor_num \u003d open(\"%s/%s/phys_port_name\" %"},{"line_number":244,"context_line":"                    (path, device)).readline().rstrip()"},{"line_number":245,"context_line":"                if representor_num \u003d\u003d vf_num:"},{"line_number":246,"context_line":"                    return device"},{"line_number":247,"context_line":"            except IOError as e:"},{"line_number":248,"context_line":"                # We want to ignore interfaces which we can\u0027t read there"}],"source_content_type":"text/x-python","patch_set":17,"id":"5ff73747_fef4745d","line":245,"updated":"2017-04-24 20:52:20.000000000","message":"The above assumes representor_num and vf_num are both strings. Might be better to do:\n\n if int(representor_num) \u003d\u003d int(vf_num):","commit_id":"902d05636574185638174c3f8c134b49a46e242f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                if representor_num \u003d\u003d vf_num:"},{"line_number":246,"context_line":"                    return device"},{"line_number":247,"context_line":"            except IOError as e:"},{"line_number":248,"context_line":"                # We want to ignore interfaces which we can\u0027t read there"},{"line_number":249,"context_line":"                # phys_port_name file."},{"line_number":250,"context_line":"                with excutils.save_and_reraise_exception() as ctxt:"},{"line_number":251,"context_line":"                    if e.errno \u003d\u003d errno.EOPNOTSUPP:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5ff73747_dee9b880","line":248,"updated":"2017-04-24 20:52:20.000000000","message":"s/there/their/","commit_id":"902d05636574185638174c3f8c134b49a46e242f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":285,"context_line":"    A VF is associated with an VF number, which ip link command uses to"},{"line_number":286,"context_line":"    configure it. This number can be obtained from the PCI device filesystem."},{"line_number":287,"context_line":"    \"\"\""},{"line_number":288,"context_line":"    VIRTFN_RE \u003d re.compile(\"virtfn(\\d+)\")"},{"line_number":289,"context_line":"    virtfns_path \u003d \"/sys/bus/pci/devices/%s/physfn/virtfn*\" % (pci_addr)"},{"line_number":290,"context_line":"    vf_num \u003d None"},{"line_number":291,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5ff73747_beeeec85","line":288,"updated":"2017-04-24 20:52:20.000000000","message":"Consider compiling this in the module scope since there\u0027s no reason to re-compile it each time this function is called.","commit_id":"902d05636574185638174c3f8c134b49a46e242f"}],"vif_plug_ovs/ovs.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1f49b8fc850b358d71bab5210ea9124559473f08","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    vif_object_name\u003dobjects.vif.VIFVHostUser.__name__,"},{"line_number":81,"context_line":"                    min_version\u003d\"1.0\","},{"line_number":82,"context_line":"                    max_version\u003d\"1.0\"),"},{"line_number":83,"context_line":"                objects.host_info.HostVIFInfo("},{"line_number":84,"context_line":"                    vif_object_name\u003dobjects.vif.VIFHostDevice.__name__,"},{"line_number":85,"context_line":"                    min_version\u003d\"1.0\","},{"line_number":86,"context_line":"                    max_version\u003d\"1.0\"),"},{"line_number":87,"context_line":"            ])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _create_vif_port(self, vif, vif_name, instance_info, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_fa80e84b","line":86,"range":{"start_line":83,"start_character":16,"end_line":86,"end_character":39},"updated":"2016-11-21 17:29:46.000000000","message":"im not aware of ovs being able to manage pci devices in this way can you point to the documentation for this feature in upstream ovs.\n\nif this is not available in upstream ovs it should be in a separate plugin.","commit_id":"5343b2bed92a85b75d0edb5a9752480f697f5854"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9f5b713a0f43722de2bc48c7fe40c7a5a15f0471","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    vif_object_name\u003dobjects.vif.VIFVHostUser.__name__,"},{"line_number":81,"context_line":"                    min_version\u003d\"1.0\","},{"line_number":82,"context_line":"                    max_version\u003d\"1.0\"),"},{"line_number":83,"context_line":"                objects.host_info.HostVIFInfo("},{"line_number":84,"context_line":"                    vif_object_name\u003dobjects.vif.VIFHostDevice.__name__,"},{"line_number":85,"context_line":"                    min_version\u003d\"1.0\","},{"line_number":86,"context_line":"                    max_version\u003d\"1.0\"),"},{"line_number":87,"context_line":"            ])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _create_vif_port(self, vif, vif_name, instance_info, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_ce3547f8","line":86,"range":{"start_line":83,"start_character":16,"end_line":86,"end_character":39},"in_reply_to":"7a77a97e_fa80e84b","updated":"2016-12-01 09:45:52.000000000","message":"we are pushing changes for the ovs community see \nhttps://mail.openvswitch.org/pipermail/ovs-dev/2016-November/324684.html","commit_id":"5343b2bed92a85b75d0edb5a9752480f697f5854"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1f49b8fc850b358d71bab5210ea9124559473f08","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            else:"},{"line_number":128,"context_line":"                mtu \u003d self.config.network_device_mtu"},{"line_number":129,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":130,"context_line":"            linux_net.set_interface_state(vif.bridge_name, \u0027up\u0027)"},{"line_number":131,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":132,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":133,"context_line":"                                        constants.OVS_DATAPATH_SYSTEM)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_ff2ffaa4","line":130,"range":{"start_line":130,"start_character":12,"end_line":130,"end_character":64},"updated":"2016-11-21 17:29:46.000000000","message":"why do we need to bring up the bridge port on the linuxbridge? bringin up the veth pair i can understand but why would you need to bring up the bridge?","commit_id":"5343b2bed92a85b75d0edb5a9752480f697f5854"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1f49b8fc850b358d71bab5210ea9124559473f08","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            self._create_vif_port(vif, vif.id, instance_info)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _plug_ovs_acceleration(self, vif, instance_info):"},{"line_number":145,"context_line":"        vif.network.bridge \u003d vif.bridge_name"},{"line_number":146,"context_line":"        linux_net.ensure_bridge(vif.bridge_name)"},{"line_number":147,"context_line":"        pci_slot \u003d vif.dev_address"},{"line_number":148,"context_line":"        pf_ifname \u003d linux_net.get_ifname_by_pci_address("}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_7a1f7809","line":145,"range":{"start_line":145,"start_character":29,"end_line":145,"end_character":44},"updated":"2016-11-21 17:29:46.000000000","message":"this is the name of the physical interface according to the comment in the vif.py. \n\nthe vif.network.bridge hold the name of the bridge the vm should be attached too. br-int by default but it will be set to another value when using the vlan aware vm spec.\n\nim not sure we can override this value and have the vlan aware vms feature also work.","commit_id":"5343b2bed92a85b75d0edb5a9752480f697f5854"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ae6b26806bfe53f674c6e6ca97e6640d5e7c4ab1","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _plug_ovs_acceleration(self, vif, instance_info):"},{"line_number":145,"context_line":"        linux_net.ensure_ovs_bridge("},{"line_number":146,"context_line":"            vif.network.bridge, constants.OVS_DATAPATH_SYSTEM)"},{"line_number":147,"context_line":"        pci_slot \u003d vif.dev_address"},{"line_number":148,"context_line":"        pf_ifname \u003d linux_net.get_ifname_by_pci_address("},{"line_number":149,"context_line":"            pci_slot, pf_interface\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_ca6a1781","line":146,"range":{"start_line":146,"start_character":32,"end_line":146,"end_character":61},"updated":"2016-12-05 01:46:18.000000000","message":"i think you will need a separate datapath type that maps to \ndpif-hw-acc here not the system datapath e.g. OVS_DATAPATH_HW_ACC\n\notherwise when you add the vf on line 153 it will not be acclerated.","commit_id":"0417f78d6e84a5dfb29922ff64bf95d5d9c70cd2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ae6b26806bfe53f674c6e6ca97e6640d5e7c4ab1","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def _unplug_ovs_acceleration(self, vif, instance_info):"},{"line_number":205,"context_line":"        \"\"\"Remove port from OVS.\"\"\""},{"line_number":206,"context_line":"        linux_net.ensure_ovs_bridge("},{"line_number":207,"context_line":"            vif.network.bridge, constants.OVS_DATAPATH_SYSTEM)"},{"line_number":208,"context_line":"        pci_slot \u003d vif.dev_address"},{"line_number":209,"context_line":"        pf_ifname \u003d linux_net.get_ifname_by_pci_address(pci_slot,"},{"line_number":210,"context_line":"            pf_interface\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_6ae023fb","line":207,"range":{"start_line":206,"start_character":7,"end_line":207,"end_character":62},"updated":"2016-12-05 01:46:18.000000000","message":"you do not need to ensure the bridge exists to remove a port. if you delete a bridge all ports attached to that bridge are deleted too. so this line should be removed.","commit_id":"0417f78d6e84a5dfb29922ff64bf95d5d9c70cd2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ae6b26806bfe53f674c6e6ca97e6640d5e7c4ab1","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            pf_interface\u003dTrue)"},{"line_number":211,"context_line":"        vf_num \u003d linux_net.get_vf_num_by_pci_address(pci_slot)"},{"line_number":212,"context_line":"        representor \u003d linux_net.get_representor_port(pf_ifname, vf_num)"},{"line_number":213,"context_line":"        linux_net.delete_ovs_vif_port(vif.network.bridge, representor)"},{"line_number":214,"context_line":"        linux_net.set_interface_state(representor, \u0027down\u0027)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def unplug(self, vif, instance_info):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_0aa32fb3","line":213,"range":{"start_line":213,"start_character":8,"end_line":213,"end_character":70},"updated":"2016-12-05 01:46:18.000000000","message":"actully on a sligtly unrelated note the bridge should be optional. ovs requires all ports to be unique so you do not need to pass the bridge when deleting a port.\n\nthat said we require it in our linux_net.delete_ovs_vif_port fucntion today so this code is correct.","commit_id":"0417f78d6e84a5dfb29922ff64bf95d5d9c70cd2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c242ac690a85638639da851499eed6bbd838c543","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            else:"},{"line_number":137,"context_line":"                mtu \u003d self.config.network_device_mtu"},{"line_number":138,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":139,"context_line":"            linux_net.set_interface_state(vif.bridge_name, \u0027up\u0027)"},{"line_number":140,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":141,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":142,"context_line":"                                        constants.OVS_DATAPATH_SYSTEM)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_34f40df1","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":64},"updated":"2017-01-03 17:15:20.000000000","message":"can you explain why the bridge local interface needs to be brought up?\ni can understand bringin up the  veth pair but i dont know why we would want to bring up the bridge interface.","commit_id":"e7aaad042ccd2c0537617ee3d4003dfcdac490fa"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e5f9a597d01c53682ec6cb15e9626beb05cc9ad2","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            else:"},{"line_number":137,"context_line":"                mtu \u003d self.config.network_device_mtu"},{"line_number":138,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":139,"context_line":"            linux_net.set_interface_state(vif.bridge_name, \u0027up\u0027)"},{"line_number":140,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":141,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":142,"context_line":"                                        constants.OVS_DATAPATH_SYSTEM)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_40f46c86","line":139,"range":{"start_line":139,"start_character":12,"end_line":139,"end_character":64},"in_reply_to":"ba5201f7_34f40df1","updated":"2017-01-03 19:17:36.000000000","message":"I just remove the interface bridge up but it was don;t in add_bridge_port see https://github.com/openstack/os-vif/blob/master/vif_plug_ovs/linux_net.py#L165","commit_id":"e7aaad042ccd2c0537617ee3d4003dfcdac490fa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c242ac690a85638639da851499eed6bbd838c543","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _plug_ovs_acceleration(self, vif, instance_info):"},{"line_number":154,"context_line":"        linux_net.ensure_ovs_bridge("},{"line_number":155,"context_line":"            vif.network.bridge, constants.OVS_DATAPATH_SYSTEM)"},{"line_number":156,"context_line":"        pci_slot \u003d vif.dev_address"},{"line_number":157,"context_line":"        pf_ifname \u003d linux_net.get_ifname_by_pci_address("},{"line_number":158,"context_line":"            pci_slot, pf_interface\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_9492199e","line":155,"range":{"start_line":155,"start_character":32,"end_line":155,"end_character":61},"updated":"2017-01-03 17:15:20.000000000","message":"we still need the knew datapath type for the hardware datapath and the changes to the neutron l2 agent to support that datapath type.","commit_id":"e7aaad042ccd2c0537617ee3d4003dfcdac490fa"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"e5f9a597d01c53682ec6cb15e9626beb05cc9ad2","unresolved":false,"context_lines":[{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _plug_ovs_acceleration(self, vif, instance_info):"},{"line_number":154,"context_line":"        linux_net.ensure_ovs_bridge("},{"line_number":155,"context_line":"            vif.network.bridge, constants.OVS_DATAPATH_SYSTEM)"},{"line_number":156,"context_line":"        pci_slot \u003d vif.dev_address"},{"line_number":157,"context_line":"        pf_ifname \u003d linux_net.get_ifname_by_pci_address("},{"line_number":158,"context_line":"            pci_slot, pf_interface\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba5201f7_e0e8007f","line":155,"range":{"start_line":155,"start_character":32,"end_line":155,"end_character":61},"in_reply_to":"ba5201f7_9492199e","updated":"2017-01-03 19:17:36.000000000","message":"So the community decided to use the regular OVS datapath\nand offload only if they can. So it different from DPDK.\nI will look for the relevant ovs patches","commit_id":"e7aaad042ccd2c0537617ee3d4003dfcdac490fa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4a8a70f85258027b7f16f8a31b90cecb4dbc81cc","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        mtu \u003d self._get_mtu(vif)"},{"line_number":140,"context_line":"        if not linux_net.device_exists(v2_name):"},{"line_number":141,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":142,"context_line":"            linux_net.set_interface_state(vif.bridge_name, \u0027up\u0027)"},{"line_number":143,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":144,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":145,"context_line":"                                        constants.OVS_DATAPATH_SYSTEM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_499305fb","line":142,"range":{"start_line":142,"start_character":12,"end_line":142,"end_character":64},"updated":"2017-03-16 17:20:58.000000000","message":"given https://bugs.launchpad.net/os-vif/+bug/1597287 im not sure this is correct.\n\ngranted we should fix that bug in a seperated commit but i dont think we should be reintoducing incorrect behavior if we are rewriting it in this patch.","commit_id":"d75e313685d5de005ccd6ad8b7d498f85f2f522c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"d777488f3e0c32f45a2f0c3feca29429fd4ace6a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        mtu \u003d self._get_mtu(vif)"},{"line_number":140,"context_line":"        if not linux_net.device_exists(v2_name):"},{"line_number":141,"context_line":"            linux_net.create_veth_pair(v1_name, v2_name, mtu)"},{"line_number":142,"context_line":"            linux_net.set_interface_state(vif.bridge_name, \u0027up\u0027)"},{"line_number":143,"context_line":"            linux_net.add_bridge_port(vif.bridge_name, v1_name)"},{"line_number":144,"context_line":"            linux_net.ensure_ovs_bridge(vif.network.bridge,"},{"line_number":145,"context_line":"                                        constants.OVS_DATAPATH_SYSTEM)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a1ced50_ff925f4a","line":142,"range":{"start_line":142,"start_character":12,"end_line":142,"end_character":64},"in_reply_to":"1a1ced50_499305fb","updated":"2017-03-19 09:04:23.000000000","message":"Done","commit_id":"d75e313685d5de005ccd6ad8b7d498f85f2f522c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ea73bc3b9d62cfc02d0676e40352a1ee88795434","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                                            constants.OVS_DATAPATH_SYSTEM)"},{"line_number":156,"context_line":"            self._create_vif_port(vif, vif.id, instance_info)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _plug_ovs_acceleration(self, vif, instance_info):"},{"line_number":159,"context_line":"        linux_net.ensure_ovs_bridge("},{"line_number":160,"context_line":"            vif.network.bridge, constants.OVS_DATAPATH_SYSTEM)"},{"line_number":161,"context_line":"        pci_slot \u003d vif.dev_address"}],"source_content_type":"text/x-python","patch_set":17,"id":"5ff73747_5efda838","line":158,"updated":"2017-04-24 20:52:20.000000000","message":"How about calling this _plug_vf_passthrough()? I mean, we know it\u0027s ovs because this is the OVS plugin... and \"vf_passthrough\" describes the implementation better than \"acceleration\". Alternately, you might call it _plug_host_device() to align with the VIF type\u0027s name.","commit_id":"902d05636574185638174c3f8c134b49a46e242f"}],"vif_plug_ovs/tests/test_plugin.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e4c92b6fd2c9f10997b6efe25556b82d524da828","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                 self.instance)]"},{"line_number":351,"context_line":"        }"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        get_ifname_by_pci_address.return_value \u003d \u0027eth0\u0027"},{"line_number":354,"context_line":"        get_vf_num_by_pci_address.return_value \u003d \u00272\u0027"},{"line_number":355,"context_line":"        get_representor_port.return_value \u003d \u0027eth0_2\u0027"},{"line_number":356,"context_line":"        plugin \u003d ovs.OvsPlugin.load(\"ovs\")"},{"line_number":357,"context_line":"        plugin.plug(self.vif_ovs_acceleration, self.instance)"},{"line_number":358,"context_line":"        ensure_ovs_bridge.assert_has_calls(calls[\u0027ensure_ovs_bridge\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_2acdc3b7","line":355,"range":{"start_line":353,"start_character":0,"end_line":355,"end_character":52},"updated":"2017-03-27 11:07:40.000000000","message":"nit: I\u0027d prefer to see these above the calls to give some indication of where the various call parameters are coming from. However, I see that\u0027s how it\u0027s done elsewhere so I guess local consistency is good?","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6f76aad6f809d06b7211dc2017e396c4a83fec8d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                                 self.instance)]"},{"line_number":351,"context_line":"        }"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        get_ifname_by_pci_address.return_value \u003d \u0027eth0\u0027"},{"line_number":354,"context_line":"        get_vf_num_by_pci_address.return_value \u003d \u00272\u0027"},{"line_number":355,"context_line":"        get_representor_port.return_value \u003d \u0027eth0_2\u0027"},{"line_number":356,"context_line":"        plugin \u003d ovs.OvsPlugin.load(\"ovs\")"},{"line_number":357,"context_line":"        plugin.plug(self.vif_ovs_acceleration, self.instance)"},{"line_number":358,"context_line":"        ensure_ovs_bridge.assert_has_calls(calls[\u0027ensure_ovs_bridge\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"ffe62b97_91e4cd3d","line":355,"range":{"start_line":353,"start_character":0,"end_line":355,"end_character":52},"in_reply_to":"ffe62b97_2acdc3b7","updated":"2017-04-02 10:44:52.000000000","message":"Done","commit_id":"4ec54727b0fd9b286cfd25c042b74658b20414f1"}]}
