)]}'
{"neutron/agent/l3/dvr_fip_ns.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8921a975e53203076c54a15dd4c6eb0042051b5","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                                            table\u003dFIP_RT_TBL)"},{"line_number":265,"context_line":"            self.local_subnets.release(ri.router_id)"},{"line_number":266,"context_line":"            ri.rtr_fip_subnet \u003d None"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        # Check for namespace before deleting the device"},{"line_number":269,"context_line":"        if not self.destroyed:"},{"line_number":270,"context_line":"            fip_ns_name \u003d self.get_name()"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_781542e3","side":"PARENT","line":267,"updated":"2016-08-29 20:21:40.000000000","message":"nit: whitespace change","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8921a975e53203076c54a15dd4c6eb0042051b5","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            elif device.exists() and ri.default_fast_path_route:"},{"line_number":267,"context_line":"                device.route.delete_gateway(str(fip_2_rtr.ip))"},{"line_number":268,"context_line":"                ri.default_fast_path_route \u003d False"},{"line_number":269,"context_line":"            if not device.exists():"},{"line_number":270,"context_line":"                ri.default_fip_tbl_route \u003d False"},{"line_number":271,"context_line":"                ri.default_fast_path_route \u003d False"},{"line_number":272,"context_line":"            self.local_subnets.release(ri.router_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_98b766d7","line":269,"updated":"2016-08-29 20:21:40.000000000","message":"Instead of calling device.exists() multiple times, should just nest these:\n\nif device.exists():\n    if ri.default_fip_tbl_route:\n        ...\n    elif ri.default_fast_path_route:\n        ...\nelse:\n    ...","commit_id":"d4496ecaa2bb8742c25ed03589f0305abbd7a307"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab78d60652e619cdf5ae5e7822559bd72e3f3537","unresolved":false,"context_lines":[{"line_number":43,"context_line":"FIP_PR_START \u003d 32768"},{"line_number":44,"context_line":"FIP_PR_END \u003d FIP_PR_START + 40000"},{"line_number":45,"context_line":"# Fixed rule priority for Fast Path Exit rules"},{"line_number":46,"context_line":"FAST_RT_PR \u003d 80000"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class FipNamespace(namespaces.Namespace):"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a77a97e_ec8b6f66","line":46,"updated":"2016-11-17 02:21:41.000000000","message":"This is a rule number not a table number so something without RT, maybe FAST_PATH_EXIT_PR ?","commit_id":"ceb1b0a9e7906bdce3d19194de2450fd261c60c7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8ee4bdb3400204afeb4ac36c7fd17c621d3c1238","unresolved":false,"context_lines":[{"line_number":43,"context_line":"FIP_PR_START \u003d 32768"},{"line_number":44,"context_line":"FIP_PR_END \u003d FIP_PR_START + 40000"},{"line_number":45,"context_line":"# Fixed rule priority for Fast Path Exit rules"},{"line_number":46,"context_line":"FAST_RT_PR \u003d 80000"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class FipNamespace(namespaces.Namespace):"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a77a97e_e6eb2ada","line":46,"updated":"2016-11-18 21:03:39.000000000","message":"I had changed this in PS30, so think you over-wrote things.","commit_id":"c603c31db2cbda16c64f204a29ec3e2d9f1141c9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"eacabf3136c7867d8f06360030c3bca26a473a50","unresolved":false,"context_lines":[{"line_number":43,"context_line":"FIP_PR_START \u003d 32768"},{"line_number":44,"context_line":"FIP_PR_END \u003d FIP_PR_START + 40000"},{"line_number":45,"context_line":"# Fixed rule priority for Fast Path Exit rules"},{"line_number":46,"context_line":"FAST_RT_PR \u003d 80000"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class FipNamespace(namespaces.Namespace):"}],"source_content_type":"text/x-python","patch_set":31,"id":"7a77a97e_41568806","line":46,"in_reply_to":"7a77a97e_e6eb2ada","updated":"2016-11-18 21:33:17.000000000","message":"Sorry for the inconvenience. I did not watch it.","commit_id":"c603c31db2cbda16c64f204a29ec3e2d9f1141c9"}],"neutron/agent/l3/dvr_local_router.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8921a975e53203076c54a15dd4c6eb0042051b5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.dist_fip_count \u003d None"},{"line_number":49,"context_line":"        self.fip_ns \u003d None"},{"line_number":50,"context_line":"        self._pending_arp_set \u003d set()"},{"line_number":51,"context_line":"        self.default_fip_tbl_route \u003d False"},{"line_number":52,"context_line":"        self.default_fast_path_route \u003d False"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_floating_ips(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_78d622f2","line":51,"updated":"2016-08-29 20:21:40.000000000","message":"nit: maybe spell out the whole word \u0027table\u0027 instead of tbl, although I see you\u0027re matching FIP_RT_TBL","commit_id":"d4496ecaa2bb8742c25ed03589f0305abbd7a307"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8921a975e53203076c54a15dd4c6eb0042051b5","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            self._set_subnet_arp_info(subnet[\u0027id\u0027])"},{"line_number":344,"context_line":"            if ex_gw_port:"},{"line_number":345,"context_line":"                # Check for address_scopes here if gateway exists."},{"line_number":346,"context_line":"                v4, v6 \u003d ("},{"line_number":347,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, v4, v6)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_b866ea4e","line":346,"updated":"2016-08-29 20:21:40.000000000","message":"can you make these v4match, v6match like the others?","commit_id":"d4496ecaa2bb8742c25ed03589f0305abbd7a307"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8921a975e53203076c54a15dd4c6eb0042051b5","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            v4, v6 \u003d ("},{"line_number":590,"context_line":"                self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":591,"context_line":"            if v4 or v6:"},{"line_number":592,"context_line":"                break"},{"line_number":593,"context_line":"        self._add_rtr_to_fip_link_default_gateway("},{"line_number":594,"context_line":"            ex_gw_port, v4, v6)"},{"line_number":595,"context_line":"        for port in self.internal_ports:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_6bd64af2","line":592,"updated":"2016-08-29 20:21:40.000000000","message":"Can there be a case where the v4 matches on one port and the v6 on another?","commit_id":"d4496ecaa2bb8742c25ed03589f0305abbd7a307"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a2ba1b0652db6e8c12592e3d010dce2c4a2f7019","unresolved":false,"context_lines":[{"line_number":589,"context_line":"            v4, v6 \u003d ("},{"line_number":590,"context_line":"                self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":591,"context_line":"            if v4 or v6:"},{"line_number":592,"context_line":"                break"},{"line_number":593,"context_line":"        self._add_rtr_to_fip_link_default_gateway("},{"line_number":594,"context_line":"            ex_gw_port, v4, v6)"},{"line_number":595,"context_line":"        for port in self.internal_ports:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_53b926cb","line":592,"in_reply_to":"fa7ab95a_6bd64af2","updated":"2016-08-30 07:49:34.000000000","message":"I think it will not be in real case. internal_ports will either be v4 or v6.","commit_id":"d4496ecaa2bb8742c25ed03589f0305abbd7a307"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8921a975e53203076c54a15dd4c6eb0042051b5","unresolved":false,"context_lines":[{"line_number":591,"context_line":"            if v4 or v6:"},{"line_number":592,"context_line":"                break"},{"line_number":593,"context_line":"        self._add_rtr_to_fip_link_default_gateway("},{"line_number":594,"context_line":"            ex_gw_port, v4, v6)"},{"line_number":595,"context_line":"        for port in self.internal_ports:"},{"line_number":596,"context_line":"            v4, v6 \u003d ("},{"line_number":597,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa7ab95a_0bd3fe04","line":594,"updated":"2016-08-29 20:21:40.000000000","message":"Maybe it\u0027s just my quick look but it doesn\u0027t look like we handle adding two routes (4 and 6) simultaneously?","commit_id":"d4496ecaa2bb8742c25ed03589f0305abbd7a307"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                v4, v6 \u003d ("},{"line_number":347,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, v4, v6)"},{"line_number":350,"context_line":"                if v4 or v6:"},{"line_number":351,"context_line":"                    self._add_interface_route_to_fip_ns(port)"},{"line_number":352,"context_line":"        self._snat_redirect_add_from_port(port)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_79a2969a","line":349,"range":{"start_line":349,"start_character":16,"end_line":349,"end_character":24},"updated":"2016-08-30 07:49:58.000000000","message":"too much indention?","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                v4, v6 \u003d ("},{"line_number":347,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, v4, v6)"},{"line_number":350,"context_line":"                if v4 or v6:"},{"line_number":351,"context_line":"                    self._add_interface_route_to_fip_ns(port)"},{"line_number":352,"context_line":"        self._snat_redirect_add_from_port(port)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_46b3fb97","line":349,"range":{"start_line":349,"start_character":16,"end_line":349,"end_character":24},"in_reply_to":"fa7ab95a_79a2969a","updated":"2016-08-30 16:41:55.000000000","message":"will fix it.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, v4, v6)"},{"line_number":350,"context_line":"                if v4 or v6:"},{"line_number":351,"context_line":"                    self._add_interface_route_to_fip_ns(port)"},{"line_number":352,"context_line":"        self._snat_redirect_add_from_port(port)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _snat_redirect_add_from_port(self, port):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_3c0c7c3a","line":351,"range":{"start_line":351,"start_character":20,"end_line":351,"end_character":61},"updated":"2016-08-30 07:49:58.000000000","message":"What if v4 address scope match, and v6 address scope not match? This method will","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, v4, v6)"},{"line_number":350,"context_line":"                if v4 or v6:"},{"line_number":351,"context_line":"                    self._add_interface_route_to_fip_ns(port)"},{"line_number":352,"context_line":"        self._snat_redirect_add_from_port(port)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    def _snat_redirect_add_from_port(self, port):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_a68da7d4","line":351,"range":{"start_line":351,"start_character":20,"end_line":351,"end_character":61},"in_reply_to":"fa7ab95a_3c0c7c3a","updated":"2016-08-30 16:41:55.000000000","message":"If they are on the same network, they should match.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        for p in self.internal_ports:"},{"line_number":413,"context_line":"            v4match, v6match \u003d self._check_if_address_scopes_match("},{"line_number":414,"context_line":"                p, ex_gw_port)"},{"line_number":415,"context_line":"            if not v4match or v6match:"},{"line_number":416,"context_line":"                gateway \u003d self.get_snat_port_for_internal_port(p)"},{"line_number":417,"context_line":"                if not gateway:"},{"line_number":418,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f3ccfa8a","line":415,"range":{"start_line":415,"start_character":0,"end_line":415,"end_character":38},"updated":"2016-08-30 07:49:58.000000000","message":"Why \"not v4match or v6match\"? Does this mean even if v6match, the traffic will still need go to snat node.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        for p in self.internal_ports:"},{"line_number":413,"context_line":"            v4match, v6match \u003d self._check_if_address_scopes_match("},{"line_number":414,"context_line":"                p, ex_gw_port)"},{"line_number":415,"context_line":"            if not v4match or v6match:"},{"line_number":416,"context_line":"                gateway \u003d self.get_snat_port_for_internal_port(p)"},{"line_number":417,"context_line":"                if not gateway:"},{"line_number":418,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_c6c9cb27","line":415,"range":{"start_line":415,"start_character":0,"end_line":415,"end_character":38},"in_reply_to":"fa7ab95a_f3ccfa8a","updated":"2016-08-30 16:41:55.000000000","message":"Let me think about it.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        int_port_addr_scope_6 \u003d int_port_addr_scopes.get("},{"line_number":526,"context_line":"            str(lib_constants.IP_VERSION_6))"},{"line_number":527,"context_line":"        if (int_port_addr_scope_4 and"},{"line_number":528,"context_line":"            (int_port_addr_scope_4 in ext_port_addr_scopes.values())):"},{"line_number":529,"context_line":"            v4_scope_match \u003d True"},{"line_number":530,"context_line":"        if (int_port_addr_scope_6 and"},{"line_number":531,"context_line":"            (int_port_addr_scope_6 in ext_port_addr_scopes.values())):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_5956b25c","line":528,"range":{"start_line":528,"start_character":12,"end_line":528,"end_character":13},"updated":"2016-08-30 07:49:58.000000000","message":"nit: this parenthesis is not required.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":525,"context_line":"        int_port_addr_scope_6 \u003d int_port_addr_scopes.get("},{"line_number":526,"context_line":"            str(lib_constants.IP_VERSION_6))"},{"line_number":527,"context_line":"        if (int_port_addr_scope_4 and"},{"line_number":528,"context_line":"            (int_port_addr_scope_4 in ext_port_addr_scopes.values())):"},{"line_number":529,"context_line":"            v4_scope_match \u003d True"},{"line_number":530,"context_line":"        if (int_port_addr_scope_6 and"},{"line_number":531,"context_line":"            (int_port_addr_scope_6 in ext_port_addr_scopes.values())):"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_46705b0b","line":528,"range":{"start_line":528,"start_character":12,"end_line":528,"end_character":13},"in_reply_to":"fa7ab95a_5956b25c","updated":"2016-08-30 16:41:55.000000000","message":"will fix it.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            (int_port_addr_scope_4 in ext_port_addr_scopes.values())):"},{"line_number":529,"context_line":"            v4_scope_match \u003d True"},{"line_number":530,"context_line":"        if (int_port_addr_scope_6 and"},{"line_number":531,"context_line":"            (int_port_addr_scope_6 in ext_port_addr_scopes.values())):"},{"line_number":532,"context_line":"            v6_scope_match \u003d True"},{"line_number":533,"context_line":"        return v4_scope_match, v6_scope_match"},{"line_number":534,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_19cfca29","line":531,"range":{"start_line":531,"start_character":12,"end_line":531,"end_character":13},"updated":"2016-08-30 07:49:58.000000000","message":"ditto","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":528,"context_line":"            (int_port_addr_scope_4 in ext_port_addr_scopes.values())):"},{"line_number":529,"context_line":"            v4_scope_match \u003d True"},{"line_number":530,"context_line":"        if (int_port_addr_scope_6 and"},{"line_number":531,"context_line":"            (int_port_addr_scope_6 in ext_port_addr_scopes.values())):"},{"line_number":532,"context_line":"            v6_scope_match \u003d True"},{"line_number":533,"context_line":"        return v4_scope_match, v6_scope_match"},{"line_number":534,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_e67ecfe2","line":531,"range":{"start_line":531,"start_character":12,"end_line":531,"end_character":13},"in_reply_to":"fa7ab95a_19cfca29","updated":"2016-08-30 16:41:55.000000000","message":"will fix it.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":572,"context_line":"        if not device.exists():"},{"line_number":573,"context_line":"            return"},{"line_number":574,"context_line":"        if v4match or v6match:"},{"line_number":575,"context_line":"            # add default route in table main"},{"line_number":576,"context_line":"            if not self.default_fast_path_route:"},{"line_number":577,"context_line":"                device.route.add_gateway(str(fip_2_rtr_ip))"},{"line_number":578,"context_line":"                self.default_fast_path_route \u003d True"},{"line_number":579,"context_line":"        else:"},{"line_number":580,"context_line":"            # Add default route in table FIP_RT_TBL"},{"line_number":581,"context_line":"            if not self.default_fip_tbl_route:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_8db38d09","line":578,"range":{"start_line":575,"start_character":0,"end_line":578,"end_character":51},"updated":"2016-08-30 07:49:58.000000000","message":"when a router connects to subnets in different address scopes, some subnets might want to go to external by direct route, others might want to go to external by SNAT. \n\nIf the default route is added in main table, it will disable all policy route, which means all external traffic will go to the fip namespace, the snat patch will be cut. I don\u0027t know if it is by design, but it looks odd to me. Maybe it still needs an extra route table for it.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":572,"context_line":"        if not device.exists():"},{"line_number":573,"context_line":"            return"},{"line_number":574,"context_line":"        if v4match or v6match:"},{"line_number":575,"context_line":"            # add default route in table main"},{"line_number":576,"context_line":"            if not self.default_fast_path_route:"},{"line_number":577,"context_line":"                device.route.add_gateway(str(fip_2_rtr_ip))"},{"line_number":578,"context_line":"                self.default_fast_path_route \u003d True"},{"line_number":579,"context_line":"        else:"},{"line_number":580,"context_line":"            # Add default route in table FIP_RT_TBL"},{"line_number":581,"context_line":"            if not self.default_fip_tbl_route:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_c6df0b0b","line":578,"range":{"start_line":575,"start_character":0,"end_line":578,"end_character":51},"in_reply_to":"fa7ab95a_8db38d09","updated":"2016-08-30 16:41:55.000000000","message":"If different address scopes connect to the same router, then routing does not work across address scopes. you can only route same address scopes subnets to the router.\n\nI am not sure what is the use case for that particular router to forward all traffic to the SNAT node, if the subnets belong the same address scopes.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"260798a48b4ab65f4dd4bd88568e43a88e4a6bd5","unresolved":false,"context_lines":[{"line_number":594,"context_line":"            ex_gw_port, v4, v6)"},{"line_number":595,"context_line":"        for port in self.internal_ports:"},{"line_number":596,"context_line":"            v4, v6 \u003d ("},{"line_number":597,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":598,"context_line":"            if v4 or v6:"},{"line_number":599,"context_line":"                self._add_interface_route_to_fip_ns(port)"},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_f02310bb","line":597,"range":{"start_line":597,"start_character":12,"end_line":597,"end_character":74},"updated":"2016-08-30 07:49:58.000000000","message":"too much indention?\n\nCan this be merged with line 588~592","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"55bb4bc69419f526a7eaa9c137c808ed90169041","unresolved":false,"context_lines":[{"line_number":594,"context_line":"            ex_gw_port, v4, v6)"},{"line_number":595,"context_line":"        for port in self.internal_ports:"},{"line_number":596,"context_line":"            v4, v6 \u003d ("},{"line_number":597,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":598,"context_line":"            if v4 or v6:"},{"line_number":599,"context_line":"                self._add_interface_route_to_fip_ns(port)"},{"line_number":600,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa7ab95a_66247f0c","line":597,"range":{"start_line":597,"start_character":12,"end_line":597,"end_character":74},"in_reply_to":"fa7ab95a_f02310bb","updated":"2016-08-30 16:41:55.000000000","message":"will fix the indendation.","commit_id":"75658afeccf3d26d7baaff651ec800bdd2d36e30"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dc04e4eeeb942b773b666d9c63b01d253c541edf","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                scope_match \u003d ("},{"line_number":347,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, scope_match)"},{"line_number":350,"context_line":"                if scope_match:"},{"line_number":351,"context_line":"                    self._add_interface_routing_rule_to_router_ns(port)"},{"line_number":352,"context_line":"                    self._add_interface_route_to_fip_ns(port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_e6490bb9","line":349,"range":{"start_line":349,"start_character":16,"end_line":349,"end_character":24},"updated":"2016-09-01 01:41:55.000000000","message":"too much indention?","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c375664ed597617d1be4b9118377b984ae19ca5b","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                scope_match \u003d ("},{"line_number":347,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":348,"context_line":"                self._add_rtr_to_fip_link_default_gateway("},{"line_number":349,"context_line":"                        ex_gw_port, scope_match)"},{"line_number":350,"context_line":"                if scope_match:"},{"line_number":351,"context_line":"                    self._add_interface_routing_rule_to_router_ns(port)"},{"line_number":352,"context_line":"                    self._add_interface_route_to_fip_ns(port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_bb38cbd4","line":349,"range":{"start_line":349,"start_character":16,"end_line":349,"end_character":24},"in_reply_to":"fa7ab95a_e6490bb9","updated":"2016-09-01 17:02:51.000000000","message":"Done","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dc04e4eeeb942b773b666d9c63b01d253c541edf","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def disable_snat_redirect_rules(self, ex_gw_port):"},{"line_number":423,"context_line":"        for p in self.internal_ports:"},{"line_number":424,"context_line":"            scope_match \u003d self._check_if_address_scopes_match("},{"line_number":425,"context_line":"                p, ex_gw_port)"},{"line_number":426,"context_line":"            if not scope_match:"},{"line_number":427,"context_line":"                gateway \u003d self.get_snat_port_for_internal_port("},{"line_number":428,"context_line":"                    p, self.snat_ports)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_88184d77","line":425,"range":{"start_line":424,"start_character":0,"end_line":425,"end_character":30},"updated":"2016-09-01 01:41:55.000000000","message":"nit: can this be fit in one line just like line 414?","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c375664ed597617d1be4b9118377b984ae19ca5b","unresolved":false,"context_lines":[{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    def disable_snat_redirect_rules(self, ex_gw_port):"},{"line_number":423,"context_line":"        for p in self.internal_ports:"},{"line_number":424,"context_line":"            scope_match \u003d self._check_if_address_scopes_match("},{"line_number":425,"context_line":"                p, ex_gw_port)"},{"line_number":426,"context_line":"            if not scope_match:"},{"line_number":427,"context_line":"                gateway \u003d self.get_snat_port_for_internal_port("},{"line_number":428,"context_line":"                    p, self.snat_ports)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_9b3b07d1","line":425,"range":{"start_line":424,"start_character":0,"end_line":425,"end_character":30},"in_reply_to":"fa7ab95a_88184d77","updated":"2016-09-01 17:02:51.000000000","message":"Done","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dc04e4eeeb942b773b666d9c63b01d253c541edf","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":522,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":523,"context_line":"            if (v4_scope and"},{"line_number":524,"context_line":"                (v4_scope in ext_port_addr_scopes.values())):"},{"line_number":525,"context_line":"                scope_match \u003d True"},{"line_number":526,"context_line":"        else:"},{"line_number":527,"context_line":"            v6_scope \u003d int_port_addr_scopes.get("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_e87b9979","line":524,"range":{"start_line":524,"start_character":16,"end_line":524,"end_character":17},"updated":"2016-09-01 01:41:55.000000000","message":"nit: this parenthesis is not required.","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c375664ed597617d1be4b9118377b984ae19ca5b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":522,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":523,"context_line":"            if (v4_scope and"},{"line_number":524,"context_line":"                (v4_scope in ext_port_addr_scopes.values())):"},{"line_number":525,"context_line":"                scope_match \u003d True"},{"line_number":526,"context_line":"        else:"},{"line_number":527,"context_line":"            v6_scope \u003d int_port_addr_scopes.get("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_7b7003a5","line":524,"range":{"start_line":524,"start_character":16,"end_line":524,"end_character":17},"in_reply_to":"fa7ab95a_e87b9979","updated":"2016-09-01 17:02:51.000000000","message":"Done","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dc04e4eeeb942b773b666d9c63b01d253c541edf","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            v6_scope \u003d int_port_addr_scopes.get("},{"line_number":528,"context_line":"                str(lib_constants.IP_VERSION_6))"},{"line_number":529,"context_line":"            if (v6_scope and"},{"line_number":530,"context_line":"                (v6_scope in ext_port_addr_scopes.values())):"},{"line_number":531,"context_line":"                scope_match \u003d True"},{"line_number":532,"context_line":"        return scope_match"},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_087fdd66","line":530,"range":{"start_line":530,"start_character":16,"end_line":530,"end_character":17},"updated":"2016-09-01 01:41:55.000000000","message":"nit: this parenthesis is not required.","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c375664ed597617d1be4b9118377b984ae19ca5b","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            v6_scope \u003d int_port_addr_scopes.get("},{"line_number":528,"context_line":"                str(lib_constants.IP_VERSION_6))"},{"line_number":529,"context_line":"            if (v6_scope and"},{"line_number":530,"context_line":"                (v6_scope in ext_port_addr_scopes.values())):"},{"line_number":531,"context_line":"                scope_match \u003d True"},{"line_number":532,"context_line":"        return scope_match"},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_fb5c131b","line":530,"range":{"start_line":530,"start_character":16,"end_line":530,"end_character":17},"in_reply_to":"fa7ab95a_087fdd66","updated":"2016-09-01 17:02:51.000000000","message":"Done","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dc04e4eeeb942b773b666d9c63b01d253c541edf","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        if not device.exists():"},{"line_number":588,"context_line":"            return"},{"line_number":589,"context_line":"        if scope_match:"},{"line_number":590,"context_line":"            # add default route in table main"},{"line_number":591,"context_line":"            if not self.default_fast_path_route:"},{"line_number":592,"context_line":"                device.route.add_gateway(str(fip_2_rtr_ip),"},{"line_number":593,"context_line":"                                         table\u003ddvr_fip_ns.FAST_RT_TBL)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_08127d09","line":590,"range":{"start_line":590,"start_character":35,"end_line":590,"end_character":45},"updated":"2016-09-01 01:41:55.000000000","message":"Is this still table main?","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c375664ed597617d1be4b9118377b984ae19ca5b","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        if not device.exists():"},{"line_number":588,"context_line":"            return"},{"line_number":589,"context_line":"        if scope_match:"},{"line_number":590,"context_line":"            # add default route in table main"},{"line_number":591,"context_line":"            if not self.default_fast_path_route:"},{"line_number":592,"context_line":"                device.route.add_gateway(str(fip_2_rtr_ip),"},{"line_number":593,"context_line":"                                         table\u003ddvr_fip_ns.FAST_RT_TBL)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_3b3d9b8f","line":590,"range":{"start_line":590,"start_character":35,"end_line":590,"end_character":45},"in_reply_to":"fa7ab95a_08127d09","updated":"2016-09-01 17:02:51.000000000","message":"Done","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"dc04e4eeeb942b773b666d9c63b01d253c541edf","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        self._add_rtr_to_fip_link_default_gateway("},{"line_number":610,"context_line":"            ex_gw_port, scope_match)"},{"line_number":611,"context_line":"        for port in self.internal_ports:"},{"line_number":612,"context_line":"            scope_match \u003d self._check_if_address_scopes_match("},{"line_number":613,"context_line":"                port, ex_gw_port)"},{"line_number":614,"context_line":"            if scope_match:"},{"line_number":615,"context_line":"                self._add_interface_routing_rule_to_router_ns(port)"},{"line_number":616,"context_line":"                self._add_interface_route_to_fip_ns(port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_48e2c502","line":613,"range":{"start_line":612,"start_character":0,"end_line":613,"end_character":33},"updated":"2016-09-01 01:41:55.000000000","message":"I think this can be merged with line 604. You don\u0027t need to iterate internal_ports twice in this method.","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c375664ed597617d1be4b9118377b984ae19ca5b","unresolved":false,"context_lines":[{"line_number":609,"context_line":"        self._add_rtr_to_fip_link_default_gateway("},{"line_number":610,"context_line":"            ex_gw_port, scope_match)"},{"line_number":611,"context_line":"        for port in self.internal_ports:"},{"line_number":612,"context_line":"            scope_match \u003d self._check_if_address_scopes_match("},{"line_number":613,"context_line":"                port, ex_gw_port)"},{"line_number":614,"context_line":"            if scope_match:"},{"line_number":615,"context_line":"                self._add_interface_routing_rule_to_router_ns(port)"},{"line_number":616,"context_line":"                self._add_interface_route_to_fip_ns(port)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa7ab95a_bbcc4b8a","line":613,"range":{"start_line":612,"start_character":0,"end_line":613,"end_character":33},"in_reply_to":"fa7ab95a_48e2c502","updated":"2016-09-01 17:02:51.000000000","message":"Done","commit_id":"3f985cc45343dd997da63898f6ca24447f5fdd69"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"83d73048ff40b01eef93b26a91c0fad8f7407b1e","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        # entries for the dvr services ports into the router"},{"line_number":362,"context_line":"        # namespace. This does not have dependency on the"},{"line_number":363,"context_line":"        # external_gateway port or the agent_mode."},{"line_number":364,"context_line":"        ex_gw_port \u003d self.get_ex_gw_port()"},{"line_number":365,"context_line":"        for subnet in port[\u0027subnets\u0027]:"},{"line_number":366,"context_line":"            self._set_subnet_arp_info(subnet[\u0027id\u0027])"},{"line_number":367,"context_line":"            if ex_gw_port:"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_5c7d51e6","line":364,"updated":"2016-10-18 08:32:56.000000000","message":"this is a bit odd as each subnet may have a external gateway port","commit_id":"ab159bc5dcc4c91777ce0dc4200c4f7165d88b22"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b03e3029e96653ba72d2122faecb6656a0c9e3ea","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def internal_network_added(self, port):"},{"line_number":358,"context_line":"        super(DvrLocalRouter, self).internal_network_added(port)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # NOTE: The following function _set_subnet_arp_info"},{"line_number":361,"context_line":"        # should be called to dynamically populate the arp"},{"line_number":362,"context_line":"        # entries for the dvr services ports into the router"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_3effd135","side":"PARENT","line":359,"updated":"2016-10-26 08:22:01.000000000","message":"nit: Avoid unrelated changes.","commit_id":"f7b1b95e5df675c7a396281f1069fa26dc6b75ee"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7c8a55236e3069c3c1f102f013354b3f34b4bcf6","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"    def internal_network_added(self, port):"},{"line_number":358,"context_line":"        super(DvrLocalRouter, self).internal_network_added(port)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        # NOTE: The following function _set_subnet_arp_info"},{"line_number":361,"context_line":"        # should be called to dynamically populate the arp"},{"line_number":362,"context_line":"        # entries for the dvr services ports into the router"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_9fc44541","side":"PARENT","line":359,"in_reply_to":"ba5da102_3effd135","updated":"2016-10-26 23:24:23.000000000","message":"will fix it.","commit_id":"f7b1b95e5df675c7a396281f1069fa26dc6b75ee"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b03e3029e96653ba72d2122faecb6656a0c9e3ea","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        scope_match \u003d False"},{"line_number":550,"context_line":"        int_port_addr_scopes \u003d int_port.get(\u0027address_scopes\u0027, {})"},{"line_number":551,"context_line":"        ext_port_addr_scopes \u003d ex_gw_port.get(\u0027address_scopes\u0027, {})"},{"line_number":552,"context_line":"        if not self._port_has_ipv6_subnet(int_port):"},{"line_number":553,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":554,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":555,"context_line":"            if (v4_scope and"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_012550aa","line":552,"range":{"start_line":552,"start_character":42,"end_line":552,"end_character":50},"updated":"2016-10-26 08:22:01.000000000","message":"I\u0027m always confused about this. But, I think that there is a possibility that the internal router port with ipv6 addresses can also have an ipv4 address. Do you know off the top of your head if this is true? If it is, I don\u0027t think that this method works quite right.\n\nThe documentation for the router API doesn\u0027t really spell this out well enough. Maybe I should figure this out and update the documentation to make it clearer. [1]\n\n[1] http://developer.openstack.org/api-ref/networking/v2/index.html?expanded\u003dadd-interface-to-router-detail","commit_id":"1a3d8fc055f7c374dc093046f182836dce0f7fd3"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"7c8a55236e3069c3c1f102f013354b3f34b4bcf6","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        scope_match \u003d False"},{"line_number":550,"context_line":"        int_port_addr_scopes \u003d int_port.get(\u0027address_scopes\u0027, {})"},{"line_number":551,"context_line":"        ext_port_addr_scopes \u003d ex_gw_port.get(\u0027address_scopes\u0027, {})"},{"line_number":552,"context_line":"        if not self._port_has_ipv6_subnet(int_port):"},{"line_number":553,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":554,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":555,"context_line":"            if (v4_scope and"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_3fec19c7","line":552,"range":{"start_line":552,"start_character":42,"end_line":552,"end_character":50},"in_reply_to":"ba5da102_012550aa","updated":"2016-10-26 23:24:23.000000000","message":"yes will check this out. I need to setup my router interface with dual ipv4 and ipv6 and see how it behaves.","commit_id":"1a3d8fc055f7c374dc093046f182836dce0f7fd3"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"91bdf625ca6bc3783eacca77b5f419dee4d7191f","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        scope_match \u003d False"},{"line_number":550,"context_line":"        int_port_addr_scopes \u003d int_port.get(\u0027address_scopes\u0027, {})"},{"line_number":551,"context_line":"        ext_port_addr_scopes \u003d ex_gw_port.get(\u0027address_scopes\u0027, {})"},{"line_number":552,"context_line":"        if not self._port_has_ipv6_subnet(int_port):"},{"line_number":553,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":554,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":555,"context_line":"            if (v4_scope and"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5da102_8a9eb054","line":552,"range":{"start_line":552,"start_character":42,"end_line":552,"end_character":50},"in_reply_to":"ba5da102_3fec19c7","updated":"2016-10-27 16:29:46.000000000","message":"Carl just to clarify, I thought that we only support dual stack in the external networks ports and not in the internal router ports.\nCan you confirm? If that is the case, then we can have check for both IPv4 and IPv6 address on the ports. If not we should be ok.","commit_id":"1a3d8fc055f7c374dc093046f182836dce0f7fd3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab78d60652e619cdf5ae5e7822559bd72e3f3537","unresolved":false,"context_lines":[{"line_number":369,"context_line":"                # Check for address_scopes here if gateway exists."},{"line_number":370,"context_line":"                scope_match \u003d ("},{"line_number":371,"context_line":"                    self._check_if_address_scopes_match(port, ex_gw_port))"},{"line_number":372,"context_line":"                if scope_match:"},{"line_number":373,"context_line":"                    self._add_interface_routing_rule_to_router_ns(port)"},{"line_number":374,"context_line":"                    self._add_interface_route_to_fip_ns(port)"},{"line_number":375,"context_line":"        self._snat_redirect_add_from_port(port)"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a77a97e_c94785ba","line":372,"updated":"2016-11-17 02:21:41.000000000","message":"Since you\u0027re not using scope_match again, this can just be \u0027if self_check_if...()\u0027.  Same comment below.","commit_id":"ceb1b0a9e7906bdce3d19194de2450fd261c60c7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab78d60652e619cdf5ae5e7822559bd72e3f3537","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        rtr_2_fip, fip_2_rtr \u003d self.rtr_fip_subnet.get_pair()"},{"line_number":611,"context_line":"        fip_2_rtr_name \u003d self.fip_ns.get_int_device_name(self.router_id)"},{"line_number":612,"context_line":"        rtr_2_fip_name \u003d self.fip_ns.get_rtr_ext_device_name(self.router_id)"},{"line_number":613,"context_line":"        return rtr_2_fip.ip, fip_2_rtr.ip, fip_2_rtr_name, rtr_2_fip_name"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def set_address_scope_interface_routes(self, ex_gw_port):"},{"line_number":616,"context_line":"        \"\"\"Sets routing rules for router interfaces if addr scopes match.\"\"\""}],"source_content_type":"text/x-python","patch_set":29,"id":"7a77a97e_091a5d7d","line":613,"updated":"2016-11-17 02:21:41.000000000","message":"Seems only two of the return values here are ever used, so maybe we can just return them?","commit_id":"ceb1b0a9e7906bdce3d19194de2450fd261c60c7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab78d60652e619cdf5ae5e7822559bd72e3f3537","unresolved":false,"context_lines":[{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def set_address_scope_interface_routes(self, ex_gw_port):"},{"line_number":616,"context_line":"        \"\"\"Sets routing rules for router interfaces if addr scopes match.\"\"\""},{"line_number":617,"context_line":"        scope_match \u003d False"},{"line_number":618,"context_line":"        for port in self.internal_ports:"},{"line_number":619,"context_line":"            scope_match \u003d self._check_if_address_scopes_match("},{"line_number":620,"context_line":"                port, ex_gw_port)"}],"source_content_type":"text/x-python","patch_set":29,"id":"7a77a97e_29ce392e","line":617,"updated":"2016-11-17 02:21:41.000000000","message":"leftover code ?","commit_id":"ceb1b0a9e7906bdce3d19194de2450fd261c60c7"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b68ac7aca24a99c560fc4380b8c8cfad65c72914","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                    p, self.snat_ports)"},{"line_number":440,"context_line":"                if not gateway:"},{"line_number":441,"context_line":"                    continue"},{"line_number":442,"context_line":"                internal_interface \u003d self.get_internal_device_name(p[\u0027id\u0027])"},{"line_number":443,"context_line":"                self._snat_redirect_remove(gateway, p, internal_interface)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def external_gateway_added(self, ex_gw_port, interface_name):"}],"source_content_type":"text/x-python","patch_set":41,"id":"ffe62b97_753f1525","line":442,"range":{"start_line":442,"start_character":16,"end_line":442,"end_character":34},"updated":"2017-03-27 19:12:48.000000000","message":"nit: name here and L432 are different, but code is pretty much the same.  Can fix in follow-on since original code did this too.","commit_id":"9bf2b31a9257e5160710602cfd3d3a8bef9ff90d"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"34dc8a21154eb7154b683c8a95d388e81abec1dc","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        if not self._port_has_ipv6_subnet(int_port):"},{"line_number":544,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":545,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":546,"context_line":"            if (v4_scope and"},{"line_number":547,"context_line":"                v4_scope in ext_port_addr_scopes.values()):"},{"line_number":548,"context_line":"                scope_match \u003d True"},{"line_number":549,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":44,"id":"7ffa3b31_b1dce674","line":546,"updated":"2017-04-16 06:49:34.000000000","message":"this logic is the same between v4 and v6. This function can be shortened up\n\n\ndef _check_if...\n    int_port_addr_scopes \u003d int_port.get(\u0027...\n    ext_port_addr_scopes \u003d ex_gw_port.get(\u0027...\n    key \u003d (lib_constants.IP_VERSION_6 if self._port_has_ipv6_subnet(int_port)\n           else lib_constants.IP_VERSION_4)\n    if int_port_addr_scopes.get(str(key)) in ext_port_addr_scopes.values():\n        return True\n    return False","commit_id":"d66dadc0df3cfcfc51a293e0b323118b7795a165"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"20f68d4fb36899a2c4bf9bd5c456746dccd48c69","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        if not self._port_has_ipv6_subnet(int_port):"},{"line_number":544,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":545,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":546,"context_line":"            if (v4_scope and"},{"line_number":547,"context_line":"                v4_scope in ext_port_addr_scopes.values()):"},{"line_number":548,"context_line":"                scope_match \u003d True"},{"line_number":549,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":44,"id":"7ffa3b31_a694918c","line":546,"in_reply_to":"7ffa3b31_b1dce674","updated":"2017-04-17 17:57:21.000000000","message":"Done","commit_id":"d66dadc0df3cfcfc51a293e0b323118b7795a165"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"140b0270119a5c7e8a3ff3fe72231561ba08b206","unresolved":false,"context_lines":[{"line_number":543,"context_line":"        if not self._port_has_ipv6_subnet(int_port):"},{"line_number":544,"context_line":"            v4_scope \u003d int_port_addr_scopes.get("},{"line_number":545,"context_line":"                str(lib_constants.IP_VERSION_4))"},{"line_number":546,"context_line":"            if (v4_scope and"},{"line_number":547,"context_line":"                v4_scope in ext_port_addr_scopes.values()):"},{"line_number":548,"context_line":"                scope_match \u003d True"},{"line_number":549,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":44,"id":"7ffa3b31_f05ed3e4","line":546,"in_reply_to":"7ffa3b31_b1dce674","updated":"2017-04-17 16:59:35.000000000","message":"Let me check and will update if required.","commit_id":"d66dadc0df3cfcfc51a293e0b323118b7795a165"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1f45c95cc8bd55411e0ddff9e3b18a52a8246516","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        if not device.exists():"},{"line_number":564,"context_line":"            return"},{"line_number":565,"context_line":"        for subnet in router_port[\u0027subnets\u0027]:"},{"line_number":566,"context_line":"            rtr_port_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":567,"context_line":"            device.route.add_route(rtr_port_cidr, str(rtr_2_fip_ip))"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def _add_interface_routing_rule_to_router_ns(self, router_port):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_cc985e76","line":566,"updated":"2017-04-21 07:43:40.000000000","message":"trying to add a v4 route to a v6 interface here:\n\nhttp://paste.openstack.org/show/607441/","commit_id":"140e344da06f1e74fb121d7c5a43b61ff15bcc89"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"6a040409e76f03bba6d9b36aa7cf2659a9cfb97d","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        if not device.exists():"},{"line_number":564,"context_line":"            return"},{"line_number":565,"context_line":"        for subnet in router_port[\u0027subnets\u0027]:"},{"line_number":566,"context_line":"            rtr_port_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":567,"context_line":"            device.route.add_route(rtr_port_cidr, str(rtr_2_fip_ip))"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def _add_interface_routing_rule_to_router_ns(self, router_port):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_52097993","line":566,"in_reply_to":"7ffa3b31_cc985e76","updated":"2017-04-21 16:20:32.000000000","message":"Yes at present we don\u0027t support IPv6 on the fip namespace.\nIt is only IPv4.\nSo if we have an IPv6 address probably we should ignore it or else, we should add in the IPv6 link local address for the rfp and fpr ports.\nWhich one do you prefer?","commit_id":"140e344da06f1e74fb121d7c5a43b61ff15bcc89"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a98122a0cbeb578369289dfd71c80b4201361b57","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        if not device.exists():"},{"line_number":564,"context_line":"            return"},{"line_number":565,"context_line":"        for subnet in router_port[\u0027subnets\u0027]:"},{"line_number":566,"context_line":"            rtr_port_cidr \u003d subnet[\u0027cidr\u0027]"},{"line_number":567,"context_line":"            device.route.add_route(rtr_port_cidr, str(rtr_2_fip_ip))"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def _add_interface_routing_rule_to_router_ns(self, router_port):"}],"source_content_type":"text/x-python","patch_set":45,"id":"7ffa3b31_d297c947","line":566,"in_reply_to":"7ffa3b31_cc985e76","updated":"2017-04-21 16:15:17.000000000","message":"will take a look at it.","commit_id":"140e344da06f1e74fb121d7c5a43b61ff15bcc89"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"bbc5e6233349f56330b7fb5e6fb00fa9869896de","unresolved":false,"context_lines":[{"line_number":544,"context_line":"        # NOTE: DVR does not support IPv6 for the floating namespace yet, so"},{"line_number":545,"context_line":"        # until we fix it, we probably should use the snat redirect path for"},{"line_number":546,"context_line":"        # the ports that have IPv6 address configured."},{"line_number":547,"context_line":"        if ((key !\u003d lib_constants.IP_VERSION_6) and"},{"line_number":548,"context_line":"            int_port_addr_scopes.get(str(key)) in"},{"line_number":549,"context_line":"            ext_port_addr_scopes.values()):"},{"line_number":550,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":46,"id":"5ff73747_0ab48c34","line":547,"updated":"2017-05-03 03:23:21.000000000","message":"nit: from L541 to here could have been simplified into a single \u0027if not self._port_has_ipv6_subnet()\u0027 but I\u0027m fine with this since we can hopefully eventually support IPv6 and would just have to add it back.","commit_id":"fb2093c3655ecd15f48e841c0fc6f9ccb7697a34"}],"neutron/tests/functional/agent/l3/test_dvr_router.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b68ac7aca24a99c560fc4380b8c8cfad65c72914","unresolved":false,"context_lines":[{"line_number":1267,"context_line":"        actual_routes \u003d fpr_device.route.list_routes("},{"line_number":1268,"context_line":"                ip_version\u003dlib_constants.IP_VERSION_4, table\u003d\u0027main\u0027,"},{"line_number":1269,"context_line":"                via\u003dstr(rtr_2_fip.ip))"},{"line_number":1270,"context_line":"        if address_scopes \u003d\u003d \u0027mismatch\u0027:"},{"line_number":1271,"context_line":"            self.assertEqual([], actual_routes)"},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"        if address_scopes \u003d\u003d \u0027match\u0027:"}],"source_content_type":"text/x-python","patch_set":41,"id":"ffe62b97_3092bb9f","line":1270,"updated":"2017-03-27 19:12:48.000000000","message":"I think instead of passing strings to indicate match/mismatch, should just use a boolean, like scope_match\u003dTrue or some such.","commit_id":"9bf2b31a9257e5160710602cfd3d3a8bef9ff90d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b68ac7aca24a99c560fc4380b8c8cfad65c72914","unresolved":false,"context_lines":[{"line_number":1270,"context_line":"        if address_scopes \u003d\u003d \u0027mismatch\u0027:"},{"line_number":1271,"context_line":"            self.assertEqual([], actual_routes)"},{"line_number":1272,"context_line":""},{"line_number":1273,"context_line":"        if address_scopes \u003d\u003d \u0027match\u0027:"},{"line_number":1274,"context_line":"            cidr1 \u003d ("},{"line_number":1275,"context_line":"                str(fixed_ips_1[0][\u0027ip_address\u0027]) +"},{"line_number":1276,"context_line":"                \u0027/\u0027 + str(fixed_ips_1[0][\u0027prefixlen\u0027]))"}],"source_content_type":"text/x-python","patch_set":41,"id":"ffe62b97_10e21730","line":1273,"updated":"2017-03-27 19:12:48.000000000","message":"Can be \u0027else\u0027 to L1270","commit_id":"9bf2b31a9257e5160710602cfd3d3a8bef9ff90d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b68ac7aca24a99c560fc4380b8c8cfad65c72914","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"            self.assertFalse(fpr_device.exists())"},{"line_number":1318,"context_line":"            self.assertTrue(self._namespace_exists(router_updated.ns_name))"},{"line_number":1319,"context_line":"            self._assert_fip_namespace_deleted("},{"line_number":1320,"context_line":"                agent_gw_port, assert_ovs_interface\u003dFalse)"},{"line_number":1321,"context_line":"            ns_ipr \u003d ip_lib.IPRule(namespace\u003drouter_updated.ns_name)"},{"line_number":1322,"context_line":"            ip4_rules_list \u003d ns_ipr.rule.list_rules(lib_constants.IP_VERSION_4)"},{"line_number":1323,"context_line":"            ip6_rules_list \u003d ns_ipr.rule.list_rules(lib_constants.IP_VERSION_6)"}],"source_content_type":"text/x-python","patch_set":41,"id":"ffe62b97_b05a4bf0","line":1320,"updated":"2017-03-27 19:12:48.000000000","message":"Looks like above in this \u0027if\u0027 is same as L1309 code, so it can be moved out from under here and be common, just leaving below which is unique to the mismatch case.","commit_id":"9bf2b31a9257e5160710602cfd3d3a8bef9ff90d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b68ac7aca24a99c560fc4380b8c8cfad65c72914","unresolved":false,"context_lines":[{"line_number":1376,"context_line":"                fip_2_rtr, rfp_device, rfp_device_name)"},{"line_number":1377,"context_line":"        if address_scopes \u003d\u003d \u0027mismatch\u0027:"},{"line_number":1378,"context_line":"            self._assert_default_gateway("},{"line_number":1379,"context_line":"                fip_2_rtr, rfp_device, rfp_device_name)"},{"line_number":1380,"context_line":""},{"line_number":1381,"context_line":"        # Check if any snat redirect rules in the router namespace exist."},{"line_number":1382,"context_line":"        ns_ipr \u003d ip_lib.IPRule(namespace\u003drouter1.ns_name)"}],"source_content_type":"text/x-python","patch_set":41,"id":"ffe62b97_50653fe0","line":1379,"updated":"2017-03-27 19:12:48.000000000","message":"This and the code at L1374 look identical, can just remove the \u0027if\u0027 and duplicate code.","commit_id":"9bf2b31a9257e5160710602cfd3d3a8bef9ff90d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b68ac7aca24a99c560fc4380b8c8cfad65c72914","unresolved":false,"context_lines":[{"line_number":1395,"context_line":"            # In the case of scop mismatch it would still have 5 rules"},{"line_number":1396,"context_line":"            # but 3 default and the 2 rules for the snat redirect."},{"line_number":1397,"context_line":"            self.assertEqual(5, len(ip4_rules_list))"},{"line_number":1398,"context_line":"            self.assertEqual(2, len(ip6_rules_list))"},{"line_number":1399,"context_line":""},{"line_number":1400,"context_line":"        # Now check the fip namespace static routes for reaching the private"},{"line_number":1401,"context_line":"        # network."}],"source_content_type":"text/x-python","patch_set":41,"id":"ffe62b97_3003dbba","line":1398,"updated":"2017-03-27 19:12:48.000000000","message":"These are the same as L1391-2 as well","commit_id":"9bf2b31a9257e5160710602cfd3d3a8bef9ff90d"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"83d73048ff40b01eef93b26a91c0fad8f7407b1e","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                               \u0027prefixlen\u0027: 24}]}"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        interface_name \u003d ri.get_internal_device_name(port[\u0027id\u0027])"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        if action \u003d\u003d \u0027add\u0027:"},{"line_number":324,"context_line":"            self.device_exists.return_value \u003d False"},{"line_number":325,"context_line":"            ri.internal_network_added(port)"}],"source_content_type":"text/x-python","patch_set":24,"id":"fa6399be_7c59358e","side":"PARENT","line":322,"updated":"2016-10-18 08:32:56.000000000","message":"this change is not necessary","commit_id":"5c6bc57d56fd68b1fd4029c5169772c15683ad32"}]}
