)]}'
{"dragonflow/controller/common/constants.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"2cc3c7daea4c6c2b1f72b1347c2c3ff24c8a8d95","unresolved":false,"context_lines":[{"line_number":20,"context_line":"DHCP_TABLE \u003d 11"},{"line_number":21,"context_line":"L2_LOOKUP_TABLE \u003d 17"},{"line_number":22,"context_line":"L3_LOOKUP_TABLE \u003d 20"},{"line_number":23,"context_line":"L3_PROACTIVE_LOOKUP_TABLE \u003d 25"},{"line_number":24,"context_line":"EGRESS_TABLE \u003d 64"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Flow Priorities"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_7bdf4769","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":25},"updated":"2016-02-12 08:51:10.000000000","message":"Why not use the same L3 table and install the flows in the same way weinstalled them in the reactive solution ?","commit_id":"6027396a45bf2e7acfcb33607891a38b7f5bcd3a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"e7eb03b5523521d4e12a17e29b21d19b61f03378","unresolved":false,"context_lines":[{"line_number":20,"context_line":"DHCP_TABLE \u003d 11"},{"line_number":21,"context_line":"L2_LOOKUP_TABLE \u003d 17"},{"line_number":22,"context_line":"L3_LOOKUP_TABLE \u003d 20"},{"line_number":23,"context_line":"L3_PROACTIVE_LOOKUP_TABLE \u003d 25"},{"line_number":24,"context_line":"EGRESS_TABLE \u003d 64"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Flow Priorities"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_0dd5b51a","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":25},"in_reply_to":"3a57f1b5_7bdf4769","updated":"2016-02-12 10:48:00.000000000","message":"The first table does the routing and finds the destination network id (set metadata) according to subnets, the second is finding the destination ip in that network.\n\n1. I don\u0027t know how to do it with the same table, there are issues of finding there is an actual route first and things related to how we remove and delete router ports, the reactive solution was different and used different priorities but it had to hit the user space twice for every connection while this solution only require it once, so it should behave better in this regards actually.\n\n\n2. either way its easier to debug/look at this way and it has a better/same megaflow behaviour, also it adds a point for FWaaS if one will be needed in the future","commit_id":"6027396a45bf2e7acfcb33607891a38b7f5bcd3a"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"9fc7075710ccd1b10c20f70a69b0a8a161c6f229","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from ryu.lib.mac import haddr_to_bin"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from dragonflow._i18n import _"},{"line_number":23,"context_line":"from dragonflow.controller.common.arp_responder import ArpResponder"},{"line_number":24,"context_line":"from dragonflow.controller.common import constants as const"},{"line_number":25,"context_line":"from dragonflow.controller.df_base_app import DFlowApp"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_68f8654a","line":22,"range":{"start_line":22,"start_character":29,"end_line":22,"end_character":30},"updated":"2016-02-09 08:43:10.000000000","message":"This import does not seem to be used","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"}],"dragonflow/controller/l3_proactive_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"d8ccacf474f738ca4f445bd9b51e5eeb223ab96b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                  const.EGRESS_TABLE)"},{"line_number":41,"context_line":"        self._install_flows_on_switch_up()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def send_port_desc_stats_request(self, datapath):"},{"line_number":44,"context_line":"        ofp_parser \u003d datapath.ofproto_parser"},{"line_number":45,"context_line":"        req \u003d ofp_parser.OFPPortDescStatsRequest(datapath, 0)"},{"line_number":46,"context_line":"        datapath.send_msg(req)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def add_router_port(self, router, router_port, local_network_id):"},{"line_number":49,"context_line":"        datapath \u003d self.get_datapath()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_43881971","line":46,"range":{"start_line":43,"start_character":0,"end_line":46,"end_character":30},"updated":"2016-02-08 16:00:39.000000000","message":"I don\u0027t think you need this method. It is already implemented in DFlowApp.","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"7411def2e76e7be00c3b110926a6a6e9201f8cfb","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                  const.EGRESS_TABLE)"},{"line_number":41,"context_line":"        self._install_flows_on_switch_up()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def send_port_desc_stats_request(self, datapath):"},{"line_number":44,"context_line":"        ofp_parser \u003d datapath.ofproto_parser"},{"line_number":45,"context_line":"        req \u003d ofp_parser.OFPPortDescStatsRequest(datapath, 0)"},{"line_number":46,"context_line":"        datapath.send_msg(req)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def add_router_port(self, router, router_port, local_network_id):"},{"line_number":49,"context_line":"        datapath \u003d self.get_datapath()"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_389bc319","line":46,"range":{"start_line":43,"start_character":0,"end_line":46,"end_character":30},"in_reply_to":"5a5ae5dd_43881971","updated":"2016-02-08 18:17:03.000000000","message":"Will do","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"d8ccacf474f738ca4f445bd9b51e5eeb223ab96b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        actions \u003d []"},{"line_number":147,"context_line":"        actions.append(parser.OFPActionDecNwTtl())"},{"line_number":148,"context_line":"        actions.append(parser.OFPActionSetField(metadata\u003ddst_network_id))"},{"line_number":149,"context_line":"        actions.append(parser.OFPActionSetField(eth_src\u003ddst_router_port_mac))"},{"line_number":150,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":151,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":152,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_831a91c4","line":149,"updated":"2016-02-08 16:00:39.000000000","message":"Consider also updating the eth_dst field to the next hop.","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"85e6cd7722f7655cc757e57888e942f458d47b72","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        actions \u003d []"},{"line_number":147,"context_line":"        actions.append(parser.OFPActionDecNwTtl())"},{"line_number":148,"context_line":"        actions.append(parser.OFPActionSetField(metadata\u003ddst_network_id))"},{"line_number":149,"context_line":"        actions.append(parser.OFPActionSetField(eth_src\u003ddst_router_port_mac))"},{"line_number":150,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":151,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":152,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_67b5f82f","line":149,"in_reply_to":"5a5ae5dd_431c9069","updated":"2016-02-09 05:43:42.000000000","message":"Right. Didn\u0027t notice that :).","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"7411def2e76e7be00c3b110926a6a6e9201f8cfb","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        actions \u003d []"},{"line_number":147,"context_line":"        actions.append(parser.OFPActionDecNwTtl())"},{"line_number":148,"context_line":"        actions.append(parser.OFPActionSetField(metadata\u003ddst_network_id))"},{"line_number":149,"context_line":"        actions.append(parser.OFPActionSetField(eth_src\u003ddst_router_port_mac))"},{"line_number":150,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":151,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":152,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_431c9069","line":149,"in_reply_to":"5a5ae5dd_831a91c4","updated":"2016-02-08 18:17:03.000000000","message":"eth_dst is being set in the next table when we know the actual destination port.\n\nIf you notice carefully this already set the src mac as the MAC of the router interface we are routing to, so setting eth dst at this stage doesnt make a lot of sense (what should i set it too?)","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"9fc7075710ccd1b10c20f70a69b0a8a161c6f229","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":176,"context_line":"        match.set_metadata(local_network_id)"},{"line_number":177,"context_line":"        message \u003d parser.OFPFlowMod("},{"line_number":178,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":179,"context_line":"            cookie\u003d0,"},{"line_number":180,"context_line":"            cookie_mask\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_9cc40660","line":177,"range":{"start_line":177,"start_character":25,"end_line":177,"end_character":35},"updated":"2016-02-09 08:43:10.000000000","message":"why the function self.mod_flow(..) is not used?","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"9fc7075710ccd1b10c20f70a69b0a8a161c6f229","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":191,"context_line":"        cookie \u003d tunnel_key"},{"line_number":192,"context_line":"        message \u003d parser.OFPFlowMod("},{"line_number":193,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":194,"context_line":"            cookie\u003dcookie,"},{"line_number":195,"context_line":"            cookie_mask\u003dcookie,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_9c9ba672","line":192,"range":{"start_line":192,"start_character":25,"end_line":192,"end_character":35},"updated":"2016-02-09 08:43:10.000000000","message":"why the function self.mod_flow(..) is not used?","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"9fc7075710ccd1b10c20f70a69b0a8a161c6f229","unresolved":false,"context_lines":[{"line_number":211,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IPV6,"},{"line_number":212,"context_line":"                                    metadata\u003dlocal_network_id,"},{"line_number":213,"context_line":"                                    ipv6_dst\u003drouter_port.get_ip())"},{"line_number":214,"context_line":"        message \u003d parser.OFPFlowMod("},{"line_number":215,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":216,"context_line":"            cookie\u003d0,"},{"line_number":217,"context_line":"            cookie_mask\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_dc783e2e","line":214,"range":{"start_line":214,"start_character":25,"end_line":214,"end_character":35},"updated":"2016-02-09 08:43:10.000000000","message":"why the function self.mod_flow(..) is not used?","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":14249,"name":"Lionel Zerbib","email":"ariel.zerbib@gmail.com","username":"lionelz"},"change_message_id":"9fc7075710ccd1b10c20f70a69b0a8a161c6f229","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":288,"context_line":"                                    ipv6_dst\u003ddst_ip)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        message \u003d parser.OFPFlowMod("},{"line_number":291,"context_line":"            datapath\u003dself.get_datapath(),"},{"line_number":292,"context_line":"            cookie\u003d0,"},{"line_number":293,"context_line":"            cookie_mask\u003d0,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a5ae5dd_5c93ee4f","line":290,"range":{"start_line":290,"start_character":25,"end_line":290,"end_character":35},"updated":"2016-02-09 08:43:10.000000000","message":"why the function self.mod_flow(..) is not used?","commit_id":"ba3159b4681dac190b63f96000171444181d4fb1"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"2cc3c7daea4c6c2b1f72b1347c2c3ff24c8a8d95","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_f6306c03","line":1,"range":{"start_line":1,"start_character":14,"end_line":1,"end_character":15},"updated":"2016-02-12 08:51:10.000000000","message":"we do not actually need this copyright according  to my understanding","commit_id":"6027396a45bf2e7acfcb33607891a38b7f5bcd3a"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"e7eb03b5523521d4e12a17e29b21d19b61f03378","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_ade6e112","line":1,"range":{"start_line":1,"start_character":14,"end_line":1,"end_character":15},"in_reply_to":"3a57f1b5_f6306c03","updated":"2016-02-12 10:48:00.000000000","message":"I can remove it, it doesnt matter either way.","commit_id":"6027396a45bf2e7acfcb33607891a38b7f5bcd3a"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"fe2e721b6a3a6e73abf0be070409a7a4f2827fc7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                # From this router interface to all other interfaces"},{"line_number":86,"context_line":"                self._add_subnet_send_to_proactive_routing("},{"line_number":87,"context_line":"                    local_network_id,"},{"line_number":88,"context_line":"                    port.get_cidr_network(),"},{"line_number":89,"context_line":"                    port.get_cidr_netmask(),"},{"line_number":90,"context_line":"                    port.get_tunnel_key(),"},{"line_number":91,"context_line":"                    port_net_id,"},{"line_number":92,"context_line":"                    port.get_mac())"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_eddff937","line":89,"range":{"start_line":88,"start_character":15,"end_line":89,"end_character":44},"updated":"2016-02-12 11:28:40.000000000","message":"for one router interface(port), there are maybe multiple subnets(cidr). current implement cannot support this scenario.","commit_id":"6027396a45bf2e7acfcb33607891a38b7f5bcd3a"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"fe2e721b6a3a6e73abf0be070409a7a4f2827fc7","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        actions.append(parser.OFPActionSetField(eth_src\u003ddst_router_port_mac))"},{"line_number":145,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":146,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":147,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":148,"context_line":"            const.L3_PROACTIVE_LOOKUP_TABLE)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_6db46934","line":148,"range":{"start_line":147,"start_character":8,"end_line":148,"end_character":42},"updated":"2016-02-12 11:28:40.000000000","message":"since the flow rules\u0027match field are same on both L3_LOOKUP_TABLE and L3_PROACTIVE_LOOKUP_TABLE, It seems that it\u0027s unnecessary to use new table from L3_LOOKUP_TABLE jump into L3_PROACTIVE_LOOKUP_TABLE.","commit_id":"6027396a45bf2e7acfcb33607891a38b7f5bcd3a"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"124ff1e1291ae9ae77a62781e6bae91d899308b3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3ProactiveApp(DFlowApp):"},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(L3ProactiveApp, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_069218f6","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":31},"updated":"2016-02-17 06:56:48.000000000","message":"Does L3ProactiveApp replace L3App?","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"2c3c38b341e2e790da6f732cdd9832d7ee31e841","unresolved":false,"context_lines":[{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class L3ProactiveApp(DFlowApp):"},{"line_number":30,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":31,"context_line":"        super(L3ProactiveApp, self).__init__(*args, **kwargs)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_139ed762","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":31},"in_reply_to":"dae33548_069218f6","updated":"2016-02-17 08:46:44.000000000","message":"Yes, you need to use only one","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"124ff1e1291ae9ae77a62781e6bae91d899308b3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    port.get_lswitch_id())"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"                # From this router interface to all other interfaces"},{"line_number":83,"context_line":"                self._add_subnet_send_to_proactive_routing("},{"line_number":84,"context_line":"                    local_network_id,"},{"line_number":85,"context_line":"                    port.get_cidr_network(),"},{"line_number":86,"context_line":"                    port.get_cidr_netmask(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_0b57c126","line":83,"range":{"start_line":83,"start_character":16,"end_line":83,"end_character":59},"updated":"2016-02-17 06:56:48.000000000","message":"Suppose that the number of router\u0027s subnet is N, with this consideration,  o(NXN) flows will be installed.\nA suggestion,if we use router as identifier, match router_id and destiantion network in \"L3_LOOKUP_TALBE\",some flows will be saved.\n(1)table\u003dL3_PreProcess, metadata\u003dnetwork_id, dst_ip\u003dip,  actions: load_reg1\u003d router_id,goto_table\u003dL3_Lookup,\n(2)table\u003dL3_LOOKUP, reg1\u003drouter_id,nw_dst\u003dcidr/mask, actions: mod_dl_src\u003ddst_router_mac, set_metadata\u003ddst_network_id, goto_table\u003dL3_PROACTIVE_LOOKUP.","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"2c3c38b341e2e790da6f732cdd9832d7ee31e841","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                    port.get_lswitch_id())"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"                # From this router interface to all other interfaces"},{"line_number":83,"context_line":"                self._add_subnet_send_to_proactive_routing("},{"line_number":84,"context_line":"                    local_network_id,"},{"line_number":85,"context_line":"                    port.get_cidr_network(),"},{"line_number":86,"context_line":"                    port.get_cidr_netmask(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_73ebe378","line":83,"range":{"start_line":83,"start_character":16,"end_line":83,"end_character":59},"in_reply_to":"dae33548_0b57c126","updated":"2016-02-17 08:46:44.000000000","message":"Yes, good idea and i plan to add this","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"124ff1e1291ae9ae77a62781e6bae91d899308b3","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                self._add_subnet_send_to_proactive_routing("},{"line_number":93,"context_line":"                    port_net_id,"},{"line_number":94,"context_line":"                    router_port.get_cidr_network(),"},{"line_number":95,"context_line":"                    router_port.get_cidr_netmask(),"},{"line_number":96,"context_line":"                    tunnel_key,"},{"line_number":97,"context_line":"                    local_network_id,"},{"line_number":98,"context_line":"                    router_port.get_mac())"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_86e628ae","line":95,"range":{"start_line":95,"start_character":6,"end_line":95,"end_character":50},"updated":"2016-02-17 06:56:48.000000000","message":"If vm1 in network1 ping the gateway of network2, how is this scenario be handled?","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"2c3c38b341e2e790da6f732cdd9832d7ee31e841","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                self._add_subnet_send_to_proactive_routing("},{"line_number":93,"context_line":"                    port_net_id,"},{"line_number":94,"context_line":"                    router_port.get_cidr_network(),"},{"line_number":95,"context_line":"                    router_port.get_cidr_netmask(),"},{"line_number":96,"context_line":"                    tunnel_key,"},{"line_number":97,"context_line":"                    local_network_id,"},{"line_number":98,"context_line":"                    router_port.get_mac())"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_ae3fbe85","line":95,"range":{"start_line":95,"start_character":6,"end_line":95,"end_character":50},"in_reply_to":"dae33548_86e628ae","updated":"2016-02-17 08:46:44.000000000","message":"We currently still use the namespace in the network node for SNAT, this means thats the router ports exists in the namespace and will answer this.\n\nThis is taken care of in the \"_install_flow_send_to_output_table\"  method we call above\nIt installs flows for the router ports IPs and will send it to the namespace port\n\nIn the future we can add ping replies flows, or handle this in the controller","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"124ff1e1291ae9ae77a62781e6bae91d899308b3","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self._add_port(lport)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _add_port(self, lport):"},{"line_number":226,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":227,"context_line":"            return"},{"line_number":228,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":229,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":230,"context_line":"        dst_ip \u003d lport.get_ip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_ba56e559","line":227,"range":{"start_line":226,"start_character":7,"end_line":227,"end_character":18},"updated":"2016-02-17 06:56:48.000000000","message":"If the subnet that this port belongs to doesn\u0027t connect to router(maybe will never), but we add flow for this port. Thus flow will be inefficient. Should we consider whether this port connects to router or not when add l3 flow?","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"8a8cd42155d7ced7e92c246e9a057413ad0407ca","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self._add_port(lport)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _add_port(self, lport):"},{"line_number":226,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":227,"context_line":"            return"},{"line_number":228,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":229,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":230,"context_line":"        dst_ip \u003d lport.get_ip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_7f4f216b","line":227,"range":{"start_line":226,"start_character":7,"end_line":227,"end_character":18},"in_reply_to":"dae33548_8e011a6d","updated":"2016-02-17 09:36:28.000000000","message":"I agree with you.Most ports connect to a router. I just see servers have two nics, one doesn\u0027t connect to a router,and the servers communicate internally( such as db and web server), the other nic connect to a router for externally accessing.","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"2c3c38b341e2e790da6f732cdd9832d7ee31e841","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        self._add_port(lport)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    def _add_port(self, lport):"},{"line_number":226,"context_line":"        if lport.get_device_owner() \u003d\u003d common_const.DEVICE_OWNER_ROUTER_INTF:"},{"line_number":227,"context_line":"            return"},{"line_number":228,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":229,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":230,"context_line":"        dst_ip \u003d lport.get_ip()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_8e011a6d","line":227,"range":{"start_line":226,"start_character":7,"end_line":227,"end_character":18},"in_reply_to":"dae33548_ba56e559","updated":"2016-02-17 08:46:44.000000000","message":"Thats correct, but the assumption is that most ports will be connected to a router, it makes management of this much easier.\n\nDo you really see use case of network that is never attached to a router? \nEven if there is (and i doubt it) its going to be very rare","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"124ff1e1291ae9ae77a62781e6bae91d899308b3","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":238,"context_line":"                                    ipv4_dst\u003ddst_ip)"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IPV6,"},{"line_number":241,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":242,"context_line":"                                    ipv6_dst\u003ddst_ip)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_261f5c6d","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":65},"updated":"2016-02-17 06:56:48.000000000","message":"Router interface is actually a virtual port. So if we ping router interface, how will this scenario be handled?","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"2c3c38b341e2e790da6f732cdd9832d7ee31e841","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":238,"context_line":"                                    ipv4_dst\u003ddst_ip)"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IPV6,"},{"line_number":241,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":242,"context_line":"                                    ipv6_dst\u003ddst_ip)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_2e48cecb","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":65},"in_reply_to":"dae33548_261f5c6d","updated":"2016-02-17 08:46:44.000000000","message":"As mentioned above, the router still has a interface in the namespace at the network node, pings or any other ICMP for the router port IP are directed and answered by that","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"8a8cd42155d7ced7e92c246e9a057413ad0407ca","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":238,"context_line":"                                    ipv4_dst\u003ddst_ip)"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IPV6,"},{"line_number":241,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":242,"context_line":"                                    ipv6_dst\u003ddst_ip)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_bfe6ca12","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":65},"in_reply_to":"dae33548_2e48cecb","updated":"2016-02-17 09:36:28.000000000","message":"As I know, OVS 2.5 supports modifying icmp_code.If so we can use flow to generate icmp reply directly, just as ovn does.","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"50b945cf4ab485205672423ec5dd7156a61ac04a","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":238,"context_line":"                                    ipv4_dst\u003ddst_ip)"},{"line_number":239,"context_line":"        else:"},{"line_number":240,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IPV6,"},{"line_number":241,"context_line":"                                    metadata\u003dnetwork_id,"},{"line_number":242,"context_line":"                                    ipv6_dst\u003ddst_ip)"},{"line_number":243,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dae33548_6693dffa","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":65},"in_reply_to":"dae33548_bfe6ca12","updated":"2016-02-18 07:27:58.000000000","message":"yes, thats a possibility but not urgent as we still have centralized SNAT.\n\nThere are other ICMP protocols we might need to support, but we will certainly get into adding ICMP replies in flows as well.","commit_id":"42d20068b9a0f412f33d485b429cdf75217613f1"}]}
