)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"904ebdd25ce9ffba5bd86d707904c89980d1e086","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement L2 Communication for ml2 dragonflow driver."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implemnets L2 commutication when ml2 dragonflow driver is used."},{"line_number":10,"context_line":"With tenant network, segmentation_id of the network is used as tunnel key,"},{"line_number":11,"context_line":"not use port unique key allocated by dragonflow anymore."},{"line_number":12,"context_line":"Besides, L2 commutication for vlan and flat network is also supported"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1aa78d24_e9d115fd","line":9,"updated":"2016-07-04 09:34:45.000000000","message":"typos: \"implements\", \"communication\"","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"}],"devstack/plugin.sh":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"50c6893cdcee3333ad2b92a7139771148ce15832","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        if [[ \"$USE_ML2_PLUGIN\" \u003d\u003d \"False\" ]]; then"},{"line_number":125,"context_line":"            Q_PLUGIN_CLASS\u003d\"dragonflow.neutron.plugin.DFPlugin\""},{"line_number":126,"context_line":"            Q_SERVICE_PLUGIN_CLASSES\u003d\"\""},{"line_number":127,"context_line":"         else"},{"line_number":128,"context_line":"            DF_APPS_LIST\u003d$ML2_APPS_LIST"},{"line_number":129,"context_line":"        fi"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-sh","patch_set":4,"id":"3aaa91ec_c0d82082","line":127,"range":{"start_line":127,"start_character":0,"end_line":127,"end_character":13},"updated":"2016-06-30 01:33:56.000000000","message":"indent","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"76556f112c238e19b47dca9812a09441239d5bc3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":18,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp\""},{"line_number":19,"context_line":"ML2_APPS_LIST\u003d\"l2_ml2_app.L2App,l3_proactive_app.L3ProactiveApp,\"\\"},{"line_number":20,"context_line":"\"dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# How to connect to the database storing the virtual topology."},{"line_number":23,"context_line":"REMOTE_DB_IP\u003d${REMOTE_DB_IP:-$HOST_IP}"}],"source_content_type":"text/x-sh","patch_set":5,"id":"1aa78d24_a23cfae2","line":20,"updated":"2016-07-05 18:08:01.000000000","message":"This should be done with a default, in the same pattern as the others, e.g.:\nML2_APPS_LIST_DEFAULT\u003d\"...\"\nML2_APPS_LIST\u003d${ML2_APPS_LIST:-$ML2_APPS_LIST_DEFAULT}\n\nThis way, the default can be overridden in local.conf. (This can be done for DF_APPS_LIST instead, at line 128).","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"}],"dragonflow/controller/common/constants.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"76556f112c238e19b47dca9812a09441239d5bc3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"CT_ZONE_REG \u003d 0x1d402"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"DRAGONFLOW_DEFAULT_BRIDGE \u003d \u0027br-int\u0027"},{"line_number":63,"context_line":"\"\"\""},{"line_number":64,"context_line":"Cookie Mask"},{"line_number":65,"context_line":"global cookie is used by flows of all table, but local cookie is used"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_6d24c3ae","line":62,"updated":"2016-07-05 18:08:01.000000000","message":"I think this value is already available via configuration options. cfg.CONF.df.integration_bridge.","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"}],"dragonflow/controller/dnat_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"76556f112c238e19b47dca9812a09441239d5bc3","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                external_gateway_ip\u003dfip.get_external_gateway_ip())"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _install_output_to_physical_patch(self, ofport):"},{"line_number":397,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":398,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":399,"context_line":"        actions \u003d [parser.OFPActionOutput(ofport,"},{"line_number":400,"context_line":"                                          ofproto.OFPCML_NO_BUFFER)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_4dd10757","line":397,"range":{"start_line":397,"start_character":17,"end_line":397,"end_character":37},"updated":"2016-07-05 18:08:01.000000000","message":"nit: get_datapath() can be called once and stored in a \u0027datapath\u0027 local variable.","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"4daa222dfc482e644c87510b1f44fe3927daa129","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                external_gateway_ip\u003dfip.get_external_gateway_ip())"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    def _install_output_to_physical_patch(self, ofport):"},{"line_number":397,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":398,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":399,"context_line":"        actions \u003d [parser.OFPActionOutput(ofport,"},{"line_number":400,"context_line":"                                          ofproto.OFPCML_NO_BUFFER)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_027a0abd","line":397,"range":{"start_line":397,"start_character":17,"end_line":397,"end_character":37},"in_reply_to":"1aa78d24_4dd10757","updated":"2016-07-06 10:14:05.000000000","message":"Done","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"76556f112c238e19b47dca9812a09441239d5bc3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1aa78d24_6d2a032e","line":407,"updated":"2016-07-05 18:08:01.000000000","message":"This blank line is not needed.","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"4daa222dfc482e644c87510b1f44fe3927daa129","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1aa78d24_962d9b97","line":407,"in_reply_to":"1aa78d24_6d2a032e","updated":"2016-07-06 10:14:05.000000000","message":"Done","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"}],"dragonflow/controller/l2_ml2_app.py":[{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"50c6893cdcee3333ad2b92a7139771148ce15832","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_d7ec5df5","line":1,"range":{"start_line":1,"start_character":15,"end_line":1,"end_character":20},"updated":"2016-06-30 01:33:56.000000000","message":"2016?","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"814b2137c81ff3ff0c096f098622ecd44098dd60","unresolved":false,"context_lines":[{"line_number":441,"context_line":"            match\u003dmatch)"},{"line_number":442,"context_line":"        LOG.info(_LI(\"Adding local port with segmentation\"))"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":445,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # Go to dispatch table according to unique metadata \u0026 mac"},{"line_number":448,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_ca9be8c7","line":445,"range":{"start_line":444,"start_character":0,"end_line":445,"end_character":45},"updated":"2016-07-01 07:58:12.000000000","message":"Duplicated with line 381,382","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"4d8f984224822a920e90b76669f0bf2734b4ce33","unresolved":false,"context_lines":[{"line_number":441,"context_line":"            match\u003dmatch)"},{"line_number":442,"context_line":"        LOG.info(_LI(\"Adding local port with segmentation\"))"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":445,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # Go to dispatch table according to unique metadata \u0026 mac"},{"line_number":448,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_a191b39b","line":445,"range":{"start_line":444,"start_character":0,"end_line":445,"end_character":45},"in_reply_to":"3aaa91ec_ca9be8c7","updated":"2016-07-05 09:55:24.000000000","message":"They are not same.","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"19865d15523083cc904f3098e5fe89381beebf86","unresolved":false,"context_lines":[{"line_number":606,"context_line":"                OF_IN_PORT,"},{"line_number":607,"context_line":"                const.INGRESS_CONNTRACK_TABLE))"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        # Egress broadcast"},{"line_number":610,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":611,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":612,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":613,"context_line":"        match.set_metadata(network_id)"},{"line_number":614,"context_line":"        egress_inst \u003d [parser.OFPInstructionActions("},{"line_number":615,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, egress)]"},{"line_number":616,"context_line":"        self.mod_flow("},{"line_number":617,"context_line":"            self.get_datapath(),"},{"line_number":618,"context_line":"            inst\u003degress_inst,"},{"line_number":619,"context_line":"            table_id\u003dconst.L2_LOOKUP_TABLE,"},{"line_number":620,"context_line":"            command\u003dcommand,"},{"line_number":621,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":622,"context_line":"            match\u003dmatch)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        # Ingress broadcast"},{"line_number":625,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_c409a033","line":622,"range":{"start_line":609,"start_character":0,"end_line":622,"end_character":24},"updated":"2016-07-04 15:19:41.000000000","message":"perhaps move this section into a separate function","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"4d8f984224822a920e90b76669f0bf2734b4ce33","unresolved":false,"context_lines":[{"line_number":606,"context_line":"                OF_IN_PORT,"},{"line_number":607,"context_line":"                const.INGRESS_CONNTRACK_TABLE))"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        # Egress broadcast"},{"line_number":610,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":611,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":612,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":613,"context_line":"        match.set_metadata(network_id)"},{"line_number":614,"context_line":"        egress_inst \u003d [parser.OFPInstructionActions("},{"line_number":615,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, egress)]"},{"line_number":616,"context_line":"        self.mod_flow("},{"line_number":617,"context_line":"            self.get_datapath(),"},{"line_number":618,"context_line":"            inst\u003degress_inst,"},{"line_number":619,"context_line":"            table_id\u003dconst.L2_LOOKUP_TABLE,"},{"line_number":620,"context_line":"            command\u003dcommand,"},{"line_number":621,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":622,"context_line":"            match\u003dmatch)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        # Ingress broadcast"},{"line_number":625,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_81b59732","line":622,"range":{"start_line":609,"start_character":0,"end_line":622,"end_character":24},"in_reply_to":"1aa78d24_c409a033","updated":"2016-07-05 09:55:24.000000000","message":"OK, I will do it.","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":16983,"name":"Eshed Gal-Or","email":"eshed.galor@huawei.com","username":"eshedg"},"change_message_id":"19865d15523083cc904f3098e5fe89381beebf86","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":622,"context_line":"            match\u003dmatch)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        # Ingress broadcast"},{"line_number":625,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":626,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":627,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":628,"context_line":"        match.set_metadata(network_id)"},{"line_number":629,"context_line":"        ingress_inst \u003d [parser.OFPInstructionActions("},{"line_number":630,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, ingress)]"},{"line_number":631,"context_line":"        self.mod_flow("},{"line_number":632,"context_line":"            self.get_datapath(),"},{"line_number":633,"context_line":"            inst\u003dingress_inst,"},{"line_number":634,"context_line":"            table_id\u003dconst.INGRESS_DESTINATION_PORT_LOOKUP_TABLE,"},{"line_number":635,"context_line":"            command\u003dcommand,"},{"line_number":636,"context_line":"            priority\u003dconst.PRIORITY_HIGH,"},{"line_number":637,"context_line":"            match\u003dmatch)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _del_multicast_broadcast_handling_for_remote(self,"},{"line_number":640,"context_line":"                                                     lport_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_84179850","line":637,"range":{"start_line":624,"start_character":0,"end_line":637,"end_character":24},"updated":"2016-07-04 15:19:41.000000000","message":"perhaps move this section into a separate function","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"4d8f984224822a920e90b76669f0bf2734b4ce33","unresolved":false,"context_lines":[{"line_number":621,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":622,"context_line":"            match\u003dmatch)"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"        # Ingress broadcast"},{"line_number":625,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":626,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":627,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":628,"context_line":"        match.set_metadata(network_id)"},{"line_number":629,"context_line":"        ingress_inst \u003d [parser.OFPInstructionActions("},{"line_number":630,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, ingress)]"},{"line_number":631,"context_line":"        self.mod_flow("},{"line_number":632,"context_line":"            self.get_datapath(),"},{"line_number":633,"context_line":"            inst\u003dingress_inst,"},{"line_number":634,"context_line":"            table_id\u003dconst.INGRESS_DESTINATION_PORT_LOOKUP_TABLE,"},{"line_number":635,"context_line":"            command\u003dcommand,"},{"line_number":636,"context_line":"            priority\u003dconst.PRIORITY_HIGH,"},{"line_number":637,"context_line":"            match\u003dmatch)"},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"    def _del_multicast_broadcast_handling_for_remote(self,"},{"line_number":640,"context_line":"                                                     lport_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_c185df59","line":637,"range":{"start_line":624,"start_character":0,"end_line":637,"end_character":24},"in_reply_to":"1aa78d24_84179850","updated":"2016-07-05 09:55:24.000000000","message":"Done","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"814b2137c81ff3ff0c096f098622ecd44098dd60","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":842,"context_line":"            return"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":845,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dport_key)"},{"line_number":848,"context_line":"        actions \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_7d69dc8b","line":845,"range":{"start_line":844,"start_character":0,"end_line":845,"end_character":45},"updated":"2016-07-01 07:58:12.000000000","message":"reduplicated","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"4d8f984224822a920e90b76669f0bf2734b4ce33","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":842,"context_line":"            return"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":845,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dport_key)"},{"line_number":848,"context_line":"        actions \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aa78d24_015b672f","line":845,"range":{"start_line":844,"start_character":0,"end_line":845,"end_character":45},"in_reply_to":"3aaa91ec_7d69dc8b","updated":"2016-07-05 09:55:24.000000000","message":"not the same.","commit_id":"7c1212690d52600166bee5f54124581f5f2d3718"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import netaddr"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from ryu.lib.mac import haddr_to_bin"},{"line_number":19,"context_line":"#from ryu.ofproto import ether"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from dragonflow._i18n import _, _LI"},{"line_number":22,"context_line":"from dragonflow.controller.common.arp_responder import ArpResponder"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_b42d6fff","line":19,"updated":"2016-07-11 06:21:38.000000000","message":"This comment is not needed.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import netaddr"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from ryu.lib.mac import haddr_to_bin"},{"line_number":19,"context_line":"#from ryu.ofproto import ether"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from dragonflow._i18n import _, _LI"},{"line_number":22,"context_line":"from dragonflow.controller.common.arp_responder import ArpResponder"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_48262c17","line":19,"in_reply_to":"1aa78d24_b42d6fff","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        topic \u003d lport.get_topic()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":122,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        # Remove ingress classifier for port"},{"line_number":125,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_54db6bed","line":122,"updated":"2016-07-11 06:21:38.000000000","message":"Result from self.get_datapath() can be reused a few times in this method.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        topic \u003d lport.get_topic()"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":122,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        # Remove ingress classifier for port"},{"line_number":125,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_48b0ec8b","line":122,"in_reply_to":"1aa78d24_54db6bed","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            match\u003dmatch)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dport_key)"},{"line_number":137,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.get_datapath(),"},{"line_number":138,"context_line":"                                cookie\u003d0,"},{"line_number":139,"context_line":"                                cookie_mask\u003d0,"},{"line_number":140,"context_line":"                                table_id\u003dconst.INGRESS_DISPATCH_TABLE,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_3746a121","line":137,"updated":"2016-07-11 06:21:38.000000000","message":"Why not use self.mod_flow?","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":134,"context_line":"            match\u003dmatch)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dport_key)"},{"line_number":137,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.get_datapath(),"},{"line_number":138,"context_line":"                                cookie\u003d0,"},{"line_number":139,"context_line":"                                cookie_mask\u003d0,"},{"line_number":140,"context_line":"                                table_id\u003dconst.INGRESS_DISPATCH_TABLE,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_08126462","line":137,"in_reply_to":"1aa78d24_3746a121","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def add_local_port(self, lport):"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        if self.get_datapath() is None:"},{"line_number":368,"context_line":"            return"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        lport_id \u003d lport.get_id()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_17444572","line":367,"range":{"start_line":367,"start_character":11,"end_line":367,"end_character":31},"updated":"2016-07-11 06:21:38.000000000","message":"The return value of self.get_datapath can be reused in this method.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    def add_local_port(self, lport):"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        if self.get_datapath() is None:"},{"line_number":368,"context_line":"            return"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        lport_id \u003d lport.get_id()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_e3229ba2","line":367,"range":{"start_line":367,"start_character":11,"end_line":367,"end_character":31},"in_reply_to":"1aa78d24_17444572","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        # Ingress classifier for port"},{"line_number":387,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":388,"context_line":"        match.set_in_port(ofport)"},{"line_number":389,"context_line":"        actions \u003d []"},{"line_number":390,"context_line":"        actions.append(parser.OFPActionSetField(reg6\u003dport_key))"},{"line_number":391,"context_line":"        actions.append(parser.OFPActionSetField(metadata\u003dnetwork_id))"},{"line_number":392,"context_line":"        action_inst \u003d parser.OFPInstructionActions("}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_575ecd45","line":389,"updated":"2016-07-11 06:21:38.000000000","message":"Same here re: syntactic construction of arrays","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        # Ingress classifier for port"},{"line_number":387,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":388,"context_line":"        match.set_in_port(ofport)"},{"line_number":389,"context_line":"        actions \u003d []"},{"line_number":390,"context_line":"        actions.append(parser.OFPActionSetField(reg6\u003dport_key))"},{"line_number":391,"context_line":"        actions.append(parser.OFPActionSetField(metadata\u003dnetwork_id))"},{"line_number":392,"context_line":"        action_inst \u003d parser.OFPInstructionActions("}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_0d78b1c3","line":389,"in_reply_to":"1aa78d24_575ecd45","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        # Router MAC\u0027s go to L3 table and have higher priority"},{"line_number":424,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":425,"context_line":"            priority \u003d const.PRIORITY_HIGH"},{"line_number":426,"context_line":"            goto_table \u003d const.L3_LOOKUP_TABLE"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_320eaf32","line":425,"range":{"start_line":425,"start_character":0,"end_line":425,"end_character":42},"updated":"2016-07-11 06:21:38.000000000","message":"Why is this needed?","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        # Router MAC\u0027s go to L3 table and have higher priority"},{"line_number":424,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":425,"context_line":"            priority \u003d const.PRIORITY_HIGH"},{"line_number":426,"context_line":"            goto_table \u003d const.L3_LOOKUP_TABLE"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_638b4b69","line":425,"range":{"start_line":425,"start_character":0,"end_line":425,"end_character":42},"in_reply_to":"1aa78d24_320eaf32","updated":"2016-07-11 09:19:47.000000000","message":"I think for router interface and vms, priority can be same, because the have different mac.\nI copy it from l2_app, I do not think it has any effects, so I keep it as what\u0027s in l2_app.\nIf you think it\u0027s neccessary to change priority to Medium, I will change it.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            match\u003dmatch)"},{"line_number":443,"context_line":"        LOG.info(_LI(\"Adding local port with segmentation\"))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":446,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        # Go to dispatch table according to unique metadata \u0026 mac"},{"line_number":449,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_126e13c9","line":446,"range":{"start_line":445,"start_character":0,"end_line":446,"end_character":45},"updated":"2016-07-11 06:21:38.000000000","message":"This variables have already been set above.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            match\u003dmatch)"},{"line_number":443,"context_line":"        LOG.info(_LI(\"Adding local port with segmentation\"))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":446,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        # Go to dispatch table according to unique metadata \u0026 mac"},{"line_number":449,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_e370dba6","line":446,"range":{"start_line":445,"start_character":0,"end_line":446,"end_character":45},"in_reply_to":"1aa78d24_126e13c9","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        command \u003d ofproto.OFPFC_MODIFY"},{"line_number":533,"context_line":"        network \u003d self.local_networks.get(network_id)"},{"line_number":534,"context_line":"        if network is None:"},{"line_number":535,"context_line":"            local_ports \u003d {}"},{"line_number":536,"context_line":"            network \u003d {}"},{"line_number":537,"context_line":"            network[\u0027local\u0027] \u003d local_ports"},{"line_number":538,"context_line":"            self.local_networks[network_id] \u003d network"},{"line_number":539,"context_line":"            command \u003d ofproto.OFPFC_ADD"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_971af515","line":537,"range":{"start_line":535,"start_character":0,"end_line":537,"end_character":42},"updated":"2016-07-11 06:21:38.000000000","message":"network construction can be done as a literal, e.g.:\nnetwork \u003d {\n    \u0027local\u0027: {}\n}","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":532,"context_line":"        command \u003d ofproto.OFPFC_MODIFY"},{"line_number":533,"context_line":"        network \u003d self.local_networks.get(network_id)"},{"line_number":534,"context_line":"        if network is None:"},{"line_number":535,"context_line":"            local_ports \u003d {}"},{"line_number":536,"context_line":"            network \u003d {}"},{"line_number":537,"context_line":"            network[\u0027local\u0027] \u003d local_ports"},{"line_number":538,"context_line":"            self.local_networks[network_id] \u003d network"},{"line_number":539,"context_line":"            command \u003d ofproto.OFPFC_ADD"},{"line_number":540,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_30d7c2ee","line":537,"range":{"start_line":535,"start_character":0,"end_line":537,"end_character":42},"in_reply_to":"1aa78d24_971af515","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":592,"context_line":"            match\u003dmatch)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        # Ingress broadcast"},{"line_number":595,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":596,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":597,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":598,"context_line":"        match.set_metadata(network_id)"},{"line_number":599,"context_line":"        ingress_inst \u003d [parser.OFPInstructionActions("},{"line_number":600,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, ingress)]"},{"line_number":601,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_08ab848a","line":598,"range":{"start_line":595,"start_character":0,"end_line":598,"end_character":38},"updated":"2016-07-11 06:21:38.000000000","message":"match can be reused from above.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":592,"context_line":"            match\u003dmatch)"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"        # Ingress broadcast"},{"line_number":595,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":596,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":597,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":598,"context_line":"        match.set_metadata(network_id)"},{"line_number":599,"context_line":"        ingress_inst \u003d [parser.OFPInstructionActions("},{"line_number":600,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, ingress)]"},{"line_number":601,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_702e6afb","line":598,"range":{"start_line":595,"start_character":0,"end_line":598,"end_character":38},"in_reply_to":"1aa78d24_08ab848a","updated":"2016-07-11 09:19:47.000000000","message":"If I resue match from above, match will be serialized twice, because it has been serialized when mod_flow is invoked for the first time.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                continue"},{"line_number":667,"context_line":"            tunnel_port \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if tunnels.get(tunnel_port) is None:"},{"line_number":670,"context_line":"                tunnels[tunnel_port] \u003d tunnel_port"},{"line_number":671,"context_line":"                actions.append(parser.OFPActionSetField("},{"line_number":672,"context_line":"                    tunel_id_nxm\u003dsegmentation_id))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_372181fd","line":669,"updated":"2016-07-11 06:21:38.000000000","message":"Consider making tunnels a set, and not a dictionary.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                continue"},{"line_number":667,"context_line":"            tunnel_port \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"            if tunnels.get(tunnel_port) is None:"},{"line_number":670,"context_line":"                tunnels[tunnel_port] \u003d tunnel_port"},{"line_number":671,"context_line":"                actions.append(parser.OFPActionSetField("},{"line_number":672,"context_line":"                    tunel_id_nxm\u003dsegmentation_id))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_30ab3d1f","line":669,"in_reply_to":"1aa78d24_372181fd","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":695,"context_line":""},{"line_number":696,"context_line":"        network \u003d self.local_networks.get(network_id)"},{"line_number":697,"context_line":"        if network is None:"},{"line_number":698,"context_line":"            remote_ports \u003d {}"},{"line_number":699,"context_line":"            network \u003d {}"},{"line_number":700,"context_line":"            network[\u0027remote\u0027] \u003d remote_ports"},{"line_number":701,"context_line":"            self.local_networks[network_id] \u003d network"},{"line_number":702,"context_line":"            command \u003d self.get_datapath().ofproto.OFPFC_ADD"},{"line_number":703,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_17dd6542","line":700,"range":{"start_line":698,"start_character":0,"end_line":700,"end_character":44},"updated":"2016-07-11 06:21:38.000000000","message":"Same here re: network construction","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":695,"context_line":""},{"line_number":696,"context_line":"        network \u003d self.local_networks.get(network_id)"},{"line_number":697,"context_line":"        if network is None:"},{"line_number":698,"context_line":"            remote_ports \u003d {}"},{"line_number":699,"context_line":"            network \u003d {}"},{"line_number":700,"context_line":"            network[\u0027remote\u0027] \u003d remote_ports"},{"line_number":701,"context_line":"            self.local_networks[network_id] \u003d network"},{"line_number":702,"context_line":"            command \u003d self.get_datapath().ofproto.OFPFC_ADD"},{"line_number":703,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_5be8af10","line":700,"range":{"start_line":698,"start_character":0,"end_line":700,"end_character":44},"in_reply_to":"1aa78d24_17dd6542","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":714,"context_line":"        match.set_metadata(network_id)"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        actions \u003d []"},{"line_number":717,"context_line":"        actions.append(parser.OFPActionSetField(tunnel_id_nxm\u003dsegmentation_id))"},{"line_number":718,"context_line":"        actions.append(parser.OFPActionOutput(port\u003dofport))"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        tunnels \u003d {}"},{"line_number":721,"context_line":"        tunnels[ofport] \u003d ofport"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_f7a1b947","line":718,"range":{"start_line":716,"start_character":0,"end_line":718,"end_character":59},"updated":"2016-07-11 06:21:38.000000000","message":"The array \u0027actions\u0027 can be created syntactically, rather then created empty and appended the actions. e.g.:\nactions \u003d [\n    parser.OFPAction...,\n    parser.OFPAction...,\n]","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":714,"context_line":"        match.set_metadata(network_id)"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        actions \u003d []"},{"line_number":717,"context_line":"        actions.append(parser.OFPActionSetField(tunnel_id_nxm\u003dsegmentation_id))"},{"line_number":718,"context_line":"        actions.append(parser.OFPActionOutput(port\u003dofport))"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        tunnels \u003d {}"},{"line_number":721,"context_line":"        tunnels[ofport] \u003d ofport"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_015a3a50","line":718,"range":{"start_line":716,"start_character":0,"end_line":718,"end_character":59},"in_reply_to":"1aa78d24_f7a1b947","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        actions.append(parser.OFPActionSetField(tunnel_id_nxm\u003dsegmentation_id))"},{"line_number":718,"context_line":"        actions.append(parser.OFPActionOutput(port\u003dofport))"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        tunnels \u003d {}"},{"line_number":721,"context_line":"        tunnels[ofport] \u003d ofport"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        # todo"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_17b6058a","line":720,"updated":"2016-07-11 06:21:38.000000000","message":"Consider making tunnels a set, not a dict. Then its creation can be: tunnels \u003d {ofport}.\nOtherwise, tunnels can be created syntactically, e.g.:\ntunnels \u003d {ofport: ofport}.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        actions.append(parser.OFPActionSetField(tunnel_id_nxm\u003dsegmentation_id))"},{"line_number":718,"context_line":"        actions.append(parser.OFPActionOutput(port\u003dofport))"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        tunnels \u003d {}"},{"line_number":721,"context_line":"        tunnels[ofport] \u003d ofport"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        # todo"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_fcf3519d","line":720,"in_reply_to":"1aa78d24_17b6058a","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":728,"context_line":"                continue"},{"line_number":729,"context_line":"            tunnel_port \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"            if tunnels[tunnel_port] is None:"},{"line_number":732,"context_line":"                tunnels[tunnel_port] \u003d tunnel_port"},{"line_number":733,"context_line":"                actions.append(parser.OFPActionSetField("},{"line_number":734,"context_line":"                    tunel_id_nxm\u003dsegmentation_id))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_b77bb1f3","line":731,"updated":"2016-07-11 06:21:38.000000000","message":"This will cause a KeyError for new tunnel_ports.\nConsider replacing with \u0027if tunnel_port in tunnels:\u0027","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":728,"context_line":"                continue"},{"line_number":729,"context_line":"            tunnel_port \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"            if tunnels[tunnel_port] is None:"},{"line_number":732,"context_line":"                tunnels[tunnel_port] \u003d tunnel_port"},{"line_number":733,"context_line":"                actions.append(parser.OFPActionSetField("},{"line_number":734,"context_line":"                    tunel_id_nxm\u003dsegmentation_id))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_bc86e9d8","line":731,"in_reply_to":"1aa78d24_b77bb1f3","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":745,"context_line":"            match\u003dmatch)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def remove_logical_switch(self, lswitch):"},{"line_number":748,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":749,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        network_id \u003d self.db_store.get_network_id("}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_08826400","line":748,"range":{"start_line":748,"start_character":0,"end_line":748,"end_character":51},"updated":"2016-07-11 06:21:38.000000000","message":"Same here re: self.get_datapath() return value.\nThis item appears a few times in this file.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":745,"context_line":"            match\u003dmatch)"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def remove_logical_switch(self, lswitch):"},{"line_number":748,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":749,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"        network_id \u003d self.db_store.get_network_id("}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_50ab6e1d","line":748,"range":{"start_line":748,"start_character":0,"end_line":748,"end_character":51},"in_reply_to":"1aa78d24_08826400","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":751,"context_line":"        network_id \u003d self.db_store.get_network_id("},{"line_number":752,"context_line":"            lswitch.get_id(),"},{"line_number":753,"context_line":"        )"},{"line_number":754,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":755,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":756,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":757,"context_line":"        match.set_metadata(network_id)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        self.mod_flow("},{"line_number":760,"context_line":"            datapath\u003dself.get_datapath(),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_8876543c","line":757,"range":{"start_line":754,"start_character":0,"end_line":757,"end_character":38},"updated":"2016-07-11 06:21:38.000000000","message":"The construction of broadcast match for network_id repeats a few times. Maybe it can be moved out to a method?","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":751,"context_line":"        network_id \u003d self.db_store.get_network_id("},{"line_number":752,"context_line":"            lswitch.get_id(),"},{"line_number":753,"context_line":"        )"},{"line_number":754,"context_line":"        match \u003d parser.OFPMatch(eth_dst\u003d\u002701:00:00:00:00:00\u0027)"},{"line_number":755,"context_line":"        addint \u003d haddr_to_bin(\u002701:00:00:00:00:00\u0027)"},{"line_number":756,"context_line":"        match.set_dl_dst_masked(addint, addint)"},{"line_number":757,"context_line":"        match.set_metadata(network_id)"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        self.mod_flow("},{"line_number":760,"context_line":"            datapath\u003dself.get_datapath(),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_3b5163d9","line":757,"range":{"start_line":754,"start_character":0,"end_line":757,"end_character":38},"in_reply_to":"1aa78d24_8876543c","updated":"2016-07-11 09:19:47.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        lport_id \u003d lport.get_id()"},{"line_number":774,"context_line":"        mac \u003d lport.get_mac()"},{"line_number":775,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":776,"context_line":"        #network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":777,"context_line":"        segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":778,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":779,"context_line":"        port_key \u003d lport.get_tunnel_key()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_a8919048","line":776,"updated":"2016-07-11 06:21:38.000000000","message":"Is this comment needed?","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"547d12cf937137418afc6c3a05599532d33cba43","unresolved":false,"context_lines":[{"line_number":773,"context_line":"        lport_id \u003d lport.get_id()"},{"line_number":774,"context_line":"        mac \u003d lport.get_mac()"},{"line_number":775,"context_line":"        network_id \u003d lport.get_external_value(\u0027local_network_id\u0027)"},{"line_number":776,"context_line":"        #network_type \u003d lport.get_external_value(\u0027network_type\u0027)"},{"line_number":777,"context_line":"        segmentation_id \u003d lport.get_external_value(\u0027segmentation_id\u0027)"},{"line_number":778,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)"},{"line_number":779,"context_line":"        port_key \u003d lport.get_tunnel_key()"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_9031560e","line":776,"in_reply_to":"1aa78d24_a8919048","updated":"2016-07-11 09:19:47.000000000","message":"This is for vlan and flat. Forgive my laziness. I will remove it.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"1bed905ca488b5e095be1e29798fece47d5333fa","unresolved":false,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"        self._add_arp_responder(lport)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":812,"context_line":"        #     return"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":815,"context_line":"        ofproto \u003d self.get_datapath().ofproto"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_2a30f3e7","line":812,"range":{"start_line":811,"start_character":8,"end_line":812,"end_character":20},"updated":"2016-07-11 08:15:11.000000000","message":"remove it.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"        self._add_arp_responder(lport)"},{"line_number":810,"context_line":""},{"line_number":811,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":812,"context_line":"        #     return"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":815,"context_line":"        ofproto \u003d self.get_datapath().ofproto"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_7063051b","line":812,"range":{"start_line":811,"start_character":8,"end_line":812,"end_character":20},"in_reply_to":"1aa78d24_2a30f3e7","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":812,"context_line":"        #     return"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":815,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dport_key)"},{"line_number":818,"context_line":"        actions \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_e89b9864","line":815,"range":{"start_line":814,"start_character":0,"end_line":815,"end_character":45},"updated":"2016-07-11 06:21:38.000000000","message":"These local variables can be reused from above.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":811,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":812,"context_line":"        #     return"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":815,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dport_key)"},{"line_number":818,"context_line":"        actions \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_5066c929","line":815,"range":{"start_line":814,"start_character":0,"end_line":815,"end_character":45},"in_reply_to":"1aa78d24_e89b9864","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":852,"context_line":"        LOG.info(_LI(\u0027Install network flows on first port up.\u0027))"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        network \u003d self.local_networks.get(local_network_id)"},{"line_number":855,"context_line":"        if network is not None and network.values is not None:"},{"line_number":856,"context_line":"            local_ports \u003d network.get(\u0027local\u0027)"},{"line_number":857,"context_line":"            if local_ports is not None and local_ports.values is not None:"},{"line_number":858,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_12abb38a","line":855,"range":{"start_line":855,"start_character":0,"end_line":855,"end_character":62},"updated":"2016-07-11 06:21:38.000000000","message":"This test would be better written as:\nif network:\n\nThis way, it is true only if network is not None, and if it is a container, only if it is not empty.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":852,"context_line":"        LOG.info(_LI(\u0027Install network flows on first port up.\u0027))"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"        network \u003d self.local_networks.get(local_network_id)"},{"line_number":855,"context_line":"        if network is not None and network.values is not None:"},{"line_number":856,"context_line":"            local_ports \u003d network.get(\u0027local\u0027)"},{"line_number":857,"context_line":"            if local_ports is not None and local_ports.values is not None:"},{"line_number":858,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_a1888623","line":855,"range":{"start_line":855,"start_character":0,"end_line":855,"end_character":62},"in_reply_to":"1aa78d24_12abb38a","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        network \u003d self.local_networks.get(local_network_id)"},{"line_number":855,"context_line":"        if network is not None and network.values is not None:"},{"line_number":856,"context_line":"            local_ports \u003d network.get(\u0027local\u0027)"},{"line_number":857,"context_line":"            if local_ports is not None and local_ports.values is not None:"},{"line_number":858,"context_line":"                return"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_12829300","line":857,"updated":"2016-07-11 06:21:38.000000000","message":"Same here.\nAlso note that local_ports.values is a function.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        network \u003d self.local_networks.get(local_network_id)"},{"line_number":855,"context_line":"        if network is not None and network.values is not None:"},{"line_number":856,"context_line":"            local_ports \u003d network.get(\u0027local\u0027)"},{"line_number":857,"context_line":"            if local_ports is not None and local_ports.values is not None:"},{"line_number":858,"context_line":"                return"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_01787a2a","line":857,"in_reply_to":"1aa78d24_12829300","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":857,"context_line":"            if local_ports is not None and local_ports.values is not None:"},{"line_number":858,"context_line":"                return"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":861,"context_line":"        #     self._install_network_flows_for_vlan_and_flat(network_type,"},{"line_number":862,"context_line":"        #                                                   segmentation_id,"},{"line_number":863,"context_line":"        #                                                   local_network_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_9276833c","line":860,"updated":"2016-07-11 06:21:38.000000000","message":"I think this comment is unnecessary.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":857,"context_line":"            if local_ports is not None and local_ports.values is not None:"},{"line_number":858,"context_line":"                return"},{"line_number":859,"context_line":""},{"line_number":860,"context_line":"        # if network_type \u003d\u003d \u0027vlan\u0027 or network_type \u003d\u003d \u0027flat\u0027:"},{"line_number":861,"context_line":"        #     self._install_network_flows_for_vlan_and_flat(network_type,"},{"line_number":862,"context_line":"        #                                                   segmentation_id,"},{"line_number":863,"context_line":"        #                                                   local_network_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_010fda2e","line":860,"in_reply_to":"1aa78d24_9276833c","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        self._install_network_flows_for_tunnel(segmentation_id,"},{"line_number":866,"context_line":"                                               local_network_id)"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"    # Install Ingress network flow for vxlan"},{"line_number":869,"context_line":"    # Table\u003dINGRESS_CLASSIFICATION_DISPATCH_TABLE, priority\u003dMedium"},{"line_number":870,"context_line":"    # Match: tunnel_id\u003d vni"},{"line_number":871,"context_line":"    # Actions: metadata\u003dnetwork_id, goto:INGRESS_DESTIANTION_PORT_LOOKUP_TABLE"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_329eaf54","line":868,"range":{"start_line":868,"start_character":0,"end_line":868,"end_character":44},"updated":"2016-07-11 06:21:38.000000000","message":"This comment is important. Please add it as a python doc comment. \ni.e. after the function definition:\n\"\"\" Install Ingress network flow for vxlan \"\"\"","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":865,"context_line":"        self._install_network_flows_for_tunnel(segmentation_id,"},{"line_number":866,"context_line":"                                               local_network_id)"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"    # Install Ingress network flow for vxlan"},{"line_number":869,"context_line":"    # Table\u003dINGRESS_CLASSIFICATION_DISPATCH_TABLE, priority\u003dMedium"},{"line_number":870,"context_line":"    # Match: tunnel_id\u003d vni"},{"line_number":871,"context_line":"    # Actions: metadata\u003dnetwork_id, goto:INGRESS_DESTIANTION_PORT_LOOKUP_TABLE"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_a10526c3","line":868,"range":{"start_line":868,"start_character":0,"end_line":868,"end_character":44},"in_reply_to":"1aa78d24_329eaf54","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":866,"context_line":"                                               local_network_id)"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"    # Install Ingress network flow for vxlan"},{"line_number":869,"context_line":"    # Table\u003dINGRESS_CLASSIFICATION_DISPATCH_TABLE, priority\u003dMedium"},{"line_number":870,"context_line":"    # Match: tunnel_id\u003d vni"},{"line_number":871,"context_line":"    # Actions: metadata\u003dnetwork_id, goto:INGRESS_DESTIANTION_PORT_LOOKUP_TABLE"},{"line_number":872,"context_line":"    def _install_network_flows_for_tunnel(self, segmentation_id,"},{"line_number":873,"context_line":"                                          local_network_id):"},{"line_number":874,"context_line":"        LOG.debug(\u0027Install network flows on first tunnel port up .\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_e8df1838","line":871,"range":{"start_line":869,"start_character":0,"end_line":871,"end_character":78},"updated":"2016-07-11 06:21:38.000000000","message":"Are these comments needed?","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":866,"context_line":"                                               local_network_id)"},{"line_number":867,"context_line":""},{"line_number":868,"context_line":"    # Install Ingress network flow for vxlan"},{"line_number":869,"context_line":"    # Table\u003dINGRESS_CLASSIFICATION_DISPATCH_TABLE, priority\u003dMedium"},{"line_number":870,"context_line":"    # Match: tunnel_id\u003d vni"},{"line_number":871,"context_line":"    # Actions: metadata\u003dnetwork_id, goto:INGRESS_DESTIANTION_PORT_LOOKUP_TABLE"},{"line_number":872,"context_line":"    def _install_network_flows_for_tunnel(self, segmentation_id,"},{"line_number":873,"context_line":"                                          local_network_id):"},{"line_number":874,"context_line":"        LOG.debug(\u0027Install network flows on first tunnel port up .\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_819e2ab6","line":871,"range":{"start_line":869,"start_character":0,"end_line":871,"end_character":78},"in_reply_to":"1aa78d24_e8df1838","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"9c4a66d10345ca3b09266e842a4109ca6157ea2e","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        LOG.debug(\u0027Install network flows on first tunnel port up .\u0027)"},{"line_number":875,"context_line":"        if segmentation_id is None:"},{"line_number":876,"context_line":"            return"},{"line_number":877,"context_line":"        LOG.info(_LI(\"Segmentation_id  \u003d %s\") % str(segmentation_id))"},{"line_number":878,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":879,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":880,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dsegmentation_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_28e2c001","line":877,"range":{"start_line":877,"start_character":46,"end_line":877,"end_character":47},"updated":"2016-07-11 06:21:38.000000000","message":"It is better to use a comma here, and let LOG.info do the formatting.","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"3f69380f382e6bed27fdeb25643e69ef661bf137","unresolved":false,"context_lines":[{"line_number":874,"context_line":"        LOG.debug(\u0027Install network flows on first tunnel port up .\u0027)"},{"line_number":875,"context_line":"        if segmentation_id is None:"},{"line_number":876,"context_line":"            return"},{"line_number":877,"context_line":"        LOG.info(_LI(\"Segmentation_id  \u003d %s\") % str(segmentation_id))"},{"line_number":878,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":879,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":880,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dsegmentation_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aa78d24_813aaa96","line":877,"range":{"start_line":877,"start_character":46,"end_line":877,"end_character":47},"in_reply_to":"1aa78d24_28e2c001","updated":"2016-07-11 10:51:06.000000000","message":"Done","commit_id":"68701b0595930022ccb53ed616d9e519ce70530e"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3bb5f3244410b92775277c64799b7f11b764eec1","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        # Router MAC\u0027s go to L3 table and have higher priority"},{"line_number":412,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":413,"context_line":"            priority \u003d const.PRIORITY_HIGH"},{"line_number":414,"context_line":"            goto_table \u003d const.L3_LOOKUP_TABLE"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"        match \u003d parser.OFPMatch()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_0d941fe0","line":413,"updated":"2016-07-11 14:20:09.000000000","message":"Change to medium priority is not necessary at this time.","commit_id":"a7718dfd16d19f281f941c519e427866d73afa9c"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3bb5f3244410b92775277c64799b7f11b764eec1","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            network \u003d {"},{"line_number":517,"context_line":"                \u0027local\u0027: {}"},{"line_number":518,"context_line":"            }"},{"line_number":519,"context_line":"            # network[\u0027local\u0027] \u003d local_ports"},{"line_number":520,"context_line":"            self.local_networks[network_id] \u003d network"},{"line_number":521,"context_line":"            command \u003d ofproto.OFPFC_ADD"},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_0d59bf5a","line":519,"updated":"2016-07-11 14:20:09.000000000","message":"nit: This comment is not needed.","commit_id":"a7718dfd16d19f281f941c519e427866d73afa9c"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"14ef19391494444719ddf7555b7d3555ef65254b","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            network \u003d {"},{"line_number":517,"context_line":"                \u0027local\u0027: {}"},{"line_number":518,"context_line":"            }"},{"line_number":519,"context_line":"            # network[\u0027local\u0027] \u003d local_ports"},{"line_number":520,"context_line":"            self.local_networks[network_id] \u003d network"},{"line_number":521,"context_line":"            command \u003d ofproto.OFPFC_ADD"},{"line_number":522,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_f0234cbb","line":519,"in_reply_to":"1aa78d24_0d59bf5a","updated":"2016-07-12 01:15:26.000000000","message":"Done","commit_id":"a7718dfd16d19f281f941c519e427866d73afa9c"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"76556f112c238e19b47dca9812a09441239d5bc3","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        return self.lswitch[\u0027name\u0027]"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"    def is_external(self):"},{"line_number":770,"context_line":"        return self.lswitch.get(\u0027router_external\u0027, None)"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    def get_mtu(self):"},{"line_number":773,"context_line":"        return self.lswitch.get(\u0027mtu\u0027, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1aa78d24_0de7ffb0","line":770,"range":{"start_line":770,"start_character":51,"end_line":770,"end_character":55},"updated":"2016-07-05 18:08:01.000000000","message":"I think the default should be False, or even better - taken from the neutron extension definition (the second part, if possible, can be done in a separate patch)","commit_id":"1c0f4731c2bdb00192912b8074e91cbbc5825781"}]}
