)]}'
{"dragonflow/controller/common/icmp_responder.py":[{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"1515e60c43e90bb32a3bfa96dff2ba41c961154b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class ICMPResponder(object):"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    A class for creating and removing ICMP responders."},{"line_number":26,"context_line":"    @param interface_ip The port\u0027s IPv4 address"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    def __init__(self, datapath, interface_ip, interface_mac,"},{"line_number":29,"context_line":"                 table_id\u003dconst.L2_LOOKUP_TABLE):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_7b81b9fa","line":26,"range":{"start_line":26,"start_character":5,"end_line":26,"end_character":10},"updated":"2016-06-25 03:14:39.000000000","message":"miss param interface_mac","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ca87d8c692480a08509f9fe5599175360b378bdf","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class ICMPResponder(object):"},{"line_number":24,"context_line":"    \"\"\""},{"line_number":25,"context_line":"    A class for creating and removing ICMP responders."},{"line_number":26,"context_line":"    @param interface_ip The port\u0027s IPv4 address"},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    def __init__(self, datapath, interface_ip, interface_mac,"},{"line_number":29,"context_line":"                 table_id\u003dconst.L2_LOOKUP_TABLE):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_e5545555","line":26,"range":{"start_line":26,"start_character":5,"end_line":26,"end_character":10},"in_reply_to":"3aaa91ec_7b81b9fa","updated":"2016-06-29 03:27:07.000000000","message":"Done","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"313abb3f7d0e8ae7f360fb6912af8a09fab25a77","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":37,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":38,"context_line":"                                ip_proto\u003din_proto.IPPROTO_ICMP,"},{"line_number":39,"context_line":"                                ipv4_dst\u003dself.interface_ip,"},{"line_number":40,"context_line":"                                icmpv4_type\u003dicmp.ICMP_ECHO_REQUEST)"},{"line_number":41,"context_line":"        return match"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_611e4e60","line":39,"range":{"start_line":39,"start_character":58,"end_line":39,"end_character":59},"updated":"2016-06-24 11:44:38.000000000","message":"If this match should contain the metadata of which value is the network_id of this router interface? Because IP addresses in different networks may be conflict to each other, and the reply to a port in a different network should have its own gateway mac address as eth_src than self.interface_mac.","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"1515e60c43e90bb32a3bfa96dff2ba41c961154b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":37,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":38,"context_line":"                                ip_proto\u003din_proto.IPPROTO_ICMP,"},{"line_number":39,"context_line":"                                ipv4_dst\u003dself.interface_ip,"},{"line_number":40,"context_line":"                                icmpv4_type\u003dicmp.ICMP_ECHO_REQUEST)"},{"line_number":41,"context_line":"        return match"},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_5b84bd09","line":39,"range":{"start_line":39,"start_character":58,"end_line":39,"end_character":59},"in_reply_to":"3aaa91ec_611e4e60","updated":"2016-06-25 03:14:39.000000000","message":"+1","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"}],"dragonflow/tests/fullstack/test_responder.py":[{"author":{"_account_id":20297,"name":"duankebo","email":"duankebo@huawei.com","username":"duankebo"},"change_message_id":"1515e60c43e90bb32a3bfa96dff2ba41c961154b","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            \u0027enable_dhcp\u0027: True}"},{"line_number":153,"context_line":"        subnet_id \u003d subnet_obj.create(subnet)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vm \u003d self.store(objects.VMTestObj(self, self.neutron))"},{"line_number":156,"context_line":"        vm.create(network\u003dnetwork)"},{"line_number":157,"context_line":"        ip \u003d vm.get_first_ipv4()"},{"line_number":158,"context_line":"        self.assertIsNotNone(ip)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_fbc3e935","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":10},"updated":"2016-06-25 03:14:39.000000000","message":"I think it\u0027s not necessary to create this vm.","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"0cc41941d91786db18cea9217436cc6dbf7e1ab3","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            \u0027enable_dhcp\u0027: True}"},{"line_number":153,"context_line":"        subnet_id \u003d subnet_obj.create(subnet)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vm \u003d self.store(objects.VMTestObj(self, self.neutron))"},{"line_number":156,"context_line":"        vm.create(network\u003dnetwork)"},{"line_number":157,"context_line":"        ip \u003d vm.get_first_ipv4()"},{"line_number":158,"context_line":"        self.assertIsNotNone(ip)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_c0bb6c74","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":10},"in_reply_to":"3aaa91ec_c8685024","updated":"2016-07-02 06:56:07.000000000","message":"If VM is not created, the related flows are not installed (I guess it is because the VM is the first instance in that network/router). Do you have any suggestions?","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b9d63aa6f3332d20fd953cbdf49e1286374b846f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            \u0027enable_dhcp\u0027: True}"},{"line_number":153,"context_line":"        subnet_id \u003d subnet_obj.create(subnet)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        vm \u003d self.store(objects.VMTestObj(self, self.neutron))"},{"line_number":156,"context_line":"        vm.create(network\u003dnetwork)"},{"line_number":157,"context_line":"        ip \u003d vm.get_first_ipv4()"},{"line_number":158,"context_line":"        self.assertIsNotNone(ip)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_c8685024","line":155,"range":{"start_line":155,"start_character":8,"end_line":155,"end_character":10},"in_reply_to":"3aaa91ec_fbc3e935","updated":"2016-06-29 03:34:17.000000000","message":"Done","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":9044,"name":"Will","email":"wangjian.ika@bytedance.com","username":"Will"},"change_message_id":"a6797f12cde761b267fabdaad5e11406e3591474","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        self.assertIsNotNone("},{"line_number":185,"context_line":"            self._find_icmp_responder_flow_by_ip(flows_delta, router_ip)"},{"line_number":186,"context_line":"        )"},{"line_number":187,"context_line":"        condition \u003d lambda: self._check_icmp_flow_removal(router_ip)"},{"line_number":188,"context_line":"        try:"},{"line_number":189,"context_line":"            utils.wait_until_true("},{"line_number":190,"context_line":"                condition, timeout\u003d40, sleep\u003d1,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_d354ffca","line":187,"range":{"start_line":187,"start_character":20,"end_line":187,"end_character":68},"updated":"2016-06-27 02:14:39.000000000","message":"remove lambda","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"ca87d8c692480a08509f9fe5599175360b378bdf","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        self.assertIsNotNone("},{"line_number":185,"context_line":"            self._find_icmp_responder_flow_by_ip(flows_delta, router_ip)"},{"line_number":186,"context_line":"        )"},{"line_number":187,"context_line":"        condition \u003d lambda: self._check_icmp_flow_removal(router_ip)"},{"line_number":188,"context_line":"        try:"},{"line_number":189,"context_line":"            utils.wait_until_true("},{"line_number":190,"context_line":"                condition, timeout\u003d40, sleep\u003d1,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3aaa91ec_451ba980","line":187,"range":{"start_line":187,"start_character":20,"end_line":187,"end_character":68},"in_reply_to":"3aaa91ec_d354ffca","updated":"2016-06-29 03:27:07.000000000","message":"when removing lambda, i think \u0027condition\u0027 will be a boolean variable. Otherwise, condition is a function pointer.","commit_id":"6205910919283fa69e616736f6d18e61d3f1dc5a"}]}
