)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"11be3db0e7e6036bac7337858894aaa07e9ae9e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"053a4665_a689c9ab","updated":"2025-10-23 00:07:19.000000000","message":"recheck bug 2129284","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"}],"neutron/agent/ovn/extensions/bgp/bridge.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aad8c4119ae167b41bd62e62808fcc426f83a876","unresolved":true,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    all_connections \u003d psutil.net_connections(kind\u003d\u0027tcp\u0027)"},{"line_number":52,"context_line":"    for conn in all_connections:"},{"line_number":53,"context_line":"        # Established connection with our monitored source IP and either source"},{"line_number":54,"context_line":"        # or destination port is BGP port"},{"line_number":55,"context_line":"        if (conn.laddr and conn.status \u003d\u003d \u0027ESTABLISHED\u0027 and"},{"line_number":56,"context_line":"                conn.laddr.ip in source_ip_dict and"},{"line_number":57,"context_line":"                conn.raddr and bgp_port_number in ["}],"source_content_type":"text/x-python","patch_set":4,"id":"b06b21a2_831e53e4","line":54,"range":{"start_line":53,"start_character":73,"end_line":54,"end_character":24},"updated":"2025-11-05 15:45:09.000000000","message":"qq: why \"source or destination\"? Shouldn\u0027t be just destination? We open the BGP channel, right?\n\nI\u0027m just asking, to better understand this","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"961cb85d595d109df8e535037b3bb91d0374a17c","unresolved":true,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    all_connections \u003d psutil.net_connections(kind\u003d\u0027tcp\u0027)"},{"line_number":52,"context_line":"    for conn in all_connections:"},{"line_number":53,"context_line":"        # Established connection with our monitored source IP and either source"},{"line_number":54,"context_line":"        # or destination port is BGP port"},{"line_number":55,"context_line":"        if (conn.laddr and conn.status \u003d\u003d \u0027ESTABLISHED\u0027 and"},{"line_number":56,"context_line":"                conn.laddr.ip in source_ip_dict and"},{"line_number":57,"context_line":"                conn.raddr and bgp_port_number in ["}],"source_content_type":"text/x-python","patch_set":4,"id":"a799136d_e16c9c87","line":54,"range":{"start_line":53,"start_character":73,"end_line":54,"end_character":24},"in_reply_to":"b06b21a2_831e53e4","updated":"2025-11-06 13:40:30.000000000","message":"It can be both ways depending on who initiates the connection. It could be the peering switch too that connects to the chassis. So regardless of who initiated the connection we want to have a consistent tuple (source, destination) where the source is on the host where the agent is running.","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aad8c4119ae167b41bd62e62808fcc426f83a876","unresolved":true,"context_lines":[{"line_number":52,"context_line":"    for conn in all_connections:"},{"line_number":53,"context_line":"        # Established connection with our monitored source IP and either source"},{"line_number":54,"context_line":"        # or destination port is BGP port"},{"line_number":55,"context_line":"        if (conn.laddr and conn.status \u003d\u003d \u0027ESTABLISHED\u0027 and"},{"line_number":56,"context_line":"                conn.laddr.ip in source_ip_dict and"},{"line_number":57,"context_line":"                conn.raddr and bgp_port_number in ["},{"line_number":58,"context_line":"                    conn.raddr.port, conn.laddr.port]):"}],"source_content_type":"text/x-python","patch_set":4,"id":"0745f6ff_096c1afd","line":55,"range":{"start_line":55,"start_character":43,"end_line":55,"end_character":54},"updated":"2025-11-05 15:45:09.000000000","message":"nit: `psutil.CONN_ESTABLISHED`","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"961cb85d595d109df8e535037b3bb91d0374a17c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    for conn in all_connections:"},{"line_number":53,"context_line":"        # Established connection with our monitored source IP and either source"},{"line_number":54,"context_line":"        # or destination port is BGP port"},{"line_number":55,"context_line":"        if (conn.laddr and conn.status \u003d\u003d \u0027ESTABLISHED\u0027 and"},{"line_number":56,"context_line":"                conn.laddr.ip in source_ip_dict and"},{"line_number":57,"context_line":"                conn.raddr and bgp_port_number in ["},{"line_number":58,"context_line":"                    conn.raddr.port, conn.laddr.port]):"}],"source_content_type":"text/x-python","patch_set":4,"id":"883d0bf3_426dbbac","line":55,"range":{"start_line":55,"start_character":43,"end_line":55,"end_character":54},"in_reply_to":"0745f6ff_096c1afd","updated":"2025-11-06 13:40:30.000000000","message":"Done","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"aad8c4119ae167b41bd62e62808fcc426f83a876","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":"    def __init__(self, bgp_agent_api, name):"},{"line_number":88,"context_line":"        super().__init__(bgp_agent_api, name)"},{"line_number":89,"context_line":"        self.stop_bgp_discovery_event \u003d threading.Event()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def __str__(self):"},{"line_number":92,"context_line":"        return f\"BGPChassisBridge(name\u003d{self.name}, ips\u003d{self.ips})\""}],"source_content_type":"text/x-python","patch_set":4,"id":"02bbe38a_a5318236","line":89,"range":{"start_line":89,"start_character":13,"end_line":89,"end_character":37},"updated":"2025-11-05 15:45:09.000000000","message":"When do we stop this event?","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"961cb85d595d109df8e535037b3bb91d0374a17c","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":"    def __init__(self, bgp_agent_api, name):"},{"line_number":88,"context_line":"        super().__init__(bgp_agent_api, name)"},{"line_number":89,"context_line":"        self.stop_bgp_discovery_event \u003d threading.Event()"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def __str__(self):"},{"line_number":92,"context_line":"        return f\"BGPChassisBridge(name\u003d{self.name}, ips\u003d{self.ips})\""}],"source_content_type":"text/x-python","patch_set":4,"id":"2baa415d_bda1e9e7","line":89,"range":{"start_line":89,"start_character":13,"end_line":89,"end_character":37},"in_reply_to":"02bbe38a_a5318236","updated":"2025-11-06 13:40:30.000000000","message":"Good point, this is to control the thread in case we need to stop the waiting. We should set the event if the bridge is removed from bgp-bridge configuration from OVS and the server side needs to delete the per-chassis routers. As part of this patch, I think we can create the interface to stop the thread and delete the bridge on the agent side.","commit_id":"d6869a00d3814ef7aac144e0537d451e897f4567"}]}
