Looking at ovs_neutron_agent, it tags a port as dead with DEAD_VLAN_TAG (4095) if get_device_details (neutron/plugins/ml2/rpc.RpcCallbacks.get_device_details) fails to return a dict with port_id or admin_state_up is False in that dict. Assuming admin_state_up is True, get_device_details can return prematurely due to various failure conditions. Checking the logs for the warnings around those conditions will hopefully get us closer to the problem.
Looking at ovs_neutron_agent, it tags a port as dead with DEAD_VLAN_TAG (4095) if get_device_details (neutron/ plugins/ ml2/rpc. RpcCallbacks. get_device_ details) fails to return a dict with port_id or admin_state_up is False in that dict. Assuming admin_state_up is True, get_device_details can return prematurely due to various failure conditions. Checking the logs for the warnings around those conditions will hopefully get us closer to the problem.