)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Edan David \u003cedand@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-24 11:54:02 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding FDB population agent extension."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this extension is updating the FDB table upon changes of normal port instances thus enabling communication between direct port SR-IOV instances and normal port instances."},{"line_number":10,"context_line":"Additionally enabling communication to direct port instances with floating ips."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bab6814e_5bc0d6e0","line":7,"range":{"start_line":7,"start_character":37,"end_line":7,"end_character":38},"updated":"2016-05-24 17:43:29.000000000","message":"remove .","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"1daa43c12ec20f91a86daee55c3bc555ab5bc331","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Edan David \u003cedand@mellanox.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-24 11:54:02 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding FDB population agent extension."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this extension is updating the FDB table upon changes of normal port instances thus enabling communication between direct port SR-IOV instances and normal port instances."},{"line_number":10,"context_line":"Additionally enabling communication to direct port instances with floating ips."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bab6814e_f05a63f1","line":7,"range":{"start_line":7,"start_character":37,"end_line":7,"end_character":38},"in_reply_to":"bab6814e_5bc0d6e0","updated":"2016-05-25 10:02:01.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding FDB population agent extension."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this extension is updating the FDB table upon changes of normal port instances thus enabling communication between direct port SR-IOV instances and normal port instances."},{"line_number":10,"context_line":"Additionally enabling communication to direct port instances with floating ips."},{"line_number":11,"context_line":"Support for OVS agent and linux bridge."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I61a8aacb1b21b2a6e452389633d7dcccf9964fea"},{"line_number":14,"context_line":"Closes-Bug: #1492228"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bab6814e_9e24ecaf","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":39},"updated":"2016-05-24 17:43:29.000000000","message":"commit message lines are over 79 characters long.\nplease break long lines","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adding FDB population agent extension."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The purpose of this extension is updating the FDB table upon changes of normal port instances thus enabling communication between direct port SR-IOV instances and normal port instances."},{"line_number":10,"context_line":"Additionally enabling communication to direct port instances with floating ips."},{"line_number":11,"context_line":"Support for OVS agent and linux bridge."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I61a8aacb1b21b2a6e452389633d7dcccf9964fea"},{"line_number":14,"context_line":"Closes-Bug: #1492228"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"bab6814e_5ab0b08b","line":11,"range":{"start_line":9,"start_character":0,"end_line":11,"end_character":39},"in_reply_to":"bab6814e_9e24ecaf","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cff3d7792dc5929d011f7ade8803e44655ca6f03","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Additionally enabling communication to direct port"},{"line_number":13,"context_line":"instances with floating ips."},{"line_number":14,"context_line":"Support for OVS agent and linux bridge."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I61a8aacb1b21b2a6e452389633d7dcccf9964fea"},{"line_number":17,"context_line":"Closes-Bug: #1492228"},{"line_number":18,"context_line":"Closes-Bug: #1527991"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9abb7d3a_5a7e0ee5","line":15,"updated":"2016-05-29 12:11:49.000000000","message":"Please add DocImpact and a release note","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"3771fe7399ea770a87565b34bfeac0e5c305d97c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Additionally enabling communication to direct port"},{"line_number":13,"context_line":"instances with floating ips."},{"line_number":14,"context_line":"Support for OVS agent and linux bridge."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I61a8aacb1b21b2a6e452389633d7dcccf9964fea"},{"line_number":17,"context_line":"Closes-Bug: #1492228"},{"line_number":18,"context_line":"Closes-Bug: #1527991"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9abb7d3a_b50c6d95","line":15,"in_reply_to":"9abb7d3a_5a7e0ee5","updated":"2016-05-29 14:32:08.000000000","message":"Done","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"}],"neutron/agent/l2/extensions/fdb_population.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.agent.l2 import agent_extension"},{"line_number":21,"context_line":"from neutron.agent.linux.bridge_lib import FdbInterface"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"fdb_population_opt \u003d [cfg.DictOpt(\u0027physnet_to_interface\u0027,"},{"line_number":24,"context_line":"    default\u003d{\u0027physnet1\u0027: \u0027p1p1\u0027})]"},{"line_number":25,"context_line":"cfg.CONF.register_opts(fdb_population_opt)"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_bea45008","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":18},"updated":"2016-05-24 17:43:29.000000000","message":"please add help\u003d\u0027..\u0027\nto explain the options","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"1daa43c12ec20f91a86daee55c3bc555ab5bc331","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutron.agent.l2 import agent_extension"},{"line_number":21,"context_line":"from neutron.agent.linux.bridge_lib import FdbInterface"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"fdb_population_opt \u003d [cfg.DictOpt(\u0027physnet_to_interface\u0027,"},{"line_number":24,"context_line":"    default\u003d{\u0027physnet1\u0027: \u0027p1p1\u0027})]"},{"line_number":25,"context_line":"cfg.CONF.register_opts(fdb_population_opt)"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_10ca87a1","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":18},"in_reply_to":"bab6814e_bea45008","updated":"2016-05-25 10:02:01.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.agent.linux.bridge_lib import FdbInterface"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"fdb_population_opt \u003d [cfg.DictOpt(\u0027physnet_to_interface\u0027,"},{"line_number":24,"context_line":"    default\u003d{\u0027physnet1\u0027: \u0027p1p1\u0027})]"},{"line_number":25,"context_line":"cfg.CONF.register_opts(fdb_population_opt)"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_9e5b4c2e","line":24,"range":{"start_line":24,"start_character":12,"end_line":24,"end_character":32},"updated":"2016-05-24 17:43:29.000000000","message":"default should be {}","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.agent.linux.bridge_lib import FdbInterface"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"fdb_population_opt \u003d [cfg.DictOpt(\u0027physnet_to_interface\u0027,"},{"line_number":24,"context_line":"    default\u003d{\u0027physnet1\u0027: \u0027p1p1\u0027})]"},{"line_number":25,"context_line":"cfg.CONF.register_opts(fdb_population_opt)"},{"line_number":26,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_5a7710d4","line":24,"range":{"start_line":24,"start_character":12,"end_line":24,"end_character":32},"in_reply_to":"bab6814e_9e5b4c2e","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class FdbPopulationAgentExtension(agent_extension.AgentCoreResourceExtension):"},{"line_number":30,"context_line":"    \"\"\"The FDB population is a agent extension to SR-IOV agent,"},{"line_number":31,"context_line":"    who\u0027s objective is to update the FDB table for existing instance"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    PERMITED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_9e806c48","line":30,"range":{"start_line":30,"start_character":50,"end_line":30,"end_character":56},"updated":"2016-05-24 17:43:29.000000000","message":"to OVS or linux bridge to help SR-IOV agent","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class FdbPopulationAgentExtension(agent_extension.AgentCoreResourceExtension):"},{"line_number":30,"context_line":"    \"\"\"The FDB population is a agent extension to SR-IOV agent,"},{"line_number":31,"context_line":"    who\u0027s objective is to update the FDB table for existing instance"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    PERMITED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_9a817892","line":30,"range":{"start_line":30,"start_character":50,"end_line":30,"end_character":56},"in_reply_to":"bab6814e_9e806c48","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"The FDB population is a agent extension to SR-IOV agent,"},{"line_number":31,"context_line":"    who\u0027s objective is to update the FDB table for existing instance"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    PERMITED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    class FdbTableTracker(object):"},{"line_number":36,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_1ee47c39","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":12},"updated":"2016-05-24 17:43:29.000000000","message":"s/PERMITED/PERMITTED","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"The FDB population is a agent extension to SR-IOV agent,"},{"line_number":31,"context_line":"    who\u0027s objective is to update the FDB table for existing instance"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    PERMITED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    class FdbTableTracker(object):"},{"line_number":36,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_fedc1876","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":68},"updated":"2016-05-24 17:43:29.000000000","message":"you should put a comment why this are the permitted device owner","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"1daa43c12ec20f91a86daee55c3bc555ab5bc331","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"The FDB population is a agent extension to SR-IOV agent,"},{"line_number":31,"context_line":"    who\u0027s objective is to update the FDB table for existing instance"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    PERMITED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    class FdbTableTracker(object):"},{"line_number":36,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_d0363fb3","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":12},"in_reply_to":"bab6814e_1ee47c39","updated":"2016-05-25 10:02:01.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    \"\"\"The FDB population is a agent extension to SR-IOV agent,"},{"line_number":31,"context_line":"    who\u0027s objective is to update the FDB table for existing instance"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    PERMITED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    class FdbTableTracker(object):"},{"line_number":36,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_ba4c3c9e","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":68},"in_reply_to":"bab6814e_fedc1876","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        intended to keep track of the existing FDB rules."},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        def __init__(self, interfaces):"},{"line_number":40,"context_line":"            self.interface_to_macs \u003d dict()"},{"line_number":41,"context_line":"            self.portid_to_mac \u003d dict()"},{"line_number":42,"context_line":"            # update macs already in the port\u0027s fdb table"},{"line_number":43,"context_line":"            for interface in interfaces:"},{"line_number":44,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_1e52bcdd","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":39},"updated":"2016-05-24 17:43:29.000000000","message":"use {} instead of dict()","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        intended to keep track of the existing FDB rules."},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        def __init__(self, interfaces):"},{"line_number":40,"context_line":"            self.interface_to_macs \u003d dict()"},{"line_number":41,"context_line":"            self.portid_to_mac \u003d dict()"},{"line_number":42,"context_line":"            # update macs already in the port\u0027s fdb table"},{"line_number":43,"context_line":"            for interface in interfaces:"},{"line_number":44,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_1a446872","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":39},"in_reply_to":"bab6814e_1e52bcdd","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                    _stdout \u003d FdbInterface.show(interface)"},{"line_number":46,"context_line":"                except RuntimeError as e:"},{"line_number":47,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":48,"context_line":"                    return"},{"line_number":49,"context_line":"                self.interface_to_macs[interface] \u003d _stdout.split()[::3]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        def update_port(self, interface, port_id, mac):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_de1cb415","line":48,"range":{"start_line":48,"start_character":19,"end_line":48,"end_character":26},"updated":"2016-05-24 17:43:29.000000000","message":"why return this should be continue to got to the next interface","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                    _stdout \u003d FdbInterface.show(interface)"},{"line_number":46,"context_line":"                except RuntimeError as e:"},{"line_number":47,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":48,"context_line":"                    return"},{"line_number":49,"context_line":"                self.interface_to_macs[interface] \u003d _stdout.split()[::3]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        def update_port(self, interface, port_id, mac):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_fa46c479","line":48,"range":{"start_line":48,"start_character":19,"end_line":48,"end_character":26},"in_reply_to":"bab6814e_de1cb415","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return False"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def handle_port(self, context, details):"},{"line_number":96,"context_line":"        \"\"\"Handle agent fdb population extension for details.\"\"\""},{"line_number":97,"context_line":"        device_owner \u003d details[\u0027device_owner\u0027]"},{"line_number":98,"context_line":"        if not self._is_valid_device_owner(device_owner):"},{"line_number":99,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_9eb4ecd1","line":96,"range":{"start_line":96,"start_character":53,"end_line":96,"end_character":60},"updated":"2016-05-24 17:43:29.000000000","message":"change details to port","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return False"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def handle_port(self, context, details):"},{"line_number":96,"context_line":"        \"\"\"Handle agent fdb population extension for details.\"\"\""},{"line_number":97,"context_line":"        device_owner \u003d details[\u0027device_owner\u0027]"},{"line_number":98,"context_line":"        if not self._is_valid_device_owner(device_owner):"},{"line_number":99,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_3a596c5c","line":96,"range":{"start_line":96,"start_character":53,"end_line":96,"end_character":60},"in_reply_to":"bab6814e_9eb4ecd1","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def handle_port(self, context, details):"},{"line_number":96,"context_line":"        \"\"\"Handle agent fdb population extension for details.\"\"\""},{"line_number":97,"context_line":"        device_owner \u003d details[\u0027device_owner\u0027]"},{"line_number":98,"context_line":"        if not self._is_valid_device_owner(device_owner):"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":"        mac \u003d details[\u0027mac_address\u0027]"},{"line_number":101,"context_line":"        port_id \u003d details[\u0027port_id\u0027]"},{"line_number":102,"context_line":"        interface \u003d self.physnet_to_interface[details[\u0027physical_network\u0027]]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_3edb401d","line":99,"range":{"start_line":98,"start_character":7,"end_line":99,"end_character":17},"updated":"2016-05-24 17:43:29.000000000","message":"I it hink it is better to do\n\nif self._is_valid_device_owner(device_owner):\n   ...","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    def handle_port(self, context, details):"},{"line_number":96,"context_line":"        \"\"\"Handle agent fdb population extension for details.\"\"\""},{"line_number":97,"context_line":"        device_owner \u003d details[\u0027device_owner\u0027]"},{"line_number":98,"context_line":"        if not self._is_valid_device_owner(device_owner):"},{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":"        mac \u003d details[\u0027mac_address\u0027]"},{"line_number":101,"context_line":"        port_id \u003d details[\u0027port_id\u0027]"},{"line_number":102,"context_line":"        interface \u003d self.physnet_to_interface[details[\u0027physical_network\u0027]]"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_da30200a","line":99,"range":{"start_line":98,"start_character":7,"end_line":99,"end_character":17},"in_reply_to":"bab6814e_3edb401d","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":"        mac \u003d details[\u0027mac_address\u0027]"},{"line_number":101,"context_line":"        port_id \u003d details[\u0027port_id\u0027]"},{"line_number":102,"context_line":"        interface \u003d self.physnet_to_interface[details[\u0027physical_network\u0027]]"},{"line_number":103,"context_line":"        self.fdb_tracker.update_port(interface, port_id, mac)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def delete_port(self, context, details):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_9e106caa","line":102,"range":{"start_line":102,"start_character":46,"end_line":102,"end_character":73},"updated":"2016-05-24 17:43:29.000000000","message":"in vxlan details[\u0027physical_network\u0027] can be None\n\nadd validation that details[\u0027physical_network\u0027] is not None","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            return"},{"line_number":100,"context_line":"        mac \u003d details[\u0027mac_address\u0027]"},{"line_number":101,"context_line":"        port_id \u003d details[\u0027port_id\u0027]"},{"line_number":102,"context_line":"        interface \u003d self.physnet_to_interface[details[\u0027physical_network\u0027]]"},{"line_number":103,"context_line":"        self.fdb_tracker.update_port(interface, port_id, mac)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def delete_port(self, context, details):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_ba339c12","line":102,"range":{"start_line":102,"start_character":46,"end_line":102,"end_character":73},"in_reply_to":"bab6814e_9e106caa","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":20254,"name":"dongwenshuai","email":"dong.wenshuai@zte.com.cn","username":"dongwenshuai"},"change_message_id":"d385143d113aa31638e36d6016837f936c9b7ac8","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# if physnet_to_interface is not configured the extension does nothing"},{"line_number":24,"context_line":"fdb_population_opt \u003d [cfg.DictOpt(\u0027physnet_to_interface\u0027, default\u003d{},"},{"line_number":25,"context_line":"    help\u003d_(\u0027Map the interface name used in each physical network, \u0027"},{"line_number":26,"context_line":"           \u0027example: physnet_name: physical_interface\u0027))]"},{"line_number":27,"context_line":"cfg.CONF.register_opts(fdb_population_opt, \"fdb\")"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_cc795584","line":25,"updated":"2016-05-26 08:13:26.000000000","message":"In this case that there are multiple physical network,  \"fdb_population_opt\" should be a list object not dict","commit_id":"556193f65c80ccf28efe180e8472e916c225729a"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"55ec729a1a1f1ea6c4cd897025e593b01b03567e","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# if physnet_to_interface is not configured the extension does nothing"},{"line_number":24,"context_line":"fdb_population_opt \u003d [cfg.DictOpt(\u0027physnet_to_interface\u0027, default\u003d{},"},{"line_number":25,"context_line":"    help\u003d_(\u0027Map the interface name used in each physical network, \u0027"},{"line_number":26,"context_line":"           \u0027example: physnet_name: physical_interface\u0027))]"},{"line_number":27,"context_line":"cfg.CONF.register_opts(fdb_population_opt, \"fdb\")"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_26758bca","line":25,"in_reply_to":"bab6814e_cc795584","updated":"2016-05-26 13:59:31.000000000","message":"Done","commit_id":"556193f65c80ccf28efe180e8472e916c225729a"},{"author":{"_account_id":20254,"name":"dongwenshuai","email":"dong.wenshuai@zte.com.cn","username":"dongwenshuai"},"change_message_id":"c84f2256e463fa21613913909331c861de9af528","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_9f657c1f","line":28,"updated":"2016-05-27 01:58:20.000000000","message":"I have seen \"physical_device_mappings\" in the sriov_nic_opts . I think it should be different there","commit_id":"4957e1660fb4d412d34b437f29a213a6e34d078c"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"6db0eeb506b1d0f2ff52a3c86f8eb88df584b6f2","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_8455f4c7","line":28,"in_reply_to":"9abb7d3a_18c7a946","updated":"2016-05-27 08:55:01.000000000","message":"yes you are right. I thought that because it in the fdb section it will be clear that it related ovs and SR-IOV shared physical network.\nDo you have a better name?\nmaybe shared_physical_device_mappings?\nmeaning shared physical device mapping between SR-IOV and OVS or SR-IOV and linux bridge","commit_id":"4957e1660fb4d412d34b437f29a213a6e34d078c"},{"author":{"_account_id":20254,"name":"dongwenshuai","email":"dong.wenshuai@zte.com.cn","username":"dongwenshuai"},"change_message_id":"7f506bba5df01dcfc035e85d7a9b29ac9a8f5b99","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_18c7a946","line":28,"in_reply_to":"9abb7d3a_32544e53","updated":"2016-05-27 07:12:53.000000000","message":"Now it is the same as the option in SRI-OV . Are you means the value of two options is also same? I think there are some differences between them. The value in FDB is the physical network which  ovs agent and sriov agent used together","commit_id":"4957e1660fb4d412d34b437f29a213a6e34d078c"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"9e454a56de31eff542c7398eef39c7ae230fead8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_9cb996ec","line":28,"in_reply_to":"9abb7d3a_8455f4c7","updated":"2016-05-29 07:44:57.000000000","message":"Done","commit_id":"4957e1660fb4d412d34b437f29a213a6e34d078c"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"d61162c366a99b8161d0f44ccb7473ac6aa2599c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_32544e53","line":28,"in_reply_to":"bab6814e_9f657c1f","updated":"2016-05-27 05:38:15.000000000","message":"can you please elaborate why?\naren\u0027t they the same mapping?","commit_id":"4957e1660fb4d412d34b437f29a213a6e34d078c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cff3d7792dc5929d011f7ade8803e44655ca6f03","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                try:"},{"line_number":65,"context_line":"                    _stdout \u003d FdbInterface.show(device)"},{"line_number":66,"context_line":"                except RuntimeError as e:"},{"line_number":67,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":68,"context_line":"                    continue"},{"line_number":69,"context_line":"                self.device_to_macs[device] \u003d _stdout.split()[::3]"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_9a8876e9","line":67,"updated":"2016-05-29 12:11:49.000000000","message":"just seeing a warning of an exception may be a little confusion. Can you add some context here, for example Unable to find FDB Interafce. Exception: ...","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"3771fe7399ea770a87565b34bfeac0e5c305d97c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                try:"},{"line_number":65,"context_line":"                    _stdout \u003d FdbInterface.show(device)"},{"line_number":66,"context_line":"                except RuntimeError as e:"},{"line_number":67,"context_line":"                    LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":68,"context_line":"                    continue"},{"line_number":69,"context_line":"                self.device_to_macs[device] \u003d _stdout.split()[::3]"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_951169af","line":67,"in_reply_to":"9abb7d3a_9a8876e9","updated":"2016-05-29 14:32:08.000000000","message":"Done","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cff3d7792dc5929d011f7ade8803e44655ca6f03","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            try:"},{"line_number":79,"context_line":"                FdbInterface.add(mac, device)"},{"line_number":80,"context_line":"            except RuntimeError as e:"},{"line_number":81,"context_line":"                LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":82,"context_line":"                return"},{"line_number":83,"context_line":"            self.device_to_macs[device].append(mac)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_fa6d4233","line":81,"updated":"2016-05-29 12:11:49.000000000","message":"ditto","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"3771fe7399ea770a87565b34bfeac0e5c305d97c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            try:"},{"line_number":79,"context_line":"                FdbInterface.add(mac, device)"},{"line_number":80,"context_line":"            except RuntimeError as e:"},{"line_number":81,"context_line":"                LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":82,"context_line":"                return"},{"line_number":83,"context_line":"            self.device_to_macs[device].append(mac)"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_f526f514","line":81,"in_reply_to":"9abb7d3a_fa6d4233","updated":"2016-05-29 14:32:08.000000000","message":"Done","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cff3d7792dc5929d011f7ade8803e44655ca6f03","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                if mac in self.device_to_macs[device]:"},{"line_number":94,"context_line":"                    try:"},{"line_number":95,"context_line":"                        FdbInterface.delete(mac, device)"},{"line_number":96,"context_line":"                    except RuntimeError as e:"},{"line_number":97,"context_line":"                        LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":98,"context_line":"                        return"},{"line_number":99,"context_line":"                    self.device_to_macs[device].remove(mac)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_da6afe19","line":96,"updated":"2016-05-29 12:11:49.000000000","message":"ditto","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"3771fe7399ea770a87565b34bfeac0e5c305d97c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                if mac in self.device_to_macs[device]:"},{"line_number":94,"context_line":"                    try:"},{"line_number":95,"context_line":"                        FdbInterface.delete(mac, device)"},{"line_number":96,"context_line":"                    except RuntimeError as e:"},{"line_number":97,"context_line":"                        LOG.warning(_LW(\u0027%s\u0027), e)"},{"line_number":98,"context_line":"                        return"},{"line_number":99,"context_line":"                    self.device_to_macs[device].remove(mac)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_d523f103","line":96,"in_reply_to":"9abb7d3a_da6afe19","updated":"2016-05-29 14:32:08.000000000","message":"Done","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cff3d7792dc5929d011f7ade8803e44655ca6f03","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            cfg.CONF.FDB.shared_physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":107,"context_line":"        devices \u003d self._get_devices()"},{"line_number":108,"context_line":"        if not devices:"},{"line_number":109,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for fdb extnesion: \u0027"},{"line_number":110,"context_line":"                          \u0027no physical devices\u0027))"},{"line_number":111,"context_line":"            sys.exit(1)"},{"line_number":112,"context_line":"        self.fdb_tracker \u003d self.FdbTableTracker(devices)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_3a786af2","line":109,"range":{"start_line":109,"start_character":66,"end_line":109,"end_character":75},"updated":"2016-05-29 12:11:49.000000000","message":"typo","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"3771fe7399ea770a87565b34bfeac0e5c305d97c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            cfg.CONF.FDB.shared_physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":107,"context_line":"        devices \u003d self._get_devices()"},{"line_number":108,"context_line":"        if not devices:"},{"line_number":109,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for fdb extnesion: \u0027"},{"line_number":110,"context_line":"                          \u0027no physical devices\u0027))"},{"line_number":111,"context_line":"            sys.exit(1)"},{"line_number":112,"context_line":"        self.fdb_tracker \u003d self.FdbTableTracker(devices)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_35219dfc","line":109,"range":{"start_line":109,"start_character":66,"end_line":109,"end_character":75},"in_reply_to":"9abb7d3a_3a786af2","updated":"2016-05-29 14:32:08.000000000","message":"Done","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":20254,"name":"dongwenshuai","email":"dong.wenshuai@zte.com.cn","username":"dongwenshuai"},"change_message_id":"fac9ae837b1306c6850d61ef729b93b95b47b4c0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":51,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":52,"context_line":"    # that are located with the network node."},{"line_number":53,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class FdbTableTracker(object):"},{"line_number":56,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_9b02330a","line":53,"updated":"2016-05-30 03:27:44.000000000","message":"Maybe dhcp ports are also needed to consider","commit_id":"16c17e415e832b9a137641df2257fa75e1f98e93"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"479fa1901dc628588febb27d2aa9d077170bc429","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":51,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":52,"context_line":"    # that are located with the network node."},{"line_number":53,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class FdbTableTracker(object):"},{"line_number":56,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_2e1907d8","line":53,"in_reply_to":"9abb7d3a_9b02330a","updated":"2016-05-31 10:38:54.000000000","message":"Done","commit_id":"16c17e415e832b9a137641df2257fa75e1f98e93"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"bcbeaa821a6178c29f6073ff2405fbaab0b74631","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":51,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":52,"context_line":"    # that are located with the network node."},{"line_number":53,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class FdbTableTracker(object):"},{"line_number":56,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_9c5189db","line":53,"in_reply_to":"9abb7d3a_9b02330a","updated":"2016-05-30 05:51:38.000000000","message":"In case of dhcp the SR-IOV send broadcast which is going to the wire and to the PF so there is no problem in that case","commit_id":"16c17e415e832b9a137641df2257fa75e1f98e93"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"479fa1901dc628588febb27d2aa9d077170bc429","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":51,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":52,"context_line":"    # that are located with the network node."},{"line_number":53,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class FdbTableTracker(object):"},{"line_number":56,"context_line":"        \"\"\"FDB table tracker is a helper class"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_8e0ab377","line":53,"in_reply_to":"9abb7d3a_9c5189db","updated":"2016-05-31 10:38:54.000000000","message":"Done","commit_id":"16c17e415e832b9a137641df2257fa75e1f98e93"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_327f5ce1","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":48},"updated":"2016-06-01 14:57:51.000000000","message":"just wondering if we \"device\" is the right term here... All other config options the deal with linux \"devices\" are named interfaces (e.g. physical_interface_mapping).\n\nWhy not using interface here as well?\n\n\"Device\" in the l2 agent config is usually used for the name of the tap device. That confused me a bit!","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_47117203","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":48},"in_reply_to":"9abb7d3a_327f5ce1","updated":"2016-06-04 11:18:46.000000000","message":"Good point, in fact the name started as \u0027physnet_to_interface\u0027 but changed it after I saw that the implementation of the sriov agent referred to it as \u0027device\u0027.\nI\u0027ll rename it if it\u0027s acceptable with everyone.","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3aa73a038fe8d2d961a7e34d1883d22601728309","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_e678152e","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":48},"in_reply_to":"9abb7d3a_327f5ce1","updated":"2016-06-03 01:13:30.000000000","message":"I guess interface is better.\nfor SR-IOV for some reason it is called physical_device_mappings. I just hope is won\u0027t be confusing to the SR-IOV users","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ddb7e72a6fd41e31f6074dbaffcf2733ff2b94bb","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_ed30e909","line":28,"range":{"start_line":28,"start_character":17,"end_line":28,"end_character":48},"in_reply_to":"9abb7d3a_e678152e","updated":"2016-06-03 06:50:57.000000000","message":"oh, wasn\u0027t aware of that. I think this would be a reason to keep going with \"device\" here - or rename the physical_device_mappings option to \"*interface*\"? Not sure what\u0027s best. Some other core opinion would be helpful here!","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                       \"shared physical network device between \""},{"line_number":33,"context_line":"                       \"SR-IOV and OVS or SR-IOV and linux bridge\"))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":"cfg.CONF.register_opts(fdb_population_opt, \u0027FDB\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_03aacc18","line":35,"range":{"start_line":35,"start_character":44,"end_line":35,"end_character":47},"updated":"2016-06-01 14:57:51.000000000","message":"I think the convention is to use lower case","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3aa73a038fe8d2d961a7e34d1883d22601728309","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                       \"shared physical network device between \""},{"line_number":33,"context_line":"                       \"SR-IOV and OVS or SR-IOV and linux bridge\"))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":"cfg.CONF.register_opts(fdb_population_opt, \u0027FDB\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_06d1d9fb","line":35,"range":{"start_line":35,"start_character":44,"end_line":35,"end_character":47},"in_reply_to":"9abb7d3a_03aacc18","updated":"2016-06-03 01:13:30.000000000","message":"will do","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                       \"shared physical network device between \""},{"line_number":33,"context_line":"                       \"SR-IOV and OVS or SR-IOV and linux bridge\"))"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":"cfg.CONF.register_opts(fdb_population_opt, \u0027FDB\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_3dd1bbfc","line":35,"range":{"start_line":35,"start_character":44,"end_line":35,"end_character":47},"in_reply_to":"9abb7d3a_06d1d9fb","updated":"2016-06-04 11:18:46.000000000","message":"Done","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    http://events.linuxfoundation.org/sites/events/files/slides/LinuxConJapan2014_makita_0.pdf"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # messages with compute device owner update normal port instances in the"},{"line_number":50,"context_line":"    # FDB table which are required in order to enable communication between"},{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_432fb43e","line":49,"updated":"2016-06-01 14:57:51.000000000","message":"this whole paragraph is a bit tricky to read. maybe you can make 3 bullets for for the 3 topics (compute, router, dhcp) you\u0027re covering?\n\nmaybe using dashed-words, e.g. normal-port-instances helps to increase readability as well...\n\nproposal:\n  FDB udpates are triggered for ports with a certain device_owner only:\n  - device_owner \"compute\": Updates fdb with normal port intances, required for...\n  - device_owner \"router_interface\": Updates FDB with router port to enable...\n  - device_owner \"dhcp\":....","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3aa73a038fe8d2d961a7e34d1883d22601728309","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    http://events.linuxfoundation.org/sites/events/files/slides/LinuxConJapan2014_makita_0.pdf"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # messages with compute device owner update normal port instances in the"},{"line_number":50,"context_line":"    # FDB table which are required in order to enable communication between"},{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_e6f49588","line":49,"in_reply_to":"9abb7d3a_432fb43e","updated":"2016-06-03 01:13:30.000000000","message":"will do","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    http://events.linuxfoundation.org/sites/events/files/slides/LinuxConJapan2014_makita_0.pdf"},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # messages with compute device owner update normal port instances in the"},{"line_number":50,"context_line":"    # FDB table which are required in order to enable communication between"},{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_1dce7f5a","line":49,"in_reply_to":"9abb7d3a_e6f49588","updated":"2016-06-04 11:18:46.000000000","message":"Done","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    # messages with compute device owner update normal port instances in the"},{"line_number":50,"context_line":"    # FDB table which are required in order to enable communication between"},{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":53,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":54,"context_line":"    # that are located with the network node."},{"line_number":55,"context_line":"    # DHCP messages are not required because they are broadcast."}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_a3cca089","line":52,"range":{"start_line":52,"start_character":64,"end_line":52,"end_character":67},"updated":"2016-06-01 14:57:51.000000000","message":"LB does not?","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3aa73a038fe8d2d961a7e34d1883d22601728309","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    # messages with compute device owner update normal port instances in the"},{"line_number":50,"context_line":"    # FDB table which are required in order to enable communication between"},{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":53,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":54,"context_line":"    # that are located with the network node."},{"line_number":55,"context_line":"    # DHCP messages are not required because they are broadcast."}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_e6693527","line":52,"range":{"start_line":52,"start_character":64,"end_line":52,"end_character":67},"in_reply_to":"9abb7d3a_a3cca089","updated":"2016-06-03 01:13:30.000000000","message":"LB should be as well","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    # messages with compute device owner update normal port instances in the"},{"line_number":50,"context_line":"    # FDB table which are required in order to enable communication between"},{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":53,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":54,"context_line":"    # that are located with the network node."},{"line_number":55,"context_line":"    # DHCP messages are not required because they are broadcast."}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_7ddb431c","line":52,"range":{"start_line":52,"start_character":64,"end_line":52,"end_character":67},"in_reply_to":"9abb7d3a_e6693527","updated":"2016-06-04 11:18:46.000000000","message":"Done","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":53,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":54,"context_line":"    # that are located with the network node."},{"line_number":55,"context_line":"    # DHCP messages are not required because they are broadcast."},{"line_number":56,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_e3ece8bc","line":54,"updated":"2016-06-01 14:57:51.000000000","message":"what about sr-iov instances to a router port?","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ddb7e72a6fd41e31f6074dbaffcf2733ff2b94bb","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":53,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":54,"context_line":"    # that are located with the network node."},{"line_number":55,"context_line":"    # DHCP messages are not required because they are broadcast."},{"line_number":56,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_4d4f75be","line":54,"in_reply_to":"9abb7d3a_699fd6b4","updated":"2016-06-03 06:50:57.000000000","message":"you\u0027re absolutely right. I think I don\u0027t get the floating-ip use case mentioned here. Is it a sr-iov-port talking to a floating-ip?\n\nI think the main use case is a sr-iov port to an external network (where the router acts as gateway), isn\u0027t it?","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3aa73a038fe8d2d961a7e34d1883d22601728309","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    # SR-IOV direct port instances and normal port instance."},{"line_number":52,"context_line":"    # and messages with router_interface device owner update to OVS port"},{"line_number":53,"context_line":"    # that enables communication to SR-IOV instances with floating ip"},{"line_number":54,"context_line":"    # that are located with the network node."},{"line_number":55,"context_line":"    # DHCP messages are not required because they are broadcast."},{"line_number":56,"context_line":"    PERMITTED_DEVICE_OWNERS \u003d {\u0027compute\u0027, \u0027network:router_interface\u0027}"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_699fd6b4","line":54,"in_reply_to":"9abb7d3a_e3ece8bc","updated":"2016-06-03 01:13:30.000000000","message":"Do you mean that the device owner is router:external?\nas I understand route has 2 port network:router_interface on the private network and router:external on the public network.\nSo we just need to add the mac of the network:router_interface because it is on the private network","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        def __init__(self, devices):"},{"line_number":63,"context_line":"            self.device_to_macs \u003d {}"},{"line_number":64,"context_line":"            self.portid_to_mac \u003d {}"},{"line_number":65,"context_line":"            # update macs already in the port\u0027s FDB table"},{"line_number":66,"context_line":"            for device in devices:"},{"line_number":67,"context_line":"                try:"},{"line_number":68,"context_line":"                    _stdout \u003d FdbInterface.show(device)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_32f47c59","line":65,"range":{"start_line":65,"start_character":41,"end_line":65,"end_character":45},"updated":"2016-06-01 14:57:51.000000000","message":"device\u0027s ?? or physical_interface\u0027s?","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"3aa73a038fe8d2d961a7e34d1883d22601728309","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        def __init__(self, devices):"},{"line_number":63,"context_line":"            self.device_to_macs \u003d {}"},{"line_number":64,"context_line":"            self.portid_to_mac \u003d {}"},{"line_number":65,"context_line":"            # update macs already in the port\u0027s FDB table"},{"line_number":66,"context_line":"            for device in devices:"},{"line_number":67,"context_line":"                try:"},{"line_number":68,"context_line":"                    _stdout \u003d FdbInterface.show(device)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_49b9322e","line":65,"range":{"start_line":65,"start_character":41,"end_line":65,"end_character":45},"in_reply_to":"9abb7d3a_32f47c59","updated":"2016-06-03 01:13:30.000000000","message":"should be physical interface\u0027s","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        def __init__(self, devices):"},{"line_number":63,"context_line":"            self.device_to_macs \u003d {}"},{"line_number":64,"context_line":"            self.portid_to_mac \u003d {}"},{"line_number":65,"context_line":"            # update macs already in the port\u0027s FDB table"},{"line_number":66,"context_line":"            for device in devices:"},{"line_number":67,"context_line":"                try:"},{"line_number":68,"context_line":"                    _stdout \u003d FdbInterface.show(device)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_bd03eb75","line":65,"range":{"start_line":65,"start_character":41,"end_line":65,"end_character":45},"in_reply_to":"9abb7d3a_49b9322e","updated":"2016-06-04 11:18:46.000000000","message":"Done","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                self.device_to_macs[device] \u003d _stdout.split()[::3]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        def update_port(self, device, port_id, mac):"},{"line_number":76,"context_line":"            if self.portid_to_mac.get(port_id):"},{"line_number":77,"context_line":"                return"},{"line_number":78,"context_line":"            self.portid_to_mac[port_id] \u003d mac"},{"line_number":79,"context_line":"            # rule for mac already exists"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_bd995dc6","line":76,"updated":"2016-06-01 14:57:51.000000000","message":"move lines 76 - 81 into a method _fdb_rule_exists()? The tricky then is probably line 78.... hhmm","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                self.device_to_macs[device] \u003d _stdout.split()[::3]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        def update_port(self, device, port_id, mac):"},{"line_number":76,"context_line":"            if self.portid_to_mac.get(port_id):"},{"line_number":77,"context_line":"                return"},{"line_number":78,"context_line":"            self.portid_to_mac[port_id] \u003d mac"},{"line_number":79,"context_line":"            # rule for mac already exists"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_3d7c1b20","line":76,"in_reply_to":"9abb7d3a_bd995dc6","updated":"2016-06-04 11:18:46.000000000","message":"the purpose here is:\n- check if we already have the port id\n- if not update the port id\n- check if rule already exists\n\nI don\u0027t think it should be a function because it does more than one thing and have \"unexpected behavior\" such as updating the \u0027port_id_to_mac\u0027 data structure and doesn\u0027t only check if a rule exists or not.\n\nI\u0027ve added comments to the code please review it and tell me if it makes sense.","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3cd23f8bf9801f9d20a6344d843a213a900303be","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                    _stdout \u003d FdbInterface.show(device)"},{"line_number":70,"context_line":"                except RuntimeError as e:"},{"line_number":71,"context_line":"                    LOG.warning(_LW("},{"line_number":72,"context_line":"                        \u0027Unable to find FDB Interface. Exception: %s\u0027), e)"},{"line_number":73,"context_line":"                    continue"},{"line_number":74,"context_line":"                self.device_to_macs[device] \u003d _stdout.split()[::3]"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_42d014ca","line":72,"updated":"2016-06-09 14:48:49.000000000","message":"nit - if you respin please add the device here","commit_id":"1f1a573987452764ef15fe01542c6258a038172b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3cd23f8bf9801f9d20a6344d843a213a900303be","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                FdbInterface.add(mac, device)"},{"line_number":87,"context_line":"            except RuntimeError as e:"},{"line_number":88,"context_line":"                LOG.warning(_LW("},{"line_number":89,"context_line":"                    \u0027Unable to find FDB Interface. Exception: %s\u0027), e)"},{"line_number":90,"context_line":"                return"},{"line_number":91,"context_line":"            self.device_to_macs[device].append(mac)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_62d710c0","line":89,"updated":"2016-06-09 14:48:49.000000000","message":"ditto","commit_id":"1f1a573987452764ef15fe01542c6258a038172b"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3cd23f8bf9801f9d20a6344d843a213a900303be","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                        FdbInterface.delete(mac, device)"},{"line_number":104,"context_line":"                    except RuntimeError as e:"},{"line_number":105,"context_line":"                        LOG.warning(_LW("},{"line_number":106,"context_line":"                            \u0027Unable to find FDB Interface. Exception: %s\u0027), e)"},{"line_number":107,"context_line":"                        return"},{"line_number":108,"context_line":"                    self.device_to_macs[device].remove(mac)"},{"line_number":109,"context_line":"                    del self.portid_to_mac[port_id]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aa08908_e2f1406c","line":106,"updated":"2016-06-09 14:48:49.000000000","message":"ditto","commit_id":"1f1a573987452764ef15fe01542c6258a038172b"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"034c915f757f84116f25155bf919d7329b8b413a","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_1b1b99cb","line":28,"updated":"2016-06-13 11:54:32.000000000","message":"There is no way to autodiscover this? , by inspecting the existing bridge mappings on linuxbridge/OVS ?\n\nAdding a new knob/switch always makes things a bit more complicated and we should avoid it when it\u0027s technically possible or reasonable.","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"e658c9fef43c1dd0319502e6271cd636a7f5a7a8","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_e74eb236","line":28,"in_reply_to":"7aa08908_1b1b99cb","updated":"2016-06-14 12:22:09.000000000","message":"So we don\u0027t have the physical_device_mappings, although it is a config option in the sriov-agent.\n\nit\u0027s possible to write a function that will iterate all physical interfaces and check each one to see if it\u0027s an sriov and has virtual functions but it doesn\u0027t mean that the sriov agent is actually using all these interfaces.\nanother consideration is with OVS we only get the physical bridge (as opposed to lb that we get all the physical interfaces) and I think it\u0027s possible that the phy-br wouldn\u0027t be connected directly to the physical interface, meaning we will have to recursively check all connected ports and see if they are physical interfaces.\n\ndo you have any suggestions on how we can solve this?","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"67d269f79e1c2cbc6a8caf321ec7abe99d7c57e3","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_ce70c3a7","line":28,"in_reply_to":"7aa08908_30090796","updated":"2016-06-15 06:46:14.000000000","message":"you\u0027re right, that might become tricky. I just was thinking that this extension always registers macs on the PFs defined in the sr-iov config.. If there\u0027s no bridge on top, then the fdb call probably will fail. That\u0027s fine. But I think the problem is that the mac addresses get registered on the wrong interface, and though communication from sr-iov to those macs will always end up in the PF and therefore in the nowhere.\n\nThe alternative would really be to iterate over all the interface plugged into the phy_bridge AND for each interface go down the whole hierachy until you end up on something that looks like a physical interface. This doesn\u0027t sound like a good approach.\n\nSo maybe having a config option is not that bad...","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"2123a912bc55024ba4ffd1702b50d436d3e47d55","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_30090796","line":28,"in_reply_to":"7aa08908_5e130f65","updated":"2016-06-14 15:38:03.000000000","message":"It is not that simple to inspect the OVS for  physical interfaces because you don\u0027t know how the cloud was deployed.\nso under the phys-bridge there can be linux bridge which could be connected to  physical interface (This is what mirants fuel does) also cloud deployer can create complex topology with ovs, linux bridge and bond and more, which make this even harder","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"dff0bfb1ab580f076a2fd0846058ccc60c7ff572","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":27,"context_line":"fdb_population_opt \u003d ["},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":29,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":30,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":31,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_5e130f65","line":28,"in_reply_to":"7aa08908_e74eb236","updated":"2016-06-14 13:48:26.000000000","message":"In OVS you could check the physical interfaces of the bridge by inspection.\n\nSo I understand the case where you\u0027re interested is :  SRIOV devices which provide connectivity to a linux bridge, or to a ovs bridge (for provider network).\n\nCouldn\u0027t you loop through the ovs bridges to find if there\u0027s a sr-iov device, and..there you find the physnet:sr-iov device mapping, and for linuxbridge, just use it\u0027s own config.\n\n\nThat would make this extension less technology-agnostic, because you may need to get access to the specific bridge mappings, and check devices in ovs... but... it\u0027s not impossible and doesn\u0027t seem very complicated either. (I could still be missing something)","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c78d4f4da7bdd725d4808aa312c64e806289ce7f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        def update_port(self, device, port_id, mac):"},{"line_number":78,"context_line":"            # check if port id is updated"},{"line_number":79,"context_line":"            if self.portid_to_mac.get(port_id):"},{"line_number":80,"context_line":"                return"},{"line_number":81,"context_line":"            # update port id"},{"line_number":82,"context_line":"            self.portid_to_mac[port_id] \u003d mac"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_3475cdf9","line":79,"updated":"2016-06-13 07:52:25.000000000","message":"I think we also need to check if the mac that is associated with the port_id matches the mac of the updated port, right? Otherwise we might return although the rule does not exist.\n\nThe rare use case is:\n- have port with MAC A\n- bring that port in failed/unbound state\n- Change the port\u0027s mac to MAC B\n\nWhat about adding a test for this scenario?","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"e658c9fef43c1dd0319502e6271cd636a7f5a7a8","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        def update_port(self, device, port_id, mac):"},{"line_number":78,"context_line":"            # check if port id is updated"},{"line_number":79,"context_line":"            if self.portid_to_mac.get(port_id):"},{"line_number":80,"context_line":"                return"},{"line_number":81,"context_line":"            # update port id"},{"line_number":82,"context_line":"            self.portid_to_mac[port_id] \u003d mac"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_a2c93b28","line":79,"in_reply_to":"7aa08908_3475cdf9","updated":"2016-06-14 12:22:09.000000000","message":"Done","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c78d4f4da7bdd725d4808aa312c64e806289ce7f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        def update_port(self, device, port_id, mac):"},{"line_number":78,"context_line":"            # check if port id is updated"},{"line_number":79,"context_line":"            if self.portid_to_mac.get(port_id):"},{"line_number":80,"context_line":"                return"},{"line_number":81,"context_line":"            # update port id"},{"line_number":82,"context_line":"            self.portid_to_mac[port_id] \u003d mac"},{"line_number":83,"context_line":"            # check if rule for mac already exists"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_995cbc7e","line":80,"updated":"2016-06-13 07:52:25.000000000","message":"To answer your comment on PS10: I thought it might be worth moving line 79-85 into a separate method, as in line 80 and in line 85 you\u0027re returning as a rule already exists. I agree that it is a little bit tricky due to line 82, which does a totally different thing.","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"034c915f757f84116f25155bf919d7329b8b413a","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\"Perform FDB Agent Extension initialization.\"\"\""},{"line_number":121,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":122,"context_line":"            cfg.CONF.fdb.shared_physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":123,"context_line":"        devices \u003d self._get_devices()"},{"line_number":124,"context_line":"        if not devices:"},{"line_number":125,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"},{"line_number":126,"context_line":"                          \u0027no physical devices\u0027))"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_5b7fe1df","line":123,"updated":"2016-06-13 11:54:32.000000000","message":"I\u0027d check how\u0027s it going to fail if somebody tries to add this extension to the wrong agent.\n\nCan we do some sort of sanity check that we\u0027re on the right agents, and otherwise fail/quit the agent?","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"e658c9fef43c1dd0319502e6271cd636a7f5a7a8","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\"Perform FDB Agent Extension initialization.\"\"\""},{"line_number":121,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":122,"context_line":"            cfg.CONF.fdb.shared_physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":123,"context_line":"        devices \u003d self._get_devices()"},{"line_number":124,"context_line":"        if not devices:"},{"line_number":125,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"},{"line_number":126,"context_line":"                          \u0027no physical devices\u0027))"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_c2d287d0","line":123,"in_reply_to":"7aa08908_5b7fe1df","updated":"2016-06-14 12:22:09.000000000","message":"Done","commit_id":"904a13b2765f05f4ca51c95a9fc8064d9361b412"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"b9b736c27dc412510bbcb0d15e01a358ed9d101f","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_795545f8","line":32,"updated":"2016-06-14 13:49:15.000000000","message":"check my response on PS12, thank you.","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"176dc76cfd7498fd9374ee85ebc13dc3766d2cb8","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_3a58c530","line":32,"in_reply_to":"7aa08908_0b002401","updated":"2016-06-14 15:42:36.000000000","message":"I don\u0027t think the we have the credential to query the neutron server in the agent, but I can double check this.\nUsually neutron server and agent talk via RPC","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"5942718c7bb6df5ca87045b49a45efa8c0125184","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_d6465f20","line":32,"in_reply_to":"7aa08908_0b446719","updated":"2016-06-16 07:56:11.000000000","message":"I don\u0027t see how this make life simpler now instead of give a config option the cloud deployer need to copy the config of SR-IOV to the ovs dir to change upstart/service. \nSo instead of clear config option with is not all the duplicate to the SR-IOV. we duplicate the SR-IOV config file. \n\nAnyway PS15 add the SR-IOV config to this extension.","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"2c5176d75d12ae8a89b29daceab03cb0ccfc4738","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_df2ea141","line":32,"in_reply_to":"7aa08908_3a3a5635","updated":"2016-06-15 12:50:15.000000000","message":"you\u0027re right, haven\u0027t considered this potential race...","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"5907f12d3d6d14ce148596f1ed395c36d8f3d9f1","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_3a3a5635","line":32,"in_reply_to":"7aa08908_3a58c530","updated":"2016-06-15 12:15:28.000000000","message":"So calling neutron client  is do able with this code \nhttp://paste.openstack.org/show/516235/\nAlso we would need to call it in initialize also\none time at handle_port just for the case that OVS was started before SR-IOV. I am not sure how mach I like this approach.","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"71441a5e3771095c6cd36392e437d1c2ea9fa041","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_0b002401","line":32,"in_reply_to":"7aa08908_795545f8","updated":"2016-06-14 15:30:30.000000000","message":"what about an API call to \"neutron agent-list\", filtered by host and agent type \"sr-iov\". this would give you the sr-iov device mapping (which contains the PF I guess). Then you can just check if one of the ovs or lb bridges has this interface plugged, instead of iterating over all...\n\nusing the lb config option is a great idea - but you still would like to verify if the PF is managed by an sr-iov agent.","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"ee78247f05d0c881a86dae80cd17712f656f4af0","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_0b446719","line":32,"in_reply_to":"7aa08908_df2ea141","updated":"2016-06-15 13:48:52.000000000","message":"I\u0027d avoid API calls to neutron-server, as we generally don\u0027t put the admin credentials on the compute nodes.\n\nWe could pass the SR-IOV config to the openvswitch-agent too if that helps (and hence it\u0027d be able to gather any sr-iov config, if that\u0027s the issue).\n\nWe could use a config dir for that, which is more modular, and deployment tools can add or remove config files without the need to modify .service or .upstart files.","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"71441a5e3771095c6cd36392e437d1c2ea9fa041","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                              ovs_constants.EXTENSION_DRIVER_TYPE)"},{"line_number":130,"context_line":"        if driver_type not in valid_driver_types:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"},{"line_number":132,"context_line":"                          \u0027not loaded on OVS or linux bridge agent\u0027))"},{"line_number":133,"context_line":"            sys.exit(1)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_44a059f4","line":132,"updated":"2016-06-14 15:30:30.000000000","message":"nit: I would phrase this positive: Extension only supported for OVS and linux bridge agent (or similar)","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"649e0c42243bd0db2a87e97ca312ebda6e220a45","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                              ovs_constants.EXTENSION_DRIVER_TYPE)"},{"line_number":130,"context_line":"        if driver_type not in valid_driver_types:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"},{"line_number":132,"context_line":"                          \u0027not loaded on OVS or linux bridge agent\u0027))"},{"line_number":133,"context_line":"            sys.exit(1)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("}],"source_content_type":"text/x-python","patch_set":13,"id":"7aa08908_6259d05b","line":132,"in_reply_to":"7aa08908_44a059f4","updated":"2016-06-15 13:12:26.000000000","message":"Done","commit_id":"f5a381b9e4eadb1b46495fca40a581d67a8b75f5"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"c4fc3421a24dfffba31afa996208e91689644ae4","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# if shared_physical_device_mappings is not configured KeyError will be thrown"},{"line_number":31,"context_line":"fdb_population_opt \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027shared_physical_device_mappings\u0027, default\u003d[],"},{"line_number":33,"context_line":"                help\u003d_(\"Comma-separated list of \""},{"line_number":34,"context_line":"                       \"\u003cphysical_network\u003e:\u003cnetwork_device\u003e tuples mapping \""},{"line_number":35,"context_line":"                       \"physical network names to the agent\u0027s node-specific \""}],"source_content_type":"text/x-python","patch_set":14,"id":"7aa08908_8becd7f4","line":32,"updated":"2016-06-15 13:49:45.000000000","message":"I still believe my comments on PS12 \u0026 PS13 apply.","commit_id":"da490bb2306811da56fef6a89c3206bdae8c553b"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"a4190854bbf363bbcac17927373b84329a515d44","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # sriov\u0027s configuration is reused here."},{"line_number":127,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":128,"context_line":"            cfg.CONF.SRIOV_NIC.physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":129,"context_line":"        devices \u003d self._get_devices()"},{"line_number":130,"context_line":"        if not devices:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_b1cf5d28","line":128,"updated":"2016-06-16 08:27:25.000000000","message":"When going that path, we should be careful about potential error scenarios. I\u0027m not an sr-iov expert so you guys might help out here:\n\n- if no bridge is on the PF, the bridge FDB call will fail (which is ok)\n- if a bridge is on the PF, but it has nothing to do with OpenStack, the command will succeed and all mac addresses of the ovs will be registered on this PF. That means traffic from a VF to such a mac, will always land in that bridge (and in the nowhere).\n- Assuming there are two sr-iov adapters in the system managed by openstack. Now the admin is bonding the PFs of those to run ovs on top. Will that work out? Will a bridge fdb command succeed?","commit_id":"df4f622f524aa63cdd52b5a7b33949b2f3ff5937"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"f5eb6f27a55db0f671fffaacceb6b53320efe420","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # sriov\u0027s configuration is reused here."},{"line_number":127,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":128,"context_line":"            cfg.CONF.SRIOV_NIC.physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":129,"context_line":"        devices \u003d self._get_devices()"},{"line_number":130,"context_line":"        if not devices:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_66becb01","line":128,"in_reply_to":"7aa08908_2d5ae6f2","updated":"2016-06-16 12:17:16.000000000","message":"I was more referring to a scenario where the PFs in the hypervisor are getting bonded and ovs put on top. But interesting what you\u0027ve figured out with the vf bond use case.\n\nAnyhow, I personally would prefer a separate config option like in the patchsets before, cause I don\u0027t see a good way for discovery.\n\nOr are there other ideas?","commit_id":"df4f622f524aa63cdd52b5a7b33949b2f3ff5937"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a25c3492d980189b6f3c061bcd89bffd6d1af791","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # sriov\u0027s configuration is reused here."},{"line_number":127,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":128,"context_line":"            cfg.CONF.SRIOV_NIC.physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":129,"context_line":"        devices \u003d self._get_devices()"},{"line_number":130,"context_line":"        if not devices:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"3aaa91ec_576270d9","line":128,"in_reply_to":"7aa08908_66becb01","updated":"2016-06-28 08:56:31.000000000","message":"If we are sure there is no good way of discovering it, let\u0027s then roll back to configuration.","commit_id":"df4f622f524aa63cdd52b5a7b33949b2f3ff5937"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"9f2abd9df4e618a7f854a3e586f179bdfdabea32","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # sriov\u0027s configuration is reused here."},{"line_number":127,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":128,"context_line":"            cfg.CONF.SRIOV_NIC.physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":129,"context_line":"        devices \u003d self._get_devices()"},{"line_number":130,"context_line":"        if not devices:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_eccf4a55","line":128,"in_reply_to":"7aa08908_b1cf5d28","updated":"2016-06-16 08:43:54.000000000","message":"I think your points just make me feel stronger about keeping it in different config option like it was in PS 14, so we can let the cloud deployer decide.\n\nregarding your 3 point we will try it, let you know","commit_id":"df4f622f524aa63cdd52b5a7b33949b2f3ff5937"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"42f931319c337373892e520775f29be6f63c75a5","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # sriov\u0027s configuration is reused here."},{"line_number":127,"context_line":"        self.device_mappings \u003d n_utils.parse_mappings("},{"line_number":128,"context_line":"            cfg.CONF.SRIOV_NIC.physical_device_mappings, unique_keys\u003dFalse)"},{"line_number":129,"context_line":"        devices \u003d self._get_devices()"},{"line_number":130,"context_line":"        if not devices:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027Invalid configuration provided for FDB extension: \u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_2d5ae6f2","line":128,"in_reply_to":"7aa08908_eccf4a55","updated":"2016-06-16 11:17:09.000000000","message":"So I talked to our Architect regarding the bond and in this case you will need to add the mac to both PF.\nThe explanation:\nthe guest should be assigned with two VFs, each one from a different PF.\nThe bond driver on the guest will load balance the traffic across the VFs\nFor each PF there is an entity on the NIC that is equivalent for a switch we called it embedded switch.\nSince each VF can \"see\" packets from the VM, the VM mac address should be learned by the corresponding embedded switches (per each PF in the bond)\nand that why we need to add the mac for both PFs.","commit_id":"df4f622f524aa63cdd52b5a7b33949b2f3ff5937"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"60542a5fbb6bc8e1e148f7cb7e4cacee6403ceba","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    # class FdbPopulationAgentExtension implementation:"},{"line_number":126,"context_line":"    def initialize(self, connection, driver_type):"},{"line_number":127,"context_line":"        \"\"\"Perform FDB Agent Extension initialization.\"\"\""},{"line_number":128,"context_line":"        valid_driver_types \u003d (linux_bridge_constants.EXTENSION_DRIVER_TYPE,"},{"line_number":129,"context_line":"                              ovs_constants.EXTENSION_DRIVER_TYPE)"},{"line_number":130,"context_line":"        if driver_type not in valid_driver_types:"},{"line_number":131,"context_line":"            LOG.error(_LE(\u0027FDB extension is only supported for OVS and \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_30a3b201","line":128,"updated":"2016-07-01 09:24:11.000000000","message":"nit: This could be a constant at top level of the module \"VALID_TYPE_DRIVERS\" or at the extension class, so people can see it as soon as they open the fdb_population.py \n\nclass FdbPopulationAgentExtension(...):\n     VALID_TYPE_DRIVERS \u003d ...","commit_id":"2c8f61b816bf531a17a7b45d35a5388e8a2f607a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"60542a5fbb6bc8e1e148f7cb7e4cacee6403ceba","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        for permitted_device_owner in self.PERMITTED_DEVICE_OWNERS:"},{"line_number":170,"context_line":"            if device_owner.startswith(permitted_device_owner):"},{"line_number":171,"context_line":"                return True"},{"line_number":172,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":18,"id":"3aaa91ec_d08cee36","line":172,"updated":"2016-07-01 09:24:11.000000000","message":"nit: return False is not completely necessary.","commit_id":"2c8f61b816bf531a17a7b45d35a5388e8a2f607a"}],"neutron/tests/unit/agent/l2/extensions/test_fdb_population.py":[{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cmd \u003d [\u0027bridge\u0027, \u0027fdb\u0027, \u0027add\u0027, self.UPDATE_MSG[\u0027mac_address\u0027],"},{"line_number":58,"context_line":"               \u0027dev\u0027, self.INTERFACE]"},{"line_number":59,"context_line":"        mock_execute.assert_called_once_with(cmd, run_as_root\u003dTrue)"},{"line_number":60,"context_line":"        updated_macs_for_interface \u003d (fdb_extension.fdb_tracker."},{"line_number":61,"context_line":"                                      interface_to_macs.get(self.INTERFACE))"},{"line_number":62,"context_line":"        mac \u003d self.UPDATE_MSG[\u0027mac_address\u0027]"},{"line_number":63,"context_line":"        self.assertTrue(mac in updated_macs_for_interface)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_9eecec90","line":61,"range":{"start_line":60,"start_character":37,"end_line":61,"end_character":76},"updated":"2016-05-24 17:43:29.000000000","message":"can you break it like this\n updated_macs_for_interface \u003d (\nfdb_extension.fdb_tracker.interface_to_macs.get(self.INTERFACE))","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cmd \u003d [\u0027bridge\u0027, \u0027fdb\u0027, \u0027add\u0027, self.UPDATE_MSG[\u0027mac_address\u0027],"},{"line_number":58,"context_line":"               \u0027dev\u0027, self.INTERFACE]"},{"line_number":59,"context_line":"        mock_execute.assert_called_once_with(cmd, run_as_root\u003dTrue)"},{"line_number":60,"context_line":"        updated_macs_for_interface \u003d (fdb_extension.fdb_tracker."},{"line_number":61,"context_line":"                                      interface_to_macs.get(self.INTERFACE))"},{"line_number":62,"context_line":"        mac \u003d self.UPDATE_MSG[\u0027mac_address\u0027]"},{"line_number":63,"context_line":"        self.assertTrue(mac in updated_macs_for_interface)"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_d573d1b2","line":61,"range":{"start_line":60,"start_character":37,"end_line":61,"end_character":76},"in_reply_to":"bab6814e_9eecec90","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        updated_macs_for_interface \u003d (fdb_extension.fdb_tracker."},{"line_number":61,"context_line":"                                      interface_to_macs.get(self.INTERFACE))"},{"line_number":62,"context_line":"        mac \u003d self.UPDATE_MSG[\u0027mac_address\u0027]"},{"line_number":63,"context_line":"        self.assertTrue(mac in updated_macs_for_interface)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027neutron.agent.linux.utils.execute\u0027)"},{"line_number":66,"context_line":"    def test_unpermitted_dvice_owner(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_5e99e41e","line":63,"range":{"start_line":63,"start_character":13,"end_line":63,"end_character":23},"updated":"2016-05-24 17:43:29.000000000","message":"use assertIn","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        updated_macs_for_interface \u003d (fdb_extension.fdb_tracker."},{"line_number":61,"context_line":"                                      interface_to_macs.get(self.INTERFACE))"},{"line_number":62,"context_line":"        mac \u003d self.UPDATE_MSG[\u0027mac_address\u0027]"},{"line_number":63,"context_line":"        self.assertTrue(mac in updated_macs_for_interface)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @mock.patch(\u0027neutron.agent.linux.utils.execute\u0027)"},{"line_number":66,"context_line":"    def test_unpermitted_dvice_owner(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_156ef9c8","line":63,"range":{"start_line":63,"start_character":13,"end_line":63,"end_character":23},"in_reply_to":"bab6814e_5e99e41e","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"b2cc53b89c55cc3391be5cec707176d275f5123e","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        updated_macs_for_interface \u003d (fdb_extension.fdb_tracker."},{"line_number":74,"context_line":"                                      interface_to_macs.get(self.INTERFACE))"},{"line_number":75,"context_line":"        mac \u003d self.UPDATE_MSG[\u0027mac_address\u0027]"},{"line_number":76,"context_line":"        self.assertFalse(mac in updated_macs_for_interface)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @mock.patch(\u0027neutron.agent.linux.utils.execute\u0027)"},{"line_number":79,"context_line":"    def test_catch_init_exception(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_7ebb0876","line":76,"range":{"start_line":76,"start_character":13,"end_line":76,"end_character":24},"updated":"2016-05-24 17:43:29.000000000","message":"use assertIn","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"472b03bf31d92bf00adeef075fb86f6dd197a40a","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        updated_macs_for_interface \u003d (fdb_extension.fdb_tracker."},{"line_number":74,"context_line":"                                      interface_to_macs.get(self.INTERFACE))"},{"line_number":75,"context_line":"        mac \u003d self.UPDATE_MSG[\u0027mac_address\u0027]"},{"line_number":76,"context_line":"        self.assertFalse(mac in updated_macs_for_interface)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @mock.patch(\u0027neutron.agent.linux.utils.execute\u0027)"},{"line_number":79,"context_line":"    def test_catch_init_exception(self, mock_execute):"}],"source_content_type":"text/x-python","patch_set":1,"id":"bab6814e_556881ba","line":76,"range":{"start_line":76,"start_character":13,"end_line":76,"end_character":24},"in_reply_to":"bab6814e_7ebb0876","updated":"2016-05-25 09:49:43.000000000","message":"Done","commit_id":"57ee00fa71563e50791761e8bd1de35a3c30e1be"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"cff3d7792dc5929d011f7ade8803e44655ca6f03","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_1a75a6f8","line":16,"updated":"2016-05-29 12:11:49.000000000","message":"please add a new line here - copy is not 3rd party","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"3771fe7399ea770a87565b34bfeac0e5c305d97c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import copy"},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_151e19ba","line":16,"in_reply_to":"9abb7d3a_1a75a6f8","updated":"2016-05-29 14:32:08.000000000","message":"Done","commit_id":"676a30a9685450cee6de14d0d29570d15f7eea63"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"c681db5f00208d7e29e58e19b8d73b91fce6ad33","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertIn(mac, updated_macs_for_device)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @mock.patch(\u0027neutron.agent.linux.utils.execute\u0027)"},{"line_number":77,"context_line":"    def test_unpermitted_dvice_owner(self, mock_execute):"},{"line_number":78,"context_line":"        fdb_extension \u003d self._get_fdb_extension(mock_execute, \u0027\u0027)"},{"line_number":79,"context_line":"        mock_execute.reset_mock()"},{"line_number":80,"context_line":"        details \u003d copy.deepcopy(self.UPDATE_MSG)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9abb7d3a_7e59ab8d","line":77,"range":{"start_line":77,"start_character":25,"end_line":77,"end_character":30},"updated":"2016-06-01 14:57:51.000000000","message":"typo","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"903462ad209d252f2335f01c4cdf86605605c404","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        self.assertIn(mac, updated_macs_for_device)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @mock.patch(\u0027neutron.agent.linux.utils.execute\u0027)"},{"line_number":77,"context_line":"    def test_unpermitted_dvice_owner(self, mock_execute):"},{"line_number":78,"context_line":"        fdb_extension \u003d self._get_fdb_extension(mock_execute, \u0027\u0027)"},{"line_number":79,"context_line":"        mock_execute.reset_mock()"},{"line_number":80,"context_line":"        details \u003d copy.deepcopy(self.UPDATE_MSG)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_f5a907e1","line":77,"range":{"start_line":77,"start_character":25,"end_line":77,"end_character":30},"in_reply_to":"9abb7d3a_7e59ab8d","updated":"2016-06-04 11:18:46.000000000","message":"Done","commit_id":"852a90cc78d01100817a24c0e07f46e5ddde2ef7"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d613ddcab24257ae6955659958053fc0f043c7d1","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutron.agent.l2.extensions.fdb_population import ("}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_309b27cb","line":20,"updated":"2016-06-29 11:15:55.000000000","message":"nit - no need for this new line","commit_id":"ef0ebee7f720fb98db0151fc8577e0449aff97b4"},{"author":{"_account_id":21683,"name":"edan david","email":"edand@mellanox.com","username":"edand"},"change_message_id":"b8f1d2c5dfc5272aac3166bd3b9e99e9196cb635","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import mock"},{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_config import cfg"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutron.agent.l2.extensions.fdb_population import ("}],"source_content_type":"text/x-python","patch_set":16,"id":"3aaa91ec_f076bf3c","line":20,"in_reply_to":"3aaa91ec_309b27cb","updated":"2016-06-29 11:35:46.000000000","message":"Done","commit_id":"ef0ebee7f720fb98db0151fc8577e0449aff97b4"}],"releasenotes/notes/fdb_population-70d751c8c2e4395f.yaml":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"3cd23f8bf9801f9d20a6344d843a213a900303be","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    SR-IOV instances and regular instances"},{"line_number":5,"context_line":"    the FDB population extension is added to the"},{"line_number":6,"context_line":"    OVS or linuxbridge agent."},{"line_number":7,"context_line":"    the cause was that messages from SR-IOV direct port"},{"line_number":8,"context_line":"    instance to normal port instances located on"},{"line_number":9,"context_line":"    the same hypervisor were sent directly to the wire"},{"line_number":10,"context_line":"    because the FDB table was not yet updated."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7aa08908_82883cc8","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":7},"updated":"2016-06-09 14:48:49.000000000","message":"The root","commit_id":"1f1a573987452764ef15fe01542c6258a038172b"}]}
