)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e1d3786cb7fe50311b9c98a4b48407a844d2ba35","unresolved":false,"context_lines":[{"line_number":17,"context_line":"     The Mechanism Driver to support port binding for macvtap attachments"},{"line_number":18,"context_line":" - Part 3 (this part)"},{"line_number":19,"context_line":"    The Macvtap L2 Agent."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DocImpact New ML2 mech driver + l2 agent with config and restrictions"},{"line_number":22,"context_line":"Change-Id: I219d80b4c704ac2f41edd3501f4b2198925778d6"},{"line_number":23,"context_line":"Closes-Bug: #1480979"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"bae84128_7d1c7777","line":20,"updated":"2016-02-22 09:44:05.000000000","message":"Please add the new configuration variable here","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"3b2d2d40f3f1ac20ae5c2082db1ae27d2a5e7639","unresolved":false,"context_lines":[{"line_number":17,"context_line":"     The Mechanism Driver to support port binding for macvtap attachments"},{"line_number":18,"context_line":" - Part 3 (this part)"},{"line_number":19,"context_line":"    The Macvtap L2 Agent."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"DocImpact New ML2 mech driver + l2 agent with config and restrictions"},{"line_number":22,"context_line":"Change-Id: I219d80b4c704ac2f41edd3501f4b2198925778d6"},{"line_number":23,"context_line":"Closes-Bug: #1480979"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"bae84128_0556a95b","line":20,"in_reply_to":"bae84128_7d1c7777","updated":"2016-02-22 14:13:50.000000000","message":"Done","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"}],"neutron/cmd/eventlet/plugins/macvtap_neutron_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e1d3786cb7fe50311b9c98a4b48407a844d2ba35","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import \\"},{"line_number":16,"context_line":"    neutron.plugins.ml2.drivers.macvtap.agent.macvtap_neutron_agent \\"},{"line_number":17,"context_line":"    as agent_main"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_7dc0f7e0","line":15,"updated":"2016-02-22 09:44:05.000000000","message":"can you write this without the \\","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"3b2d2d40f3f1ac20ae5c2082db1ae27d2a5e7639","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import \\"},{"line_number":16,"context_line":"    neutron.plugins.ml2.drivers.macvtap.agent.macvtap_neutron_agent \\"},{"line_number":17,"context_line":"    as agent_main"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_2e975749","line":15,"in_reply_to":"bae84128_7dc0f7e0","updated":"2016-02-22 14:13:50.000000000","message":"Done","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e297ab803efd66188650fcf0dfb8d80e8615e5dc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import neutron.plugins.ml2.drivers.macvtap.agent.macvtap_neutron_agent \\"},{"line_number":16,"context_line":"    as agent_main"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_8fa3f34e","line":14,"updated":"2016-02-22 15:24:00.000000000","message":"Consider:\n\nfrom neutron.plugins.ml2.drivers.macvtap.agent import (\n    macvtap_neutron_agent as agent_main)","commit_id":"a50ca3c72a8cd0eee273f9be444a9536790366aa"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"68c891511d39658173588c6fe22bc093aa8bdcf6","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import neutron.plugins.ml2.drivers.macvtap.agent.macvtap_neutron_agent \\"},{"line_number":16,"context_line":"    as agent_main"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_5abd2767","line":14,"in_reply_to":"bae84128_8fa3f34e","updated":"2016-02-22 15:41:49.000000000","message":"Done","commit_id":"a50ca3c72a8cd0eee273f9be444a9536790366aa"}],"neutron/common/constants.py":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"abc8f2288c81edcf5cb286965bf7c99c569f668c","unresolved":false,"context_lines":[{"line_number":150,"context_line":"# vhost-user device names start with \"vhu\""},{"line_number":151,"context_line":"VHOST_USER_DEVICE_PREFIX \u003d \u0027vhu\u0027"},{"line_number":152,"context_line":"# Device names start with \"macvtap\""},{"line_number":153,"context_line":"MACVTAP_DEVICE_PREFIX \u003d \u0027macvtap\u0027"},{"line_number":154,"context_line":"# The vswitch side of a veth pair for a nova iptables filter setup"},{"line_number":155,"context_line":"VETH_DEVICE_PREFIX \u003d \u0027qvo\u0027"},{"line_number":156,"context_line":"# prefix for SNAT interface in DVR"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_dff9724f","line":153,"range":{"start_line":153,"start_character":21,"end_line":153,"end_character":22},"updated":"2016-02-15 15:07:38.000000000","message":"move to neutron lib. see https://review.openstack.org/280275","commit_id":"9a46c63ef28d544b9325cef12a49a5d7f2ec030a"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"7d26fa414cdd3f2244f594d5b319f28a68389d29","unresolved":false,"context_lines":[{"line_number":150,"context_line":"# vhost-user device names start with \"vhu\""},{"line_number":151,"context_line":"VHOST_USER_DEVICE_PREFIX \u003d \u0027vhu\u0027"},{"line_number":152,"context_line":"# Device names start with \"macvtap\""},{"line_number":153,"context_line":"MACVTAP_DEVICE_PREFIX \u003d \u0027macvtap\u0027"},{"line_number":154,"context_line":"# The vswitch side of a veth pair for a nova iptables filter setup"},{"line_number":155,"context_line":"VETH_DEVICE_PREFIX \u003d \u0027qvo\u0027"},{"line_number":156,"context_line":"# prefix for SNAT interface in DVR"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_65423912","line":153,"range":{"start_line":153,"start_character":21,"end_line":153,"end_character":22},"in_reply_to":"dae33548_dff9724f","updated":"2016-02-16 07:46:10.000000000","message":"ok, dougwig confirmed that this constant should be added here first and later on moved to neutron-lib (as soon as a release is available) see https://review.openstack.org/#/c/280275","commit_id":"9a46c63ef28d544b9325cef12a49a5d7f2ec030a"}],"neutron/plugins/ml2/drivers/macvtap/agent/config.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e1d3786cb7fe50311b9c98a4b48407a844d2ba35","unresolved":false,"context_lines":[{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"cfg.CONF.register_opts(macvtap_opts, \"MACVTAP\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_5d837398","line":35,"updated":"2016-02-22 09:44:05.000000000","message":"in general the sections are in lower case. any reason not to use that?","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"3b2d2d40f3f1ac20ae5c2082db1ae27d2a5e7639","unresolved":false,"context_lines":[{"line_number":32,"context_line":"]"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"cfg.CONF.register_opts(macvtap_opts, \"MACVTAP\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_e578e52d","line":35,"in_reply_to":"bae84128_5d837398","updated":"2016-02-22 14:13:50.000000000","message":"After doublechecking on IRC I changed it to lower case.","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"}],"neutron/plugins/ml2/drivers/macvtap/agent/macvtap_neutron_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e1d3786cb7fe50311b9c98a4b48407a844d2ba35","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def validate_interface_mappings(self):"},{"line_number":94,"context_line":"        for physnet, interface in self.interface_mappings.items():"},{"line_number":95,"context_line":"            if not ip_lib.device_exists(interface):"},{"line_number":96,"context_line":"                LOG.error(_LE(\"Interface %(intf)s for physical network %(net)s\""},{"line_number":97,"context_line":"                              \" does not exist. Agent terminated!\"),"},{"line_number":98,"context_line":"                          {\u0027intf\u0027: interface, \u0027net\u0027: physnet})"},{"line_number":99,"context_line":"                sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_bd48bf88","line":96,"updated":"2016-02-22 09:44:05.000000000","message":"please use a space at the end of the line","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"3b2d2d40f3f1ac20ae5c2082db1ae27d2a5e7639","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    def validate_interface_mappings(self):"},{"line_number":94,"context_line":"        for physnet, interface in self.interface_mappings.items():"},{"line_number":95,"context_line":"            if not ip_lib.device_exists(interface):"},{"line_number":96,"context_line":"                LOG.error(_LE(\"Interface %(intf)s for physical network %(net)s\""},{"line_number":97,"context_line":"                              \" does not exist. Agent terminated!\"),"},{"line_number":98,"context_line":"                          {\u0027intf\u0027: interface, \u0027net\u0027: physnet})"},{"line_number":99,"context_line":"                sys.exit(1)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bae84128_056fc92b","line":96,"in_reply_to":"bae84128_bd48bf88","updated":"2016-02-22 14:13:50.000000000","message":"Done","commit_id":"2a4d13256b6a7a53fb80b5383792c8888e096237"}],"neutron/tests/common/net_helpers.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e297ab803efd66188650fcf0dfb8d80e8615e5dc","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        self.addCleanup(self.destroy)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def destroy(self):"},{"line_number":535,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(self.ip_dev.namespace)"},{"line_number":536,"context_line":"            if (ip_wrapper.netns.exists(self.ip_dev.namespace) or"},{"line_number":537,"context_line":"                self.ip_dev.namespace is None):"},{"line_number":538,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_2f83c799","line":535,"updated":"2016-02-22 15:24:00.000000000","message":"dodgy indentation here - should be 4 spaces and not 8","commit_id":"a50ca3c72a8cd0eee273f9be444a9536790366aa"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"68c891511d39658173588c6fe22bc093aa8bdcf6","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        self.addCleanup(self.destroy)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def destroy(self):"},{"line_number":535,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(self.ip_dev.namespace)"},{"line_number":536,"context_line":"            if (ip_wrapper.netns.exists(self.ip_dev.namespace) or"},{"line_number":537,"context_line":"                self.ip_dev.namespace is None):"},{"line_number":538,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":10,"id":"bae84128_ba8553ae","line":535,"in_reply_to":"bae84128_2f83c799","updated":"2016-02-22 15:41:49.000000000","message":"Done","commit_id":"a50ca3c72a8cd0eee273f9be444a9536790366aa"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7c113fa6e520d7e8641b01642a989ce565f8c945","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _setUp(self):"},{"line_number":489,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        self.ports \u003d common_base.create_resource("},{"line_number":492,"context_line":"            VETH0_PREFIX,"},{"line_number":493,"context_line":"            lambda name: ip_wrapper.add_veth(name, self.get_peer_name(name)))"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_57692ef8","side":"PARENT","line":490,"updated":"2016-02-23 22:50:43.000000000","message":"unrelated","commit_id":"dbd0ec757a0e6c45fe873be7a1f206cc54ee75eb"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9ecfc0700d954cdf24aeffb4b2353587a1825174","unresolved":false,"context_lines":[{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _setUp(self):"},{"line_number":489,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        self.ports \u003d common_base.create_resource("},{"line_number":492,"context_line":"            VETH0_PREFIX,"},{"line_number":493,"context_line":"            lambda name: ip_wrapper.add_veth(name, self.get_peer_name(name)))"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_0ff49f58","side":"PARENT","line":490,"in_reply_to":"bae84128_57692ef8","updated":"2016-02-24 09:21:09.000000000","message":"agree - that was not intended.","commit_id":"dbd0ec757a0e6c45fe873be7a1f206cc54ee75eb"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7c113fa6e520d7e8641b01642a989ce565f8c945","unresolved":false,"context_lines":[{"line_number":53,"context_line":"VETH0_PREFIX \u003d \u0027test-veth0\u0027"},{"line_number":54,"context_line":"VETH1_PREFIX \u003d \u0027test-veth1\u0027"},{"line_number":55,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"},{"line_number":56,"context_line":"MACVTAP_PREFIX \u003d \u0027macvtap\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":59,"context_line":"# port is used to provide vlan connection between two linuxbridge"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_823a5697","line":56,"updated":"2016-02-23 22:50:43.000000000","message":"You should not define this constant and use neutron.common.constants.MACVTAP_PREFIX because it\u0027s required by functional tests that veth name starts with it?","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9ecfc0700d954cdf24aeffb4b2353587a1825174","unresolved":false,"context_lines":[{"line_number":53,"context_line":"VETH0_PREFIX \u003d \u0027test-veth0\u0027"},{"line_number":54,"context_line":"VETH1_PREFIX \u003d \u0027test-veth1\u0027"},{"line_number":55,"context_line":"PATCH_PREFIX \u003d \u0027patch\u0027"},{"line_number":56,"context_line":"MACVTAP_PREFIX \u003d \u0027macvtap\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"# port name should be shorter than DEVICE_NAME_MAX_LEN because if this"},{"line_number":59,"context_line":"# port is used to provide vlan connection between two linuxbridge"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_2f4d239a","line":56,"in_reply_to":"bae84128_823a5697","updated":"2016-02-24 09:21:09.000000000","message":"ok, I changed to code to use this as default prefix if non is provided via the constructor. My test know uses the neutron.common.constanstatns.MACVTAP_PREFIX constant.","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7c113fa6e520d7e8641b01642a989ce565f8c945","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":562,"context_line":"        self.ip_dev \u003d common_base.create_resource("},{"line_number":563,"context_line":"            MACVTAP_PREFIX,"},{"line_number":564,"context_line":"            lambda name, src_dev, mode: ip_wrapper.add_macvtap(name, src_dev,"},{"line_number":565,"context_line":"                                                               mode),"},{"line_number":566,"context_line":"            self.src_dev, mode\u003dself.mode)"},{"line_number":567,"context_line":"        self.addCleanup(self.destroy)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_77bf1261","line":564,"range":{"start_line":564,"start_character":12,"end_line":564,"end_character":18},"updated":"2016-02-23 22:50:43.000000000","message":"no need to define a lambda, you can use directly:\n\n ip_wrapper.add_macvtap","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9ecfc0700d954cdf24aeffb4b2353587a1825174","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"},{"line_number":562,"context_line":"        self.ip_dev \u003d common_base.create_resource("},{"line_number":563,"context_line":"            MACVTAP_PREFIX,"},{"line_number":564,"context_line":"            lambda name, src_dev, mode: ip_wrapper.add_macvtap(name, src_dev,"},{"line_number":565,"context_line":"                                                               mode),"},{"line_number":566,"context_line":"            self.src_dev, mode\u003dself.mode)"},{"line_number":567,"context_line":"        self.addCleanup(self.destroy)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_e1d18f24","line":564,"range":{"start_line":564,"start_character":12,"end_line":564,"end_character":18},"in_reply_to":"bae84128_77bf1261","updated":"2016-02-24 09:21:09.000000000","message":"Done","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7c113fa6e520d7e8641b01642a989ce565f8c945","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.ip_dev.namespace)"},{"line_number":571,"context_line":"        if (ip_wrapper.netns.exists(self.ip_dev.namespace) or"},{"line_number":572,"context_line":"            self.ip_dev.namespace is None):"},{"line_number":573,"context_line":"            try:"},{"line_number":574,"context_line":"                ip_wrapper.del_veth(self.ip_dev.name)"},{"line_number":575,"context_line":"            except RuntimeError:"},{"line_number":576,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_828b761e","line":573,"range":{"start_line":573,"start_character":12,"end_line":573,"end_character":15},"updated":"2016-02-23 22:50:43.000000000","message":"IMO, you should rename del_veth to del_link or explain why we can use del_veth to delete a macvtap","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9ecfc0700d954cdf24aeffb4b2353587a1825174","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.ip_dev.namespace)"},{"line_number":571,"context_line":"        if (ip_wrapper.netns.exists(self.ip_dev.namespace) or"},{"line_number":572,"context_line":"            self.ip_dev.namespace is None):"},{"line_number":573,"context_line":"            try:"},{"line_number":574,"context_line":"                ip_wrapper.del_veth(self.ip_dev.name)"},{"line_number":575,"context_line":"            except RuntimeError:"},{"line_number":576,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_97e601e6","line":573,"range":{"start_line":573,"start_character":12,"end_line":573,"end_character":15},"in_reply_to":"bae84128_828b761e","updated":"2016-02-24 09:21:09.000000000","message":"used ip_dev.link.delete() to get rid of it","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"}],"neutron/tests/functional/plugins/ml2/drivers/macvtap/agent/test_macvtap_neutron_agent.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"7c113fa6e520d7e8641b01642a989ce565f8c945","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron.tests.functional import base as functional_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class MacvtapAgentTestCase(functional_base.BaseSudoTestCase):"},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        super(MacvtapAgentTestCase, self).setUp()"},{"line_number":25,"context_line":"        self.mgr \u003d macvtap_neutron_agent.MacvtapManager({})"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_0229269e","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":26},"updated":"2016-02-23 22:50:43.000000000","message":"I am a bit annoyed that there is no functional test to check L2 connection using macvtap.","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"9ecfc0700d954cdf24aeffb4b2353587a1825174","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from neutron.tests.functional import base as functional_base"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class MacvtapAgentTestCase(functional_base.BaseSudoTestCase):"},{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        super(MacvtapAgentTestCase, self).setUp()"},{"line_number":25,"context_line":"        self.mgr \u003d macvtap_neutron_agent.MacvtapManager({})"}],"source_content_type":"text/x-python","patch_set":13,"id":"bae84128_75a7f50a","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":26},"in_reply_to":"bae84128_0229269e","updated":"2016-02-24 09:21:09.000000000","message":"I see your point and I was thinking about this as well.\nIf I get it right, it would be done via a a namespace that emulates a virtual machine. For lb you would take a bridge connected veth and move one end of the veth into the namespace and assign an ip address to it. This kind of test tests tests a bridge in conjunction with a veth. But it\u0027s NOT testing a bridge together with a tap (which would be the real world)\n\nWith macvtap, there is only one entity involved, that is the macvtap device itself. It\u0027s like a combined bridge and tap. The problem with tap and macvTAP is, that it offers a file descriptor interface that is consumed by qemu (which is writing ethernet frames into it), but cannot be used with an IP address directly (like a veth can). So you need somehting veth like - this is the macvlan device - however this would be a replacement to the macvtap device - so no macvtap would be used at all ;)\n\nSo I see 2 options\n#1 test it with qemu\n#2 write a fakedevice driver + ip (I think that\u0027s sufficient for ping) stack in python that can consume the file descriptor interface. This could also be used for testing ovs \u0026 lb with tap instead of veth. However this seems to be very big effort.\n#3 use macvlan instead of macvtap for testing (both are very similar). However this would not test macvtap. But this kind of test will be added as soon as controller node support (via macvlan) will be added.\n\nI personally don\u0027t see an option for getting l2 connectivity testing via #1 and #2 enabled in Mitaka. Maybe that could be a item for Newton. We could think of #3 - but I\u0027m not sure if this makes much sense at the moment.\n\nWhat do you think?","commit_id":"a9c55ebef1232d2e4170f95f48441ba90eb01367"}],"releasenotes/notes/macvtap-l2-agent-2b551d8ec341196d.yaml":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"07b08b7237d5a370b10015e9e107be0c29d1e439","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Adding Macvtap ML2 driver and L2 Agent as new vswitch choice"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Libvirt qemu/kvm instances can now be attached via macvtap in "},{"line_number":6,"context_line":"    bridge mode to a network. VLAN and FLAT attachments are"},{"line_number":7,"context_line":"    supported."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"dae33548_be58b433","line":5,"updated":"2016-02-16 16:31:41.000000000","message":"meh! red space :)","commit_id":"9a46c63ef28d544b9325cef12a49a5d7f2ec030a"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0edc87c624f322d3f8fa4691355170b6b2b68cd6","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    bridge mode to a network. VLAN and FLAT attachments are"},{"line_number":7,"context_line":"    supported. Other attachmentes than compute are not supported."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - To ensure any kind of migration works between all compute nodes,"},{"line_number":10,"context_line":"    make sure that the same physical_interface_mappings is"},{"line_number":11,"context_line":"    configured on each MacVtap compute node. Having different"},{"line_number":12,"context_line":"    mappings could cause live migration to fail (if the configured"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"9aed3d3a_d65d7048","line":9,"updated":"2016-02-29 13:01:01.000000000","message":"To ensure that migrations work between all compute nodes","commit_id":"2e7eb09271912e9db1948b15ab3f8e184d4c324a"}]}
