)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"26a5dace39a1cb2b598900db3c4fb07f3e5c18c0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     yuanwei \u003cwei.yuan@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-05-09 19:48:25 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"This patch implement port security app"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Port security application will install or uninstall flows"},{"line_number":10,"context_line":"that let only the packets with valid ip and mac pass."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"dab17558_af34fafa","line":7,"range":{"start_line":7,"start_character":11,"end_line":7,"end_character":20},"updated":"2016-05-09 13:23:23.000000000","message":"nit: implement -\u003e implements","commit_id":"1529da2c8df985efac724da5cc074cac4d0cc7ee"}],"devstack/plugin.sh":[{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"26a5dace39a1cb2b598900db3c4fb07f3e5c18c0","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"DEFAULT_NB_DRIVER_CLASS\u003d\"dragonflow.db.drivers.etcd_db_driver.EtcdDbDriver\""},{"line_number":12,"context_line":"DEFAULT_TUNNEL_TYPE\u003d\"geneve\""},{"line_number":13,"context_line":"DEFAULT_APPS_LIST\u003d\"l2_app.L2App,l3_proactive_app.L3ProactiveApp,dhcp_app.DHCPApp,dnat_app.DNATApp,sg_app.SGApp,portsec_app.PortSecApp\""},{"line_number":14,"context_line":"DEFAULT_SELECTIVE_TOPO_DIST\u003d\"False\""},{"line_number":15,"context_line":"DEFAULT_DF_REDIS_PUBSUB\u003d\"False\""},{"line_number":16,"context_line":""}],"source_content_type":"text/x-sh","patch_set":2,"id":"dab17558_ca268cb9","line":13,"updated":"2016-05-09 13:23:23.000000000","message":"This comment isn\u0027t a negative on this change, but it would be worth thinking about moving to a multi-line format for this configuration since I assume there will presumably be a pretty large number of apps in the long term.","commit_id":"1529da2c8df985efac724da5cc074cac4d0cc7ee"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1e30375035d04cdbb0662ae1bff3802da277672b","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":238,"context_line":"            const.EGRESS_PORT_SECURITY_TABLE)"},{"line_number":239,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":240,"context_line":"        self.mod_flow("},{"line_number":241,"context_line":"            self.get_datapath(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_55c85c22","line":238,"range":{"start_line":238,"start_character":17,"end_line":238,"end_character":45},"updated":"2016-05-16 03:44:15.000000000","message":"You need to add a flow item \"table\u003dEGRES_PORT_SECURITY_GROUP, goto: EGRESS_CONTRACT_TABLE\" as default in L2_App, to make sure eveything work fine if port_sec_app is disabled.","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            ofproto.OFPIT_APPLY_ACTIONS, actions)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        goto_inst \u003d parser.OFPInstructionGotoTable("},{"line_number":238,"context_line":"            const.EGRESS_PORT_SECURITY_TABLE)"},{"line_number":239,"context_line":"        inst \u003d [action_inst, goto_inst]"},{"line_number":240,"context_line":"        self.mod_flow("},{"line_number":241,"context_line":"            self.get_datapath(),"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_d27819f5","line":238,"range":{"start_line":238,"start_character":17,"end_line":238,"end_character":45},"in_reply_to":"dab17558_55c85c22","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"}],"dragonflow/controller/portsec_app.py":[{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"26a5dace39a1cb2b598900db3c4fb07f3e5c18c0","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            eth_src\u003dmac,\r"},{"line_number":127,"context_line":"            eth_type\u003dether.ETH_TYPE_IP\r"},{"line_number":128,"context_line":"        )\r"},{"line_number":129,"context_line":"        eth_dst \u003d haddr_to_bin(\u002701:00:5E:00:00:00\u0027)\r"},{"line_number":130,"context_line":"        eth_dst_mask \u003d haddr_to_bin(\u0027FF:FF:FF:80:00:00\u0027)\r"},{"line_number":131,"context_line":"        match.set_dl_dst_masked(eth_dst, eth_dst_mask)\r"},{"line_number":132,"context_line":"        self.add_flow_go_to_table(datapath,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_4acbbc53","line":129,"updated":"2016-05-09 13:23:23.000000000","message":"Maybe use a constant for this magic number? I found via web search on the MAC itself that this is identifying Ethernet multicast reserved range but it might be good to indicate that directly in the code.","commit_id":"1529da2c8df985efac724da5cc074cac4d0cc7ee"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"26a5dace39a1cb2b598900db3c4fb07f3e5c18c0","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                eth_src\u003dvm_mac,\r"},{"line_number":172,"context_line":"                                eth_dst\u003d\"ff:ff:ff:ff:ff:ff\",\r"},{"line_number":173,"context_line":"                                eth_type\u003dether.ETH_TYPE_IP,\r"},{"line_number":174,"context_line":"                                ip_proto\u003d17,\r"},{"line_number":175,"context_line":"                                udp_src\u003d68,\r"},{"line_number":176,"context_line":"                                udp_dst\u003d67)\r"},{"line_number":177,"context_line":"        self.add_flow_go_to_table(datapath,\r"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_aa98681c","line":174,"updated":"2016-05-09 13:23:23.000000000","message":"The port and protocol numbers here and below probably should be named constants rather than literal integers.","commit_id":"1529da2c8df985efac724da5cc074cac4d0cc7ee"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1e30375035d04cdbb0662ae1bff3802da277672b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"DHCP_CLIENT_PORT \u003d 68\r"},{"line_number":34,"context_line":"DHCP_SERVER_PORT \u003d 67\r"},{"line_number":35,"context_line":"\r"},{"line_number":36,"context_line":"IPV4_MULTICAST_ETHERNET_MAC_ADDRESS \u003d \u002701:00:5e:00:00:00\u0027\r"},{"line_number":37,"context_line":"IPV4_MULTICAST_ETHERNET_MAC_MASK \u003d \u0027ff:ff:ff:80:00:00\u0027\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_f0719e0d","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":57},"updated":"2016-05-16 03:44:15.000000000","message":"Port Security is for source checking.\nFor arp and dhcp ,you can treat it differently.\nBut for others, why take destiantion into accout?","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"DHCP_CLIENT_PORT \u003d 68\r"},{"line_number":34,"context_line":"DHCP_SERVER_PORT \u003d 67\r"},{"line_number":35,"context_line":"\r"},{"line_number":36,"context_line":"IPV4_MULTICAST_ETHERNET_MAC_ADDRESS \u003d \u002701:00:5e:00:00:00\u0027\r"},{"line_number":37,"context_line":"IPV4_MULTICAST_ETHERNET_MAC_MASK \u003d \u0027ff:ff:ff:80:00:00\u0027\r"},{"line_number":38,"context_line":"\r"},{"line_number":39,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_729fad50","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":57},"in_reply_to":"dab17558_f0719e0d","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":39,"context_line":"\r"},{"line_number":40,"context_line":"class PortSecApp(DFlowApp):\r"},{"line_number":41,"context_line":"\r"},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):\r"},{"line_number":43,"context_line":"        super(PortSecApp, self).__init__(*args, **kwargs)\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def _add_flow_drop(self, priority, match):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_e1b3964b","line":42,"updated":"2016-05-15 18:40:31.000000000","message":"Is this method needed? All it does is call the parent class (which is done automatically).","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":39,"context_line":"\r"},{"line_number":40,"context_line":"class PortSecApp(DFlowApp):\r"},{"line_number":41,"context_line":"\r"},{"line_number":42,"context_line":"    def __init__(self, *args, **kwargs):\r"},{"line_number":43,"context_line":"        super(PortSecApp, self).__init__(*args, **kwargs)\r"},{"line_number":44,"context_line":"\r"},{"line_number":45,"context_line":"    def _add_flow_drop(self, priority, match):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_b2a9157e","line":42,"in_reply_to":"dab17558_e1b3964b","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                                            const.PRIORITY_HIGH,\r"},{"line_number":244,"context_line":"                                            match)\r"},{"line_number":245,"context_line":"\r"},{"line_number":246,"context_line":"    def _install_port_security_flows(self, lport, datapath):\r"},{"line_number":247,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)\r"},{"line_number":248,"context_line":"\r"},{"line_number":249,"context_line":"        # install ip and mac check flows\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_c121324f","line":246,"updated":"2016-05-15 18:40:31.000000000","message":"nit: The order of parameters here is reversed to the standard so far: Consider making datapath first parameter.","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":243,"context_line":"                                            const.PRIORITY_HIGH,\r"},{"line_number":244,"context_line":"                                            match)\r"},{"line_number":245,"context_line":"\r"},{"line_number":246,"context_line":"    def _install_port_security_flows(self, lport, datapath):\r"},{"line_number":247,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)\r"},{"line_number":248,"context_line":"\r"},{"line_number":249,"context_line":"        # install ip and mac check flows\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_f2b9ddcc","line":246,"in_reply_to":"dab17558_c121324f","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1e30375035d04cdbb0662ae1bff3802da277672b","unresolved":false,"context_lines":[{"line_number":256,"context_line":"\r"},{"line_number":257,"context_line":"        # install vm mac and allowed address pairs mac check flows\r"},{"line_number":258,"context_line":"        allowed_macs \u003d self._get_allow_macs(lport)\r"},{"line_number":259,"context_line":"        for allowed_mac in allowed_macs:\r"},{"line_number":260,"context_line":"            self._install_flows_check_valid_mac(\r"},{"line_number":261,"context_line":"                datapath, ofport, allowed_mac\r"},{"line_number":262,"context_line":"            )\r"},{"line_number":263,"context_line":"\r"},{"line_number":264,"context_line":"        # install only vm mac check flows\r"},{"line_number":265,"context_line":"        vm_mac \u003d lport.get_mac()\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_70000e67","line":262,"range":{"start_line":259,"start_character":0,"end_line":262,"end_character":13},"updated":"2016-05-16 03:44:15.000000000","message":"For VRRP, mac maybe learned dynamically. We can disscuss it in detail.","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":256,"context_line":"\r"},{"line_number":257,"context_line":"        # install vm mac and allowed address pairs mac check flows\r"},{"line_number":258,"context_line":"        allowed_macs \u003d self._get_allow_macs(lport)\r"},{"line_number":259,"context_line":"        for allowed_mac in allowed_macs:\r"},{"line_number":260,"context_line":"            self._install_flows_check_valid_mac(\r"},{"line_number":261,"context_line":"                datapath, ofport, allowed_mac\r"},{"line_number":262,"context_line":"            )\r"},{"line_number":263,"context_line":"\r"},{"line_number":264,"context_line":"        # install only vm mac check flows\r"},{"line_number":265,"context_line":"        vm_mac \u003d lport.get_mac()\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_1213c1b9","line":262,"range":{"start_line":259,"start_character":0,"end_line":262,"end_character":13},"in_reply_to":"dab17558_70000e67","updated":"2016-05-19 06:51:21.000000000","message":"I am not familiar with VRRP, if this learning process will update the allow-address-pairs field of lport?","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        vm_mac \u003d lport.get_mac()\r"},{"line_number":266,"context_line":"        self._install_flows_check_only_vm_mac(datapath, ofport, vm_mac)\r"},{"line_number":267,"context_line":"\r"},{"line_number":268,"context_line":"    def _update_port_security_flows(self, lport, original_lport, datapath):\r"},{"line_number":269,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)\r"},{"line_number":270,"context_line":"\r"},{"line_number":271,"context_line":"        # update ip and mac check flows\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_21d91e58","line":268,"updated":"2016-05-15 18:40:31.000000000","message":"nit: same here re: param order.","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        vm_mac \u003d lport.get_mac()\r"},{"line_number":266,"context_line":"        self._install_flows_check_only_vm_mac(datapath, ofport, vm_mac)\r"},{"line_number":267,"context_line":"\r"},{"line_number":268,"context_line":"    def _update_port_security_flows(self, lport, original_lport, datapath):\r"},{"line_number":269,"context_line":"        ofport \u003d lport.get_external_value(\u0027ofport\u0027)\r"},{"line_number":270,"context_line":"\r"},{"line_number":271,"context_line":"        # update ip and mac check flows\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_321085a8","line":268,"in_reply_to":"dab17558_21d91e58","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        if new_vm_mac !\u003d old_vm_mac:\r"},{"line_number":299,"context_line":"            self._install_flows_check_only_vm_mac(datapath, ofport,\r"},{"line_number":300,"context_line":"                                                  new_vm_mac)\r"},{"line_number":301,"context_line":"            self._install_flows_check_only_vm_mac(datapath, ofport,\r"},{"line_number":302,"context_line":"                                                  old_vm_mac)\r"},{"line_number":303,"context_line":"\r"},{"line_number":304,"context_line":"    def _remove_one_port_security_flow(self, datapath, priority, match):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_81b1ea03","line":301,"updated":"2016-05-15 18:40:31.000000000","message":"Shouldn\u0027t this be _uninstall_flows_...?","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        if new_vm_mac !\u003d old_vm_mac:\r"},{"line_number":299,"context_line":"            self._install_flows_check_only_vm_mac(datapath, ofport,\r"},{"line_number":300,"context_line":"                                                  new_vm_mac)\r"},{"line_number":301,"context_line":"            self._install_flows_check_only_vm_mac(datapath, ofport,\r"},{"line_number":302,"context_line":"                                                  old_vm_mac)\r"},{"line_number":303,"context_line":"\r"},{"line_number":304,"context_line":"    def _remove_one_port_security_flow(self, datapath, priority, match):\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_f2155d9b","line":301,"in_reply_to":"dab17558_81b1ea03","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":374,"context_line":"\r"},{"line_number":375,"context_line":"        return added_pairs, removed_pairs\r"},{"line_number":376,"context_line":"\r"},{"line_number":377,"context_line":"    def _get_added_and_removed_valid_macs(self, lport, original_lport):\r"},{"line_number":378,"context_line":"        added_valid_macs \u003d []\r"},{"line_number":379,"context_line":"        removed_valid_macs \u003d []\r"},{"line_number":380,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_61b206e7","line":377,"updated":"2016-05-15 18:40:31.000000000","message":"Consider using a helper function for symmetric list substraction (e.g. _subtract_lists(l1,l2) return l1 \u0027-\u0027 l2, l2 \u0027-\u0027 l1).","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":374,"context_line":"\r"},{"line_number":375,"context_line":"        return added_pairs, removed_pairs\r"},{"line_number":376,"context_line":"\r"},{"line_number":377,"context_line":"    def _get_added_and_removed_valid_macs(self, lport, original_lport):\r"},{"line_number":378,"context_line":"        added_valid_macs \u003d []\r"},{"line_number":379,"context_line":"        removed_valid_macs \u003d []\r"},{"line_number":380,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_9227b111","line":377,"in_reply_to":"dab17558_61b206e7","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":20405,"name":"liuhaixia","email":"liuhaixia315@huawei.com","username":"liuhaixia"},"change_message_id":"1e30375035d04cdbb0662ae1bff3802da277672b","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        if enable:\r"},{"line_number":419,"context_line":"            self._install_port_security_flows(lport, datapath)\r"},{"line_number":420,"context_line":"        else:\r"},{"line_number":421,"context_line":"            self._install_disable_flow(lport, datapath)\r"},{"line_number":422,"context_line":"\r"},{"line_number":423,"context_line":"    def update_local_port(self, lport, original_lport):\r"},{"line_number":424,"context_line":"        datapath \u003d self.get_datapath()\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_903812f0","line":421,"range":{"start_line":421,"start_character":5,"end_line":421,"end_character":55},"updated":"2016-05-16 03:44:15.000000000","message":"If port security is disable, default actions is \u0027priority\u003ddefault, actions:goto EGRESS_CONNTACK_TABLE\".\nCan this will eliminate the number of flow items?","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        if enable:\r"},{"line_number":419,"context_line":"            self._install_port_security_flows(lport, datapath)\r"},{"line_number":420,"context_line":"        else:\r"},{"line_number":421,"context_line":"            self._install_disable_flow(lport, datapath)\r"},{"line_number":422,"context_line":"\r"},{"line_number":423,"context_line":"    def update_local_port(self, lport, original_lport):\r"},{"line_number":424,"context_line":"        datapath \u003d self.get_datapath()\r"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_72220d03","line":421,"range":{"start_line":421,"start_character":5,"end_line":421,"end_character":55},"in_reply_to":"dab17558_903812f0","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"}],"dragonflow/tests/common/app_testing_objects.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":880,"context_line":"    def __call__(self, policy, rule, port_thread, buf):"},{"line_number":881,"context_line":"        self.cursor +\u003d 1"},{"line_number":882,"context_line":"        if self.cursor \u003d\u003d self.threshold:"},{"line_number":883,"context_line":"            self.action.__call__(policy, rule, port_thread, buf)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_a1f6ae8c","line":883,"updated":"2016-05-15 18:40:31.000000000","message":"I think you can use \u0027self.action(policy, rule, port_thread, buf)\u0027, rather than calling __call__ explicitly.","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":880,"context_line":"    def __call__(self, policy, rule, port_thread, buf):"},{"line_number":881,"context_line":"        self.cursor +\u003d 1"},{"line_number":882,"context_line":"        if self.cursor \u003d\u003d self.threshold:"},{"line_number":883,"context_line":"            self.action.__call__(policy, rule, port_thread, buf)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_525b8987","line":883,"in_reply_to":"dab17558_a1f6ae8c","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"}],"dragonflow/tests/common/utils.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        interfaces \u003d self._ovsdb_list_intefaces(specify_interface)"},{"line_number":150,"context_line":"        return self._parse_ovsdb_interfaces(interfaces)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def get_ofport(self, port_id):"},{"line_number":153,"context_line":"        interfaces \u003d self.list_interfaces()"},{"line_number":154,"context_line":"        for item in interfaces:"},{"line_number":155,"context_line":"            external_ids \u003d item.get(\u0027external_ids\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_01f05a90","line":152,"updated":"2016-05-15 18:40:31.000000000","message":"The calls to get in this method may raise a KeyError. Consider replacing with get(key-name, None) or catching that error. (Or, if that\u0027s not possible, you don\u0027t need to test for None every get operation).","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        interfaces \u003d self._ovsdb_list_intefaces(specify_interface)"},{"line_number":150,"context_line":"        return self._parse_ovsdb_interfaces(interfaces)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def get_ofport(self, port_id):"},{"line_number":153,"context_line":"        interfaces \u003d self.list_interfaces()"},{"line_number":154,"context_line":"        for item in interfaces:"},{"line_number":155,"context_line":"            external_ids \u003d item.get(\u0027external_ids\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_72504d5f","line":152,"in_reply_to":"dab17558_01f05a90","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"}],"dragonflow/tests/fullstack/test_apps.py":[{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"fce6e8acacffeb6a58132af0ab00992beea5f2e6","unresolved":false,"context_lines":[{"line_number":1030,"context_line":"        ignore_action \u003d app_testing_objects.IgnoreAction()"},{"line_number":1031,"context_line":"        key \u003d (self.subnet.subnet_id, self.port2.port_id)"},{"line_number":1032,"context_line":"        # when port2 receive both two packets (one using vm fixed ip and mac,"},{"line_number":1033,"context_line":"        # anther using one of the allowed address pairs),"},{"line_number":1034,"context_line":"        # stop this simulation."},{"line_number":1035,"context_line":"        count_action \u003d app_testing_objects.CountAction("},{"line_number":1036,"context_line":"            2, app_testing_objects.StopSimulationAction()"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_569d6158","line":1033,"range":{"start_line":1033,"start_character":10,"end_line":1033,"end_character":16},"updated":"2016-05-12 19:25:53.000000000","message":"anther -\u003e another","commit_id":"7e9f98cf9a27da9226e6c4d39037a5511679e385"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"865124e16ebeb56e20214475c7c294677665c714","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"                ]"},{"line_number":1070,"context_line":"            ),"},{"line_number":1071,"context_line":"            app_testing_objects.PortPolicyRule("},{"line_number":1072,"context_line":"                # Ignore gratuitous ARP packets"},{"line_number":1073,"context_line":"                app_testing_objects.RyuARPGratuitousFilter(),"},{"line_number":1074,"context_line":"                actions\u003d["},{"line_number":1075,"context_line":"                    app_testing_objects.RaiseAction(\"Unexpected packet\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"dab17558_217f5ee1","line":1072,"updated":"2016-05-15 18:40:31.000000000","message":"The action doesn\u0027t match the comment. Consider fixing one of them.","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"},{"author":{"_account_id":21007,"name":"yuan wei","email":"wei.yuan@huawei.com","username":"yuanwei"},"change_message_id":"d643179baf6301d19bfb1df202452df9e981c59a","unresolved":false,"context_lines":[{"line_number":1069,"context_line":"                ]"},{"line_number":1070,"context_line":"            ),"},{"line_number":1071,"context_line":"            app_testing_objects.PortPolicyRule("},{"line_number":1072,"context_line":"                # Ignore gratuitous ARP packets"},{"line_number":1073,"context_line":"                app_testing_objects.RyuARPGratuitousFilter(),"},{"line_number":1074,"context_line":"                actions\u003d["},{"line_number":1075,"context_line":"                    app_testing_objects.RaiseAction(\"Unexpected packet\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_b24ab5aa","line":1072,"in_reply_to":"dab17558_217f5ee1","updated":"2016-05-19 06:51:21.000000000","message":"Done","commit_id":"409fd5039d658092d6d846fafd477f997f4b9ac2"}],"dragonflow/tests/fullstack/test_portsec_flows.py":[{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"fce6e8acacffeb6a58132af0ab00992beea5f2e6","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            return False\r"},{"line_number":30,"context_line":"\r"},{"line_number":31,"context_line":"        match_list \u003d expected_list[\u0027match_list\u0027]\r"},{"line_number":32,"context_line":"        for execpeted_match in match_list:\r"},{"line_number":33,"context_line":"            if execpeted_match not in flow[\u0027match\u0027]:\r"},{"line_number":34,"context_line":"                return False\r"},{"line_number":35,"context_line":"\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_3649bd8f","line":32,"range":{"start_line":32,"start_character":12,"end_line":32,"end_character":27},"updated":"2016-05-12 19:25:53.000000000","message":"execpeted -\u003e expected","commit_id":"7e9f98cf9a27da9226e6c4d39037a5511679e385"},{"author":{"_account_id":7776,"name":"Paul Carver","email":"pcarver@att.com","username":"pcarver"},"change_message_id":"fce6e8acacffeb6a58132af0ab00992beea5f2e6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"\r"},{"line_number":31,"context_line":"        match_list \u003d expected_list[\u0027match_list\u0027]\r"},{"line_number":32,"context_line":"        for execpeted_match in match_list:\r"},{"line_number":33,"context_line":"            if execpeted_match not in flow[\u0027match\u0027]:\r"},{"line_number":34,"context_line":"                return False\r"},{"line_number":35,"context_line":"\r"},{"line_number":36,"context_line":"        actions \u003d expected_list[\u0027actions\u0027]\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_b65dad4a","line":33,"range":{"start_line":33,"start_character":15,"end_line":33,"end_character":30},"updated":"2016-05-12 19:25:53.000000000","message":"execpeted -\u003e expected","commit_id":"7e9f98cf9a27da9226e6c4d39037a5511679e385"}]}
