(
&mut self,
device_event: u16,
_evset: EventSet,
vrings: &[VringRwLock<GuestMemoryAtomic<GuestMemoryMmap>>],
thread_id: usize,
)
| 200 | fn set_event_idx(&mut self, _enabled: bool) {} |
| 201 | |
| 202 | fn handle_event( |
| 203 | &mut self, |
| 204 | device_event: u16, |
| 205 | _evset: EventSet, |
| 206 | vrings: &[VringRwLock<GuestMemoryAtomic<GuestMemoryMmap>>], |
| 207 | thread_id: usize, |
| 208 | ) -> VhostUserBackendResult<()> { |
| 209 | let thread = self.threads[thread_id].get_mut().unwrap(); |
| 210 | match device_event { |
| 211 | 0 => { |
| 212 | if !thread.net.rx_tap_listening { |
| 213 | net_util::register_listener( |
| 214 | thread.net.epoll_fd.unwrap(), |
| 215 | thread.net.tap.as_raw_fd(), |
| 216 | epoll::Events::EPOLLIN, |
| 217 | u64::from(thread.net.tap_rx_event_id), |
| 218 | ) |
| 219 | .map_err(Error::RegisterTapListener)?; |
| 220 | thread.net.rx_tap_listening = true; |
| 221 | } |
| 222 | } |
| 223 | 1 | 4 => { |
| 224 | let mut vring = vrings[1].get_mut(); |
| 225 | if thread |
| 226 | .net |
| 227 | .process_tx(self.mem.memory().deref(), vring.get_queue_mut()) |
| 228 | .map_err(Error::NetQueuePair)? |
| 229 | { |
| 230 | vring |
| 231 | .signal_used_queue() |
| 232 | .map_err(Error::FailedSignalingUsedQueue)?; |
| 233 | } |
| 234 | } |
| 235 | 3 => { |
| 236 | let mut vring = vrings[0].get_mut(); |
| 237 | if thread |
| 238 | .net |
| 239 | .process_rx(self.mem.memory().deref(), vring.get_queue_mut()) |
| 240 | .map_err(Error::NetQueuePair)? |
| 241 | { |
| 242 | vring |
| 243 | .signal_used_queue() |
| 244 | .map_err(Error::FailedSignalingUsedQueue)?; |
| 245 | } |
| 246 | } |
| 247 | _ => return Err(Error::HandleEventUnknownEvent.into()), |
| 248 | } |
| 249 | |
| 250 | Ok(()) |
| 251 | } |
| 252 | |
| 253 | fn exit_event(&self, thread_index: usize) -> Option<(EventConsumer, EventNotifier)> { |
| 254 | let kill_evt = &self.threads[thread_index].lock().unwrap().kill_evt; |
nothing calls this directly
no test coverage detected