)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"*Fix l2 unit tests to reflect le modifications"},{"line_number":17,"context_line":" After removing tunneling flows the old l2 unit tests"},{"line_number":18,"context_line":" became irrelevant"},{"line_number":19,"context_line":"Implements tunneling spec"},{"line_number":20,"context_line":"https://blueprints.launchpad.net/dragonflow/+spec/Tunneling-app."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I8614b1dfe2ba6fba7f97c25fdb8d228a1c6b21a5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"1a430d35_8e972e39","line":20,"range":{"start_line":19,"start_character":0,"end_line":20,"end_character":64},"updated":"2017-02-07 12:05:40.000000000","message":"Please write the bp link as:\nPartially-implements (or implements): blueprint Tunneling-app\nIt will update the topic and the bp.","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3217c8557d945a4aaa52a2c61aabc342e1241683","unresolved":false,"context_lines":[{"line_number":393,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":394,"context_line":"        self.mod_flow("},{"line_number":395,"context_line":"            inst\u003dinst,"},{"line_number":396,"context_line":"            table_id\u003dconst.L2_LOOKUP_TABLE,"},{"line_number":397,"context_line":"            priority\u003dconst.PRIORITY_HIGH,"},{"line_number":398,"context_line":"            match\u003dmatch)"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_83116d54","line":396,"range":{"start_line":396,"start_character":0,"end_line":396,"end_character":43},"updated":"2017-02-09 03:11:22.000000000","message":"As I mentioned in the spec, it is not a good idea to merge these two tables. There might be problem for L3 use case.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"b99580b70c58c4bd6e2c72f2cc76b142b511c750","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        device_owner \u003d lport.get_device_owner()"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        # Remove destination classifier for port"},{"line_number":325,"context_line":"        if device_owner !\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":326,"context_line":"            self._delete_dst_classifier_flow_for_port(network_id, mac)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        self._remove_l2_responders(lport)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_cddc1215","line":325,"updated":"2017-02-12 10:59:25.000000000","message":"You can place this code under this if case\n        mac \u003d lport.get_mac()\n        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"4c46463ce3b42219fe5dd28364e192d37bccc1c8","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        device_owner \u003d lport.get_device_owner()"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        # Remove destination classifier for port"},{"line_number":325,"context_line":"        if device_owner !\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":326,"context_line":"            self._delete_dst_classifier_flow_for_port(network_id, mac)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        self._remove_l2_responders(lport)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_8d277a11","line":325,"in_reply_to":"fa31d9ce_cddc1215","updated":"2017-02-12 11:10:36.000000000","message":"A. Its a nit. does not desrve -1 at that advanced stages otf the patch.\nB. it does not optimize anything.\nC. the code in L2 was extracted. what remain is the same as it was before the modificatio","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"7971d67f30449a3d58c34a13074051c598fcc3fd","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        device_owner \u003d lport.get_device_owner()"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        # Remove destination classifier for port"},{"line_number":325,"context_line":"        if device_owner !\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":326,"context_line":"            self._delete_dst_classifier_flow_for_port(network_id, mac)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        self._remove_l2_responders(lport)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_28ed9c25","line":325,"in_reply_to":"fa31d9ce_cddc1215","updated":"2017-02-12 12:53:07.000000000","message":"I think it\u0027s not belong to this patch. It is better to keep the current code. You can create a new patch for code improvement to to this kind of change.","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"}],"dragonflow/controller/tunneling_app.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"29c947e92c5cbefbc0be80250f0c1a82bc97dc0a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":19,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":20,"context_line":"from oslo_log import log"},{"line_number":21,"context_line":"from ryu.lib.mac import haddr_to_bin"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":"BUM_MAC \u003d \u002701:00:00:00:00:00\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_8a7c60b6","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":36},"updated":"2017-01-30 14:15:01.000000000","message":"Please import only modules, not functions (http://docs.openstack.org/developer/hacking/#imports)","commit_id":"1e6901a2039ca3d3f2161c79e418f4fcbedd399f"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"29c947e92c5cbefbc0be80250f0c1a82bc97dc0a","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class TunnelingApp(df_base_app.DFlowApp):"},{"line_number":28,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":29,"context_line":"        super(TunnelingApp, self).__init__(*args, **kwargs)"},{"line_number":30,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":31,"context_line":"        self.initalize_tunnel_types()"},{"line_number":32,"context_line":"        self.local_networks \u003d LogicalNetworks()"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_87537938","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":64},"updated":"2017-01-30 14:15:01.000000000","message":"unused","commit_id":"1e6901a2039ca3d3f2161c79e418f4fcbedd399f"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"29c947e92c5cbefbc0be80250f0c1a82bc97dc0a","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        port_count \u003d self.local_networks.get_remote_port_count("},{"line_number":171,"context_line":"                network_id\u003dnetwork_id,"},{"line_number":172,"context_line":"                network_type\u003dnetwork_type)"},{"line_number":173,"context_line":"        while True:"},{"line_number":174,"context_line":"            if port_count \u003d\u003d 0:"},{"line_number":175,"context_line":"                inst \u003d None"},{"line_number":176,"context_line":"                command \u003d self.ofproto.OFPFC_DELETE"},{"line_number":177,"context_line":"                break"},{"line_number":178,"context_line":"            if port_count !\u003d 1:"},{"line_number":179,"context_line":"                command \u003d self.ofproto.OFPFC_MODIFY"},{"line_number":180,"context_line":"            actions \u003d self._make_bum_flow_actions(network_id, segmentation_id)"},{"line_number":181,"context_line":"            inst \u003d [self.parser.OFPInstructionActions("},{"line_number":182,"context_line":"                self.ofproto.OFPIT_APPLY_ACTIONS, actions)]"},{"line_number":183,"context_line":"            break"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        self.mod_flow("},{"line_number":186,"context_line":"            datapath\u003dself.get_datapath(),"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_0a44f018","line":183,"range":{"start_line":173,"start_character":0,"end_line":183,"end_character":17},"updated":"2017-01-30 14:15:01.000000000","message":"I think that this can look more elegant if split into 2 separate functions, one for modifying the flow (if at least one remote port left) and one to delete the flow (in case no more remote flows left).\n\nThe highlighted construct seems unnatural, and the command parameter that decided if we delete or add is a bit confusing","commit_id":"1e6901a2039ca3d3f2161c79e418f4fcbedd399f"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"29c947e92c5cbefbc0be80250f0c1a82bc97dc0a","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            ofpact_set_field \u003d self.parser.OFPActionSetField"},{"line_number":210,"context_line":"            actions +\u003d ["},{"line_number":211,"context_line":"                    ofpact_set_field(tun_ipv4_dst\u003dpeer_ip),"},{"line_number":212,"context_line":"                    ofpact_set_field(tunnel_id_nxm\u003dsegmentation_id),"},{"line_number":213,"context_line":"                    ofpact_set_field(port\u003dofport)]"},{"line_number":214,"context_line":"        return actions"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_4a0b582a","line":212,"range":{"start_line":212,"start_character":66,"end_line":212,"end_character":67},"updated":"2017-01-30 14:15:01.000000000","message":"Don\u0027t we send a packet twice to the same compute node if there are 2 remote ports in the given network?","commit_id":"1e6901a2039ca3d3f2161c79e418f4fcbedd399f"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"4ead08e2d2fc5c4ad8c96e03013f8037b4235283","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ryu.lib import mac as mac_api"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":25,"context_line":"#BUM_MAC \u003d \u002701:00:00:00:00:00\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TunnelingApp(df_base_app.DFlowApp):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_8d93e14e","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":30},"updated":"2017-02-06 14:57:16.000000000","message":"Please remove if not needed","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            self._remove_network_flow(lport, network_id, network_type)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def _new_network_flow(self, lport, network_id, network_type):"},{"line_number":75,"context_line":"        LOG.info(_LI(\"adding new %(net_type)s network %(network_id)s\"),"},{"line_number":76,"context_line":"                {\u0027net_type\u0027: network_type,"},{"line_number":77,"context_line":"                 \u0027network_id\u0027: network_id})"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_8e9d6e0c","line":75,"range":{"start_line":75,"start_character":8,"end_line":75,"end_character":16},"updated":"2017-02-07 12:05:40.000000000","message":"I think this log can in debug level","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self.mod_flow("},{"line_number":97,"context_line":"                command\u003dself.ofproto.OFPFC_DELETE,"},{"line_number":98,"context_line":"                table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":99,"context_line":"                priority\u003dconst.PRIORITY_LOW,"},{"line_number":100,"context_line":"                match\u003dmatch)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _make_network_match(self, lport, network_id, network_type):"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_ee0b5228","line":99,"range":{"start_line":99,"start_character":31,"end_line":99,"end_character":43},"updated":"2017-02-07 12:05:40.000000000","message":"Shouldn\u0027t it be \"PRIORITY_MEDIUM\" like the add command?","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"e93882bd7f666931f385984fb13e4d05b70787bf","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                    in_port\u003dofport)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def add_remote_port(self, lport):"},{"line_number":109,"context_line":"        if self.datapath is None:"},{"line_number":110,"context_line":"            return"},{"line_number":111,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":112,"context_line":"        if network_type not in self.tunnel_types:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_5bd8cf1d","line":109,"updated":"2017-02-06 15:28:07.000000000","message":"history...","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"4ead08e2d2fc5c4ad8c96e03013f8037b4235283","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                                    in_port\u003dofport)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def add_remote_port(self, lport):"},{"line_number":109,"context_line":"        if self.datapath is None:"},{"line_number":110,"context_line":"            return"},{"line_number":111,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":112,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":113,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_ed270510","line":110,"range":{"start_line":109,"start_character":0,"end_line":110,"end_character":18},"updated":"2017-02-06 14:57:16.000000000","message":"Why this is added? We don\u0027t seem to check this on other callbacks.","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                {\u0027net_type\u0027: network_type,"},{"line_number":119,"context_line":"                 \u0027lport\u0027: lport})"},{"line_number":120,"context_line":"        self.local_networks.add_remote_port(port_id\u003dlport.get_id(),"},{"line_number":121,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":122,"context_line":"                                           network_type\u003dnetwork_type)"},{"line_number":123,"context_line":"        self._modify_egress_bum_flow(network_id,"},{"line_number":124,"context_line":"                                     network_type,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_e967cce6","line":121,"range":{"start_line":121,"start_character":42,"end_line":121,"end_character":43},"updated":"2017-02-07 12:05:40.000000000","message":"indent","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                 \u0027lport\u0027: lport})"},{"line_number":120,"context_line":"        self.local_networks.add_remote_port(port_id\u003dlport.get_id(),"},{"line_number":121,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":122,"context_line":"                                           network_type\u003dnetwork_type)"},{"line_number":123,"context_line":"        self._modify_egress_bum_flow(network_id,"},{"line_number":124,"context_line":"                                     network_type,"},{"line_number":125,"context_line":"                                     segmentation_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_295e3412","line":122,"range":{"start_line":122,"start_character":42,"end_line":122,"end_character":43},"updated":"2017-02-07 12:05:40.000000000","message":"indent","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":134,"context_line":"        segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":135,"context_line":"        self.local_networks.remove_remote_port(port_id\u003dlport.get_id(),"},{"line_number":136,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":137,"context_line":"                                           network_type\u003dnetwork_type)"},{"line_number":138,"context_line":"        self._modify_egress_bum_flow(network_id,"},{"line_number":139,"context_line":"                                     network_type,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_a9a864dc","line":136,"range":{"start_line":136,"start_character":42,"end_line":136,"end_character":43},"updated":"2017-02-07 12:05:40.000000000","message":"indent","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":135,"context_line":"        self.local_networks.remove_remote_port(port_id\u003dlport.get_id(),"},{"line_number":136,"context_line":"                                           network_id\u003dnetwork_id,"},{"line_number":137,"context_line":"                                           network_type\u003dnetwork_type)"},{"line_number":138,"context_line":"        self._modify_egress_bum_flow(network_id,"},{"line_number":139,"context_line":"                                     network_type,"},{"line_number":140,"context_line":"                                     segmentation_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_c9b13049","line":137,"range":{"start_line":137,"start_character":42,"end_line":137,"end_character":43},"updated":"2017-02-07 12:05:40.000000000","message":"indent","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":143,"context_line":"    def _add_egress_dispatch_flow(self, lport, segmentation_id):"},{"line_number":144,"context_line":"        remote_ip \u003d lport.get_external_value(\u0027peer_vtep_address\u0027)"},{"line_number":145,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":146,"context_line":"        LOG.info(_LI(\"set egress dispatch flow %(seg)s peer %(remote_ip)s\"),"},{"line_number":147,"context_line":"                {\u0027seg\u0027: segmentation_id,"},{"line_number":148,"context_line":"                 \u0027remote_ip\u0027: remote_ip})"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_095418c8","line":146,"range":{"start_line":146,"start_character":8,"end_line":146,"end_character":16},"updated":"2017-02-07 12:05:40.000000000","message":"Also debug level","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":171,"context_line":"            match\u003dmatch)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def _eval_flow_actions(self, network_id, network_type, segmentation_id,"},{"line_number":174,"context_line":"                           port_count, command):"},{"line_number":175,"context_line":"        inst \u003d None"},{"line_number":176,"context_line":"        if port_count \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_0975f830","line":173,"range":{"start_line":173,"start_character":45,"end_line":173,"end_character":57},"updated":"2017-02-07 12:05:40.000000000","message":"This parameter is not in use. Please remove","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"4ead08e2d2fc5c4ad8c96e03013f8037b4235283","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                self.ofproto.OFPIT_APPLY_ACTIONS, actions)]"},{"line_number":188,"context_line":"        return inst, command"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _modify_egress_bum_flow(self,"},{"line_number":191,"context_line":"                               network_id,"},{"line_number":192,"context_line":"                               network_type,"},{"line_number":193,"context_line":"                               segmentation_id,"},{"line_number":194,"context_line":"                               command):"},{"line_number":195,"context_line":"        match \u003d self._make_bum_match(metadata\u003dnetwork_id)"},{"line_number":196,"context_line":"        port_count \u003d self.local_networks.get_remote_port_count("},{"line_number":197,"context_line":"                network_id\u003dnetwork_id,"},{"line_number":198,"context_line":"                network_type\u003dnetwork_type)"},{"line_number":199,"context_line":"        inst, command \u003d self._eval_flow_actions(network_id, network_type,"},{"line_number":200,"context_line":"                segmentation_id, port_count, command)"},{"line_number":201,"context_line":"        self.mod_flow("},{"line_number":202,"context_line":"            inst\u003dinst,"},{"line_number":203,"context_line":"            table_id\u003dconst.EGRESS_TABLE,"},{"line_number":204,"context_line":"            command\u003dcommand,"},{"line_number":205,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":206,"context_line":"            match\u003dmatch)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":209,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_1010e64d","line":206,"range":{"start_line":190,"start_character":0,"end_line":206,"end_character":24},"updated":"2017-02-06 14:57:16.000000000","message":"I\u0027m not sure I understand those flows..\nIf we\u0027re sending a unicast packet through EGRESS_TABLE it will either go through reg7\u003d flow from _add_egress_dispatch_flow for a remote port or another reg7\u003d flow for local port.\n\nIf we\u0027re sending a multicast here, it seems that it is forwarded to each remote port separately..\n\n 1) What about local ports?\n 2) Why not send it once per remove chassis?","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"e93882bd7f666931f385984fb13e4d05b70787bf","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                self.ofproto.OFPIT_APPLY_ACTIONS, actions)]"},{"line_number":188,"context_line":"        return inst, command"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def _modify_egress_bum_flow(self,"},{"line_number":191,"context_line":"                               network_id,"},{"line_number":192,"context_line":"                               network_type,"},{"line_number":193,"context_line":"                               segmentation_id,"},{"line_number":194,"context_line":"                               command):"},{"line_number":195,"context_line":"        match \u003d self._make_bum_match(metadata\u003dnetwork_id)"},{"line_number":196,"context_line":"        port_count \u003d self.local_networks.get_remote_port_count("},{"line_number":197,"context_line":"                network_id\u003dnetwork_id,"},{"line_number":198,"context_line":"                network_type\u003dnetwork_type)"},{"line_number":199,"context_line":"        inst, command \u003d self._eval_flow_actions(network_id, network_type,"},{"line_number":200,"context_line":"                segmentation_id, port_count, command)"},{"line_number":201,"context_line":"        self.mod_flow("},{"line_number":202,"context_line":"            inst\u003dinst,"},{"line_number":203,"context_line":"            table_id\u003dconst.EGRESS_TABLE,"},{"line_number":204,"context_line":"            command\u003dcommand,"},{"line_number":205,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":206,"context_line":"            match\u003dmatch)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":209,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_3b50635d","line":206,"range":{"start_line":190,"start_character":0,"end_line":206,"end_character":24},"in_reply_to":"1a430d35_1010e64d","updated":"2017-02-06 15:28:07.000000000","message":"This is done for BUM replication, we must explicitly relicate each mulicast packet in the overlay. It is done per network instance. Note that this code is an exact extract from the current l2 app.","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":206,"context_line":"            match\u003dmatch)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":209,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"},{"line_number":210,"context_line":"        bum_addr \u003d mac_api.haddr_to_bin(mac_api.UNICAST)"},{"line_number":211,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_e9534c69","line":208,"range":{"start_line":208,"start_character":8,"end_line":208,"end_character":23},"updated":"2017-02-07 12:05:40.000000000","message":"In other applications there\u0027s an convention to use \"_get_*_match\". Please consider to rename it in order to be aligned with the other applications","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"5af85815613f0ef277cae0308d7f7bce2ca38a19","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":206,"context_line":"            match\u003dmatch)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":209,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"},{"line_number":210,"context_line":"        bum_addr \u003d mac_api.haddr_to_bin(mac_api.UNICAST)"},{"line_number":211,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_36f73e5a","line":208,"range":{"start_line":208,"start_character":8,"end_line":208,"end_character":23},"in_reply_to":"1a430d35_e9534c69","updated":"2017-02-08 11:34:02.000000000","message":"\u0027get\u0027 means access to something aleady computed. While \u0027make\u0027 indicates that values is generated per call to this function","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"b8c5b53f4b441cabd66cae5b3a0b1ddacc2a48d8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"},{"line_number":212,"context_line":"        return match"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _make_bum_flow_actions(self, network_id, segmentation_id):"},{"line_number":215,"context_line":"        remote_ports \u003d self.local_networks.get_remote_ports("},{"line_number":216,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":217,"context_line":"        actions \u003d list()"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_294ab4ac","line":214,"range":{"start_line":214,"start_character":9,"end_line":214,"end_character":13},"updated":"2017-02-07 12:05:40.000000000","message":"Same comment","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"5af85815613f0ef277cae0308d7f7bce2ca38a19","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"},{"line_number":212,"context_line":"        return match"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def _make_bum_flow_actions(self, network_id, segmentation_id):"},{"line_number":215,"context_line":"        remote_ports \u003d self.local_networks.get_remote_ports("},{"line_number":216,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":217,"context_line":"        actions \u003d list()"}],"source_content_type":"text/x-python","patch_set":17,"id":"1a430d35_d6051a46","line":214,"range":{"start_line":214,"start_character":9,"end_line":214,"end_character":13},"in_reply_to":"1a430d35_294ab4ac","updated":"2017-02-08 11:34:02.000000000","message":"\u0027get\u0027 means access to something aleady computed. While \u0027make\u0027 indicates that values is generated per call to this function","commit_id":"280ed9d959d10b741e291df458f405e71a9aad9e"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3217c8557d945a4aaa52a2c61aabc342e1241683","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from dragonflow._i18n import _LI"},{"line_number":17,"context_line":"from dragonflow import conf as cfg"},{"line_number":18,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":19,"context_line":"from dragonflow.controller.common.logical_networks import LogicalNetworks"},{"line_number":20,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":21,"context_line":"from oslo_log import log"},{"line_number":22,"context_line":"from ryu.lib import mac as mac_api"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_c38a9563","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":73},"updated":"2017-02-09 03:11:22.000000000","message":"The import should be \nfrom dragonflow.controller.common import logical_networks","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"1c8d5cff9bf9709aa7ea62aab5844d7f6c4ef75a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from dragonflow._i18n import _LI"},{"line_number":17,"context_line":"from dragonflow import conf as cfg"},{"line_number":18,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":19,"context_line":"from dragonflow.controller.common.logical_networks import LogicalNetworks"},{"line_number":20,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":21,"context_line":"from oslo_log import log"},{"line_number":22,"context_line":"from ryu.lib import mac as mac_api"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_445ca925","line":19,"range":{"start_line":19,"start_character":0,"end_line":19,"end_character":73},"in_reply_to":"1a430d35_c38a9563","updated":"2017-02-10 11:53:05.000000000","message":"will be fixed next patch","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3217c8557d945a4aaa52a2c61aabc342e1241683","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def add_local_port(self, lport):"},{"line_number":40,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":41,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":42,"context_line":"            return"},{"line_number":43,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":44,"context_line":"        LOG.info(_LI(\"adding %(net_type)s lport %(lport)s\"),"},{"line_number":45,"context_line":"                {\u0027net_type\u0027: network_type,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_03649db6","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"updated":"2017-02-09 03:11:22.000000000","message":"Should we report an warning here to say that we accept an unsupported network type port?","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c2e09b3e4afe9b6fd924e3d7fb466cdda590bbe1","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def add_local_port(self, lport):"},{"line_number":40,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":41,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":42,"context_line":"            return"},{"line_number":43,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":44,"context_line":"        LOG.info(_LI(\"adding %(net_type)s lport %(lport)s\"),"},{"line_number":45,"context_line":"                {\u0027net_type\u0027: network_type,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_c8d8e055","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"in_reply_to":"1a430d35_03649db6","updated":"2017-02-09 12:22:58.000000000","message":"I think it\u0027s fine to let it pass silently, this app takes care of only some types, but we get notified for all types, so its only natural some should be skipped.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"1c8d5cff9bf9709aa7ea62aab5844d7f6c4ef75a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def add_local_port(self, lport):"},{"line_number":40,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":41,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":42,"context_line":"            return"},{"line_number":43,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":44,"context_line":"        LOG.info(_LI(\"adding %(net_type)s lport %(lport)s\"),"},{"line_number":45,"context_line":"                {\u0027net_type\u0027: network_type,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_e8a91c91","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"in_reply_to":"1a430d35_03649db6","updated":"2017-02-10 11:53:05.000000000","message":"No. This is an application specific filter. When any local port added, the add_local_port callback is called.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"99d7f39c8eb9ce465fed43293cdefe4aad97d898","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def add_local_port(self, lport):"},{"line_number":40,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":41,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":42,"context_line":"            return"},{"line_number":43,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":44,"context_line":"        LOG.info(_LI(\"adding %(net_type)s lport %(lport)s\"),"},{"line_number":45,"context_line":"                {\u0027net_type\u0027: network_type,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_8ac16031","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"in_reply_to":"1a430d35_c8d8e055","updated":"2017-02-10 03:07:24.000000000","message":"hmmm... but it is a local port here. if the ovs port is created locally, and the OpenFlow is not added, adding a log here will make troubleshooting easier. I just don\u0027t want my sdn reports nothing while my network is not connected. What do you think?","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"1c8d5cff9bf9709aa7ea62aab5844d7f6c4ef75a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def add_local_port(self, lport):"},{"line_number":40,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":41,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":42,"context_line":"            return"},{"line_number":43,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":44,"context_line":"        LOG.info(_LI(\"adding %(net_type)s lport %(lport)s\"),"},{"line_number":45,"context_line":"                {\u0027net_type\u0027: network_type,"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_246ed5c9","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"in_reply_to":"fa31d9ce_8ac16031","updated":"2017-02-10 11:53:05.000000000","message":"will add a warning log.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3217c8557d945a4aaa52a2c61aabc342e1241683","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def remove_local_port(self, lport):"},{"line_number":60,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":61,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":64,"context_line":"        self.local_networks.remove_local_port(port_id\u003dlport.get_id(),"},{"line_number":65,"context_line":"                                              network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_2357d9ca","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":18},"updated":"2017-02-09 03:11:22.000000000","message":"Ditto","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"1c8d5cff9bf9709aa7ea62aab5844d7f6c4ef75a","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def remove_local_port(self, lport):"},{"line_number":60,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":61,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":62,"context_line":"            return"},{"line_number":63,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":64,"context_line":"        self.local_networks.remove_local_port(port_id\u003dlport.get_id(),"},{"line_number":65,"context_line":"                                              network_id\u003dnetwork_id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_a88ab418","line":62,"range":{"start_line":61,"start_character":0,"end_line":62,"end_character":18},"in_reply_to":"1a430d35_2357d9ca","updated":"2017-02-10 11:53:05.000000000","message":"See my above answer.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3217c8557d945a4aaa52a2c61aabc342e1241683","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        goto_inst \u003d self.parser.OFPInstructionGotoTable("},{"line_number":84,"context_line":"            const.L2_LOOKUP_TABLE)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":87,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_83e5ed09","line":84,"range":{"start_line":84,"start_character":0,"end_line":84,"end_character":33},"updated":"2017-02-09 03:11:22.000000000","message":"This should be INGRESS_DESTINATION_PORT_LOOKUP_TABLE as it originally be.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"3217c8557d945a4aaa52a2c61aabc342e1241683","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                    in_port\u003dofport)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def add_remote_port(self, lport):"},{"line_number":108,"context_line":"        if self.datapath is None:"},{"line_number":109,"context_line":"            return"},{"line_number":110,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":111,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":112,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_030bbdd6","line":109,"range":{"start_line":108,"start_character":0,"end_line":109,"end_character":18},"updated":"2017-02-09 03:11:22.000000000","message":"This could be removed","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c2e09b3e4afe9b6fd924e3d7fb466cdda590bbe1","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                    in_port\u003dofport)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def add_remote_port(self, lport):"},{"line_number":108,"context_line":"        if self.datapath is None:"},{"line_number":109,"context_line":"            return"},{"line_number":110,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":111,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":112,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_48e5d006","line":109,"range":{"start_line":108,"start_character":0,"end_line":109,"end_character":18},"in_reply_to":"1a430d35_030bbdd6","updated":"2017-02-09 12:22:58.000000000","message":"+1","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c2e09b3e4afe9b6fd924e3d7fb466cdda590bbe1","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            match\u003dmatch)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":173,"context_line":"                           port_count, command):"},{"line_number":174,"context_line":"        inst \u003d None"},{"line_number":175,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":176,"context_line":"            # override command to delete as it is the last port for network"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_089bc866","line":173,"range":{"start_line":173,"start_character":39,"end_line":173,"end_character":46},"updated":"2017-02-09 12:22:58.000000000","message":"This function is very confusing, why not have 1 flow for add and one flow for delete? (and perform a check before the call)","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"1c8d5cff9bf9709aa7ea62aab5844d7f6c4ef75a","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            match\u003dmatch)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":173,"context_line":"                           port_count, command):"},{"line_number":174,"context_line":"        inst \u003d None"},{"line_number":175,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":176,"context_line":"            # override command to delete as it is the last port for network"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_84da2177","line":173,"range":{"start_line":173,"start_character":39,"end_line":173,"end_character":46},"in_reply_to":"1a430d35_089bc866","updated":"2017-02-10 11:53:05.000000000","message":"Most of the time it will be modify for either add or delete","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"c44595ddf931f2d218f9be56929ee52cac7fc6e5","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            match\u003dmatch)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":173,"context_line":"                           port_count, command):"},{"line_number":174,"context_line":"        inst \u003d None"},{"line_number":175,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":176,"context_line":"            # override command to delete as it is the last port for network"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_bdde173d","line":173,"range":{"start_line":173,"start_character":39,"end_line":173,"end_character":46},"in_reply_to":"fa31d9ce_6dcec6b5","updated":"2017-02-13 11:24:14.000000000","message":"This is not totally accurate as in case it is 1 you have to understand if you are adding or removing.\nI agree that it is not the most beautiful code I encountered, but IMHO it is good enough for this stage.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"ba023cc162a4b6ee42d40d7c4722510140291faf","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            match\u003dmatch)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":173,"context_line":"                           port_count, command):"},{"line_number":174,"context_line":"        inst \u003d None"},{"line_number":175,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":176,"context_line":"            # override command to delete as it is the last port for network"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_a36fb829","line":173,"range":{"start_line":173,"start_character":39,"end_line":173,"end_character":46},"in_reply_to":"fa31d9ce_6dcec6b5","updated":"2017-02-13 21:14:57.000000000","message":"the logic is:\nwhen add and ports \u003d\u003d 1 add, else modify (ports may not equal 1)\nif  ports \u003d\u003d 0  remove","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"dd57932c7d42eeca5ba7b5d00720274bcfb943a0","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            match\u003dmatch)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":173,"context_line":"                           port_count, command):"},{"line_number":174,"context_line":"        inst \u003d None"},{"line_number":175,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":176,"context_line":"            # override command to delete as it is the last port for network"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_6dcec6b5","line":173,"range":{"start_line":173,"start_character":39,"end_line":173,"end_character":46},"in_reply_to":"fa31d9ce_84da2177","updated":"2017-02-13 09:58:04.000000000","message":"OK but this leaves it very confusing to look at.\n\nI see this code is called once at the end of _modify_egress_bum_flow, which in turn is called from add_local_port/remove_local_port who pass the initial command parameter which sometimes is incorrect and this is why this code is here to fix it.\n\nAll we do is add/delete/modify a single flow, I suggest having a simple non-branching function for each...\n\n if ports \u003d\u003d 0:\n     remove()\n elif ports \u003d\u003d 1:\n     add()\n else:\n     modify()","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d72bf2b56726a45bcc1bc27d7b7bd387cde351d9","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            match\u003dmatch)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":173,"context_line":"                           port_count, command):"},{"line_number":174,"context_line":"        inst \u003d None"},{"line_number":175,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":176,"context_line":"            # override command to delete as it is the last port for network"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_dc055111","line":173,"range":{"start_line":173,"start_character":39,"end_line":173,"end_character":46},"in_reply_to":"fa31d9ce_bdde173d","updated":"2017-02-14 13:05:29.000000000","message":"@Shahar\nIf we need to pass the notion of adding vs removing but not necessarily the correct command, I\u0027d argue that using OFPFC_xxx commands is wrong.\n\n@Itamar\nI see now, though my argument above still holds. I won\u0027t be blocking because of this but if you have any idea how to make it prettier I\u0027d appreciate it.","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"c2e09b3e4afe9b6fd924e3d7fb466cdda590bbe1","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":205,"context_line":"            match\u003dmatch)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":208,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"},{"line_number":209,"context_line":"        bum_addr \u003d mac_api.haddr_to_bin(mac_api.UNICAST)"},{"line_number":210,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a430d35_88c25851","line":207,"range":{"start_line":207,"start_character":32,"end_line":207,"end_character":37},"updated":"2017-02-09 12:22:58.000000000","message":"Convention is to call it kwargs","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"1c8d5cff9bf9709aa7ea62aab5844d7f6c4ef75a","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":205,"context_line":"            match\u003dmatch)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":208,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"},{"line_number":209,"context_line":"        bum_addr \u003d mac_api.haddr_to_bin(mac_api.UNICAST)"},{"line_number":210,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"}],"source_content_type":"text/x-python","patch_set":18,"id":"fa31d9ce_24ca55a2","line":207,"range":{"start_line":207,"start_character":32,"end_line":207,"end_character":37},"in_reply_to":"1a430d35_88c25851","updated":"2017-02-10 11:53:05.000000000","message":"will fix","commit_id":"991dca3bc3d27ae10d15c9f4cc03268aa2c3946a"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"d5dad8616948ae35886b0677efaeff78fd609b69","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        goto_inst \u003d self.parser.OFPInstructionGotoTable("},{"line_number":84,"context_line":"            const.NGRESS_DESTINATION_PORT_LOOKUP_TABLE)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":87,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":19,"id":"1a430d35_e842fc66","line":84,"range":{"start_line":84,"start_character":18,"end_line":84,"end_character":54},"updated":"2017-02-09 12:31:51.000000000","message":"Typo","commit_id":"1a3b8d275414af08b2e8d82ff4c054124ab98292"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"04e7f08f99dd6d1b408a42f701a723099345a6d3","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def add_local_port(self, lport):"},{"line_number":40,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":41,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":42,"context_line":"            return"},{"line_number":43,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":44,"context_line":"        LOG.info(_LI(\"adding %(net_type)s lport %(lport)s\"),"},{"line_number":45,"context_line":"                {\u0027net_type\u0027: network_type,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_4a23e805","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":18},"updated":"2017-02-10 03:12:34.000000000","message":"I still think we should log warning here for a local port. What do you think?","commit_id":"49ee85a6d16c973bd1c35338b66de89f043ab8bb"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"04e7f08f99dd6d1b408a42f701a723099345a6d3","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":203,"context_line":"            match\u003dmatch)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    def _make_bum_match(self, **kargs):"},{"line_number":206,"context_line":"        match \u003d self.parser.OFPMatch(**kargs)"},{"line_number":207,"context_line":"        bum_addr \u003d mac_api.haddr_to_bin(mac_api.UNICAST)"},{"line_number":208,"context_line":"        match.set_dl_dst_masked(bum_addr, bum_addr)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa31d9ce_4a6a081c","line":205,"range":{"start_line":205,"start_character":32,"end_line":205,"end_character":37},"updated":"2017-02-10 03:12:34.000000000","message":"agree with dima at PS 18, it looks better with kwargs.","commit_id":"49ee85a6d16c973bd1c35338b66de89f043ab8bb"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":29,"context_line":"        super(TunnelingApp, self).__init__(*args, **kwargs)"},{"line_number":30,"context_line":"        self.initalize_tunnel_types()"},{"line_number":31,"context_line":"        self.local_networks \u003d logical_networks.LogicalNetworks()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def initalize_tunnel_types(self):"},{"line_number":34,"context_line":"        if cfg.CONF.df.tunnel_types:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_68e154fe","line":31,"range":{"start_line":31,"start_character":13,"end_line":31,"end_character":27},"updated":"2017-02-12 13:52:15.000000000","message":"why not logical_networks?","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.local_networks \u003d logical_networks.LogicalNetworks()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def initalize_tunnel_types(self):"},{"line_number":34,"context_line":"        if cfg.CONF.df.tunnel_types:"},{"line_number":35,"context_line":"            self.tunnel_types \u003d cfg.CONF.df.tunnel_types"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.tunnel_types \u003d [cfg.CONF.df.tunnel_type]"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_28be7cd4","line":34,"range":{"start_line":34,"start_character":11,"end_line":34,"end_character":35},"updated":"2017-02-12 13:52:15.000000000","message":"Check if it is a list, otherwise set element to list...","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"a00388c3b92d009acac5d2558755f9c516f30484","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.local_networks \u003d logical_networks.LogicalNetworks()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def initalize_tunnel_types(self):"},{"line_number":34,"context_line":"        if cfg.CONF.df.tunnel_types:"},{"line_number":35,"context_line":"            self.tunnel_types \u003d cfg.CONF.df.tunnel_types"},{"line_number":36,"context_line":"        else:"},{"line_number":37,"context_line":"            self.tunnel_types \u003d [cfg.CONF.df.tunnel_type]"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_43cb91a5","line":34,"range":{"start_line":34,"start_character":11,"end_line":34,"end_character":35},"in_reply_to":"fa31d9ce_28be7cd4","updated":"2017-02-12 14:34:19.000000000","message":"My bad. Ignore","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":95,"context_line":"            match\u003dmatch)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _remove_network_flow(self, lport, network_id, network_type):"},{"line_number":98,"context_line":"        match \u003d self._make_network_match(lport, network_id, network_type)"},{"line_number":99,"context_line":"        self.mod_flow("},{"line_number":100,"context_line":"                command\u003dself.ofproto.OFPFC_DELETE,"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_28bafcc0","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":28},"updated":"2017-02-12 13:52:15.000000000","message":"Consider adding a log like in the new_flow...","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def add_remote_port(self, lport):"},{"line_number":112,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":113,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":114,"context_line":"            return"},{"line_number":115,"context_line":"        segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":116,"context_line":"        self._add_egress_dispatch_flow(lport, segmentation_id)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_48b1f0e0","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":28},"updated":"2017-02-12 13:52:15.000000000","message":"Consider adding a log here","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def remove_remote_port(self, lport):"},{"line_number":130,"context_line":"        network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":131,"context_line":"        if network_type not in self.tunnel_types:"},{"line_number":132,"context_line":"            return"},{"line_number":133,"context_line":"        self._remove_egress_dispatch_flow(lport)"},{"line_number":134,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_08de1811","line":131,"range":{"start_line":131,"start_character":8,"end_line":131,"end_character":31},"updated":"2017-02-12 13:52:15.000000000","message":"Consider adding a log","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self._modify_egress_bum_flow(network_id,"},{"line_number":140,"context_line":"                                     network_type,"},{"line_number":141,"context_line":"                                     segmentation_id,"},{"line_number":142,"context_line":"                                     self.ofproto.OFPFC_MODIFY)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _add_egress_dispatch_flow(self, lport, segmentation_id):"},{"line_number":145,"context_line":"        remote_ip \u003d lport.get_external_value(\u0027peer_vtep_address\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_c8dc0015","line":142,"range":{"start_line":142,"start_character":37,"end_line":142,"end_character":62},"updated":"2017-02-12 13:52:15.000000000","message":"Why not OFPFC_DELETE?","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    def _eval_flow_actions(self, network_id, segmentation_id,"},{"line_number":175,"context_line":"                           port_count, command):"},{"line_number":176,"context_line":"        inst \u003d None"},{"line_number":177,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":178,"context_line":"            # override command to delete as it is the last port for network"},{"line_number":179,"context_line":"            command \u003d self.ofproto.OFPFC_DELETE"},{"line_number":180,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_c84a40c5","line":177,"range":{"start_line":177,"start_character":8,"end_line":177,"end_character":21},"updated":"2017-02-12 13:52:15.000000000","message":"The only case we look at the command we got is when the prot_count is 1, so just decide it by yourself and remove the argument","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"7204f00a67b83836df57119572a6e96684da1327","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        remote_ports \u003d self.local_networks.get_remote_ports("},{"line_number":217,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":218,"context_line":"        actions \u003d list()"},{"line_number":219,"context_line":"        for port_id in remote_ports:"},{"line_number":220,"context_line":"            lport \u003d self.db_store.get_port(port_id)"},{"line_number":221,"context_line":"            if not lport:"},{"line_number":222,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_886e882d","line":219,"range":{"start_line":219,"start_character":8,"end_line":219,"end_character":35},"updated":"2017-02-12 13:52:15.000000000","message":"So we do all these actions on the same packet?","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"a00388c3b92d009acac5d2558755f9c516f30484","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        remote_ports \u003d self.local_networks.get_remote_ports("},{"line_number":217,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":218,"context_line":"        actions \u003d list()"},{"line_number":219,"context_line":"        for port_id in remote_ports:"},{"line_number":220,"context_line":"            lport \u003d self.db_store.get_port(port_id)"},{"line_number":221,"context_line":"            if not lport:"},{"line_number":222,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa31d9ce_c3bf81f9","line":219,"range":{"start_line":219,"start_character":8,"end_line":219,"end_character":35},"in_reply_to":"fa31d9ce_886e882d","updated":"2017-02-12 14:34:19.000000000","message":"My bad. Ignore","commit_id":"20aa9d7fe7ba23b55bcbb0e345f7418cb47621d7"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e7ae9349cfdb8f895d5ea82c96775e759a38bebb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":19,"context_line":"from dragonflow.controller.common import logical_networks"},{"line_number":20,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":21,"context_line":"from oslo_log import log"},{"line_number":22,"context_line":"from ryu.lib import mac as mac_api"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"fa31d9ce_2e764106","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":34},"updated":"2017-02-14 07:17:19.000000000","message":"Import order: These should go in a different, earlier block.","commit_id":"ce5494f8d330f2ad010e85b9eb1250bda3922842"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e7ae9349cfdb8f895d5ea82c96775e759a38bebb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.initalize_tunnel_types()"},{"line_number":31,"context_line":"        self.local_networks \u003d logical_networks.LogicalNetworks()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def initalize_tunnel_types(self):"},{"line_number":34,"context_line":"        if cfg.CONF.df.tunnel_types:"},{"line_number":35,"context_line":"            self.tunnel_types \u003d cfg.CONF.df.tunnel_types"},{"line_number":36,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa31d9ce_ce5da57a","line":33,"updated":"2017-02-14 07:17:19.000000000","message":"nit: Please add a TODO that this method should be removed once cfg.CONF.df.tunnel_type is made obsolete.","commit_id":"ce5494f8d330f2ad010e85b9eb1250bda3922842"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e7ae9349cfdb8f895d5ea82c96775e759a38bebb","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        if port_count \u003d\u003d 0:"},{"line_number":75,"context_line":"            self._remove_network_flow(lport, network_id, network_type)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _new_network_flow(self, lport, network_id, network_type):"},{"line_number":78,"context_line":"        LOG.debug(\"adding new %(net_type)s network %(network_id)s\","},{"line_number":79,"context_line":"                {\u0027net_type\u0027: network_type,"},{"line_number":80,"context_line":"                 \u0027network_id\u0027: network_id})"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa31d9ce_4e8ff5cb","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":25},"updated":"2017-02-14 07:17:19.000000000","message":"Maybe add ingress to the name? e.g. _add_network_ingress_flow ?","commit_id":"ce5494f8d330f2ad010e85b9eb1250bda3922842"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e7ae9349cfdb8f895d5ea82c96775e759a38bebb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":95,"context_line":"            match\u003dmatch)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def _remove_network_flow(self, lport, network_id, network_type):"},{"line_number":98,"context_line":"        match \u003d self._make_network_match(lport, network_id, network_type)"},{"line_number":99,"context_line":"        self.mod_flow("},{"line_number":100,"context_line":"                command\u003dself.ofproto.OFPFC_DELETE,"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa31d9ce_aeb4f181","line":97,"range":{"start_line":97,"start_character":8,"end_line":97,"end_character":28},"updated":"2017-02-14 07:17:19.000000000","message":"Same here: _remove_network_ingress_flow","commit_id":"ce5494f8d330f2ad010e85b9eb1250bda3922842"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e7ae9349cfdb8f895d5ea82c96775e759a38bebb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            peer_ip \u003d lport.get_external_value(\u0027peer_vtep_address\u0027)"},{"line_number":224,"context_line":"            ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":225,"context_line":"            ofpact_set_field \u003d self.parser.OFPActionSetField"},{"line_number":226,"context_line":"            actions +\u003d ["},{"line_number":227,"context_line":"                    ofpact_set_field(tun_ipv4_dst\u003dpeer_ip),"},{"line_number":228,"context_line":"                    ofpact_set_field(tunnel_id_nxm\u003dsegmentation_id),"},{"line_number":229,"context_line":"                    ofpact_set_field(port\u003dofport)]"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa31d9ce_113a80cc","line":226,"updated":"2017-02-14 07:17:19.000000000","message":"Doesn\u0027t this mean that if you have two remote ports on the same remote host, two packet\u0027s will be tunneled there?","commit_id":"ce5494f8d330f2ad010e85b9eb1250bda3922842"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"5ddadc23a3c834f1befb1766188380aa00fbabef","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        remote_ports \u003d self.local_networks.get_remote_ports("},{"line_number":220,"context_line":"                network_id\u003dnetwork_id)"},{"line_number":221,"context_line":"        actions \u003d list()"},{"line_number":222,"context_line":"        peer_ip_list \u003d []"},{"line_number":223,"context_line":"        for port_id in remote_ports:"},{"line_number":224,"context_line":"            lport \u003d self.db_store.get_port(port_id)"},{"line_number":225,"context_line":"            if not lport:"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa31d9ce_f8467679","line":222,"range":{"start_line":222,"start_character":23,"end_line":222,"end_character":25},"updated":"2017-02-15 09:30:55.000000000","message":"Why not use a set?","commit_id":"78c145ee309dcd84355c050743fd3ea4e5e1f0c0"}],"dragonflow/tests/unit/test_tunneling_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e7ae9349cfdb8f895d5ea82c96775e759a38bebb","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            command\u003dself.datapath.ofproto.OFPFC_ADD,"},{"line_number":74,"context_line":"            table_id\u003dconst.EGRESS_TABLE,"},{"line_number":75,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":76,"context_line":"            match\u003dmock.ANY)"},{"line_number":77,"context_line":"        self.app.mod_flow.reset_mock()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        fake_remote_gre_port2 \u003d make_fake_remote_port(network_type\u003d\u0027gre\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"fa31d9ce_1168c0b8","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":26},"updated":"2017-02-14 07:17:19.000000000","message":"These tests would be more meaningful if you also tested the expected matches and insts.","commit_id":"ce5494f8d330f2ad010e85b9eb1250bda3922842"}]}
