)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"e69518c449740805dc2289bc1ad33ab72a047505","unresolved":false,"context_lines":[{"line_number":17,"context_line":"4.implement port and ip aggregation"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ia1f311ec68085f911fcbf50121a3dbe988826316"},{"line_number":20,"context_line":"Implements: blueprint security-group-dragonflow-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3afc51ec_e963c53f","line":20,"updated":"2016-03-14 07:58:43.000000000","message":"Consider also linking to bug #1530017. https://bugs.launchpad.net/dragonflow/+bug/1530017.\n(e.g. Closes-Bug: #1530017)","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"103c1868c638ee82b34bd65c490efe8969d2d18d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"4.implement port and ip aggregation"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ia1f311ec68085f911fcbf50121a3dbe988826316"},{"line_number":20,"context_line":"Implements: blueprint security-group-dragonflow-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa0719c6_835504c8","line":20,"in_reply_to":"3afc51ec_e963c53f","updated":"2016-03-20 12:00:16.000000000","message":"This bug is related to the merged patch https://review.openstack.org/#/c/262634/, So I will close this bug","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c9577410dc61d3be61ad9f249a684ba22823798b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"Things left to be done:"},{"line_number":13,"context_line":"1.implement port update"},{"line_number":14,"context_line":"2.test code will be uploaded in another patch"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ia1f311ec68085f911fcbf50121a3dbe988826316"},{"line_number":17,"context_line":"Implements: blueprint security-group-dragonflow-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"9a061dce_b8e75aab","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":0},"updated":"2016-04-10 06:21:10.000000000","message":"Please add \nCo-Authored-By:yuanwei \u003cwei.yuan@huawei.com\u003e","commit_id":"d49fb239fcdb13415e17890226888463499e65d5"}],"dragonflow/controller/common/constants.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# Pipline Table numbers"},{"line_number":17,"context_line":"INGRESS_CLASSIFICATION_DISPATCH_TABLE \u003d 0"},{"line_number":18,"context_line":"INGRESS_PRE_CT_TABLE \u003d 2"},{"line_number":19,"context_line":"INGRESS_CT_TABLE \u003d 4"},{"line_number":20,"context_line":"INGRESS_SECURITY_GROUP_TABLE \u003d 7"},{"line_number":21,"context_line":"EGRESS_PRE_CT_TABLE \u003d 3"},{"line_number":22,"context_line":"EGRESS_CT_TABLE \u003d 5"},{"line_number":23,"context_line":"EGRESS_SECURITY_GROUP_TABLE \u003d 6"},{"line_number":24,"context_line":"INGRESS_DISPATCH_TABLE \u003d 8"},{"line_number":25,"context_line":"SERVICES_CLASSIFICATION_TABLE \u003d 9"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_3b021270","line":22,"range":{"start_line":19,"start_character":0,"end_line":22,"end_character":19},"updated":"2016-02-16 09:10:36.000000000","message":"Consider renaming these parameters: CT-\u003eCONNTRACK, e.g. INGRESS_CT_TABLE-\u003eINGRESS_CONNTRACK_TABLE.","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":16,"context_line":"# Pipline Table numbers"},{"line_number":17,"context_line":"INGRESS_CLASSIFICATION_DISPATCH_TABLE \u003d 0"},{"line_number":18,"context_line":"INGRESS_PRE_CT_TABLE \u003d 2"},{"line_number":19,"context_line":"INGRESS_CT_TABLE \u003d 4"},{"line_number":20,"context_line":"INGRESS_SECURITY_GROUP_TABLE \u003d 7"},{"line_number":21,"context_line":"EGRESS_PRE_CT_TABLE \u003d 3"},{"line_number":22,"context_line":"EGRESS_CT_TABLE \u003d 5"},{"line_number":23,"context_line":"EGRESS_SECURITY_GROUP_TABLE \u003d 6"},{"line_number":24,"context_line":"INGRESS_DISPATCH_TABLE \u003d 8"},{"line_number":25,"context_line":"SERVICES_CLASSIFICATION_TABLE \u003d 9"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_d1e1479c","line":22,"range":{"start_line":19,"start_character":0,"end_line":22,"end_character":19},"in_reply_to":"dae33548_3b021270","updated":"2016-02-16 10:56:10.000000000","message":"will do","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"fd2b3835ea73a0d8c7ce9a59a7e860615d72a4b2","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Pipline Table numbers"},{"line_number":17,"context_line":"INGRESS_CLASSIFICATION_DISPATCH_TABLE \u003d 0"},{"line_number":18,"context_line":"INGRESS_PRE_CONNTRACK_TABLE \u003d 2"},{"line_number":19,"context_line":"INGRESS_CONNTRACK_TABLE \u003d 4"},{"line_number":20,"context_line":"INGRESS_SECURITY_GROUP_TABLE \u003d 7"},{"line_number":21,"context_line":"EGRESS_PRE_CONNTRACK_TABLE \u003d 3"},{"line_number":22,"context_line":"EGRESS_CONNTRACK_TABLE \u003d 5"},{"line_number":23,"context_line":"EGRESS_SECURITY_GROUP_TABLE \u003d 6"},{"line_number":24,"context_line":"INGRESS_DISPATCH_TABLE \u003d 8"},{"line_number":25,"context_line":"SERVICES_CLASSIFICATION_TABLE \u003d 9"},{"line_number":26,"context_line":"ARP_TABLE \u003d 10"},{"line_number":27,"context_line":"DHCP_TABLE \u003d 11"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_d6f8eb4b","line":24,"range":{"start_line":18,"start_character":0,"end_line":24,"end_character":26},"updated":"2016-03-15 04:12:42.000000000","message":"Suggest to sort it according to table num, just like other tables.","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"b4b5a2f19d96eaa7f3f3a30b6b818ab46df95846","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Pipline Table numbers"},{"line_number":17,"context_line":"INGRESS_CLASSIFICATION_DISPATCH_TABLE \u003d 0"},{"line_number":18,"context_line":"EGRESS_CONNTRACK_TABLE \u003d 3"},{"line_number":19,"context_line":"EGRESS_SECURITY_GROUP_TABLE \u003d 6"},{"line_number":20,"context_line":"SERVICES_CLASSIFICATION_TABLE \u003d 9"},{"line_number":21,"context_line":"ARP_TABLE \u003d 10"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_0216c7a6","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":26},"updated":"2016-03-22 09:31:02.000000000","message":"I think this table name is limited to \u0027conntrack\u0027 function.\nIf openvswitch change \u0027contrack\u0027 to other action, or we need to add some other flow items to this table, we need to adjust table name?","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"8475227c82e830988005e055f01d3ecf9238f581","unresolved":false,"context_lines":[{"line_number":36,"context_line":"PRIORITY_MEDIUM \u003d 100"},{"line_number":37,"context_line":"PRIORITY_HIGH \u003d 200"},{"line_number":38,"context_line":"PRIORITY_VERY_HIGH \u003d 300"},{"line_number":39,"context_line":"PRIORITY_CT_STATE \u003d 65534"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Connection Track flags"},{"line_number":42,"context_line":"CT_STATE_NEW \u003d 0x01"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a18252c_437397e7","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":17},"updated":"2016-04-13 13:45:55.000000000","message":"why do we need a priority that high  why not use our PRIORITY_VERY_HIGH constant","commit_id":"34a3c9594a00f1896ee59d443e029a23bacbf888"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"7231924ea06ba1dc8efc314fd2ef726cc7d7751f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"PRIORITY_MEDIUM \u003d 100"},{"line_number":37,"context_line":"PRIORITY_HIGH \u003d 200"},{"line_number":38,"context_line":"PRIORITY_VERY_HIGH \u003d 300"},{"line_number":39,"context_line":"PRIORITY_CT_STATE \u003d 65534"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Connection Track flags"},{"line_number":42,"context_line":"CT_STATE_NEW \u003d 0x01"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a18252c_2756625c","line":39,"range":{"start_line":39,"start_character":0,"end_line":39,"end_character":17},"in_reply_to":"5a18252c_437397e7","updated":"2016-04-13 14:28:52.000000000","message":"because in EGRESS_SECURITY_GROUP_TABLE or INGRESS_SECURITY_GROUP_TABLE, flows of security group rules will use priorities between 2 to 65533 (to avoiding overlaping each other in conjunctions flows match)","commit_id":"34a3c9594a00f1896ee59d443e029a23bacbf888"}],"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"9fbc038ff25fa92afaea91399e481f9a2d077b72","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":359,"context_line":"            self.security_group_deleted(secgroup_to_remove)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _update_security_group_rules(self, old_secgroup, new_secgroup):"},{"line_number":362,"context_line":"        new_secgroup_rules \u003d new_secgroup.rules"},{"line_number":363,"context_line":"        old_secgroup_rules \u003d old_secgroup.rules"},{"line_number":364,"context_line":"        for new_rule in new_secgroup_rules:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_8cea8272","line":361,"range":{"start_line":361,"start_character":8,"end_line":361,"end_character":36},"updated":"2016-04-01 10:09:26.000000000","message":"update better del first，add second，avoid reach max flows limit","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"494c240cc5cb1eb05358e17f8702d926428fb7ba","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        for secgroup_to_remove in secgroups_to_remove:"},{"line_number":359,"context_line":"            self.security_group_deleted(secgroup_to_remove)"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def _update_security_group_rules(self, old_secgroup, new_secgroup):"},{"line_number":362,"context_line":"        new_secgroup_rules \u003d new_secgroup.rules"},{"line_number":363,"context_line":"        old_secgroup_rules \u003d old_secgroup.rules"},{"line_number":364,"context_line":"        for new_rule in new_secgroup_rules:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_fe05c710","line":361,"range":{"start_line":361,"start_character":8,"end_line":361,"end_character":36},"in_reply_to":"ba0121b8_8cea8272","updated":"2016-04-11 02:59:29.000000000","message":"Add rules firstly can avoiding interrupting connections","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"d7bca246c78d5376836925eb8a88311a13919ef3","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _add_new_security_group(self, secgroup):"},{"line_number":374,"context_line":"        for new_rule in secgroup.rules:"},{"line_number":375,"context_line":"            self._add_new_security_group_rule(secgroup, new_rule)"},{"line_number":376,"context_line":"        self.db_store.update_security_group(secgroup.name, secgroup)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _delete_old_security_group(self, secgroup):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_29f1a8cd","line":375,"range":{"start_line":375,"start_character":17,"end_line":375,"end_character":45},"updated":"2016-04-01 02:33:45.000000000","message":"add，delete api something like that，if you add del failed，seem still will update local db","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"494c240cc5cb1eb05358e17f8702d926428fb7ba","unresolved":false,"context_lines":[{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def _add_new_security_group(self, secgroup):"},{"line_number":374,"context_line":"        for new_rule in secgroup.rules:"},{"line_number":375,"context_line":"            self._add_new_security_group_rule(secgroup, new_rule)"},{"line_number":376,"context_line":"        self.db_store.update_security_group(secgroup.name, secgroup)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def _delete_old_security_group(self, secgroup):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_7eaed7e6","line":375,"range":{"start_line":375,"start_character":17,"end_line":375,"end_character":45},"in_reply_to":"ba0121b8_29f1a8cd","updated":"2016-04-11 02:59:29.000000000","message":"The process is just same as those processes of other resources. So I thought maybe we doesn\u0027t need to think about this singly.","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                const.PRIORITY_MEDIUM,"},{"line_number":67,"context_line":"                const.ARP_TABLE, match\u003dmatch)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # Default: traffic \u003d\u003e send to service classification table"},{"line_number":70,"context_line":"        self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":71,"context_line":"                const.EGRESS_PRE_CT_TABLE,"},{"line_number":72,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":73,"context_line":"                const.SERVICES_CLASSIFICATION_TABLE)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # Default: traffic \u003d\u003e send to dispatch table"},{"line_number":76,"context_line":"        self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":77,"context_line":"                const.INGRESS_PRE_CT_TABLE,"},{"line_number":78,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":79,"context_line":"                const.INGRESS_DISPATCH_TABLE)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self._install_flows_on_switch_up()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_7bd77abf","line":79,"range":{"start_line":69,"start_character":0,"end_line":79,"end_character":45},"updated":"2016-02-16 09:10:36.000000000","message":"Consider moving to a more suitable location. This is relating to connection tracking, and does not relate to L2.","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                const.PRIORITY_MEDIUM,"},{"line_number":67,"context_line":"                const.ARP_TABLE, match\u003dmatch)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # Default: traffic \u003d\u003e send to service classification table"},{"line_number":70,"context_line":"        self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":71,"context_line":"                const.EGRESS_PRE_CT_TABLE,"},{"line_number":72,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":73,"context_line":"                const.SERVICES_CLASSIFICATION_TABLE)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        # Default: traffic \u003d\u003e send to dispatch table"},{"line_number":76,"context_line":"        self.add_flow_go_to_table(self.get_datapath(),"},{"line_number":77,"context_line":"                const.INGRESS_PRE_CT_TABLE,"},{"line_number":78,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":79,"context_line":"                const.INGRESS_DISPATCH_TABLE)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        self._install_flows_on_switch_up()"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_d17dc7b2","line":79,"range":{"start_line":69,"start_character":0,"end_line":79,"end_character":45},"in_reply_to":"dae33548_7bd77abf","updated":"2016-02-16 10:56:10.000000000","message":"Actually, this is not relating to connection tracking, the flow here installed is to let all the packet pass the connection tracking table if sg app is not enabled(loaded).","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":258,"context_line":"            table_id\u003dconst.INGRESS_CLASSIFICATION_DISPATCH_TABLE,"},{"line_number":259,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":260,"context_line":"            match\u003dmatch)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        # Dispatch to local port according to unique tunnel_id"},{"line_number":263,"context_line":"        actions \u003d []"},{"line_number":264,"context_line":"        actions.append(parser.OFPActionOutput(ofport,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_963df5bd","line":261,"updated":"2016-02-16 09:10:36.000000000","message":"In general, there is a lot of code here that is not l2-app specific, but is general to the Dragonflow pipeline.","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Go to dispatch table according to unique tunnel_id"},{"line_number":250,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dtunnel_key)"},{"line_number":251,"context_line":"        actions \u003d []"},{"line_number":252,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":253,"context_line":"            const.INGRESS_PRE_CONNTRACK_TABLE)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_41c2a234","line":251,"updated":"2016-03-13 07:04:09.000000000","message":"This variable is unused.","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1ed83ab84689762b8731ca5f78038ecd788b0d3","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Go to dispatch table according to unique tunnel_id"},{"line_number":250,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dtunnel_key)"},{"line_number":251,"context_line":"        actions \u003d []"},{"line_number":252,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":253,"context_line":"            const.INGRESS_PRE_CONNTRACK_TABLE)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_c787e20d","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":15},"updated":"2016-03-13 11:05:38.000000000","message":"please remove","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"722cbc3b76d8fe313202cb53cf47078638a2cb8c","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Go to dispatch table according to unique tunnel_id"},{"line_number":250,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dtunnel_key)"},{"line_number":251,"context_line":"        actions \u003d []"},{"line_number":252,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":253,"context_line":"            const.INGRESS_PRE_CONNTRACK_TABLE)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_29b70bf6","line":251,"in_reply_to":"3afc51ec_41c2a234","updated":"2016-04-11 02:58:47.000000000","message":"Done","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"722cbc3b76d8fe313202cb53cf47078638a2cb8c","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Go to dispatch table according to unique tunnel_id"},{"line_number":250,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dtunnel_key)"},{"line_number":251,"context_line":"        actions \u003d []"},{"line_number":252,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":253,"context_line":"            const.INGRESS_PRE_CONNTRACK_TABLE)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9a061dce_89d0d720","line":251,"range":{"start_line":251,"start_character":8,"end_line":251,"end_character":15},"in_reply_to":"3afc51ec_c787e20d","updated":"2016-04-11 02:58:47.000000000","message":"Done","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"ea3b12d503b32ab77410fc5b1a94aa8ab15eed22","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            match\u003dmatch)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        # Egress classifier for port"},{"line_number":307,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dtunnel_key)"},{"line_number":308,"context_line":"        actions \u003d [parser.OFPActionSetField(metadata\u003dnetwork_id)]"},{"line_number":309,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":310,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":311,"context_line":"        goto_inst \u003d \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_060e1734","line":308,"range":{"start_line":307,"start_character":7,"end_line":308,"end_character":65},"updated":"2016-03-21 08:10:42.000000000","message":"Do not need to set metadata again, because thus has been done in table 0.","commit_id":"bfea6cd64e8b93f8a4a7cc4e87ad035313d3968a"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"6b12011aa50593bfc64d64c3cd294f61598bdde1","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            match\u003dmatch)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        # Egress classifier for port"},{"line_number":307,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dtunnel_key)"},{"line_number":308,"context_line":"        actions \u003d [parser.OFPActionSetField(metadata\u003dnetwork_id)]"},{"line_number":309,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":310,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":311,"context_line":"        goto_inst \u003d \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_1ed01453","line":308,"range":{"start_line":307,"start_character":6,"end_line":308,"end_character":65},"updated":"2016-03-21 12:37:38.000000000","message":"Do not need to set metadata again, because thus has been done in table 0. With L3, destination network is modified in L3_Lookup_table","commit_id":"bfea6cd64e8b93f8a4a7cc4e87ad035313d3968a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"82583af66fa9ec37bd3582ebd38149224a71bc51","unresolved":false,"context_lines":[{"line_number":304,"context_line":"            match\u003dmatch)"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        # Egress classifier for port"},{"line_number":307,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dtunnel_key)"},{"line_number":308,"context_line":"        actions \u003d [parser.OFPActionSetField(metadata\u003dnetwork_id)]"},{"line_number":309,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":310,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":311,"context_line":"        goto_inst \u003d \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_d14e98c0","line":308,"range":{"start_line":307,"start_character":7,"end_line":308,"end_character":65},"in_reply_to":"fa0719c6_060e1734","updated":"2016-03-21 12:29:21.000000000","message":"This flow is in the egress table, and it matches thus packets which are sent from a local VM port to anther local VM port. In table 0, the source network id has been set to the metadate, but it is needed to change the metadata value with the destination network id by this flow.","commit_id":"bfea6cd64e8b93f8a4a7cc4e87ad035313d3968a"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"585476302f3563f427b2e709b987bd5c7d5ac379","unresolved":false,"context_lines":[{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        # Egress classifier for port"},{"line_number":307,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dtunnel_key)"},{"line_number":308,"context_line":"        actions \u003d [parser.OFPActionSetField(metadata\u003dnetwork_id)]"},{"line_number":309,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":310,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":311,"context_line":"        goto_inst \u003d \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_e2abd31b","line":308,"range":{"start_line":308,"start_character":5,"end_line":308,"end_character":65},"updated":"2016-03-23 10:24:02.000000000","message":"redundant action, because with L2, metadata is set in talbe 0, with L3, metadata is modified in table L3_Lookup_table","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"5b31d5b23ab00a111d04971ca638957106ec97a6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            out_group\u003dofproto.OFPG_ANY,"},{"line_number":139,"context_line":"            match\u003dmatch)"},{"line_number":140,"context_line":"        self.get_datapath().send_msg(msg)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Remove destination classifier for port"},{"line_number":143,"context_line":"        match \u003d parser.OFPMatch()"},{"line_number":144,"context_line":"        match.set_metadata(network_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da0c15f0_fdaec496","line":141,"updated":"2016-03-28 07:58:12.000000000","message":"Flows in const.INGRESS_DISPATCH_TABLE table also need to be deleted during the local port offline process.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Go to dispatch table according to unique tunnel_id"},{"line_number":250,"context_line":"        match \u003d parser.OFPMatch(tunnel_id_nxm\u003dtunnel_key)"},{"line_number":251,"context_line":"        actions \u003d []"},{"line_number":252,"context_line":"        actions.append(parser.OFPActionSetField(reg7\u003dtunnel_key))"},{"line_number":253,"context_line":"        actions.append(parser.OFPActionSetField(metadata\u003dnetwork_id))"},{"line_number":254,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_b140cf35","line":251,"updated":"2016-03-23 11:32:31.000000000","message":"Consider initialising actions to contain the re7 and metadata SetField actions, rather than initialising actions to the empty list and appending these actions immediately afterwards.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        # Dispatch to local port according to unique tunnel_id"},{"line_number":267,"context_line":"        match \u003d parser.OFPMatch(reg7\u003dtunnel_key)"},{"line_number":268,"context_line":"        actions \u003d []"},{"line_number":269,"context_line":"        actions.append(parser.OFPActionOutput(ofport,"},{"line_number":270,"context_line":"                                              ofproto.OFPCML_NO_BUFFER))"},{"line_number":271,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_916cabd1","line":268,"updated":"2016-03-23 11:32:31.000000000","message":"Same here","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"}],"dragonflow/controller/sg_app.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            recirc_table\u003dconst.INGRESS_CT_TABLE, zone_ofs_nbits\u003d15,"},{"line_number":62,"context_line":"            zone_src\u003dMETADATA_REG))"},{"line_number":63,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":64,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":65,"context_line":"        self.mod_flow("},{"line_number":66,"context_line":"            self.get_datapath(),"},{"line_number":67,"context_line":"            inst\u003dinst,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_9692159e","line":64,"updated":"2016-02-16 09:10:36.000000000","message":"Actions here contains also the egress action (added on line 47). Is this intentional?","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            recirc_table\u003dconst.INGRESS_CT_TABLE, zone_ofs_nbits\u003d15,"},{"line_number":62,"context_line":"            zone_src\u003dMETADATA_REG))"},{"line_number":63,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":64,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":65,"context_line":"        self.mod_flow("},{"line_number":66,"context_line":"            self.get_datapath(),"},{"line_number":67,"context_line":"            inst\u003dinst,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_0dcb8ba6","line":64,"in_reply_to":"dae33548_9692159e","updated":"2016-02-16 10:56:10.000000000","message":"will do","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":65,"context_line":"        self.mod_flow("},{"line_number":66,"context_line":"            self.get_datapath(),"},{"line_number":67,"context_line":"            inst\u003dinst,"},{"line_number":68,"context_line":"            table_id\u003dconst.INGRESS_PRE_CT_TABLE,"},{"line_number":69,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":70,"context_line":"            match\u003dmatch)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_56b40dd0","line":67,"updated":"2016-02-16 09:10:36.000000000","message":"inst still contains previous action_inst (from lines 50-52) and not action_inst directly above. Is this intentional?","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":65,"context_line":"        self.mod_flow("},{"line_number":66,"context_line":"            self.get_datapath(),"},{"line_number":67,"context_line":"            inst\u003dinst,"},{"line_number":68,"context_line":"            table_id\u003dconst.INGRESS_PRE_CT_TABLE,"},{"line_number":69,"context_line":"            priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":70,"context_line":"            match\u003dmatch)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_2d476f1e","line":67,"in_reply_to":"dae33548_56b40dd0","updated":"2016-02-16 10:56:10.000000000","message":"no. you are right. will do","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # est state, pass"},{"line_number":73,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":74,"context_line":"                                ct_state\u003d(CT_STATE_TRK | CT_STATE_EST, 0x3f))"},{"line_number":75,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":76,"context_line":"                    const.SERVICES_CLASSIFICATION_TABLE)"},{"line_number":77,"context_line":"        inst \u003d [goto_inst]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_76f4b1f1","line":74,"range":{"start_line":74,"start_character":71,"end_line":74,"end_character":75},"updated":"2016-02-16 09:10:36.000000000","message":"What is this constant? Consider making it a global constant.","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        # est state, pass"},{"line_number":73,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":74,"context_line":"                                ct_state\u003d(CT_STATE_TRK | CT_STATE_EST, 0x3f))"},{"line_number":75,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":76,"context_line":"                    const.SERVICES_CLASSIFICATION_TABLE)"},{"line_number":77,"context_line":"        inst \u003d [goto_inst]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_ed12a708","line":74,"range":{"start_line":74,"start_character":71,"end_line":74,"end_character":75},"in_reply_to":"dae33548_76f4b1f1","updated":"2016-02-16 10:56:10.000000000","message":"It is mask of ct_state. Will do","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # inv state, drop"},{"line_number":116,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":117,"context_line":"                                ct_state\u003d(CT_STATE_TRK | CT_STATE_INV, 0x3f))"},{"line_number":118,"context_line":"        self.mod_flow("},{"line_number":119,"context_line":"             self.get_datapath(),"},{"line_number":120,"context_line":"             table_id\u003dconst.EGRESS_CT_TABLE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_76279164","line":117,"range":{"start_line":117,"start_character":71,"end_line":117,"end_character":76},"updated":"2016-02-16 09:10:36.000000000","message":"Same here re: constant","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        # inv state, drop"},{"line_number":116,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":117,"context_line":"                                ct_state\u003d(CT_STATE_TRK | CT_STATE_INV, 0x3f))"},{"line_number":118,"context_line":"        self.mod_flow("},{"line_number":119,"context_line":"             self.get_datapath(),"},{"line_number":120,"context_line":"             table_id\u003dconst.EGRESS_CT_TABLE,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_4dfab3be","line":117,"range":{"start_line":117,"start_character":71,"end_line":117,"end_character":76},"in_reply_to":"dae33548_76279164","updated":"2016-02-16 10:56:10.000000000","message":"ditto","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"3a3f2e3119002637d7424f4862e6abbe272179bb","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # new state, goto security group table"},{"line_number":131,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":132,"context_line":"                                ct_state\u003d(CT_STATE_TRK | CT_STATE_NEW, 0x3f))"},{"line_number":133,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":134,"context_line":"                    const.EGRESS_SECURITY_GROUP_TABLE)"},{"line_number":135,"context_line":"        inst \u003d [goto_inst]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_961cd514","line":132,"range":{"start_line":132,"start_character":71,"end_line":132,"end_character":75},"updated":"2016-02-16 09:10:36.000000000","message":"Same here re: constant","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":18668,"name":"ding bo","email":"longddropt@163.com","username":"longddropt"},"change_message_id":"f6aa8f85aeca05d30afb1c14017cb23d31bf9572","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        # new state, goto security group table"},{"line_number":131,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":132,"context_line":"                                ct_state\u003d(CT_STATE_TRK | CT_STATE_NEW, 0x3f))"},{"line_number":133,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":134,"context_line":"                    const.EGRESS_SECURITY_GROUP_TABLE)"},{"line_number":135,"context_line":"        inst \u003d [goto_inst]"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_cd2c034d","line":132,"range":{"start_line":132,"start_character":71,"end_line":132,"end_character":75},"in_reply_to":"dae33548_961cd514","updated":"2016-02-16 10:56:10.000000000","message":"ditto","commit_id":"c2c13155e686af4a63beeae636434d93db1f6c45"},{"author":{"_account_id":11364,"name":"Fei Rao","email":"milo.frao@gmail.com","username":"milo.frao"},"change_message_id":"d471444d269c1a313d3933c728664cdbd7e85b9c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                ct_state\u003d(CT_STATE_TRK | CT_STATE_REL, CT_STATE_MASK))"},{"line_number":100,"context_line":"        self.mod_flow("},{"line_number":101,"context_line":"             self.get_datapath(),"},{"line_number":102,"context_line":"             inst\u003dinst,"},{"line_number":103,"context_line":"             table_id\u003dconst.EGRESS_CONNTRACK_TABLE,"},{"line_number":104,"context_line":"             priority\u003dconst.PRIORITY_MEDIUM,"},{"line_number":105,"context_line":"             match\u003dmatch)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dae33548_7c889071","line":102,"range":{"start_line":102,"start_character":13,"end_line":102,"end_character":23},"updated":"2016-02-18 08:01:12.000000000","message":"Here, \u0027inst\u0027 isn\u0027t assigned again and will quote the last one which equal to \u0027togo_inst(INGRESS_DISPATCH_TABLE)\u0027. is it correct? from EGRESS_CONNTRACK_TABLE goto INGRESS_DISPATCH_TABLE?","commit_id":"2cfdb6f4aa57fdbec454c398369c0fc942d33fd5"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1ed83ab84689762b8731ca5f78038ecd788b0d3","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"config.setup_logging()"},{"line_number":24,"context_line":"LOG \u003d log.getLogger(\"dragonflow.controller.df_local_controller\")"},{"line_number":25,"context_line":"CT_STATE_NEW \u003d 0x01"},{"line_number":26,"context_line":"CT_STATE_EST \u003d 0x02"},{"line_number":27,"context_line":"CT_STATE_REL \u003d 0x04"},{"line_number":28,"context_line":"CT_STATE_RPL \u003d 0x08"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_eca5a504","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":12},"updated":"2016-03-13 11:05:38.000000000","message":"Consider adding all this constant in another file I assume other application will use in the future the CT feature","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1ed83ab84689762b8731ca5f78038ecd788b0d3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"CT_STATE_RPL \u003d 0x08"},{"line_number":29,"context_line":"CT_STATE_INV \u003d 0x10"},{"line_number":30,"context_line":"CT_STATE_TRK \u003d 0x20"},{"line_number":31,"context_line":"METADATA_REG \u003d 0x80000408"},{"line_number":32,"context_line":"CT_ZONE_REG \u003d 0x1d402"},{"line_number":33,"context_line":"CT_FLAG_COMMIT \u003d 1"},{"line_number":34,"context_line":"CT_STATE_MASK \u003d CT_STATE_NEW | CT_STATE_EST | CT_STATE_INV | CT_STATE_TRK \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_ccaa69d4","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":12},"updated":"2016-03-13 11:05:38.000000000","message":"I am not sure I understand  this value for the source Zone","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CT_ZONE_REG \u003d 0x1d402"},{"line_number":33,"context_line":"CT_FLAG_COMMIT \u003d 1"},{"line_number":34,"context_line":"CT_STATE_MASK \u003d CT_STATE_NEW | CT_STATE_EST | CT_STATE_INV | CT_STATE_TRK \\"},{"line_number":35,"context_line":"                | CT_STATE_REL"},{"line_number":36,"context_line":"COOKIE_FULLMASK \u003d 0xffffffffffffffff"},{"line_number":37,"context_line":"PRIORITY_OFFSET \u003d 1"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_c1ecf2c9","line":35,"updated":"2016-03-13 07:04:09.000000000","message":"CT_STATE_RPL was left out. Was this intentional?","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        self.install_init_flow_by_direction(\u0027ingress\u0027)"},{"line_number":56,"context_line":"        self.install_init_flow_by_direction(\u0027egress\u0027)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def install_init_flow_by_direction(self, direction):"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":61,"context_line":"        ofproto \u003d self.get_datapath().ofproto"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_61dcfe12","line":58,"updated":"2016-03-13 07:04:09.000000000","message":"Consider separating this method into two: one for ingress, one for egress. Common code bits can be shared via additional private methods.","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1ed83ab84689762b8731ca5f78038ecd788b0d3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        actions.append(parser.NXActionCT(actions\u003d[], alg\u003d0, flags\u003d0,"},{"line_number":80,"context_line":"                                         recirc_table\u003drecirc_table,"},{"line_number":81,"context_line":"                                         zone_ofs_nbits\u003d15,"},{"line_number":82,"context_line":"                                         zone_src\u003dMETADATA_REG))"},{"line_number":83,"context_line":"        action_inst \u003d self.get_datapath().ofproto_parser.OFPInstructionActions("},{"line_number":84,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":85,"context_line":"        inst \u003d [action_inst]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_2c978d91","line":82,"range":{"start_line":82,"start_character":41,"end_line":82,"end_character":49},"updated":"2016-03-13 11:05:38.000000000","message":"I am not sure i understand the zone should be related to the Tenant or Virtual L2 domain","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            match\u003dmatch)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # let the dhcp packet pass"},{"line_number":94,"context_line":"        if direction \u003d\u003d \u0027egress\u0027:"},{"line_number":95,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":96,"context_line":"                                    ip_proto\u003d17,"},{"line_number":97,"context_line":"                                    udp_src\u003d68,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_81094a98","line":94,"updated":"2016-03-13 07:04:09.000000000","message":"Why blindly let the DHCP packet pass? An admin may want DHCP packets only to reach DHCP servers, and no other hosts. If using the DF DHCP App, DHCP packets are never outbound anyway.","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"a1ed83ab84689762b8731ca5f78038ecd788b0d3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            match\u003dmatch)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # let the dhcp packet pass"},{"line_number":94,"context_line":"        if direction \u003d\u003d \u0027egress\u0027:"},{"line_number":95,"context_line":"            match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP,"},{"line_number":96,"context_line":"                                    ip_proto\u003d17,"},{"line_number":97,"context_line":"                                    udp_src\u003d68,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_0cc29185","line":94,"in_reply_to":"3afc51ec_81094a98","updated":"2016-03-13 11:05:38.000000000","message":"I agree with Omer that we should not classify the DHCP  again here\n\nThe flow from the VM is default  allow, so we could in that direction if not blocked by SG go to service table,","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def remove_local_port(self, lport):"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        # TODO(dingbo) remove SG related flow"},{"line_number":190,"context_line":"        if self.get_datapath() is None:"},{"line_number":191,"context_line":"            return"},{"line_number":192,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_01f6da8e","line":189,"updated":"2016-03-13 07:04:09.000000000","message":"Is this comment still needed?","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        # TODO(dingbo) remove SG related flow"},{"line_number":190,"context_line":"        if self.get_datapath() is None:"},{"line_number":191,"context_line":"            return"},{"line_number":192,"context_line":"        pass"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":195,"context_line":"        ofproto \u003d self.get_datapath().ofproto"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_41f0e290","line":192,"range":{"start_line":192,"start_character":0,"end_line":192,"end_character":12},"updated":"2016-03-13 07:04:09.000000000","message":"Consider removing this line.","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def remove_remote_port(self, lport):"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        # TODO(dingbo) modify SG related flow"},{"line_number":258,"context_line":"        if self.get_datapath() is None:"},{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_a12ba6ea","line":257,"updated":"2016-03-13 07:04:09.000000000","message":"Is this comment still needed?","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b0ef66dfbbcf8a2b98461551f8b4a7f92ed71a08","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        # TODO(dingbo) modify SG related flow"},{"line_number":258,"context_line":"        if self.get_datapath() is None:"},{"line_number":259,"context_line":"            return"},{"line_number":260,"context_line":"        pass"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":263,"context_line":"        ofproto \u003d self.get_datapath().ofproto"}],"source_content_type":"text/x-python","patch_set":9,"id":"3afc51ec_81302a58","line":260,"range":{"start_line":260,"start_character":0,"end_line":260,"end_character":12},"updated":"2016-03-13 07:04:09.000000000","message":"Consider removing this line","commit_id":"b5a09281418f8578f00f4e98adc852cb666d6601"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"585476302f3563f427b2e709b987bd5c7d5ac379","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                      security_group_id)"},{"line_number":307,"context_line":"            return"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP, conj_id\u003dconj_id)"},{"line_number":310,"context_line":"        actions \u003d [parser.NXActionCT(actions\u003d[],"},{"line_number":311,"context_line":"                                     alg\u003d0,"},{"line_number":312,"context_line":"                                     flags\u003dconst.CT_FLAG_COMMIT,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_079219f6","line":309,"range":{"start_line":309,"start_character":45,"end_line":309,"end_character":58},"updated":"2016-03-23 10:24:02.000000000","message":"Ip is not necessary, because  EGRESS_CONNTRACK_TABLE  has include ip match.","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"30940136b41bb94c024ae7760b8f8ce5c3479c44","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                      security_group_id)"},{"line_number":307,"context_line":"            return"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP, conj_id\u003dconj_id)"},{"line_number":310,"context_line":"        actions \u003d [parser.NXActionCT(actions\u003d[],"},{"line_number":311,"context_line":"                                     alg\u003d0,"},{"line_number":312,"context_line":"                                     flags\u003dconst.CT_FLAG_COMMIT,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_4956bfce","line":309,"range":{"start_line":309,"start_character":45,"end_line":309,"end_character":58},"in_reply_to":"fa0719c6_079219f6","updated":"2016-04-11 02:59:11.000000000","message":"Must inlude a eth_type in the match then a CT action instruction can be specified.","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"026cce24f9320ce9278b9a6bfe3962c451d490fd","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        rule_id \u003d self._get_security_rule_mapping(secgroup_rule.id)"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"        match_list \u003d \\"},{"line_number":553,"context_line":"            SGApp._get_rule_flows_match_except_net_addresses(secgroup_rule)"},{"line_number":554,"context_line":""},{"line_number":555,"context_line":"        if secgroup_rule.direction \u003d\u003d \u0027ingress\u0027:"},{"line_number":556,"context_line":"            table_id \u003d const.INGRESS_SECURITY_GROUP_TABLE"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_b5408208","line":553,"range":{"start_line":553,"start_character":21,"end_line":553,"end_character":75},"updated":"2016-03-24 02:01:19.000000000","message":"allowedAddressPairs should be taken into account.","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"585476302f3563f427b2e709b987bd5c7d5ac379","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        # defaults of pre-sg-table to pass packet"},{"line_number":713,"context_line":"        goto_inst \u003d [parser.OFPInstructionGotoTable(goto_table_id)]"},{"line_number":714,"context_line":"        self.mod_flow("},{"line_number":715,"context_line":"             self.get_datapath(),"},{"line_number":716,"context_line":"             inst\u003dgoto_inst,"},{"line_number":717,"context_line":"             table_id\u003dpre_table_id,"},{"line_number":718,"context_line":"             priority\u003dconst.PRIORITY_DEFAULT)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        # defaults of sg-table to drop packet"},{"line_number":721,"context_line":"        drop_inst \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_a4dc0e74","line":718,"range":{"start_line":713,"start_character":3,"end_line":718,"end_character":45},"updated":"2016-03-23 10:24:02.000000000","message":"This flow item should be installed by L2_APP as default flow.","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"30940136b41bb94c024ae7760b8f8ce5c3479c44","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        parser \u003d self.get_datapath().ofproto_parser"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        # defaults of pre-sg-table to pass packet"},{"line_number":713,"context_line":"        goto_inst \u003d [parser.OFPInstructionGotoTable(goto_table_id)]"},{"line_number":714,"context_line":"        self.mod_flow("},{"line_number":715,"context_line":"             self.get_datapath(),"},{"line_number":716,"context_line":"             inst\u003dgoto_inst,"},{"line_number":717,"context_line":"             table_id\u003dpre_table_id,"},{"line_number":718,"context_line":"             priority\u003dconst.PRIORITY_DEFAULT)"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        # defaults of sg-table to drop packet"},{"line_number":721,"context_line":"        drop_inst \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_69710376","line":718,"range":{"start_line":713,"start_character":3,"end_line":718,"end_character":45},"in_reply_to":"fa0719c6_a4dc0e74","updated":"2016-04-11 02:59:11.000000000","message":"Done","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"585476302f3563f427b2e709b987bd5c7d5ac379","unresolved":false,"context_lines":[{"line_number":950,"context_line":"            if associate_ports is None:"},{"line_number":951,"context_line":"                self.secgroup_associate_local_ports[secgroup_id] \u003d \\"},{"line_number":952,"context_line":"                    [lport.get_id()]"},{"line_number":953,"context_line":"                self._allocate_security_group_id(secgroup_id)"},{"line_number":954,"context_line":"                self._install_security_group_flows(secgroup_id)"},{"line_number":955,"context_line":"            elif lport.get_id() not in associate_ports:"},{"line_number":956,"context_line":"                associate_ports.append(lport.get_id())"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_5f85ff04","line":953,"range":{"start_line":953,"start_character":15,"end_line":953,"end_character":61},"updated":"2016-03-23 10:24:02.000000000","message":"Why not allocate security group id on receiving security_group_updated event?\nI think thus can simplify port related event.","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"30940136b41bb94c024ae7760b8f8ce5c3479c44","unresolved":false,"context_lines":[{"line_number":950,"context_line":"            if associate_ports is None:"},{"line_number":951,"context_line":"                self.secgroup_associate_local_ports[secgroup_id] \u003d \\"},{"line_number":952,"context_line":"                    [lport.get_id()]"},{"line_number":953,"context_line":"                self._allocate_security_group_id(secgroup_id)"},{"line_number":954,"context_line":"                self._install_security_group_flows(secgroup_id)"},{"line_number":955,"context_line":"            elif lport.get_id() not in associate_ports:"},{"line_number":956,"context_line":"                associate_ports.append(lport.get_id())"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a061dce_89e9f7e8","line":953,"range":{"start_line":953,"start_character":15,"end_line":953,"end_character":61},"in_reply_to":"fa0719c6_5f85ff04","updated":"2016-04-11 02:59:11.000000000","message":"By allocating local ids we don\u0027t need to limit the count of security groups.","commit_id":"28a57cb4dcbf53d21ac86036cd7fcbd25cc4f28b"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.remote_secgroup_ref \u003d {}"},{"line_number":43,"context_line":"        self.secgroup_associate_local_ports \u003d {}"},{"line_number":44,"context_line":"        self.secgroup_aggregate_addresses \u003d {}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def _split_range(range_start, range_end, full_mask):"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_bb3ee825","line":45,"updated":"2016-03-23 11:32:31.000000000","message":"These static methods are not specific to SGApp. They should be placed in a library module. Additionally, are there no external libraries that implement at least some of this behaviour? netaddr IPAddress objects have packed, bits, netmask_bits, and str methods which do a lot of the functionality used here. It also has a __contains__ attribute. There\u0027s also an IPRange object which managers IP ranges not bound to CIDRs, and can translate them to CIDRs (method cidrs).\n\nAdditionally, consider adding a docstring to explain at least the type and structure of the input arguments and output.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.remote_secgroup_ref \u003d {}"},{"line_number":43,"context_line":"        self.secgroup_associate_local_ports \u003d {}"},{"line_number":44,"context_line":"        self.secgroup_aggregate_addresses \u003d {}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @staticmethod"},{"line_number":47,"context_line":"    def _split_range(range_start, range_end, full_mask):"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_959bbc65","line":45,"in_reply_to":"fa0719c6_bb3ee825","updated":"2016-04-11 02:59:20.000000000","message":"We need merge this to the master before the time when merging new features are frozen, so I hope to fix this by bug fix way.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if ((last_temp_start \u0026 bit_flag) \u003d\u003d 0) and \\"},{"line_number":56,"context_line":"                    ((last_temp_end + bit_flag) \u003c\u003d range_end):"},{"line_number":57,"context_line":"                last_temp_end +\u003d bit_flag"},{"line_number":58,"context_line":"                bit_flag \u003c\u003c\u003d 1"},{"line_number":59,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_bb01c83a","line":56,"range":{"start_line":56,"start_character":36,"end_line":56,"end_character":38},"updated":"2016-03-23 11:32:31.000000000","message":"Do you need addition, or bitwise OR?","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if ((last_temp_start \u0026 bit_flag) \u003d\u003d 0) and \\"},{"line_number":56,"context_line":"                    ((last_temp_end + bit_flag) \u003c\u003d range_end):"},{"line_number":57,"context_line":"                last_temp_end +\u003d bit_flag"},{"line_number":58,"context_line":"                bit_flag \u003c\u003c\u003d 1"},{"line_number":59,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_0984c75b","line":56,"range":{"start_line":56,"start_character":36,"end_line":56,"end_character":38},"in_reply_to":"fa0719c6_bb01c83a","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if ((last_temp_start \u0026 bit_flag) \u003d\u003d 0) and \\"},{"line_number":56,"context_line":"                    ((last_temp_end + bit_flag) \u003c\u003d range_end):"},{"line_number":57,"context_line":"                last_temp_end +\u003d bit_flag"},{"line_number":58,"context_line":"                bit_flag \u003c\u003c\u003d 1"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                mask \u003d full_mask - (bit_flag - 1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_fbf7c056","line":57,"range":{"start_line":57,"start_character":30,"end_line":57,"end_character":32},"updated":"2016-03-23 11:32:31.000000000","message":"Same here","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        while True:"},{"line_number":55,"context_line":"            if ((last_temp_start \u0026 bit_flag) \u003d\u003d 0) and \\"},{"line_number":56,"context_line":"                    ((last_temp_end + bit_flag) \u003c\u003d range_end):"},{"line_number":57,"context_line":"                last_temp_end +\u003d bit_flag"},{"line_number":58,"context_line":"                bit_flag \u003c\u003c\u003d 1"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                mask \u003d full_mask - (bit_flag - 1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_497a3f78","line":57,"range":{"start_line":57,"start_character":30,"end_line":57,"end_character":32},"in_reply_to":"fa0719c6_fbf7c056","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                 (current_prefix \u0026 prefix_mask)) and \\"},{"line_number":77,"context_line":"                ((last_item[\"prefix\"] \u0026 bit_check_flag) !\u003d"},{"line_number":78,"context_line":"                 (current_prefix \u0026 bit_check_flag)):"},{"line_number":79,"context_line":"            return True, prefix_mask"},{"line_number":80,"context_line":"        return False, None"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_967ad975","line":79,"updated":"2016-03-23 11:32:31.000000000","message":"Consider returning only prefix_mask, and inferring failure if it is None.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                 (current_prefix \u0026 prefix_mask)) and \\"},{"line_number":77,"context_line":"                ((last_item[\"prefix\"] \u0026 bit_check_flag) !\u003d"},{"line_number":78,"context_line":"                 (current_prefix \u0026 bit_check_flag)):"},{"line_number":79,"context_line":"            return True, prefix_mask"},{"line_number":80,"context_line":"        return False, None"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_69958385","line":79,"in_reply_to":"fa0719c6_967ad975","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                break"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if position is None:"},{"line_number":127,"context_line":"            left_array \u003d cidr_array[:len(cidr_array)]"},{"line_number":128,"context_line":"            right_array \u003d []"},{"line_number":129,"context_line":"        else:"},{"line_number":130,"context_line":"            left_array \u003d cidr_array[:position]"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_96fc9973","line":127,"updated":"2016-03-23 11:32:31.000000000","message":"If this is meant to clone cidr_array, why not use \u0027list(cidr_array)\u0027?","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                break"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        if position is None:"},{"line_number":127,"context_line":"            left_array \u003d cidr_array[:len(cidr_array)]"},{"line_number":128,"context_line":"            right_array \u003d []"},{"line_number":129,"context_line":"        else:"},{"line_number":130,"context_line":"            left_array \u003d cidr_array[:position]"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_c98e4f78","line":127,"in_reply_to":"fa0719c6_96fc9973","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                    current_mask \u003d new_mask"},{"line_number":152,"context_line":"                    removed_cidr.append(left_item)"},{"line_number":153,"context_line":"                    continue_flag \u003d True"},{"line_number":154,"context_line":"                    pass"},{"line_number":155,"context_line":"                else:"},{"line_number":156,"context_line":"                    left_array.append(left_item)"},{"line_number":157,"context_line":"            if len(right_array) !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_36194dd8","line":154,"updated":"2016-03-23 11:32:31.000000000","message":"This line is not needed","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                    current_mask \u003d new_mask"},{"line_number":152,"context_line":"                    removed_cidr.append(left_item)"},{"line_number":153,"context_line":"                    continue_flag \u003d True"},{"line_number":154,"context_line":"                    pass"},{"line_number":155,"context_line":"                else:"},{"line_number":156,"context_line":"                    left_array.append(left_item)"},{"line_number":157,"context_line":"            if len(right_array) !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_a98b1b67","line":154,"in_reply_to":"fa0719c6_36194dd8","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"fb49313a7eef7ceffe5e382bab9df075b797aad9","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                    current_mask \u003d new_mask"},{"line_number":166,"context_line":"                    removed_cidr.append(right_item)"},{"line_number":167,"context_line":"                    continue_flag \u003d True"},{"line_number":168,"context_line":"                    pass"},{"line_number":169,"context_line":"                else:"},{"line_number":170,"context_line":"                    right_array.insert(0, right_item)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da0c15f0_c2667d28","line":168,"range":{"start_line":168,"start_character":20,"end_line":168,"end_character":24},"updated":"2016-03-28 07:24:55.000000000","message":"ditto","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                    current_mask \u003d new_mask"},{"line_number":166,"context_line":"                    removed_cidr.append(right_item)"},{"line_number":167,"context_line":"                    continue_flag \u003d True"},{"line_number":168,"context_line":"                    pass"},{"line_number":169,"context_line":"                else:"},{"line_number":170,"context_line":"                    right_array.insert(0, right_item)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_09eb2714","line":168,"range":{"start_line":168,"start_character":20,"end_line":168,"end_character":24},"in_reply_to":"da0c15f0_c2667d28","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        mask \u003d item[\"mask\"]"},{"line_number":188,"context_line":"        mask_length \u003d 32"},{"line_number":189,"context_line":"        for loop in range(32):"},{"line_number":190,"context_line":"            if (mask \u0026 1) \u003d\u003d 0:"},{"line_number":191,"context_line":"                mask_length -\u003d 1"},{"line_number":192,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_ea5d2c16","line":189,"updated":"2016-03-23 11:32:31.000000000","message":"Why do you need a loop here? It will run at most twice, and the last iteration will be a no-op (only break).","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        mask \u003d item[\"mask\"]"},{"line_number":188,"context_line":"        mask_length \u003d 32"},{"line_number":189,"context_line":"        for loop in range(32):"},{"line_number":190,"context_line":"            if (mask \u0026 1) \u003d\u003d 0:"},{"line_number":191,"context_line":"                mask_length -\u003d 1"},{"line_number":192,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_e9efd31b","line":189,"in_reply_to":"fa0719c6_ea5d2c16","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        return port_item[\"prefix\"]"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @staticmethod"},{"line_number":210,"context_line":"    def _get_port_match_name(protocol):"},{"line_number":211,"context_line":"        if protocol \u003d\u003d 1:"},{"line_number":212,"context_line":"            port_match_name \u003d \u0027icmpv4_type\u0027"},{"line_number":213,"context_line":"        elif protocol \u003d\u003d 6:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_782d73fd","line":210,"updated":"2016-03-23 11:32:31.000000000","message":"Consider using a constant dictionary with default values for lookup.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        return port_item[\"prefix\"]"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @staticmethod"},{"line_number":210,"context_line":"    def _get_port_match_name(protocol):"},{"line_number":211,"context_line":"        if protocol \u003d\u003d 1:"},{"line_number":212,"context_line":"            port_match_name \u003d \u0027icmpv4_type\u0027"},{"line_number":213,"context_line":"        elif protocol \u003d\u003d 6:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_100f7ce2","line":210,"in_reply_to":"fa0719c6_782d73fd","updated":"2016-04-11 02:59:20.000000000","message":"Will do","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        port_match_list \u003d [{}]"},{"line_number":243,"context_line":"        if ethertype \u003d\u003d \u0027IPv4\u0027:"},{"line_number":244,"context_line":"            dl_type_match[\"eth_type\"] \u003d ether.ETH_TYPE_IP"},{"line_number":245,"context_line":"            if protocol is not None:"},{"line_number":246,"context_line":"                if protocol \u003d\u003d \u0027icmp\u0027:"},{"line_number":247,"context_line":"                    protocol \u003d 1"},{"line_number":248,"context_line":"                elif protocol \u003d\u003d \u0027tcp\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_d86c7f37","line":245,"updated":"2016-03-23 11:32:31.000000000","message":"Consider moving to an external method, or making a property within secgroup_rule (e.g. protocol_number).","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        port_match_list \u003d [{}]"},{"line_number":243,"context_line":"        if ethertype \u003d\u003d \u0027IPv4\u0027:"},{"line_number":244,"context_line":"            dl_type_match[\"eth_type\"] \u003d ether.ETH_TYPE_IP"},{"line_number":245,"context_line":"            if protocol is not None:"},{"line_number":246,"context_line":"                if protocol \u003d\u003d \u0027icmp\u0027:"},{"line_number":247,"context_line":"                    protocol \u003d 1"},{"line_number":248,"context_line":"                elif protocol \u003d\u003d \u0027tcp\u0027:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_7069908b","line":245,"in_reply_to":"fa0719c6_d86c7f37","updated":"2016-04-11 02:59:20.000000000","message":"Will do.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"fb49313a7eef7ceffe5e382bab9df075b797aad9","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        elif ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":277,"context_line":"            # not support yet"},{"line_number":278,"context_line":"            dl_type_match[\"eth_type\"] \u003d ether.ETH_TYPE_IPV6"},{"line_number":279,"context_line":"            pass"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        for port_match in port_match_list:"},{"line_number":282,"context_line":"            parameters_merge \u003d dl_type_match.copy()"}],"source_content_type":"text/x-python","patch_set":14,"id":"da0c15f0_a2826992","line":279,"range":{"start_line":279,"start_character":12,"end_line":279,"end_character":16},"updated":"2016-03-28 07:24:55.000000000","message":"removing this line is safe.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        elif ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":277,"context_line":"            # not support yet"},{"line_number":278,"context_line":"            dl_type_match[\"eth_type\"] \u003d ether.ETH_TYPE_IPV6"},{"line_number":279,"context_line":"            pass"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        for port_match in port_match_list:"},{"line_number":282,"context_line":"            parameters_merge \u003d dl_type_match.copy()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_69dc6373","line":279,"range":{"start_line":279,"start_character":12,"end_line":279,"end_character":16},"in_reply_to":"da0c15f0_a2826992","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"5b31d5b23ab00a111d04971ca638957106ec97a6","unresolved":false,"context_lines":[{"line_number":648,"context_line":"            elif remote_ip_prefix is not None:"},{"line_number":649,"context_line":"                addresses_list \u003d [{"},{"line_number":650,"context_line":"                    ipv4_match_item: SGApp._get_network_and_mask("},{"line_number":651,"context_line":"                        SGApp._get_cidr_match(remote_ip_prefix)"},{"line_number":652,"context_line":"                    )"},{"line_number":653,"context_line":"                }]"},{"line_number":654,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"da0c15f0_fda2444a","line":651,"updated":"2016-03-28 07:58:12.000000000","message":"Should not call the \"_get_cidr_match\" function here, because of \"remote_ip_prefix\" is already a CIDR.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":648,"context_line":"            elif remote_ip_prefix is not None:"},{"line_number":649,"context_line":"                addresses_list \u003d [{"},{"line_number":650,"context_line":"                    ipv4_match_item: SGApp._get_network_and_mask("},{"line_number":651,"context_line":"                        SGApp._get_cidr_match(remote_ip_prefix)"},{"line_number":652,"context_line":"                    )"},{"line_number":653,"context_line":"                }]"},{"line_number":654,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_09d2075c","line":651,"in_reply_to":"da0c15f0_fda2444a","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"fb49313a7eef7ceffe5e382bab9df075b797aad9","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                        match\u003dmatch)"},{"line_number":668,"context_line":"        elif ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":669,"context_line":"            # not support yet"},{"line_number":670,"context_line":"            pass"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def _uninstall_security_group_rule_flows(self, secgroup_rule):"},{"line_number":673,"context_line":"        # uninstall rule flows by its cookie"}],"source_content_type":"text/x-python","patch_set":14,"id":"da0c15f0_625fb141","line":670,"range":{"start_line":670,"start_character":12,"end_line":670,"end_character":16},"updated":"2016-03-28 07:24:55.000000000","message":"suggest to provide a log record for this operation.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":667,"context_line":"                        match\u003dmatch)"},{"line_number":668,"context_line":"        elif ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":669,"context_line":"            # not support yet"},{"line_number":670,"context_line":"            pass"},{"line_number":671,"context_line":""},{"line_number":672,"context_line":"    def _uninstall_security_group_rule_flows(self, secgroup_rule):"},{"line_number":673,"context_line":"        # uninstall rule flows by its cookie"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_f013e00b","line":670,"range":{"start_line":670,"start_character":12,"end_line":670,"end_character":16},"in_reply_to":"da0c15f0_625fb141","updated":"2016-04-11 02:59:20.000000000","message":"Will do","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"5b31d5b23ab00a111d04971ca638957106ec97a6","unresolved":false,"context_lines":[{"line_number":748,"context_line":"             match\u003dmatch)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        # inv state, drop"},{"line_number":751,"context_line":"        match \u003d parser.OFPMatch(ct_state\u003d(const.CT_STATE_TRK |"},{"line_number":752,"context_line":"                                          const.CT_STATE_INV,"},{"line_number":753,"context_line":"                                          SG_CT_STATE_MASK))"},{"line_number":754,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":14,"id":"da0c15f0_1d5bb888","line":751,"updated":"2016-03-28 07:58:12.000000000","message":"The mask of the CT_STATE field should be \"CT_STATE_TRK | CT_STATE_INV\" instead of \"SG_CT_STATE_MASK\" for those packets have been marked with the invalid connection track flag.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":748,"context_line":"             match\u003dmatch)"},{"line_number":749,"context_line":""},{"line_number":750,"context_line":"        # inv state, drop"},{"line_number":751,"context_line":"        match \u003d parser.OFPMatch(ct_state\u003d(const.CT_STATE_TRK |"},{"line_number":752,"context_line":"                                          const.CT_STATE_INV,"},{"line_number":753,"context_line":"                                          SG_CT_STATE_MASK))"},{"line_number":754,"context_line":"        self.mod_flow("}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_e9d6b34d","line":751,"in_reply_to":"da0c15f0_1d5bb888","updated":"2016-04-11 02:59:20.000000000","message":"Done","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"c1177d4a377fb31f732055846f6d754df6818e8b","unresolved":false,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_secgroup_conj_id_and_priority(self, lgroup_id):"},{"line_number":810,"context_line":"        security_id \u003d self.secgroup_mappings.get(lgroup_id)"},{"line_number":811,"context_line":"        if security_id is not None:"},{"line_number":812,"context_line":"            return security_id, (2 + security_id)"},{"line_number":813,"context_line":"        return None, None"},{"line_number":814,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa0719c6_bba385ff","line":811,"updated":"2016-03-23 11:32:31.000000000","message":"Won\u0027t a KeyError be thrown in this case anyway?","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"a222a0445b82da2db80a7757f6b2bbd7af29ffe6","unresolved":false,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_secgroup_conj_id_and_priority(self, lgroup_id):"},{"line_number":810,"context_line":"        security_id \u003d self.secgroup_mappings.get(lgroup_id)"},{"line_number":811,"context_line":"        if security_id is not None:"},{"line_number":812,"context_line":"            return security_id, (2 + security_id)"},{"line_number":813,"context_line":"        return None, None"},{"line_number":814,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_f05c80ef","line":811,"in_reply_to":"fa0719c6_bba385ff","updated":"2016-04-11 02:59:20.000000000","message":"I tried locally, that the method of \"get\" with a dictionary wouldn\u0027t throw a \"KeyError\" exception when specifying a not existed key or a \"None\" key.","commit_id":"9d2ea22effed76804da6aa85ede5a33f8f5c7e5a"},{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"9fbc038ff25fa92afaea91399e481f9a2d077b72","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                    protocol \u003d int(protocol)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"                protocol_match[\"ip_proto\"] \u003d protocol"},{"line_number":253,"context_line":"                port_match_name \u003d SGApp._get_port_match_name(protocol)"},{"line_number":254,"context_line":"                if (port_range_min is not None) and \\"},{"line_number":255,"context_line":"                        (port_match_name is not None):"},{"line_number":256,"context_line":"                    port_match_list \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_dfd1ba24","line":253,"range":{"start_line":253,"start_character":40,"end_line":253,"end_character":60},"updated":"2016-04-01 10:09:26.000000000","message":"_get_port_match_name function seem is duplicate with if protocol case above","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"494c240cc5cb1eb05358e17f8702d926428fb7ba","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                    protocol \u003d int(protocol)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"                protocol_match[\"ip_proto\"] \u003d protocol"},{"line_number":253,"context_line":"                port_match_name \u003d SGApp._get_port_match_name(protocol)"},{"line_number":254,"context_line":"                if (port_range_min is not None) and \\"},{"line_number":255,"context_line":"                        (port_match_name is not None):"},{"line_number":256,"context_line":"                    port_match_list \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_fec02752","line":253,"range":{"start_line":253,"start_character":40,"end_line":253,"end_character":60},"in_reply_to":"ba0121b8_dfd1ba24","updated":"2016-04-11 02:59:29.000000000","message":"Not duplicate...The \"if protocol case\" above confirm the protocol has transformed to a number, while the‘if protocol case’below is to get port match name by protocol number.","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"9fbc038ff25fa92afaea91399e481f9a2d077b72","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                {port_match_name:"},{"line_number":271,"context_line":"                                 SGApp._get_port_range_match(port_item)}"},{"line_number":272,"context_line":"                            )"},{"line_number":273,"context_line":"        elif ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":274,"context_line":"            # not support yet"},{"line_number":275,"context_line":"            dl_type_match[\"eth_type\"] \u003d ether.ETH_TYPE_IPV6"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_5f076a81","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":32},"updated":"2016-04-01 10:09:26.000000000","message":"suggest add else for wrong ethertype","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"494c240cc5cb1eb05358e17f8702d926428fb7ba","unresolved":false,"context_lines":[{"line_number":270,"context_line":"                                {port_match_name:"},{"line_number":271,"context_line":"                                 SGApp._get_port_range_match(port_item)}"},{"line_number":272,"context_line":"                            )"},{"line_number":273,"context_line":"        elif ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":274,"context_line":"            # not support yet"},{"line_number":275,"context_line":"            dl_type_match[\"eth_type\"] \u003d ether.ETH_TYPE_IPV6"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_a92f9b86","line":273,"range":{"start_line":273,"start_character":8,"end_line":273,"end_character":32},"in_reply_to":"ba0121b8_5f076a81","updated":"2016-04-11 02:59:29.000000000","message":"Done","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":20298,"name":"feipeng","email":"feipeng1@huawei.com","username":"feipeng"},"change_message_id":"9fbc038ff25fa92afaea91399e481f9a2d077b72","unresolved":false,"context_lines":[{"line_number":797,"context_line":"    def _get_secgroup_conj_id_and_priority(self, lgroup_id):"},{"line_number":798,"context_line":"        security_id \u003d self.secgroup_mappings.get(lgroup_id)"},{"line_number":799,"context_line":"        if security_id is not None:"},{"line_number":800,"context_line":"            return security_id, (2 + security_id)"},{"line_number":801,"context_line":"        return None, None"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def remove_local_port(self, lport):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba0121b8_bf116654","line":800,"range":{"start_line":800,"start_character":33,"end_line":800,"end_character":34},"updated":"2016-04-01 10:09:26.000000000","message":"simple number not a good method，macro may be better","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"494c240cc5cb1eb05358e17f8702d926428fb7ba","unresolved":false,"context_lines":[{"line_number":797,"context_line":"    def _get_secgroup_conj_id_and_priority(self, lgroup_id):"},{"line_number":798,"context_line":"        security_id \u003d self.secgroup_mappings.get(lgroup_id)"},{"line_number":799,"context_line":"        if security_id is not None:"},{"line_number":800,"context_line":"            return security_id, (2 + security_id)"},{"line_number":801,"context_line":"        return None, None"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def remove_local_port(self, lport):"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_a95ddb16","line":800,"range":{"start_line":800,"start_character":33,"end_line":800,"end_character":34},"in_reply_to":"ba0121b8_bf116654","updated":"2016-04-11 02:59:29.000000000","message":"Done","commit_id":"43e64a81d9587a22f893db01635adbd010b4e8db"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"506c7f33bad13c3fec3a65c2a95027eda991c75f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.secgroup_associate_local_ports \u003d {}"},{"line_number":45,"context_line":"        self.secgroup_aggregate_addresses \u003d {}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _split_range(range_start, range_end, full_mask):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        bit_flag \u003d 1"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_f86c3238","line":47,"updated":"2016-04-10 05:51:13.000000000","message":"My comment from patchset 14 was not addressed:\n\nThese static methods are not specific to SGApp. They should be placed in a library module. Additionally, are there no external libraries that implement at least some of this behaviour? netaddr IPAddress objects have packed, bits, netmask_bits, and str methods which do a lot of the functionality used here. It also has a __contains__ attribute. There\u0027s also an IPRange object which managers IP ranges not bound to CIDRs, and can translate them to CIDRs (method cidrs).\nAdditionally, consider adding a docstring to explain at least the type and structure of the input arguments and output.","commit_id":"d49fb239fcdb13415e17890226888463499e65d5"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"df1471f10300bddd724294ba8d3d7104a807919c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.secgroup_associate_local_ports \u003d {}"},{"line_number":45,"context_line":"        self.secgroup_aggregate_addresses \u003d {}"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @staticmethod"},{"line_number":48,"context_line":"    def _split_range(range_start, range_end, full_mask):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        bit_flag \u003d 1"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a1b2928_50ca9450","line":47,"in_reply_to":"9a061dce_f86c3238","updated":"2016-04-11 03:12:48.000000000","message":"Sorry, I forget to upload my replies in patch set 14. I hope I could fix this by the \"fix bug\" way after we merging this feature to the master.","commit_id":"d49fb239fcdb13415e17890226888463499e65d5"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"506c7f33bad13c3fec3a65c2a95027eda991c75f","unresolved":false,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_secgroup_conj_id_and_priority(self, lgroup_id):"},{"line_number":810,"context_line":"        security_id \u003d self.secgroup_mappings.get(lgroup_id)"},{"line_number":811,"context_line":"        if security_id is not None:"},{"line_number":812,"context_line":"            return security_id, (SG_PRIORITY_OFFSET + security_id)"},{"line_number":813,"context_line":"        return None, None"},{"line_number":814,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_785f8275","line":811,"updated":"2016-04-10 05:51:13.000000000","message":"My comment from patchset 14 was not addressed. A KeyError will be thrown from the .get call anyway, and it is not handled.\n\nThis issue occurs in other places as well.","commit_id":"d49fb239fcdb13415e17890226888463499e65d5"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"df1471f10300bddd724294ba8d3d7104a807919c","unresolved":false,"context_lines":[{"line_number":808,"context_line":""},{"line_number":809,"context_line":"    def _get_secgroup_conj_id_and_priority(self, lgroup_id):"},{"line_number":810,"context_line":"        security_id \u003d self.secgroup_mappings.get(lgroup_id)"},{"line_number":811,"context_line":"        if security_id is not None:"},{"line_number":812,"context_line":"            return security_id, (SG_PRIORITY_OFFSET + security_id)"},{"line_number":813,"context_line":"        return None, None"},{"line_number":814,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a1b2928_d0dce41a","line":811,"in_reply_to":"9a061dce_785f8275","updated":"2016-04-11 03:12:48.000000000","message":"I tried locally, that the method of \"get\" with a dictionary wouldn\u0027t throw a \"KeyError\" exception when specifying a not existed key or a \"None\" key.","commit_id":"d49fb239fcdb13415e17890226888463499e65d5"},{"author":{"_account_id":20336,"name":"heshan","email":"shan.he@huawei.com","username":"shanhe"},"change_message_id":"41d2cae8b01734643e568145187ea70a8f23fbb6","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            return"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP, conj_id\u003dconj_id)"},{"line_number":355,"context_line":"        msg \u003d parser.OFPFlowMod("},{"line_number":356,"context_line":"                datapath\u003dself.get_datapath(),"},{"line_number":357,"context_line":"                table_id\u003dtable_id,"},{"line_number":358,"context_line":"                match\u003dmatch,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a18252c_65209b9c","line":355,"range":{"start_line":355,"start_character":21,"end_line":355,"end_character":31},"updated":"2016-04-12 12:02:01.000000000","message":"please use mod_flow to operate flows, don\u0027t use OFPFlowMod directly. the following patch could be referenced:\nhttps://review.openstack.org/#/c/304050/","commit_id":"0b7049c859eefa750fa19e55c6f2cea2b58344aa"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"b55c8e6409c008e0d6d39d347016f6aa7447e525","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            return"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"        match \u003d parser.OFPMatch(eth_type\u003dether.ETH_TYPE_IP, conj_id\u003dconj_id)"},{"line_number":355,"context_line":"        msg \u003d parser.OFPFlowMod("},{"line_number":356,"context_line":"                datapath\u003dself.get_datapath(),"},{"line_number":357,"context_line":"                table_id\u003dtable_id,"},{"line_number":358,"context_line":"                match\u003dmatch,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a18252c_e87c7722","line":355,"range":{"start_line":355,"start_character":21,"end_line":355,"end_character":31},"in_reply_to":"5a18252c_65209b9c","updated":"2016-04-12 14:32:17.000000000","message":"+1","commit_id":"0b7049c859eefa750fa19e55c6f2cea2b58344aa"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"b5a907ebce4a423c29967cf1c28cc2e387513acd","unresolved":false,"context_lines":[{"line_number":559,"context_line":"                table_id \u003d const.EGRESS_SECURITY_GROUP_TABLE"},{"line_number":560,"context_line":"                ipv4_match_item \u003d \"ipv4_dst\""},{"line_number":561,"context_line":"        elif secgroup_rule.ethertype \u003d\u003d \u0027IPv6\u0027:"},{"line_number":562,"context_line":"            # not support yet"},{"line_number":563,"context_line":"            return"},{"line_number":564,"context_line":"        else:"},{"line_number":565,"context_line":"            LOG.error(_LE(\"wrong ethernet type\"))"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a1b2928_ec5dc4ed","line":562,"range":{"start_line":562,"start_character":0,"end_line":562,"end_character":29},"updated":"2016-04-11 08:19:31.000000000","message":"currently, ipv6 is not supported, right? if so, please give a log warning here.","commit_id":"0b7049c859eefa750fa19e55c6f2cea2b58344aa"}]}
