)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"229bb95c9f30a1377e14cd37a0741d358cbb3a68","unresolved":false,"context_lines":[{"line_number":10,"context_line":"should have higher priorities then l3 flows. And there should be flows"},{"line_number":11,"context_line":"to match icmp request from all subnets to router interface."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch also moves the icmp flows to L3_LOOKUP_TABLE, since they are"},{"line_number":14,"context_line":"flows for l3 network."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9f9fcf368aa61397242590b2edc1d04479811fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba5da102_3628f132","line":13,"range":{"start_line":13,"start_character":16,"end_line":13,"end_character":21},"updated":"2016-11-03 15:39:20.000000000","message":"I saw flows installed in both L2 and L3 tables. Could you please expand the commit message to match?","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"50a8ef1528f6e7d0d536828648af97ef2840658a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"should have higher priorities then l3 flows. And there should be flows"},{"line_number":11,"context_line":"to match icmp request from all subnets to router interface."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch also moves the icmp flows to L3_LOOKUP_TABLE, since they are"},{"line_number":14,"context_line":"flows for l3 network."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9f9fcf368aa61397242590b2edc1d04479811fba"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"ba5da102_3bcc4a88","line":13,"range":{"start_line":13,"start_character":16,"end_line":13,"end_character":21},"in_reply_to":"ba5da102_3628f132","updated":"2016-11-04 02:42:39.000000000","message":"Sure, will do","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"}],"dragonflow/controller/common/icmp_responder.py":[{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"1008a8772fe63a3a8cf6179b9ff51a192966493a","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                   parser.OFPActionSetField(icmpv4_type\u003dicmp.ICMP_ECHO_REPLY),"},{"line_number":58,"context_line":"                   parser.OFPActionSetField("},{"line_number":59,"context_line":"                       icmpv4_code\u003dicmp.ICMP_ECHO_REPLY_CODE),"},{"line_number":60,"context_line":"                   parser.OFPActionSetField(eth_src\u003dself.interface_mac),"},{"line_number":61,"context_line":"                   parser.OFPActionSetField(ipv4_src\u003dself.interface_ip),"},{"line_number":62,"context_line":"                   parser.OFPActionOutput(ofproto.OFPP_IN_PORT, 0)]"},{"line_number":63,"context_line":"        instructions \u003d [parser.OFPInstructionActions("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_c54eebc0","line":60,"range":{"start_line":60,"start_character":57,"end_line":60,"end_character":70},"updated":"2016-10-27 08:21:55.000000000","message":"self.dst_mac, right?","commit_id":"35e76aa6df284df7227a9bef6be2516f6ca62d91"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"80000db539a6573392477006c6d6fd9d89d80367","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                   parser.OFPActionSetField(icmpv4_type\u003dicmp.ICMP_ECHO_REPLY),"},{"line_number":58,"context_line":"                   parser.OFPActionSetField("},{"line_number":59,"context_line":"                       icmpv4_code\u003dicmp.ICMP_ECHO_REPLY_CODE),"},{"line_number":60,"context_line":"                   parser.OFPActionSetField(eth_src\u003dself.interface_mac),"},{"line_number":61,"context_line":"                   parser.OFPActionSetField(ipv4_src\u003dself.interface_ip),"},{"line_number":62,"context_line":"                   parser.OFPActionOutput(ofproto.OFPP_IN_PORT, 0)]"},{"line_number":63,"context_line":"        instructions \u003d [parser.OFPInstructionActions("}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_7cf57cc9","line":60,"range":{"start_line":60,"start_character":57,"end_line":60,"end_character":70},"in_reply_to":"ba5da102_c54eebc0","updated":"2016-10-31 06:44:33.000000000","message":"yes, you are right, the subnet gateway should forward the arp request back to the source port.","commit_id":"35e76aa6df284df7227a9bef6be2516f6ca62d91"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"229bb95c9f30a1377e14cd37a0741d358cbb3a68","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def remove(self):"},{"line_number":98,"context_line":"        ofproto \u003d self.datapath.ofproto"},{"line_number":99,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":100,"context_line":"        match \u003d self._get_dst_mac_match()"},{"line_number":101,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":102,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":103,"context_line":"                                cookie_mask\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_3670f1a3","line":100,"updated":"2016-11-03 15:39:20.000000000","message":"I think the remove function should remove exactly the added flow. Otherwise, if two ICMP responders exist for two IPs but one MAC, both flows will be removed. What do you think?\n\nMaybe what we need here is to take metadata (network/segment ID) into account.","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"eef72e04f965129913815c6d58ca7809d11042f0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def remove(self):"},{"line_number":98,"context_line":"        ofproto \u003d self.datapath.ofproto"},{"line_number":99,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":100,"context_line":"        match \u003d self._get_dst_mac_match()"},{"line_number":101,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":102,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":103,"context_line":"                                cookie_mask\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_8dc28351","line":100,"in_reply_to":"ba5da102_3670f1a3","updated":"2016-11-03 20:43:54.000000000","message":"I agree with Omer, we should match on metadata\u003d\u003cnetwork_id\u003e as well.","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"50a8ef1528f6e7d0d536828648af97ef2840658a","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    def remove(self):"},{"line_number":98,"context_line":"        ofproto \u003d self.datapath.ofproto"},{"line_number":99,"context_line":"        parser \u003d self.datapath.ofproto_parser"},{"line_number":100,"context_line":"        match \u003d self._get_dst_mac_match()"},{"line_number":101,"context_line":"        msg \u003d parser.OFPFlowMod(datapath\u003dself.datapath,"},{"line_number":102,"context_line":"                                cookie\u003dutils.set_aging_cookie_bits(0),"},{"line_number":103,"context_line":"                                cookie_mask\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_14759362","line":100,"in_reply_to":"ba5da102_8dc28351","updated":"2016-11-04 02:42:39.000000000","message":"I think the metadata will not help in the case of router interface. For router interface, the dst mac is the mac of subnet gateway. Add metadata match here will change nothing.\n\nI admit that it is a bit twist here. To make it be straight-forward I might need some code change in l3 app(s).","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"cb374bcfff83172cdb5f4bc53594f0cdc697131f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @param interface_ip The port\u0027s IPv4 address"},{"line_number":28,"context_line":"    @param dst_mac The destination MAC address of packet"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    def __init__(self, datapath, interface_ip, dst_mac,"},{"line_number":31,"context_line":"                 table_id\u003dconst.L2_LOOKUP_TABLE):"},{"line_number":32,"context_line":"        self.datapath \u003d datapath"},{"line_number":33,"context_line":"        self.interface_ip \u003d interface_ip"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_4cacdf35","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":45},"updated":"2016-11-04 08:41:36.000000000","message":"why not dst_ip?","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fad9f7d661795dcb38c7388d705fb8c21c9f2810","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    @param interface_ip The port\u0027s IPv4 address"},{"line_number":28,"context_line":"    @param dst_mac The destination MAC address of packet"},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    def __init__(self, datapath, interface_ip, dst_mac,"},{"line_number":31,"context_line":"                 table_id\u003dconst.L2_LOOKUP_TABLE):"},{"line_number":32,"context_line":"        self.datapath \u003d datapath"},{"line_number":33,"context_line":"        self.interface_ip \u003d interface_ip"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_73941044","line":30,"range":{"start_line":30,"start_character":32,"end_line":30,"end_character":45},"in_reply_to":"ba5da102_4cacdf35","updated":"2016-11-04 15:03:20.000000000","message":"interface_ip will be more appropriate here, as it is the ip of interface. dst_mac is the dst mac of the packet, which could differ.","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"}],"dragonflow/controller/l3_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"229bb95c9f30a1377e14cd37a0741d358cbb3a68","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # Add ICMP responder from every other router port to the"},{"line_number":201,"context_line":"                # new router port."},{"line_number":202,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":203,"context_line":"                    datapath, dst_ip, port.get_mac(),"},{"line_number":204,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":205,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":206,"context_line":"                # router port."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_16404d06","line":203,"updated":"2016-11-03 15:39:20.000000000","message":"Is this correct? This means the router will respond to icmp echo requests to an L2 address not on the L2 network. This is correct for L3/IP addresses, but I\u0027m not sure if for L2/MAC.","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"50a8ef1528f6e7d0d536828648af97ef2840658a","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # Add ICMP responder from every other router port to the"},{"line_number":201,"context_line":"                # new router port."},{"line_number":202,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":203,"context_line":"                    datapath, dst_ip, port.get_mac(),"},{"line_number":204,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":205,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":206,"context_line":"                # router port."}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_f4e9ff7f","line":203,"in_reply_to":"ba5da102_16404d06","updated":"2016-11-04 02:42:39.000000000","message":"Router should route the icmp request in L3 domain, and the router port should respond to the icmp echo request.\n\nIn df, we can\u0027t do the same thing as traditional router, as we could not count on the router port. The router port depends on l3 agent and l3-agent might not be started, or l3-agent will be obsoleted in future.\n\nSo, I think we should do the same thing as we did in L2_LOOKUP_TABLE, which is add icmp responder for icmp request cross subnets.\n\nThere is a small use case: in vm, I want to check the connectivity to other network through L3 router. But I don\u0027t know which IP is alive. So usually, I will ping subnet gatewsy in other subnets.  Neutron router support this scenario. I think maybe we should do the same thing, so I bring this patch out.","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"229bb95c9f30a1377e14cd37a0741d358cbb3a68","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                # router port."},{"line_number":207,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":208,"context_line":"                    datapath, port.get_ip(), mac,"},{"line_number":209,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        # If router interface IP, send to output table"},{"line_number":212,"context_line":"        if is_ipv4:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_96545dca","line":209,"updated":"2016-11-03 15:39:20.000000000","message":"+1","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"0aacfbe67a0d1e1dd763f9bb2236bd1774e0cdd7","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        if is_ipv4:"},{"line_number":189,"context_line":"            arp_responder.ArpResponder("},{"line_number":190,"context_line":"                datapath, local_network_id, dst_ip, mac).add()"},{"line_number":191,"context_line":"            icmp_responder.ICMPResponder(datapath, dst_ip, mac,"},{"line_number":192,"context_line":"                                         table_id\u003dconst.L2_LOOKUP_TABLE).add()"},{"line_number":193,"context_line":"            for port in router.get_ports():"},{"line_number":194,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_d534cbdf","line":191,"updated":"2016-11-08 03:37:47.000000000","message":"I think when a user chose to use l3_app than l3_proactive_app, we might do better to install those flows for replying icmp requests  by packet in.","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"46905d5498602e4de7714ee62e3e93a99b515c11","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        if is_ipv4:"},{"line_number":189,"context_line":"            arp_responder.ArpResponder("},{"line_number":190,"context_line":"                datapath, local_network_id, dst_ip, mac).add()"},{"line_number":191,"context_line":"            icmp_responder.ICMPResponder(datapath, dst_ip, mac,"},{"line_number":192,"context_line":"                                         table_id\u003dconst.L2_LOOKUP_TABLE).add()"},{"line_number":193,"context_line":"            for port in router.get_ports():"},{"line_number":194,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_79ff7101","line":191,"in_reply_to":"9a629dbe_d534cbdf","updated":"2016-11-08 08:59:41.000000000","message":"yeah, good point","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"cb374bcfff83172cdb5f4bc53594f0cdc697131f","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # Add ICMP responder from every other router port to the"},{"line_number":201,"context_line":"                # new router port."},{"line_number":202,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":203,"context_line":"                    datapath, dst_ip, port.get_mac(),"},{"line_number":204,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":205,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":206,"context_line":"                # router port."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_8c543722","line":203,"range":{"start_line":203,"start_character":30,"end_line":203,"end_character":52},"updated":"2016-11-04 08:41:36.000000000","message":"here should pass dst_mac and dst_ip to ICMPResponder, but you pass inconsistent mac and ip","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"fad9f7d661795dcb38c7388d705fb8c21c9f2810","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # Add ICMP responder from every other router port to the"},{"line_number":201,"context_line":"                # new router port."},{"line_number":202,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":203,"context_line":"                    datapath, dst_ip, port.get_mac(),"},{"line_number":204,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":205,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":206,"context_line":"                # router port."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_93fe0437","line":203,"range":{"start_line":203,"start_character":30,"end_line":203,"end_character":52},"in_reply_to":"ba5da102_8c543722","updated":"2016-11-04 15:03:20.000000000","message":"The L3 forward will replace the mac with current gateway(router interface), when go to nexthop. So, the vm in the subnet of every other router port should see the icmp come back from the new router port with the mac of its own gateway mac.\n\nI believe this is the right thing here, unless you provide more proof :)","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"79a5b98db01845e92ddc4b57d93ebd7125ea9caa","unresolved":false,"context_lines":[{"line_number":200,"context_line":"                # Add ICMP responder from every other router port to the"},{"line_number":201,"context_line":"                # new router port."},{"line_number":202,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":203,"context_line":"                    datapath, dst_ip, port.get_mac(),"},{"line_number":204,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":205,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":206,"context_line":"                # router port."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_0eb9db2e","line":203,"range":{"start_line":203,"start_character":30,"end_line":203,"end_character":52},"in_reply_to":"ba5da102_93fe0437","updated":"2016-11-05 08:25:50.000000000","message":"Yes, what you said is right, I thought the ICMP responder should be located after routing, what you done is before routing, either can achieves it.","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"cb374bcfff83172cdb5f4bc53594f0cdc697131f","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":206,"context_line":"                # router port."},{"line_number":207,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":208,"context_line":"                    datapath, port.get_ip(), mac,"},{"line_number":209,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        # If router interface IP, send to output table"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_cc346ffd","line":208,"range":{"start_line":208,"start_character":30,"end_line":208,"end_character":49},"updated":"2016-11-04 08:41:36.000000000","message":"ditto","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"}],"dragonflow/controller/l3_proactive_app.py":[{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"e4025cb12d52e4613d182383c95a4ff58c9842cf","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            arp_responder.ArpResponder(datapath,"},{"line_number":106,"context_line":"                                       local_network_id,"},{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            for port in router.get_ports():"},{"line_number":109,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":110,"context_line":"                    continue"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                # Add ICMP responder from every router port to the"},{"line_number":113,"context_line":"                # new router port."},{"line_number":114,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":115,"context_line":"                    datapath, dst_ip, mac, dst_mac\u003dport.get_mac(),"},{"line_number":116,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":117,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":118,"context_line":"                # router port."},{"line_number":119,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":120,"context_line":"                    datapath, port.get_ip(), port.get_mac(), dst_mac\u003dmac,"},{"line_number":121,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # If router interface IP, send to output table"},{"line_number":124,"context_line":"        if is_ipv4:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_416f4892","line":121,"range":{"start_line":108,"start_character":4,"end_line":121,"end_character":57},"updated":"2016-10-26 08:22:32.000000000","message":"Can these ping happens?","commit_id":"35e76aa6df284df7227a9bef6be2516f6ca62d91"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"a0d689673581b3d66d49ed2dfcd6e4f8f77deedb","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            arp_responder.ArpResponder(datapath,"},{"line_number":106,"context_line":"                                       local_network_id,"},{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            for port in router.get_ports():"},{"line_number":109,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":110,"context_line":"                    continue"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                # Add ICMP responder from every router port to the"},{"line_number":113,"context_line":"                # new router port."},{"line_number":114,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":115,"context_line":"                    datapath, dst_ip, mac, dst_mac\u003dport.get_mac(),"},{"line_number":116,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":117,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":118,"context_line":"                # router port."},{"line_number":119,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":120,"context_line":"                    datapath, port.get_ip(), port.get_mac(), dst_mac\u003dmac,"},{"line_number":121,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # If router interface IP, send to output table"},{"line_number":124,"context_line":"        if is_ipv4:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_5141c10a","line":121,"range":{"start_line":108,"start_character":4,"end_line":121,"end_character":57},"in_reply_to":"ba5da102_416f4892","updated":"2016-10-27 01:03:03.000000000","message":"I think so, I usually ping other network\u0027s gateway to verify if I have the connectivity to that network. Plus, since the networks are connected by router, any 2 ports under the router should have connectivity.","commit_id":"35e76aa6df284df7227a9bef6be2516f6ca62d91"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"80000db539a6573392477006c6d6fd9d89d80367","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            arp_responder.ArpResponder(datapath,"},{"line_number":106,"context_line":"                                       local_network_id,"},{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            for port in router.get_ports():"},{"line_number":109,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":110,"context_line":"                    continue"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                # Add ICMP responder from every router port to the"},{"line_number":113,"context_line":"                # new router port."},{"line_number":114,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":115,"context_line":"                    datapath, dst_ip, mac, dst_mac\u003dport.get_mac(),"},{"line_number":116,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":117,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":118,"context_line":"                # router port."},{"line_number":119,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":120,"context_line":"                    datapath, port.get_ip(), port.get_mac(), dst_mac\u003dmac,"},{"line_number":121,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # If router interface IP, send to output table"},{"line_number":124,"context_line":"        if is_ipv4:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_1cb560ed","line":121,"range":{"start_line":108,"start_character":4,"end_line":121,"end_character":57},"in_reply_to":"ba5da102_4512db63","updated":"2016-10-31 06:44:33.000000000","message":"makes sense","commit_id":"35e76aa6df284df7227a9bef6be2516f6ca62d91"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"1008a8772fe63a3a8cf6179b9ff51a192966493a","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            arp_responder.ArpResponder(datapath,"},{"line_number":106,"context_line":"                                       local_network_id,"},{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            for port in router.get_ports():"},{"line_number":109,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":110,"context_line":"                    continue"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"                # Add ICMP responder from every router port to the"},{"line_number":113,"context_line":"                # new router port."},{"line_number":114,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":115,"context_line":"                    datapath, dst_ip, mac, dst_mac\u003dport.get_mac(),"},{"line_number":116,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":117,"context_line":"                # Add ICMP responder from new router port to other"},{"line_number":118,"context_line":"                # router port."},{"line_number":119,"context_line":"                icmp_responder.ICMPResponder("},{"line_number":120,"context_line":"                    datapath, port.get_ip(), port.get_mac(), dst_mac\u003dmac,"},{"line_number":121,"context_line":"                    table_id\u003dconst.L3_LOOKUP_TABLE).add()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        # If router interface IP, send to output table"},{"line_number":124,"context_line":"        if is_ipv4:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_4512db63","line":121,"range":{"start_line":108,"start_character":4,"end_line":121,"end_character":57},"in_reply_to":"ba5da102_5141c10a","updated":"2016-10-27 08:21:55.000000000","message":"The situation is exist, and I agree you put the icmp responder flow which implement from one vm ping another network gw in L3_LOOKUP_TABLE, but I think if one vm ping its own network gw, the icmp responder flow should still be in L2_LOOKUP_TABLE","commit_id":"35e76aa6df284df7227a9bef6be2516f6ca62d91"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"229bb95c9f30a1377e14cd37a0741d358cbb3a68","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            arp_responder.ArpResponder(datapath,"},{"line_number":106,"context_line":"                                       local_network_id,"},{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            icmp_responder.ICMPResponder(datapath, dst_ip, mac,"},{"line_number":109,"context_line":"                                         table_id\u003dconst.L2_LOOKUP_TABLE).add()"},{"line_number":110,"context_line":"            for port in router.get_ports():"},{"line_number":111,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_f60af9d0","line":108,"updated":"2016-11-03 15:39:20.000000000","message":"See comments in l3_app.py","commit_id":"05d81f08c7bdab758cbd1cabcdd5b116b69c2886"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"0aacfbe67a0d1e1dd763f9bb2236bd1774e0cdd7","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            icmp_responder.ICMPResponder(datapath, dst_ip, mac,"},{"line_number":109,"context_line":"                                         table_id\u003dconst.L2_LOOKUP_TABLE).add()"},{"line_number":110,"context_line":"            for port in router.get_ports():"},{"line_number":111,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":112,"context_line":"                    continue"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_f5aaaf6f","line":110,"updated":"2016-11-08 03:37:47.000000000","message":"If there is a better choice to install those cross flows? Those flows will double the number of l3 lookup flows. If we could install flows in l3 proactive lookup table and send the modified packets back to l3 lookup table to reuse the flows?","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"46905d5498602e4de7714ee62e3e93a99b515c11","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                                       dst_ip, mac).add()"},{"line_number":108,"context_line":"            icmp_responder.ICMPResponder(datapath, dst_ip, mac,"},{"line_number":109,"context_line":"                                         table_id\u003dconst.L2_LOOKUP_TABLE).add()"},{"line_number":110,"context_line":"            for port in router.get_ports():"},{"line_number":111,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":112,"context_line":"                    continue"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_4e82e595","line":110,"in_reply_to":"9a629dbe_f5aaaf6f","updated":"2016-11-08 08:59:41.000000000","message":"Send back will not be a good option, as it may cause ryu refuse to download the flow.\n\nActually, I have report this bug to not only optimize the icmp flows, but also other l3 flow in table l3 proactive lookup.\n\nhttps://bugs.launchpad.net/dragonflow/+bug/1635509","commit_id":"19549f453dbb800b4eca19f5f3dcbf9cb0457775"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"4cc6aab3141aac8cfcb31f42b290c7f80c93c712","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            if new_port not in old_router_ports:"},{"line_number":72,"context_line":"                self._add_new_router_port(new_router, new_port)"},{"line_number":73,"context_line":"            else:"},{"line_number":74,"context_line":"                old_router_ports.remove(new_port)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for old_port in old_router_ports:"},{"line_number":77,"context_line":"            self._delete_router_port(new_router, old_port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_7d053678","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":32},"updated":"2016-12-11 12:42:36.000000000","message":"old_router_ports already has here a list of ports that should be deleted. Why you want to recheck it bellow in _delete_router_port() bellow?","commit_id":"3079d25869dab6183e2aceee9a2fca7ae1868ddf"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1aa228a32c42f840eddaba6a898a6373f4659448","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            if new_port not in old_router_ports:"},{"line_number":72,"context_line":"                self._add_new_router_port(new_router, new_port)"},{"line_number":73,"context_line":"            else:"},{"line_number":74,"context_line":"                old_router_ports.remove(new_port)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        for old_port in old_router_ports:"},{"line_number":77,"context_line":"            self._delete_router_port(new_router, old_port)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_2c6aae81","line":74,"range":{"start_line":74,"start_character":16,"end_line":74,"end_character":32},"in_reply_to":"3a71b18c_7d053678","updated":"2016-12-11 21:16:33.000000000","message":"old_router_ports here is not all the router ports that should be deleted. It is the router port that in the router of local cache. After calculation here. We can have old_router_ports to be the router ports that we want to delete. And then delete it bellow.","commit_id":"3079d25869dab6183e2aceee9a2fca7ae1868ddf"},{"author":{"_account_id":18903,"name":"Yuli","email":"stremovsky@gmail.com","username":"yuli"},"change_message_id":"4d366c7e636270bb8d679b2b37e811b10f82fd96","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            icmp_responder.ICMPResponder("},{"line_number":458,"context_line":"                self, ip, mac,"},{"line_number":459,"context_line":"                table_id\u003dconst.L2_LOOKUP_TABLE).remove()"},{"line_number":460,"context_line":"            for port in router.get_ports():"},{"line_number":461,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":462,"context_line":"                    continue"},{"line_number":463,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_9d53f216","line":460,"range":{"start_line":460,"start_character":0,"end_line":460,"end_character":43},"updated":"2016-12-11 09:42:48.000000000","message":"Why u need have this loop code here?\nYou have it in router_deleted() already","commit_id":"3079d25869dab6183e2aceee9a2fca7ae1868ddf"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f71c184b998d428fb7835cd01a3b5df0283a05f1","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            icmp_responder.ICMPResponder("},{"line_number":458,"context_line":"                self, ip, mac,"},{"line_number":459,"context_line":"                table_id\u003dconst.L2_LOOKUP_TABLE).remove()"},{"line_number":460,"context_line":"            for port in router.get_ports():"},{"line_number":461,"context_line":"                if netaddr.IPAddress(port.get_ip()).version !\u003d 4:"},{"line_number":462,"context_line":"                    continue"},{"line_number":463,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_fde866e4","line":460,"range":{"start_line":460,"start_character":0,"end_line":460,"end_character":43},"in_reply_to":"3a71b18c_9d53f216","updated":"2016-12-11 10:31:13.000000000","message":"This is to delete the icmp responder between the current being deleted router port and any other router ports. It will be used in router_deleted and router_interface_remove. The loop in router_deleted is to iterate the router ports and delete them one by one.","commit_id":"3079d25869dab6183e2aceee9a2fca7ae1868ddf"}]}
