)]}'
{"dragonflow/controller/common/icmp_error_generator.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f81b41dcf97017de25c3f23576d7f2ecc801c1fd","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        data_len +\u003d 1"},{"line_number":52,"context_line":"        ip_datagram +\u003d bytearray([0] * (4 - length_modulus))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    if icmp_type \u003d\u003d icmp.ICMP_DEST_UNREACH:"},{"line_number":55,"context_line":"        icmp_data \u003d icmp.dest_unreach(data_len\u003ddata_len, data\u003dip_datagram)"},{"line_number":56,"context_line":"    elif icmp_type \u003d\u003d icmp.ICMP_TIME_EXCEEDED:"},{"line_number":57,"context_line":"        icmp_data \u003d icmp.TimeExceeded(data_len\u003ddata_len, data\u003dip_datagram)"},{"line_number":58,"context_line":"    else:"},{"line_number":59,"context_line":"        icmp_data \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    ic_pkt \u003d icmp.icmp(icmp_type, icmp_code, 0, data\u003dicmp_data)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_cddc471b","line":59,"range":{"start_line":54,"start_character":0,"end_line":59,"end_character":24},"updated":"2017-02-10 09:09:10.000000000","message":"Maybe use a mapping? Or maybe move this dispatch part to another method?","commit_id":"87317441e04d9be5ff2e1dd6f0e4cad14203d7b3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b4d67244dbd1277dc5046f7b1be494ba70dad12a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        data_len +\u003d 1"},{"line_number":52,"context_line":"        ip_datagram +\u003d bytearray([0] * (4 - length_modulus))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    if icmp_type \u003d\u003d icmp.ICMP_DEST_UNREACH:"},{"line_number":55,"context_line":"        icmp_data \u003d icmp.dest_unreach(data_len\u003ddata_len, data\u003dip_datagram)"},{"line_number":56,"context_line":"    elif icmp_type \u003d\u003d icmp.ICMP_TIME_EXCEEDED:"},{"line_number":57,"context_line":"        icmp_data \u003d icmp.TimeExceeded(data_len\u003ddata_len, data\u003dip_datagram)"},{"line_number":58,"context_line":"    else:"},{"line_number":59,"context_line":"        icmp_data \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    ic_pkt \u003d icmp.icmp(icmp_type, icmp_code, 0, data\u003dicmp_data)"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_7fb0628c","line":59,"range":{"start_line":54,"start_character":0,"end_line":59,"end_character":24},"in_reply_to":"fa31d9ce_cddc471b","updated":"2017-02-10 09:34:15.000000000","message":"Done","commit_id":"87317441e04d9be5ff2e1dd6f0e4cad14203d7b3"}],"dragonflow/controller/l3_proactive_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f81b41dcf97017de25c3f23576d7f2ecc801c1fd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        # controller will create icmp unreachable mesage. A virtual router"},{"line_number":177,"context_line":"        # interface will not be in local cache, as it doesn\u0027t have chassis"},{"line_number":178,"context_line":"        # information."},{"line_number":179,"context_line":"        lport \u003d self.db_store.get_port(router_port.get_id())"},{"line_number":180,"context_line":"        if not lport:"},{"line_number":181,"context_line":"            match \u003d self._get_router_interface_match(router_unique_key, dst_ip)"},{"line_number":182,"context_line":"            actions \u003d [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_7fddc26f","line":179,"updated":"2017-02-10 09:09:10.000000000","message":"Will there be a way (e.g. a future API) to say exactly which UDP/TCP ports are reachable on the router interface, and then locally answer non-matching ports? So that the packet won\u0027t have to travel all the way to the network node just for an ICMP packet we can generate here?","commit_id":"87317441e04d9be5ff2e1dd6f0e4cad14203d7b3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b4d67244dbd1277dc5046f7b1be494ba70dad12a","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        # controller will create icmp unreachable mesage. A virtual router"},{"line_number":177,"context_line":"        # interface will not be in local cache, as it doesn\u0027t have chassis"},{"line_number":178,"context_line":"        # information."},{"line_number":179,"context_line":"        lport \u003d self.db_store.get_port(router_port.get_id())"},{"line_number":180,"context_line":"        if not lport:"},{"line_number":181,"context_line":"            match \u003d self._get_router_interface_match(router_unique_key, dst_ip)"},{"line_number":182,"context_line":"            actions \u003d [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_62f8c5e6","line":179,"in_reply_to":"fa31d9ce_7fddc26f","updated":"2017-02-10 09:34:15.000000000","message":"We responds ICMP packet locally now(by ICMPResponder).\n\nFor other protocol, I think they are basically all unreachable. But instead of handling all packets locally(by local controller), keeping forward packets to router interface in network node has its benefit. For example, we can still access vm from router namespace.","commit_id":"87317441e04d9be5ff2e1dd6f0e4cad14203d7b3"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f81b41dcf97017de25c3f23576d7f2ecc801c1fd","unresolved":false,"context_lines":[{"line_number":630,"context_line":"    def _remove_port(self, lport):"},{"line_number":631,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":632,"context_line":"            # Let the router update process to delete flows for router"},{"line_number":633,"context_line":"            # interface."},{"line_number":634,"context_line":"            return"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        dst_ip \u003d lport.get_ip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_1f04c613","line":633,"updated":"2017-02-10 09:09:10.000000000","message":"Don\u0027t we want to change it from a physical port to a virtual port, if this happens?","commit_id":"87317441e04d9be5ff2e1dd6f0e4cad14203d7b3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"b4d67244dbd1277dc5046f7b1be494ba70dad12a","unresolved":false,"context_lines":[{"line_number":630,"context_line":"    def _remove_port(self, lport):"},{"line_number":631,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":632,"context_line":"            # Let the router update process to delete flows for router"},{"line_number":633,"context_line":"            # interface."},{"line_number":634,"context_line":"            return"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"        dst_ip \u003d lport.get_ip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa31d9ce_c20331b7","line":633,"in_reply_to":"fa31d9ce_1f04c613","updated":"2017-02-10 09:34:15.000000000","message":"If the northbound is Neutron and code hits here, the router interface is deleted from router. I think we can just delete the flow in one place. We can change to virtual port if there is such usecase in future.","commit_id":"87317441e04d9be5ff2e1dd6f0e4cad14203d7b3"}]}
