)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"f81ea28510001030fa83866f63db75a80545b350","unresolved":false,"context_lines":[{"line_number":14,"context_line":"(3) table\u003d61, dl_dst\u003dlocal_port_mac,dl_vlan\u003dlocal_vlan,  action\u003dstrip_vlan,output:\u003cofport\u003e"},{"line_number":15,"context_line":"(4) table\u003d61, dl_dst\u003dlocal_port_mac                      action\u003doutput:\u003cofport\u003e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1884708"},{"line_number":18,"context_line":"Change-Id: Iecf9cffaf02616342f1727ad7db85545d8adbec2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bf51134e_5cf3f10a","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":20},"updated":"2020-07-07 07:30:55.000000000","message":"Closes-Bug: #1884708\nRelated-Bug: #1732067\nRelated-Bug: #1866445\nRelated-Bug: #1883321\nPartial-Bug: #1881070","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"d13d93e3b1c6a7fde098a072dded4cc8244d8a7a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"ingress pipeline for bridge ports which will avoid ingress flood:"},{"line_number":12,"context_line":"(1) table\u003d0,  in_port\u003dpatch_bridge,dl_vlan\u003dphysical_vlan action\u003dmod_vlan:local_vlan,goto:60 (original)"},{"line_number":13,"context_line":"(2) table\u003d60, in_port\u003dpatch_bridge                       action\u003dgoto:61                     (new)"},{"line_number":14,"context_line":"(3) table\u003d61, dl_dst\u003dlocal_port_mac,dl_vlan\u003dlocal_vlan,  action\u003dstrip_vlan,output:\u003cofport\u003e  (changes)"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"And changes the local ports pipeline:"},{"line_number":17,"context_line":"(1) table\u003d0,  in_port\u003dlocal_ofport                       action\u003dgoto:25                  (original)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9f560f44_206cf59b","line":14,"range":{"start_line":14,"start_character":64,"end_line":14,"end_character":74},"updated":"2020-09-21 13:23:09.000000000","message":"why this action is needed?","commit_id":"b9dd211ffb408026b4f85aeaff72ec2787d479b8"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"1fea386603cbb2f9500f1364f5f9929bab2995e9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"ingress pipeline for bridge ports which will avoid ingress flood:"},{"line_number":12,"context_line":"(1) table\u003d0,  in_port\u003dpatch_bridge,dl_vlan\u003dphysical_vlan action\u003dmod_vlan:local_vlan,goto:60 (original)"},{"line_number":13,"context_line":"(2) table\u003d60, in_port\u003dpatch_bridge                       action\u003dgoto:61                     (new)"},{"line_number":14,"context_line":"(3) table\u003d61, dl_dst\u003dlocal_port_mac,dl_vlan\u003dlocal_vlan,  action\u003dstrip_vlan,output:\u003cofport\u003e  (changes)"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"And changes the local ports pipeline:"},{"line_number":17,"context_line":"(1) table\u003d0,  in_port\u003dlocal_ofport                       action\u003dgoto:25                  (original)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"9f560f44_c99f1863","line":14,"range":{"start_line":14,"start_character":64,"end_line":14,"end_character":74},"in_reply_to":"9f560f44_206cf59b","updated":"2020-09-22 01:48:50.000000000","message":"Plz see line 12, because (1) had an action \"mod_vlan:local_vlan\".","commit_id":"b9dd211ffb408026b4f85aeaff72ec2787d479b8"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"7263be4f186eb65b2c291bcdad40b938cc23fc3d","unresolved":false,"context_lines":[{"line_number":2132,"context_line":"        return failed_devices"},{"line_number":2133,"context_line":""},{"line_number":2134,"context_line":"    @property"},{"line_number":2135,"context_line":"    def no_openflow_firewall(self):"},{"line_number":2136,"context_line":"        return ((isinstance(self.sg_agent.firewall,"},{"line_number":2137,"context_line":"                            agent_firewall.NoopFirewallDriver) or"},{"line_number":2138,"context_line":"                 isinstance("}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_e33a44c2","line":2135,"updated":"2020-07-06 10:21:15.000000000","message":"does this really need to be a separate method?","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"50048a487c803ff8f4e2d8848595a4b6d63813c7","unresolved":false,"context_lines":[{"line_number":2132,"context_line":"        return failed_devices"},{"line_number":2133,"context_line":""},{"line_number":2134,"context_line":"    @property"},{"line_number":2135,"context_line":"    def no_openflow_firewall(self):"},{"line_number":2136,"context_line":"        return ((isinstance(self.sg_agent.firewall,"},{"line_number":2137,"context_line":"                            agent_firewall.NoopFirewallDriver) or"},{"line_number":2138,"context_line":"                 isinstance("}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_5cabf187","line":2135,"in_reply_to":"bf51134e_e33a44c2","updated":"2020-07-07 07:46:51.000000000","message":"Done","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b2891b171a8fd5d494ea9a64a9fd213eb9a9cbc5","unresolved":false,"context_lines":[{"line_number":2132,"context_line":"        return failed_devices"},{"line_number":2133,"context_line":""},{"line_number":2134,"context_line":"    @property"},{"line_number":2135,"context_line":"    def no_openflow_firewall(self):"},{"line_number":2136,"context_line":"        return ((isinstance(self.sg_agent.firewall,"},{"line_number":2137,"context_line":"                            agent_firewall.NoopFirewallDriver) or"},{"line_number":2138,"context_line":"                 isinstance("}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_3c127d0a","line":2135,"in_reply_to":"bf51134e_e33a44c2","updated":"2020-07-07 07:38:02.000000000","message":"This is the security group configration options check, somehow independent to the next function. And my original use of this method is not only in \u0027direct_for_no_of_firewall\u0027, but also somewhere else. But for now it is one case now, we can remove this.","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"7263be4f186eb65b2c291bcdad40b938cc23fc3d","unresolved":false,"context_lines":[{"line_number":2141,"context_line":"                 not agent_sg_rpc.is_firewall_enabled()))"},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"    @property"},{"line_number":2144,"context_line":"    def direct_for_no_of_firewall(self):"},{"line_number":2145,"context_line":"        return (self.no_openflow_firewall and"},{"line_number":2146,"context_line":"                self.conf.AGENT.explicitly_egress_direct)"},{"line_number":2147,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_a3720cac","line":2144,"updated":"2020-07-06 10:21:15.000000000","message":"maybe \"direct_for_non_openflow_firewall\" would be clearer.","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"50048a487c803ff8f4e2d8848595a4b6d63813c7","unresolved":false,"context_lines":[{"line_number":2141,"context_line":"                 not agent_sg_rpc.is_firewall_enabled()))"},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"    @property"},{"line_number":2144,"context_line":"    def direct_for_no_of_firewall(self):"},{"line_number":2145,"context_line":"        return (self.no_openflow_firewall and"},{"line_number":2146,"context_line":"                self.conf.AGENT.explicitly_egress_direct)"},{"line_number":2147,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_1ca179aa","line":2144,"in_reply_to":"bf51134e_a3720cac","updated":"2020-07-07 07:46:51.000000000","message":"Done","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b2891b171a8fd5d494ea9a64a9fd213eb9a9cbc5","unresolved":false,"context_lines":[{"line_number":2141,"context_line":"                 not agent_sg_rpc.is_firewall_enabled()))"},{"line_number":2142,"context_line":""},{"line_number":2143,"context_line":"    @property"},{"line_number":2144,"context_line":"    def direct_for_no_of_firewall(self):"},{"line_number":2145,"context_line":"        return (self.no_openflow_firewall and"},{"line_number":2146,"context_line":"                self.conf.AGENT.explicitly_egress_direct)"},{"line_number":2147,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_9cf8e9c4","line":2144,"in_reply_to":"bf51134e_a3720cac","updated":"2020-07-07 07:38:02.000000000","message":"Great, thanks.","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"7263be4f186eb65b2c291bcdad40b938cc23fc3d","unresolved":false,"context_lines":[{"line_number":2145,"context_line":"        return (self.no_openflow_firewall and"},{"line_number":2146,"context_line":"                self.conf.AGENT.explicitly_egress_direct)"},{"line_number":2147,"context_line":""},{"line_number":2148,"context_line":"    def ingress_direct_flows(self):"},{"line_number":2149,"context_line":"        if self.direct_for_no_of_firewall:"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":"            for physical_network in self.bridge_mappings:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_c3cbc0a2","line":2148,"updated":"2020-07-06 10:21:15.000000000","message":"maybe install_ingress_direct_flows_gotos()","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"50048a487c803ff8f4e2d8848595a4b6d63813c7","unresolved":false,"context_lines":[{"line_number":2145,"context_line":"        return (self.no_openflow_firewall and"},{"line_number":2146,"context_line":"                self.conf.AGENT.explicitly_egress_direct)"},{"line_number":2147,"context_line":""},{"line_number":2148,"context_line":"    def ingress_direct_flows(self):"},{"line_number":2149,"context_line":"        if self.direct_for_no_of_firewall:"},{"line_number":2150,"context_line":""},{"line_number":2151,"context_line":"            for physical_network in self.bridge_mappings:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_9c946946","line":2148,"in_reply_to":"bf51134e_c3cbc0a2","updated":"2020-07-07 07:46:51.000000000","message":"Done","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"7263be4f186eb65b2c291bcdad40b938cc23fc3d","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"            actions\u003d\u0027resubmit(,{:d})\u0027.format("},{"line_number":2193,"context_line":"                constants.LOCAL_MAC_DIRECT))"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        # for patch and VM ports"},{"line_number":2196,"context_line":"        br_int.add_flow("},{"line_number":2197,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2198,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_80a09ea7","line":2195,"updated":"2020-07-06 10:21:15.000000000","message":"I don\u0027t understand this comment. Do you mean \"For packets from patch ports\" ?","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"50048a487c803ff8f4e2d8848595a4b6d63813c7","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"            actions\u003d\u0027resubmit(,{:d})\u0027.format("},{"line_number":2193,"context_line":"                constants.LOCAL_MAC_DIRECT))"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        # for patch and VM ports"},{"line_number":2196,"context_line":"        br_int.add_flow("},{"line_number":2197,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2198,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_fc8c8536","line":2195,"in_reply_to":"bf51134e_1c2e9942","updated":"2020-07-07 07:46:51.000000000","message":"Done","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"b2891b171a8fd5d494ea9a64a9fd213eb9a9cbc5","unresolved":false,"context_lines":[{"line_number":2192,"context_line":"            actions\u003d\u0027resubmit(,{:d})\u0027.format("},{"line_number":2193,"context_line":"                constants.LOCAL_MAC_DIRECT))"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":"        # for patch and VM ports"},{"line_number":2196,"context_line":"        br_int.add_flow("},{"line_number":2197,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2198,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_1c2e9942","line":2195,"in_reply_to":"bf51134e_80a09ea7","updated":"2020-07-07 07:38:02.000000000","message":"Yes, for packets from patch ports and VM ports.","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"7263be4f186eb65b2c291bcdad40b938cc23fc3d","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2201,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        # for internal ports"},{"line_number":2204,"context_line":"        br_int.add_flow("},{"line_number":2205,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2206,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_808ede24","line":2203,"updated":"2020-07-06 10:21:15.000000000","message":"For packets from non patch ports?","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"50048a487c803ff8f4e2d8848595a4b6d63813c7","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2201,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        # for internal ports"},{"line_number":2204,"context_line":"        br_int.add_flow("},{"line_number":2205,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2206,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_1c8a191a","line":2203,"in_reply_to":"bf51134e_808ede24","updated":"2020-07-07 07:46:51.000000000","message":"Done","commit_id":"5595c1ce6eb0f8a6cb9877f2cc8071ab64c2d1cc"},{"author":{"_account_id":29071,"name":"norman shen","email":"yshxxsjt715@gmail.com","username":"ushen"},"change_message_id":"237f6acea7270e43069b9a33f64eb5b74894931d","unresolved":false,"context_lines":[{"line_number":2180,"context_line":"            actions\u003d\u0027resubmit(,{:d})\u0027.format("},{"line_number":2181,"context_line":"                constants.LOCAL_MAC_DIRECT))"},{"line_number":2182,"context_line":""},{"line_number":2183,"context_line":"        # For packets from patch ports and VM ports."},{"line_number":2184,"context_line":"        br_int.add_flow("},{"line_number":2185,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2186,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_e59228f6","line":2183,"updated":"2020-07-07 13:23:34.000000000","message":"I am sorry, but I do not understand why packet from local vm ports hit this flow?","commit_id":"e5cf8e829fb18e42e9c974fb2f066502f5127090"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d85fb97ab8d79945cc5cc9aeb4a09e29bb12e6da","unresolved":false,"context_lines":[{"line_number":2180,"context_line":"            actions\u003d\u0027resubmit(,{:d})\u0027.format("},{"line_number":2181,"context_line":"                constants.LOCAL_MAC_DIRECT))"},{"line_number":2182,"context_line":""},{"line_number":2183,"context_line":"        # For packets from patch ports and VM ports."},{"line_number":2184,"context_line":"        br_int.add_flow("},{"line_number":2185,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2186,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_028620dc","line":2183,"in_reply_to":"bf51134e_e59228f6","updated":"2020-07-08 07:04:33.000000000","message":"It should be \"to vm ports\".","commit_id":"e5cf8e829fb18e42e9c974fb2f066502f5127090"},{"author":{"_account_id":29071,"name":"norman shen","email":"yshxxsjt715@gmail.com","username":"ushen"},"change_message_id":"8fc2625231ea512af0216f4221c25884b76408d0","unresolved":false,"context_lines":[{"line_number":2219,"context_line":"                            patch_ofport))"},{"line_number":2220,"context_line":""},{"line_number":2221,"context_line":"    def delete_accepted_egress_direct_flow(self, br_int, ofport, mac, vlan):"},{"line_number":2222,"context_line":"        if not self.direct_for_non_openflow_firewall:"},{"line_number":2223,"context_line":"            return"},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"        br_int.delete_flows("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_a2dae6e5","line":2222,"updated":"2020-07-07 10:12:57.000000000","message":"dumb question, how does this PS make sure this function executes when port is unbound from host?","commit_id":"e5cf8e829fb18e42e9c974fb2f066502f5127090"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"d85fb97ab8d79945cc5cc9aeb4a09e29bb12e6da","unresolved":false,"context_lines":[{"line_number":2219,"context_line":"                            patch_ofport))"},{"line_number":2220,"context_line":""},{"line_number":2221,"context_line":"    def delete_accepted_egress_direct_flow(self, br_int, ofport, mac, vlan):"},{"line_number":2222,"context_line":"        if not self.direct_for_non_openflow_firewall:"},{"line_number":2223,"context_line":"            return"},{"line_number":2224,"context_line":""},{"line_number":2225,"context_line":"        br_int.delete_flows("}],"source_content_type":"text/x-python","patch_set":4,"id":"bf51134e_2284040c","line":2222,"in_reply_to":"bf51134e_a2dae6e5","updated":"2020-07-08 07:04:33.000000000","message":"The port_unbound is one action of the \u0027port delete/remove\u0027, it contains some actions like l2_agent_extension.delete_port, port_unbound and this new delete_accepted_egress_direct_flow. That is saying the port_unbound will not be run independently. So if port_delete/remove is called, this delete flow action should be run as well.\n\nFor now, I may say the \"treat_devices_removed\" should call delete_accepted_egress_direct_flow. But, after some code search, there is at least 5 places which called \"ext_manager.delete_port\". So I just marked this as partial fix. And it\u0027s better to put such clean/remove actions together to one funcion, and then call this new method. Something like this:\n\ndef clean_port():\n    self.delete_accepted_egress_direct_flow()\n    self.ext_manager.delete_port()\n    self.port_unbound()\n\nAnd it\u0027s a good question, thank you.","commit_id":"e5cf8e829fb18e42e9c974fb2f066502f5127090"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c765a1ff069d850bbc458edb75454c9433d1b233","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_f3c2ae52","line":2165,"updated":"2020-07-10 14:29:21.000000000","message":"Why do we need those protocols explicitly defined?","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"88d801d11074ed3a76d2e43bc2e8298f9bf7f4de","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_ecd0faf9","line":2165,"in_reply_to":"bf51134e_b65bfaf3","updated":"2020-07-13 15:53:54.000000000","message":"We are already setting those protocols to any OVSbridge instance\n\nhttps://github.com/openstack/neutron/blob/master/neutron/agent/common/ovs_lib.py#L244-L245","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"af16f891dd2b36280361b855ea4df3c87fa6462d","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_c502cb6f","line":2165,"in_reply_to":"bf51134e_ca1a2f6d","updated":"2020-07-20 01:22:49.000000000","message":"Done","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bd4b32ea1c5a4632a36590ab11f03f0d7ceff3c4","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_ca1a2f6d","line":2165,"in_reply_to":"bf51134e_ecd0faf9","updated":"2020-07-14 01:30:19.000000000","message":"Alright,  I see this commit.\nhttps://github.com/openstack/neutron/commit/0643ab44d8204cde78fb7e8713fdd46dad0d87df#diff-9b3096a3ed135d4861f3141332eefb45\n\nThis fix is for our local queens originally. : )","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0608a54ebb0fbbe89552b64b7c4ec618b5abb2f9","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_b65bfaf3","line":2165,"in_reply_to":"bf51134e_f3c2ae52","updated":"2020-07-12 02:27:34.000000000","message":"\"--bundle\" action was supported since OF1.4, but according to the ovs code, OF 1.3 is supported that too.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c765a1ff069d850bbc458edb75454c9433d1b233","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_93a7f2bc","line":2183,"updated":"2020-07-10 14:29:21.000000000","message":"Why do we need this action? This is already done, per port, in L2191","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"88d801d11074ed3a76d2e43bc2e8298f9bf7f4de","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_ccc89656","line":2183,"in_reply_to":"bf51134e_16746667","updated":"2020-07-13 15:53:54.000000000","message":"But, as I commented, this is already done in L2191. We don\u0027t need it again here","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83e48ebb100b40c37505b3f5788eeeade2b645d5","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_df690c27","line":2183,"in_reply_to":"bf51134e_2d4e2596","updated":"2020-07-17 11:28:23.000000000","message":"I missed that part","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e54fd92f66e79bcb0408da2da5048a1494e79e69","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_2d4e2596","line":2183,"in_reply_to":"bf51134e_6702fc71","updated":"2020-07-17 10:58:43.000000000","message":"We have a NORMAL flow in final table TRANSIENT_EGRESS_TABLE:\nhttps://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/openvswitch/agent/openflow/native/br_int.py#L52","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"69f6332785c4b43c98416aa7833d6c83f15a965f","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_6702fc71","line":2183,"in_reply_to":"bf51134e_8a3dd7c5","updated":"2020-07-17 09:11:32.000000000","message":"Sorry but we don\u0027t have (now) a normal action in TRANSIENT_EGRESS_TABLE. We should not set this flow to provide a NORMAL action to unknown flows.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0608a54ebb0fbbe89552b64b7c4ec618b5abb2f9","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_16746667","line":2183,"in_reply_to":"bf51134e_93a7f2bc","updated":"2020-07-12 02:27:34.000000000","message":"This is one flow of the default pipeline which should finally hit the NORMAL flow int the TRANSIENT_EGRESS_TABLE table.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bd4b32ea1c5a4632a36590ab11f03f0d7ceff3c4","unresolved":false,"context_lines":[{"line_number":2180,"context_line":""},{"line_number":2181,"context_line":"            self.int_br.install_goto("},{"line_number":2182,"context_line":"                table_id\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2183,"context_line":"                dest_table_id\u003dconstants.TRANSIENT_EGRESS_TABLE)"},{"line_number":2184,"context_line":""},{"line_number":2185,"context_line":"    def process_install_ports_egress_flows(self, ports):"},{"line_number":2186,"context_line":"        if self.direct_for_non_openflow_firewall:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_8a3dd7c5","line":2183,"in_reply_to":"bf51134e_ccc89656","updated":"2020-07-14 01:30:19.000000000","message":"This is just in case some packets are not matched, it can still go to the NORMAL action in final TRANSIENT_EGRESS_TABLE. This is the original behavior, and we keep that available.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c765a1ff069d850bbc458edb75454c9433d1b233","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        lvm \u003d self.vlan_manager.get(port_detail[\u0027network_id\u0027])"},{"line_number":2201,"context_line":"        port \u003d port_detail[\u0027vif_port\u0027]"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        # Adding the local vlan to register 6 in case of MAC overlapping"},{"line_number":2204,"context_line":"        # in different networks."},{"line_number":2205,"context_line":"        br_int.add_flow("},{"line_number":2206,"context_line":"            table\u003dconstants.TRANSIENT_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_5e8a811a","line":2203,"updated":"2020-07-10 14:29:21.000000000","message":"Correct me if I\u0027m wrong.\n\nThe goal is to differentiate where the packet comes from: patch port (from other bridge) or not.\n\nIn case the packets come from a patch port, reg6 will filter that.\n\nInstead of this, why not having two tables? One to send all traffic from patch ports and the other one for internal ports. You can apply the same rules (filter by VLAN) but with different actions (strip_vlan or not).","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"88d801d11074ed3a76d2e43bc2e8298f9bf7f4de","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        lvm \u003d self.vlan_manager.get(port_detail[\u0027network_id\u0027])"},{"line_number":2201,"context_line":"        port \u003d port_detail[\u0027vif_port\u0027]"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        # Adding the local vlan to register 6 in case of MAC overlapping"},{"line_number":2204,"context_line":"        # in different networks."},{"line_number":2205,"context_line":"        br_int.add_flow("},{"line_number":2206,"context_line":"            table\u003dconstants.TRANSIENT_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_67ffe300","line":2203,"in_reply_to":"bf51134e_566a5e80","updated":"2020-07-13 15:53:54.000000000","message":"Where this traffic (L2205 flow) is coming from? If this traffic is coming from a VM, those ports are tagged and will assign the VLAN tag automatically. Why do we need the reg6 population?","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0608a54ebb0fbbe89552b64b7c4ec618b5abb2f9","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        lvm \u003d self.vlan_manager.get(port_detail[\u0027network_id\u0027])"},{"line_number":2201,"context_line":"        port \u003d port_detail[\u0027vif_port\u0027]"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        # Adding the local vlan to register 6 in case of MAC overlapping"},{"line_number":2204,"context_line":"        # in different networks."},{"line_number":2205,"context_line":"        br_int.add_flow("},{"line_number":2206,"context_line":"            table\u003dconstants.TRANSIENT_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_566a5e80","line":2203,"in_reply_to":"bf51134e_5e8a811a","updated":"2020-07-12 02:27:34.000000000","message":"That could not cover this MAC overlapping case. Something like this:\nVM1 and VM2  are in same network.\nVM3 and VM4 are in same network.\nBut VM2 and VM4 has same MAC.\nAll these VMs are in same compute node.\n\nPackets from VM tap ports (something like switch access port) will not match the dl_vlan action. And there is no mod_vlan action. So when the packets (VM1 -\u003e VM2, VM3 -\u003e VM4) are sent out, where the packets should go? As your suggestion, the packets will go to same table, and hit same flow, but maybe go to the run end port.\n\nSo IMO, reg6 should be the easy way, and save some extra flows.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bd4b32ea1c5a4632a36590ab11f03f0d7ceff3c4","unresolved":false,"context_lines":[{"line_number":2200,"context_line":"        lvm \u003d self.vlan_manager.get(port_detail[\u0027network_id\u0027])"},{"line_number":2201,"context_line":"        port \u003d port_detail[\u0027vif_port\u0027]"},{"line_number":2202,"context_line":""},{"line_number":2203,"context_line":"        # Adding the local vlan to register 6 in case of MAC overlapping"},{"line_number":2204,"context_line":"        # in different networks."},{"line_number":2205,"context_line":"        br_int.add_flow("},{"line_number":2206,"context_line":"            table\u003dconstants.TRANSIENT_TABLE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_1f158749","line":2203,"in_reply_to":"bf51134e_67ffe300","updated":"2020-07-14 01:30:19.000000000","message":"Same reason to line 2223, due to the behavior of access port, please see my comments below.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"88d801d11074ed3a76d2e43bc2e8298f9bf7f4de","unresolved":false,"context_lines":[{"line_number":2220,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2221,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2222,"context_line":""},{"line_number":2223,"context_line":"        # For packets from internal ports or VM ports."},{"line_number":2224,"context_line":"        br_int.add_flow("},{"line_number":2225,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2226,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_472d7f93","line":2223,"updated":"2020-07-13 15:53:54.000000000","message":"Sorry, I don\u0027t get this. VM ports are tagged, we don\u0027t need to store the VLAN ID, is in the packet.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"e54fd92f66e79bcb0408da2da5048a1494e79e69","unresolved":false,"context_lines":[{"line_number":2220,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2221,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2222,"context_line":""},{"line_number":2223,"context_line":"        # For packets from internal ports or VM ports."},{"line_number":2224,"context_line":"        br_int.add_flow("},{"line_number":2225,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2226,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_bf44181b","line":2223,"in_reply_to":"bf51134e_32d4c047","updated":"2020-07-17 10:58:43.000000000","message":"This is a trick of ovs implementation (save the CPU time to add tag to all packet). You can test this patch without this match flow \"reg6\u003dlvm.vlan\". The VM traffic I described upper will not work.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"bd4b32ea1c5a4632a36590ab11f03f0d7ceff3c4","unresolved":false,"context_lines":[{"line_number":2220,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2221,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2222,"context_line":""},{"line_number":2223,"context_line":"        # For packets from internal ports or VM ports."},{"line_number":2224,"context_line":"        br_int.add_flow("},{"line_number":2225,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2226,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_bf573b26","line":2223,"in_reply_to":"bf51134e_472d7f93","updated":"2020-07-14 01:30:19.000000000","message":"No, packets from access port (aka tagged ofport) will not match dl_vlan in flow tables. Such action is similar to physical switch. There is no vlan tag in the packet header at all during the flow processing. The switch use vlan to determain where to flood packets, to which ports. One situation the switch will add header implicitly is that switch does not know where the packet should go, and when it send port to trunk port, it will add the vlan tag to the packet.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"83e48ebb100b40c37505b3f5788eeeade2b645d5","unresolved":false,"context_lines":[{"line_number":2220,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2221,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2222,"context_line":""},{"line_number":2223,"context_line":"        # For packets from internal ports or VM ports."},{"line_number":2224,"context_line":"        br_int.add_flow("},{"line_number":2225,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2226,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_7f10c0a9","line":2223,"in_reply_to":"bf51134e_bf44181b","updated":"2020-07-17 11:28:23.000000000","message":"right, the packet is marked in OVS but the frame is not touched, you are right","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"69f6332785c4b43c98416aa7833d6c83f15a965f","unresolved":false,"context_lines":[{"line_number":2220,"context_line":"            dl_dst\u003dport_detail[\u0027mac_address\u0027],"},{"line_number":2221,"context_line":"            actions\u003d\u0027strip_vlan,output:{:d}\u0027.format(port.ofport))"},{"line_number":2222,"context_line":""},{"line_number":2223,"context_line":"        # For packets from internal ports or VM ports."},{"line_number":2224,"context_line":"        br_int.add_flow("},{"line_number":2225,"context_line":"            table\u003dconstants.LOCAL_MAC_DIRECT,"},{"line_number":2226,"context_line":"            priority\u003d12,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_32d4c047","line":2223,"in_reply_to":"bf51134e_bf573b26","updated":"2020-07-17 09:11:32.000000000","message":"That\u0027s not correct. All traffic coming into OVS through a tagged port, will add the VLAN tag to the packet. We can use dl_vlan to filter those packets.\n\nThat\u0027s precisely why we can have what you are describing in the previous comment. We can have two ports in two different networks with the same MAC. The tagged port will add the VLAN tag to the frame along with the src and dst MACs. The VLAN+srcMAC will be different on both ports.","commit_id":"e78ff4ddb61cce9de36d82b83dd20607def8b233"},{"author":{"_account_id":29071,"name":"norman shen","email":"yshxxsjt715@gmail.com","username":"ushen"},"change_message_id":"3f9c2bb5b65adaa375f3cec0d10e6ca111b14f30","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":7,"id":"bf51134e_f93ba534","line":2165,"updated":"2020-07-12 14:56:46.000000000","message":"I do not think it is a good idea to add protocol every time this function is called, this introduces unnecessary overhead imo.","commit_id":"95b135a9c04fb1634f1f15606ad3aea404c3a656"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"70de47daf758423c973f1850c8f5e2b144802ac4","unresolved":false,"context_lines":[{"line_number":2162,"context_line":"        if self.direct_for_non_openflow_firewall:"},{"line_number":2163,"context_line":"            REQUIRED_PROTOCOLS \u003d [constants.OPENFLOW13,"},{"line_number":2164,"context_line":"                                  constants.OPENFLOW14]"},{"line_number":2165,"context_line":"            self.int_br.add_protocols(*REQUIRED_PROTOCOLS)"},{"line_number":2166,"context_line":""},{"line_number":2167,"context_line":"            for physical_network in self.bridge_mappings:"},{"line_number":2168,"context_line":"                self.int_br.install_goto("}],"source_content_type":"text/x-python","patch_set":7,"id":"bf51134e_0be71b14","line":2165,"in_reply_to":"bf51134e_f93ba534","updated":"2020-07-13 09:46:38.000000000","message":"This function `install_ingress_direct_goto_flows` will be called only once in ovs agent construct function.","commit_id":"95b135a9c04fb1634f1f15606ad3aea404c3a656"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"112acdd436ae68e0d2dd2c87f597892c15aaec95","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                lvm \u003d self.vlan_manager.get(network_id)"},{"line_number":674,"context_line":"                return lvm.vlan"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    def _deferred_delete_direct_flows(self, ports):"},{"line_number":677,"context_line":"        with self.int_br.deferred(full_ordered\u003dTrue,"},{"line_number":678,"context_line":"                                  use_bundle\u003dTrue) as int_br:"},{"line_number":679,"context_line":"            for port_id in ports:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_a9d8491e","line":676,"updated":"2020-07-20 18:12:06.000000000","message":"if self.direct_for_non_openflow_firewall:   ?","commit_id":"90cc4ecbae4d9526a78dcfe49973fbb4c4bc5939"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c0b4b2b1441a84eaa43d90ac4b3eb5c4c08debd0","unresolved":false,"context_lines":[{"line_number":673,"context_line":"                lvm \u003d self.vlan_manager.get(network_id)"},{"line_number":674,"context_line":"                return lvm.vlan"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    def _deferred_delete_direct_flows(self, ports):"},{"line_number":677,"context_line":"        with self.int_br.deferred(full_ordered\u003dTrue,"},{"line_number":678,"context_line":"                                  use_bundle\u003dTrue) as int_br:"},{"line_number":679,"context_line":"            for port_id in ports:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_05b6718b","line":676,"in_reply_to":"bf51134e_a9d8491e","updated":"2020-07-21 05:08:38.000000000","message":"Done","commit_id":"90cc4ecbae4d9526a78dcfe49973fbb4c4bc5939"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"112acdd436ae68e0d2dd2c87f597892c15aaec95","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"            bridge.delete_arp_spoofing_protection(port\u003dvif.ofport)"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"    def _get_port_lvm_and_vif(self, vif_id, net_uuid\u003dNone):"},{"line_number":1284,"context_line":"        \u0027\u0027\u0027Unbind port."},{"line_number":1285,"context_line":""},{"line_number":1286,"context_line":"        Removes corresponding local vlan mapping object if this is its last"},{"line_number":1287,"context_line":"        VIF."},{"line_number":1288,"context_line":""},{"line_number":1289,"context_line":"        :param vif_id: the id of the vif"},{"line_number":1290,"context_line":"        :param net_uuid: the net_uuid this port is associated with."},{"line_number":1291,"context_line":"        \u0027\u0027\u0027"},{"line_number":1292,"context_line":"        try:"},{"line_number":1293,"context_line":"            net_uuid \u003d net_uuid or self.vlan_manager.get_net_uuid(vif_id)"},{"line_number":1294,"context_line":"        except vlanmanager.VifIdNotFound:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_ae05ef16","line":1291,"range":{"start_line":1284,"start_character":8,"end_line":1291,"end_character":11},"updated":"2020-07-20 18:12:06.000000000","message":"this docstring is for port_unbound()","commit_id":"90cc4ecbae4d9526a78dcfe49973fbb4c4bc5939"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c0b4b2b1441a84eaa43d90ac4b3eb5c4c08debd0","unresolved":false,"context_lines":[{"line_number":1281,"context_line":"            bridge.delete_arp_spoofing_protection(port\u003dvif.ofport)"},{"line_number":1282,"context_line":""},{"line_number":1283,"context_line":"    def _get_port_lvm_and_vif(self, vif_id, net_uuid\u003dNone):"},{"line_number":1284,"context_line":"        \u0027\u0027\u0027Unbind port."},{"line_number":1285,"context_line":""},{"line_number":1286,"context_line":"        Removes corresponding local vlan mapping object if this is its last"},{"line_number":1287,"context_line":"        VIF."},{"line_number":1288,"context_line":""},{"line_number":1289,"context_line":"        :param vif_id: the id of the vif"},{"line_number":1290,"context_line":"        :param net_uuid: the net_uuid this port is associated with."},{"line_number":1291,"context_line":"        \u0027\u0027\u0027"},{"line_number":1292,"context_line":"        try:"},{"line_number":1293,"context_line":"            net_uuid \u003d net_uuid or self.vlan_manager.get_net_uuid(vif_id)"},{"line_number":1294,"context_line":"        except vlanmanager.VifIdNotFound:"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_c5bbd972","line":1291,"range":{"start_line":1284,"start_character":8,"end_line":1291,"end_character":11},"in_reply_to":"bf51134e_ae05ef16","updated":"2020-07-21 05:08:38.000000000","message":"Done","commit_id":"90cc4ecbae4d9526a78dcfe49973fbb4c4bc5939"},{"author":{"_account_id":2733,"name":"Darragh O\u0027Reilly","email":"doreilly@suse.com","username":"darragh-oreilly"},"change_message_id":"112acdd436ae68e0d2dd2c87f597892c15aaec95","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            net_uuid \u003d net_uuid or self.vlan_manager.get_net_uuid(vif_id)"},{"line_number":1294,"context_line":"        except vlanmanager.VifIdNotFound:"},{"line_number":1295,"context_line":"            LOG.info("},{"line_number":1296,"context_line":"                \u0027port_unbound(): net_uuid %s not managed by VLAN manager\u0027,"},{"line_number":1297,"context_line":"                net_uuid)"},{"line_number":1298,"context_line":"            return None, None, None"},{"line_number":1299,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_498fed2d","line":1296,"updated":"2020-07-20 18:12:06.000000000","message":"wrong method name","commit_id":"90cc4ecbae4d9526a78dcfe49973fbb4c4bc5939"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"c0b4b2b1441a84eaa43d90ac4b3eb5c4c08debd0","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"            net_uuid \u003d net_uuid or self.vlan_manager.get_net_uuid(vif_id)"},{"line_number":1294,"context_line":"        except vlanmanager.VifIdNotFound:"},{"line_number":1295,"context_line":"            LOG.info("},{"line_number":1296,"context_line":"                \u0027port_unbound(): net_uuid %s not managed by VLAN manager\u0027,"},{"line_number":1297,"context_line":"                net_uuid)"},{"line_number":1298,"context_line":"            return None, None, None"},{"line_number":1299,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_a5c065e2","line":1296,"in_reply_to":"bf51134e_498fed2d","updated":"2020-07-21 05:08:38.000000000","message":"Done","commit_id":"90cc4ecbae4d9526a78dcfe49973fbb4c4bc5939"}]}
