)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"f9537f4e4345333c1a383e090abfe9225b402cd3","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-01-30 09:50:18 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"SNAT application patch #5"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I587a4f8bfb0825a31cb926bf34eced6741406276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a461143_c03812a3","line":8,"updated":"2017-01-30 09:37:57.000000000","message":"missing Implements ...","commit_id":"7a460e4ea248d9b9928172e4182b145f4866e130"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"100c331e634e5a452bd74aff48157602e73e35e9","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2017-01-31 09:48:58 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"SNAT application patch #6"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I587a4f8bfb0825a31cb926bf34eced6741406276"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a461143_c040e309","line":8,"updated":"2017-01-31 12:31:13.000000000","message":"please add link to the bp","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"}],"dragonflow/conf/df_snat.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8ebb57e3d975775894cb4319cad8540c205ec100","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":3,"id":"5a3905b3_67dba47c","line":1,"range":{"start_line":1,"start_character":15,"end_line":1,"end_character":20},"updated":"2017-01-24 13:57:30.000000000","message":"2017","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8ebb57e3d975775894cb4319cad8540c205ec100","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027ex_peer_patch_port\u0027, default\u003d\u0027patch-int\u0027,"},{"line_number":28,"context_line":"               help\u003d_(\"Peer patch port in external bridge for integration \""},{"line_number":29,"context_line":"                      \"bridge.\")),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027host_ip\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027172.100.0.4\u0027,"},{"line_number":32,"context_line":"               help\u003d_(\"Compute node external IP\")),"},{"line_number":33,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_476b08b7","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":23},"updated":"2017-01-24 13:57:30.000000000","message":"better ext_host_ip","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5324fa0c031ab7f65a0527ef71c546276e300717","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    cfg.StrOpt(\u0027ex_peer_patch_port\u0027, default\u003d\u0027patch-int\u0027,"},{"line_number":28,"context_line":"               help\u003d_(\"Peer patch port in external bridge for integration \""},{"line_number":29,"context_line":"                      \"bridge.\")),"},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027host_ip\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027172.100.0.4\u0027,"},{"line_number":32,"context_line":"               help\u003d_(\"Compute node external IP\")),"},{"line_number":33,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_0972dee5","line":30,"range":{"start_line":30,"start_character":16,"end_line":30,"end_character":23},"in_reply_to":"5a3905b3_476b08b7","updated":"2017-01-25 16:29:28.000000000","message":"Done","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"02615fa578e8beff5a3f4b317203e9dc55d699a4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027external_host_mac\u0027,"},{"line_number":34,"context_line":"               default\u003d\u002791:92:93:94:95:96\u0027,"},{"line_number":35,"context_line":"               help\u003d_(\"Compute node mac address for external interface\")),"},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027tenant_separation\u0027, default\u003dFalse,"},{"line_number":37,"context_line":"        help\u003d_(\"Set True to enable separate external address per tenant, \""},{"line_number":38,"context_line":"               \"otherwise single external address per compute host \u0027host_ip\u0027 \""},{"line_number":39,"context_line":"               \"would be used.\")),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_77bb1b73","line":36,"range":{"start_line":36,"start_character":36,"end_line":36,"end_character":51},"updated":"2017-01-26 11:25:07.000000000","message":"if this is set to true, where the addresses come from? Do you need network/subnet parameter as well?","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"7a89b80ba6d3e79a3b7a6bb2941a5b113b532fb2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027external_host_mac\u0027,"},{"line_number":34,"context_line":"               default\u003d\u002791:92:93:94:95:96\u0027,"},{"line_number":35,"context_line":"               help\u003d_(\"Compute node mac address for external interface\")),"},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027tenant_separation\u0027, default\u003dFalse,"},{"line_number":37,"context_line":"        help\u003d_(\"Set True to enable separate external address per tenant, \""},{"line_number":38,"context_line":"               \"otherwise single external address per compute host \u0027host_ip\u0027 \""},{"line_number":39,"context_line":"               \"would be used.\")),"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_3f4ad655","line":36,"range":{"start_line":36,"start_character":36,"end_line":36,"end_character":51},"in_reply_to":"3a461143_77bb1b73","updated":"2017-01-30 07:56:31.000000000","message":"preparation for the next phase (coding currently)\nThis implementation works with single IP per compute node","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"f9537f4e4345333c1a383e090abfe9225b402cd3","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d_(\"Compute node mac address for external interface\")),"},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027tenant_separation\u0027, default\u003dFalse,"},{"line_number":37,"context_line":"        help\u003d_(\"Set True to enable separate external address per tenant, \""},{"line_number":38,"context_line":"               \"otherwise single external address per compute host \u0027host_ip\u0027 \""},{"line_number":39,"context_line":"               \"would be used.\")),"},{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_80536ae1","line":38,"range":{"start_line":38,"start_character":68,"end_line":38,"end_character":73},"updated":"2017-01-30 09:37:57.000000000","message":"extenal","commit_id":"7a460e4ea248d9b9928172e4182b145f4866e130"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"b99363187b7b13f846ef712b603c9401440477c9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d_(\"Compute node mac address for external interface\")),"},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027tenant_separation\u0027, default\u003dFalse,"},{"line_number":37,"context_line":"        help\u003d_(\"Set True to enable separate external address per tenant, \""},{"line_number":38,"context_line":"               \"otherwise single external address per compute host \u0027host_ip\u0027 \""},{"line_number":39,"context_line":"               \"would be used.\")),"},{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_e916b54a","line":38,"range":{"start_line":38,"start_character":68,"end_line":38,"end_character":73},"in_reply_to":"3a461143_4e534f39","updated":"2017-01-31 07:56:38.000000000","message":"not referenced in code","commit_id":"7a460e4ea248d9b9928172e4182b145f4866e130"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"ba0f80b0a8a0a30c1e7d45fdcc210c314f7cea31","unresolved":false,"context_lines":[{"line_number":35,"context_line":"               help\u003d_(\"Compute node mac address for external interface\")),"},{"line_number":36,"context_line":"    cfg.BoolOpt(\u0027tenant_separation\u0027, default\u003dFalse,"},{"line_number":37,"context_line":"        help\u003d_(\"Set True to enable separate external address per tenant, \""},{"line_number":38,"context_line":"               \"otherwise single external address per compute host \u0027host_ip\u0027 \""},{"line_number":39,"context_line":"               \"would be used.\")),"},{"line_number":40,"context_line":"]"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_4e534f39","line":38,"range":{"start_line":38,"start_character":68,"end_line":38,"end_character":73},"in_reply_to":"3a461143_80536ae1","updated":"2017-01-31 07:54:00.000000000","message":"parameter \u0027tenant_separation\u0027 is not relevant for current implementation and referenced in code. I am removing it.","commit_id":"7a460e4ea248d9b9928172e4182b145f4866e130"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"100c331e634e5a452bd74aff48157602e73e35e9","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               help\u003d_(\"Compute node external IP\")),"},{"line_number":33,"context_line":"    cfg.StrOpt(\u0027external_host_mac\u0027,"},{"line_number":34,"context_line":"               default\u003d\u002791:92:93:94:95:96\u0027,"},{"line_number":35,"context_line":"               help\u003d_(\"Compute node mac address for external interface\")),"},{"line_number":36,"context_line":"]"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_46f40c5a","line":35,"range":{"start_line":35,"start_character":23,"end_line":35,"end_character":29},"updated":"2017-01-31 12:31:13.000000000","message":"compute","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"}],"dragonflow/controller/dnat_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            match.set_in_port(self.external_ofport)"},{"line_number":267,"context_line":"            self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":268,"context_line":"                const.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":269,"context_line":"                const.PRIORITY_LOW,"},{"line_number":270,"context_line":"                const.INGRESS_NAT_TABLE,"},{"line_number":271,"context_line":"                match\u003dmatch)"},{"line_number":272,"context_line":"        self._install_floatingip_arp_responder(floatingip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_90c42960","line":269,"range":{"start_line":269,"start_character":31,"end_line":269,"end_character":34},"updated":"2017-01-10 08:32:32.000000000","message":"Shouldn\u0027t this be medium, to take priority over snat?","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            match.set_in_port(self.external_ofport)"},{"line_number":267,"context_line":"            self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":268,"context_line":"                const.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":269,"context_line":"                const.PRIORITY_LOW,"},{"line_number":270,"context_line":"                const.INGRESS_NAT_TABLE,"},{"line_number":271,"context_line":"                match\u003dmatch)"},{"line_number":272,"context_line":"        self._install_floatingip_arp_responder(floatingip)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_d2b4ced2","line":269,"range":{"start_line":269,"start_character":31,"end_line":269,"end_character":34},"in_reply_to":"ba5201f7_90c42960","updated":"2017-01-23 08:17:15.000000000","message":"Changed from priority\u003d1 (default) to priority\u003d50 (low)\nthat way DNAT takes precedence over SNAT flow in table 0 (SNAT flow installed with priority\u003d1)","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"}],"dragonflow/controller/snat_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DF_SNAT_APP_OPTS \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027external_network_bridge\u0027,"},{"line_number":36,"context_line":"              default\u003d\u0027br-ex\u0027,"},{"line_number":37,"context_line":"              help\u003d_(\"Name of bridge used for external network traffic\")),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_b0868d14","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":16},"updated":"2017-01-10 08:32:32.000000000","message":"Options should go in dragonflow.conf, like the other configurations.","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DF_SNAT_APP_OPTS \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027external_network_bridge\u0027,"},{"line_number":36,"context_line":"              default\u003d\u0027br-ex\u0027,"},{"line_number":37,"context_line":"              help\u003d_(\"Name of bridge used for external network traffic\")),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_188677b9","line":34,"range":{"start_line":34,"start_character":0,"end_line":34,"end_character":16},"in_reply_to":"ba5201f7_b0868d14","updated":"2017-01-23 08:17:15.000000000","message":"My code base was too old. I am going to fix this","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DF_SNAT_APP_OPTS \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027external_network_bridge\u0027,"},{"line_number":36,"context_line":"              default\u003d\u0027br-ex\u0027,"},{"line_number":37,"context_line":"              help\u003d_(\"Name of bridge used for external network traffic\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027int_peer_patch_port\u0027, default\u003d\u0027patch-ex\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_90726948","line":35,"range":{"start_line":35,"start_character":16,"end_line":35,"end_character":39},"updated":"2017-01-10 08:32:32.000000000","message":"Some of these configurations are duplicate of dnat. Is there a reason to have them twice? Maybe move them to an external location?","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DF_SNAT_APP_OPTS \u003d ["},{"line_number":35,"context_line":"    cfg.StrOpt(\u0027external_network_bridge\u0027,"},{"line_number":36,"context_line":"              default\u003d\u0027br-ex\u0027,"},{"line_number":37,"context_line":"              help\u003d_(\"Name of bridge used for external network traffic\")),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027int_peer_patch_port\u0027, default\u003d\u0027patch-ex\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_136f3893","line":35,"range":{"start_line":35,"start_character":16,"end_line":35,"end_character":39},"in_reply_to":"ba5201f7_90726948","updated":"2017-01-23 08:17:15.000000000","message":"I will move this to conf directory. This indeed duplicates dnat but I can not be sure that both applications are deployed for sure to configure br-ex vs. br-int bridge connection. Probably should be organized as common code somewhere ...","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            self.external_ofport \u003d self.vswitch_api.get_port_ofport("},{"line_number":110,"context_line":"                self.ex_peer_patch_port)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _install_output_to_physical_patch(self, ofport):"},{"line_number":113,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":114,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":115,"context_line":"        actions \u003d [parser.OFPActionOutput(ofport,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_f039f5f3","line":112,"updated":"2017-01-10 08:32:32.000000000","message":"I am not sure I understand. Why do you need this?","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            self.external_ofport \u003d self.vswitch_api.get_port_ofport("},{"line_number":110,"context_line":"                self.ex_peer_patch_port)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _install_output_to_physical_patch(self, ofport):"},{"line_number":113,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":114,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":115,"context_line":"        actions \u003d [parser.OFPActionOutput(ofport,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_131d780f","line":112,"in_reply_to":"ba5201f7_f039f5f3","updated":"2017-01-23 08:17:15.000000000","message":"common code that is required by dnat and snat","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                      table_id\u003dconst.EGRESS_EXTERNAL_TABLE,"},{"line_number":122,"context_line":"                      priority\u003dconst.PRIORITY_MEDIUM, match\u003dNone)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _install_arp_responder(self):"},{"line_number":125,"context_line":"        # install host arp responder flow rules"},{"line_number":126,"context_line":"        if netaddr.IPAddress(self.host_ip).version !\u003d 4:"},{"line_number":127,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_ab5e2210","line":124,"updated":"2017-01-10 08:32:32.000000000","message":"I am not sure why you need this. On egress (from VM to inet) you can hijack packets to the router. On ingress, it should come in from outside, and the MAC should be real (otherwise the packet won\u0027t be picked up).","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                      table_id\u003dconst.EGRESS_EXTERNAL_TABLE,"},{"line_number":122,"context_line":"                      priority\u003dconst.PRIORITY_MEDIUM, match\u003dNone)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _install_arp_responder(self):"},{"line_number":125,"context_line":"        # install host arp responder flow rules"},{"line_number":126,"context_line":"        if netaddr.IPAddress(self.host_ip).version !\u003d 4:"},{"line_number":127,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_f3f7148a","line":124,"in_reply_to":"ba5201f7_ab5e2210","updated":"2017-01-23 08:17:15.000000000","message":"I am using a configuration based MAC address for static IP. With responder it works although MAC is not real","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":136,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":139,"context_line":"        match.set_in_port(self.external_ofport)"},{"line_number":140,"context_line":"        self.mod_flow("},{"line_number":141,"context_line":"            self.get_datapath(),"},{"line_number":142,"context_line":"            command\u003dofproto.OFPFC_DELETE_STRICT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_38bee2d4","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":47},"updated":"2017-01-10 08:32:32.000000000","message":"Why not define match in a single line, like you did below? (e.g. parser.OFPMatch(in_port\u003dself.external_ofport)?","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":136,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":139,"context_line":"        match.set_in_port(self.external_ofport)"},{"line_number":140,"context_line":"        self.mod_flow("},{"line_number":141,"context_line":"            self.get_datapath(),"},{"line_number":142,"context_line":"            command\u003dofproto.OFPFC_DELETE_STRICT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_d3393043","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":47},"in_reply_to":"ba5201f7_38bee2d4","updated":"2017-01-23 08:17:15.000000000","message":"I will fix that","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            priority\u003dconst.PRIORITY_LOW,"},{"line_number":154,"context_line":"            match\u003dmatch)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP)"},{"line_number":157,"context_line":"        self.mod_flow("},{"line_number":158,"context_line":"            self.get_datapath(),"},{"line_number":159,"context_line":"            command\u003dofproto.OFPFC_DELETE_STRICT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_b8e3b204","line":156,"range":{"start_line":156,"start_character":0,"end_line":156,"end_character":59},"updated":"2017-01-10 08:32:32.000000000","message":"You can reuse the match from the previous stanza","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            cookie\u003d0x0,"},{"line_number":176,"context_line":"            match\u003dmatch)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP)"},{"line_number":179,"context_line":"        self.mod_flow("},{"line_number":180,"context_line":"            self.get_datapath(),"},{"line_number":181,"context_line":"            command\u003dofproto.OFPFC_DELETE_STRICT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_98cd0e89","line":178,"range":{"start_line":178,"start_character":8,"end_line":178,"end_character":13},"updated":"2017-01-10 08:32:32.000000000","message":"You can reuse the match from above.","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            cookie\u003d0x0,"},{"line_number":176,"context_line":"            match\u003dmatch)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP)"},{"line_number":179,"context_line":"        self.mod_flow("},{"line_number":180,"context_line":"            self.get_datapath(),"},{"line_number":181,"context_line":"            command\u003dofproto.OFPFC_DELETE_STRICT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_3377dc03","line":178,"range":{"start_line":178,"start_character":8,"end_line":178,"end_character":13},"in_reply_to":"ba5201f7_98cd0e89","updated":"2017-01-23 08:17:15.000000000","message":"agree","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":214,"context_line":"            # install flows only on first port add"},{"line_number":215,"context_line":"            # flows are agnostic of port amount and tenant id"},{"line_number":216,"context_line":"            if(self.count \u003d\u003d 0):"},{"line_number":217,"context_line":"                self. _install_snat_ingress(lport)"},{"line_number":218,"context_line":"                self. _install_snat_egress(lport)"},{"line_number":219,"context_line":"                # update connected VM amount"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_38ba62c1","line":216,"range":{"start_line":216,"start_character":0,"end_line":216,"end_character":32},"updated":"2017-01-10 08:32:32.000000000","message":"I think it\u0027s all right if the rules are always installed. Removing them when there are no VMs just to add them again later seems redundant. Especially since there is no port-specific information needed.","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":214,"context_line":"            # install flows only on first port add"},{"line_number":215,"context_line":"            # flows are agnostic of port amount and tenant id"},{"line_number":216,"context_line":"            if(self.count \u003d\u003d 0):"},{"line_number":217,"context_line":"                self. _install_snat_ingress(lport)"},{"line_number":218,"context_line":"                self. _install_snat_egress(lport)"},{"line_number":219,"context_line":"                # update connected VM amount"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_f3dab4e8","line":216,"range":{"start_line":216,"start_character":0,"end_line":216,"end_character":32},"in_reply_to":"ba5201f7_38ba62c1","updated":"2017-01-23 08:17:15.000000000","message":"I think clean implementation should be able to remove flows as well","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                self. _install_snat_ingress(lport)"},{"line_number":218,"context_line":"                self. _install_snat_egress(lport)"},{"line_number":219,"context_line":"                # update connected VM amount"},{"line_number":220,"context_line":"                self.count +\u003d 1"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            LOG.info(_LI(\u0027SNAT application: not a compute port, skipped\u0027))"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_f8729a48","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":31},"updated":"2017-01-10 08:32:32.000000000","message":"Shouldn\u0027t self.count be increased for every vm port, and not just the first one?","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                self. _install_snat_ingress(lport)"},{"line_number":218,"context_line":"                self. _install_snat_egress(lport)"},{"line_number":219,"context_line":"                # update connected VM amount"},{"line_number":220,"context_line":"                self.count +\u003d 1"},{"line_number":221,"context_line":"        else:"},{"line_number":222,"context_line":"            LOG.info(_LI(\u0027SNAT application: not a compute port, skipped\u0027))"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_d3ecd091","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":31},"in_reply_to":"ba5201f7_f8729a48","updated":"2017-01-23 08:17:15.000000000","message":"this is a bug. I will fix it.","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                     alg\u003d0,"},{"line_number":323,"context_line":"                                     flags\u003dconst.CT_FLAG_COMMIT,"},{"line_number":324,"context_line":"                                     recirc_table\u003dconst.EGRESS_NAT2_TABLE,"},{"line_number":325,"context_line":"                                     zone_ofs_nbits\u003d15,"},{"line_number":326,"context_line":"                                     zone_src\u003d\u0027reg0\u0027,"},{"line_number":327,"context_line":"                                     actions\u003d["},{"line_number":328,"context_line":"                                            parser.NXActionNAT("},{"line_number":329,"context_line":"                                                flags\u003dconst.CT_FLAG_COMMIT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_98f7ce8b","line":326,"range":{"start_line":325,"start_character":0,"end_line":326,"end_character":53},"updated":"2017-01-10 08:32:32.000000000","message":"Can\u0027t you set the zone to a constant? Then you won\u0027t need to take up reg0. (I think this should work if you set zone_src\u003d0 and zone_ofs_nbits\u003dconst.NAT_TRACKING_ZONE).","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                     alg\u003d0,"},{"line_number":323,"context_line":"                                     flags\u003dconst.CT_FLAG_COMMIT,"},{"line_number":324,"context_line":"                                     recirc_table\u003dconst.EGRESS_NAT2_TABLE,"},{"line_number":325,"context_line":"                                     zone_ofs_nbits\u003d15,"},{"line_number":326,"context_line":"                                     zone_src\u003d\u0027reg0\u0027,"},{"line_number":327,"context_line":"                                     actions\u003d["},{"line_number":328,"context_line":"                                            parser.NXActionNAT("},{"line_number":329,"context_line":"                                                flags\u003dconst.CT_FLAG_COMMIT,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_13ad7831","line":326,"range":{"start_line":325,"start_character":0,"end_line":326,"end_character":53},"in_reply_to":"ba5201f7_98f7ce8b","updated":"2017-01-23 08:17:15.000000000","message":"done","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        self.mod_flow("},{"line_number":370,"context_line":"            self.get_datapath(),"},{"line_number":371,"context_line":"            cookie\u003d0x0,"},{"line_number":372,"context_line":"            inst\u003dinst,"},{"line_number":373,"context_line":"            table_id\u003dconst.EGRESS_NAT2_TABLE,"},{"line_number":374,"context_line":"            priority\u003dconst.PRIORITY_LOW,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_e148268a","line":371,"range":{"start_line":371,"start_character":0,"end_line":371,"end_character":23},"updated":"2017-01-10 08:32:32.000000000","message":"Not needed.","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        self.mod_flow("},{"line_number":370,"context_line":"            self.get_datapath(),"},{"line_number":371,"context_line":"            cookie\u003d0x0,"},{"line_number":372,"context_line":"            inst\u003dinst,"},{"line_number":373,"context_line":"            table_id\u003dconst.EGRESS_NAT2_TABLE,"},{"line_number":374,"context_line":"            priority\u003dconst.PRIORITY_LOW,"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_93996822","line":371,"range":{"start_line":371,"start_character":0,"end_line":371,"end_character":23},"in_reply_to":"ba5201f7_e148268a","updated":"2017-01-23 08:17:15.000000000","message":"OK","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            match\u003dmatch)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _install_snat_ingress_conntrack(self):"},{"line_number":378,"context_line":"        LOG.info(_LI(\u0027SNAT application: install ingress\u0027))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":381,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_6155161c","line":378,"range":{"start_line":378,"start_character":12,"end_line":378,"end_character":17},"updated":"2017-01-10 08:32:32.000000000","message":"Maybe make this a debug?","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            match\u003dmatch)"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    def _install_snat_ingress_conntrack(self):"},{"line_number":378,"context_line":"        LOG.info(_LI(\u0027SNAT application: install ingress\u0027))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":381,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_33fc3c3e","line":378,"range":{"start_line":378,"start_character":12,"end_line":378,"end_character":17},"in_reply_to":"ba5201f7_6155161c","updated":"2017-01-23 08:17:15.000000000","message":"OK","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a52d1698475268c34ab848bfcf7c9cd7beeca69a","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                     flags\u003d0,"},{"line_number":388,"context_line":"                                     recirc_table\u003dconst.INGRESS_NAT2_TABLE,"},{"line_number":389,"context_line":"                                     zone_ofs_nbits\u003d15,"},{"line_number":390,"context_line":"                                     zone_src\u003d\u0027reg0\u0027,"},{"line_number":391,"context_line":"                                     actions\u003d["},{"line_number":392,"context_line":"                                         parser.NXActionNAT(flags\u003d0)"},{"line_number":393,"context_line":"                                            ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5201f7_c13a42e7","line":390,"range":{"start_line":390,"start_character":0,"end_line":390,"end_character":53},"updated":"2017-01-10 08:32:32.000000000","message":"Same here re: using constant rather than reg0","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5598877ed7ee470a7f12eb6f7907ea39c689e3ef","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                                     flags\u003d0,"},{"line_number":388,"context_line":"                                     recirc_table\u003dconst.INGRESS_NAT2_TABLE,"},{"line_number":389,"context_line":"                                     zone_ofs_nbits\u003d15,"},{"line_number":390,"context_line":"                                     zone_src\u003d\u0027reg0\u0027,"},{"line_number":391,"context_line":"                                     actions\u003d["},{"line_number":392,"context_line":"                                         parser.NXActionNAT(flags\u003d0)"},{"line_number":393,"context_line":"                                            ]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a3905b3_d589b027","line":390,"range":{"start_line":390,"start_character":0,"end_line":390,"end_character":53},"in_reply_to":"ba5201f7_c13a42e7","updated":"2017-01-23 08:17:15.000000000","message":"done","commit_id":"cd0c78425b7782bc5d51bebd79db47bff2f5b2e5"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8ebb57e3d975775894cb4319cad8540c205ec100","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":3,"id":"5a3905b3_cac9bd27","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2017-01-24 13:57:30.000000000","message":"2017","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8ebb57e3d975775894cb4319cad8540c205ec100","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(SNATApp, self).__init__(*args, **kwargs)"},{"line_number":38,"context_line":"        self.external_network_bridge \u003d \\"},{"line_number":39,"context_line":"            cfg.CONF.df_snat_app.external_network_bridge"},{"line_number":40,"context_line":"        self.external_bridge_mac \u003d \"00:00:00:00:00:00\""},{"line_number":41,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":42,"context_line":"        self.int_peer_patch_port \u003d cfg.CONF.df_snat_app.int_peer_patch_port"},{"line_number":43,"context_line":"        self.ex_peer_patch_port \u003d cfg.CONF.df_snat_app.ex_peer_patch_port"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_0db3df0a","line":40,"range":{"start_line":40,"start_character":35,"end_line":40,"end_character":54},"updated":"2017-01-24 13:57:30.000000000","message":"better to define const","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5324fa0c031ab7f65a0527ef71c546276e300717","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        super(SNATApp, self).__init__(*args, **kwargs)"},{"line_number":38,"context_line":"        self.external_network_bridge \u003d \\"},{"line_number":39,"context_line":"            cfg.CONF.df_snat_app.external_network_bridge"},{"line_number":40,"context_line":"        self.external_bridge_mac \u003d \"00:00:00:00:00:00\""},{"line_number":41,"context_line":"        self.integration_bridge \u003d cfg.CONF.df.integration_bridge"},{"line_number":42,"context_line":"        self.int_peer_patch_port \u003d cfg.CONF.df_snat_app.int_peer_patch_port"},{"line_number":43,"context_line":"        self.ex_peer_patch_port \u003d cfg.CONF.df_snat_app.ex_peer_patch_port"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_4986a6ba","line":40,"range":{"start_line":40,"start_character":35,"end_line":40,"end_character":54},"in_reply_to":"5a3905b3_0db3df0a","updated":"2017-01-25 16:29:28.000000000","message":"Done","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8ebb57e3d975775894cb4319cad8540c205ec100","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.external_networks \u003d collections.defaultdict(int)"},{"line_number":45,"context_line":"        # new application configuration"},{"line_number":46,"context_line":"        self.host_ip \u003d cfg.CONF.df_snat_app.host_ip"},{"line_number":47,"context_line":"        self.host_mac \u003d \"91:92:93:94:95:96\""},{"line_number":48,"context_line":"        self.chassis \u003d None"},{"line_number":49,"context_line":"        # next parameter counts number of connected compute ports"},{"line_number":50,"context_line":"        self.count \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_cda397b0","line":47,"range":{"start_line":47,"start_character":24,"end_line":47,"end_character":43},"updated":"2017-01-24 13:57:30.000000000","message":"ditto","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5324fa0c031ab7f65a0527ef71c546276e300717","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.external_networks \u003d collections.defaultdict(int)"},{"line_number":45,"context_line":"        # new application configuration"},{"line_number":46,"context_line":"        self.host_ip \u003d cfg.CONF.df_snat_app.host_ip"},{"line_number":47,"context_line":"        self.host_mac \u003d \"91:92:93:94:95:96\""},{"line_number":48,"context_line":"        self.chassis \u003d None"},{"line_number":49,"context_line":"        # next parameter counts number of connected compute ports"},{"line_number":50,"context_line":"        self.count \u003d 0"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_a9bb8a74","line":47,"range":{"start_line":47,"start_character":24,"end_line":47,"end_character":43},"in_reply_to":"5a3905b3_cda397b0","updated":"2017-01-25 16:29:28.000000000","message":"Done","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"fb5844734d024d81ad2e97776cd2815605c572a1","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"EMPTY_MAC_ADDR \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SNATApp(df_base_app.DFlowApp):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_17fb5348","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":14},"updated":"2017-01-28 14:56:07.000000000","message":"I think it would be best moved to constants","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"7a89b80ba6d3e79a3b7a6bb2941a5b113b532fb2","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"EMPTY_MAC_ADDR \u003d \u002700:00:00:00:00:00\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class SNATApp(df_base_app.DFlowApp):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_9f7bca8b","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":14},"in_reply_to":"3a461143_17fb5348","updated":"2017-01-30 07:56:31.000000000","message":"Done","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"fb5844734d024d81ad2e97776cd2815605c572a1","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":341,"context_line":"        actions \u003d ["},{"line_number":342,"context_line":"            parser.NXActionCT("},{"line_number":343,"context_line":"                                     alg\u003d0,"},{"line_number":344,"context_line":"                                     flags\u003d0,"},{"line_number":345,"context_line":"                                     recirc_table\u003dconst.INGRESS_NAT2_TABLE,"},{"line_number":346,"context_line":"                                     zone_ofs_nbits\u003dconst.NAT_TRACKING_ZONE,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_57bebb65","line":343,"range":{"start_line":343,"start_character":37,"end_line":343,"end_character":40},"updated":"2017-01-28 14:56:07.000000000","message":"look like paramters are alittle bit drifted","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"7a89b80ba6d3e79a3b7a6bb2941a5b113b532fb2","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        ofproto \u003d self.get_datapath().ofproto"},{"line_number":341,"context_line":"        actions \u003d ["},{"line_number":342,"context_line":"            parser.NXActionCT("},{"line_number":343,"context_line":"                                     alg\u003d0,"},{"line_number":344,"context_line":"                                     flags\u003d0,"},{"line_number":345,"context_line":"                                     recirc_table\u003dconst.INGRESS_NAT2_TABLE,"},{"line_number":346,"context_line":"                                     zone_ofs_nbits\u003dconst.NAT_TRACKING_ZONE,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_bf6c06d1","line":343,"range":{"start_line":343,"start_character":37,"end_line":343,"end_character":40},"in_reply_to":"3a461143_57bebb65","updated":"2017-01-30 07:56:31.000000000","message":"Done","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":18347,"name":"Itamar Ofek","email":"itamofek@netscape.net","username":"itamaro"},"change_message_id":"fb5844734d024d81ad2e97776cd2815605c572a1","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        actions +\u003d ["},{"line_number":378,"context_line":"            parser.NXActionRegLoad("},{"line_number":379,"context_line":"                                            ofs_nbits\u003dnicira_ext.ofs_nbits("},{"line_number":380,"context_line":"                                                31, 31),"},{"line_number":381,"context_line":"                                            dst\u003d\"ipv4_dst\","},{"line_number":382,"context_line":"                                            value\u003d0,)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_77c3b7ed","line":379,"updated":"2017-01-28 14:56:07.000000000","message":"nit: same as line 343","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"7a89b80ba6d3e79a3b7a6bb2941a5b113b532fb2","unresolved":false,"context_lines":[{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        actions +\u003d ["},{"line_number":378,"context_line":"            parser.NXActionRegLoad("},{"line_number":379,"context_line":"                                            ofs_nbits\u003dnicira_ext.ofs_nbits("},{"line_number":380,"context_line":"                                                31, 31),"},{"line_number":381,"context_line":"                                            dst\u003d\"ipv4_dst\","},{"line_number":382,"context_line":"                                            value\u003d0,)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a461143_df71d2a9","line":379,"in_reply_to":"3a461143_77c3b7ed","updated":"2017-01-30 07:56:31.000000000","message":"Done","commit_id":"e99b66506bffc81af044dfbf934d18543ced4073"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"f9537f4e4345333c1a383e090abfe9225b402cd3","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.external_host_ip \u003d cfg.CONF.df_snat_app.external_host_ip"},{"line_number":47,"context_line":"        self.external_host_mac \u003d cfg.CONF.df_snat_app.external_host_mac"},{"line_number":48,"context_line":"        self.chassis \u003d None"},{"line_number":49,"context_line":"        # next parameter counts number of connected compute ports"},{"line_number":50,"context_line":"        self.count \u003d 0"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def switch_features_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_00977a3a","line":49,"updated":"2017-01-30 09:37:57.000000000","message":"I think the \u0027tenant_separation\u0027 should be validated and if it is \u0027True\u0027, error message should be logged and app should treat this case.","commit_id":"7a460e4ea248d9b9928172e4182b145f4866e130"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"ba0f80b0a8a0a30c1e7d45fdcc210c314f7cea31","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self.external_host_ip \u003d cfg.CONF.df_snat_app.external_host_ip"},{"line_number":47,"context_line":"        self.external_host_mac \u003d cfg.CONF.df_snat_app.external_host_mac"},{"line_number":48,"context_line":"        self.chassis \u003d None"},{"line_number":49,"context_line":"        # next parameter counts number of connected compute ports"},{"line_number":50,"context_line":"        self.count \u003d 0"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def switch_features_handler(self, ev):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_8e1e176e","line":49,"in_reply_to":"3a461143_00977a3a","updated":"2017-01-31 07:54:00.000000000","message":"tenant_separation parameter removed from configuration.\nNot relevant for current (intermidate phase) implementation","commit_id":"7a460e4ea248d9b9928172e4182b145f4866e130"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"100c331e634e5a452bd74aff48157602e73e35e9","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                {\u0027lport\u0027: lport})"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # install flows only when compute port is added"},{"line_number":198,"context_line":"        if lport.get_device_owner().startswith(\u0027compute\u0027):"},{"line_number":199,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":200,"context_line":"            # install flows only on first port add"},{"line_number":201,"context_line":"            # flows are agnostic of port amount and tenant id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_e69258f5","line":198,"range":{"start_line":198,"start_character":47,"end_line":198,"end_character":56},"updated":"2017-01-31 12:31:13.000000000","message":"better use constants","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"100c331e634e5a452bd74aff48157602e73e35e9","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        LOG.info(_LI(\"SNAT application: add local port  %(lport)s\"),"},{"line_number":195,"context_line":"                {\u0027lport\u0027: lport})"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # install flows only when compute port is added"},{"line_number":198,"context_line":"        if lport.get_device_owner().startswith(\u0027compute\u0027):"},{"line_number":199,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":200,"context_line":"            # install flows only on first port add"},{"line_number":201,"context_line":"            # flows are agnostic of port amount and tenant id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_06a5a445","line":198,"range":{"start_line":197,"start_character":8,"end_line":198,"end_character":47},"updated":"2017-01-31 12:31:13.000000000","message":"what will be for containers? Maybe worth to check the opposite condition","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"9c0125b6c82dc9f7870064f3fa8d6b0326121f76","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                {\u0027lport\u0027: lport})"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # install flows only when compute port is added"},{"line_number":198,"context_line":"        if lport.get_device_owner().startswith(\u0027compute\u0027):"},{"line_number":199,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":200,"context_line":"            # install flows only on first port add"},{"line_number":201,"context_line":"            # flows are agnostic of port amount and tenant id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_44578057","line":198,"range":{"start_line":198,"start_character":47,"end_line":198,"end_character":56},"in_reply_to":"3a461143_595cc94a","updated":"2017-02-01 07:52:11.000000000","message":"Maybe we need DF definition for the proper type, since counting on deviceowner set by nova is just supporting very limited deployment case. It won\u0027t work for the kuryr case, where the owner is not set by nova.","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"8452d197ca6eade9d1c8c36ec4da95b083fdaef9","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                {\u0027lport\u0027: lport})"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # install flows only when compute port is added"},{"line_number":198,"context_line":"        if lport.get_device_owner().startswith(\u0027compute\u0027):"},{"line_number":199,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":200,"context_line":"            # install flows only on first port add"},{"line_number":201,"context_line":"            # flows are agnostic of port amount and tenant id"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_595cc94a","line":198,"range":{"start_line":198,"start_character":47,"end_line":198,"end_character":56},"in_reply_to":"3a461143_e69258f5","updated":"2017-02-01 07:15:42.000000000","message":"Opposite condition is also problematic - what if there\u0027s a port type added that we don\u0027t want either?\n\nMaybe have a list of port types we want to support? Even make it configurable? I think this can wait for another patch, but requires a bug before this patch is merged.\n\nre: constants: +1","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1a10e836bfa66fb715adc46ae334e62996953520","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            self.chassis \u003d lport.get_chassis()"},{"line_number":200,"context_line":"            # install flows only on first port add"},{"line_number":201,"context_line":"            # flows are agnostic of port amount and tenant id"},{"line_number":202,"context_line":"            if(self.count \u003d\u003d 0):"},{"line_number":203,"context_line":"                self. _install_snat_ingress(lport)"},{"line_number":204,"context_line":"                self. _install_snat_egress(lport)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_9a6ba3b6","line":202,"range":{"start_line":202,"start_character":14,"end_line":202,"end_character":15},"updated":"2017-01-31 13:36:22.000000000","message":"spacing","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1a10e836bfa66fb715adc46ae334e62996953520","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            # install flows only on first port add"},{"line_number":201,"context_line":"            # flows are agnostic of port amount and tenant id"},{"line_number":202,"context_line":"            if(self.count \u003d\u003d 0):"},{"line_number":203,"context_line":"                self. _install_snat_ingress(lport)"},{"line_number":204,"context_line":"                self. _install_snat_egress(lport)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"            # instance specific flow"},{"line_number":207,"context_line":"            self._install_snat_ingress_after_conntrack(lport.get_ip(),"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_ba493f33","line":204,"range":{"start_line":203,"start_character":0,"end_line":204,"end_character":49},"updated":"2017-01-31 13:36:22.000000000","message":"lport is unused by both functions, I don\u0027t think we should pass it at all\n\nWhy not do this in switch_features_handler? If we move it there we don\u0027t have to bother with _remove functions on L186-187 (the flows will live throughout the lifetime of the app). We can also then get rid of counting local ports.","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"100c331e634e5a452bd74aff48157602e73e35e9","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                                       lport.get_mac())"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"            # update connected VM amount"},{"line_number":211,"context_line":"            self.count +\u003d 1"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.info(_LI(\u0027SNAT application: not a compute port, skipped\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_663ae8e8","line":211,"updated":"2017-01-31 12:31:13.000000000","message":"you can use LogicalNetworks for relevant ports cache introduced by Itamar\u0027s patch","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1a10e836bfa66fb715adc46ae334e62996953520","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                                                       lport.get_mac())"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"            # update connected VM amount"},{"line_number":211,"context_line":"            self.count +\u003d 1"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            LOG.info(_LI(\u0027SNAT application: not a compute port, skipped\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_9a44834a","line":211,"in_reply_to":"3a461143_663ae8e8","updated":"2017-01-31 13:36:22.000000000","message":"+1","commit_id":"7790b26973a890377a877ad02b38047f5dab8741"}],"dragonflow/tests/unit/test_snat_app.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"8ebb57e3d975775894cb4319cad8540c205ec100","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                   table_id\u003dconstants.EGRESS_NAT2_TABLE,"},{"line_number":64,"context_line":"                   priority\u003dconstants.PRIORITY_LOW,"},{"line_number":65,"context_line":"                   match\u003dmock.ANY)])"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_remove_last_local_port(self):"},{"line_number":68,"context_line":"        # mockup last VM port is being removed"},{"line_number":69,"context_line":"        self.SNAT_app.count \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_edbbf3c1","line":66,"updated":"2017-01-24 13:57:30.000000000","message":"test for neither first nor last port?","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"},{"author":{"_account_id":24229,"name":"Igor Shafran","email":"igor.shafran@toganetworks.com","username":"ishafran"},"change_message_id":"5324fa0c031ab7f65a0527ef71c546276e300717","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                   table_id\u003dconstants.EGRESS_NAT2_TABLE,"},{"line_number":64,"context_line":"                   priority\u003dconstants.PRIORITY_LOW,"},{"line_number":65,"context_line":"                   match\u003dmock.ANY)])"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_remove_last_local_port(self):"},{"line_number":68,"context_line":"        # mockup last VM port is being removed"},{"line_number":69,"context_line":"        self.SNAT_app.count \u003d 1"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_e93af2e6","line":66,"in_reply_to":"5a3905b3_edbbf3c1","updated":"2017-01-25 16:29:28.000000000","message":"added 2 more tests. This comment allowed me to find pretty big functional problem. Thanks :)","commit_id":"8b812afa4361bd615b61c62319159393ab65a04c"}]}
