(
&mut self,
mem: &vm_memory::GuestMemoryMmap<B>,
queue: &mut Queue,
)
| 487 | |
| 488 | impl NetQueuePair { |
| 489 | pub fn process_tx<B: Bitmap + 'static>( |
| 490 | &mut self, |
| 491 | mem: &vm_memory::GuestMemoryMmap<B>, |
| 492 | queue: &mut Queue, |
| 493 | ) -> Result<bool, NetQueuePairError> { |
| 494 | let tx_tap_retry = self.tx.process_desc_chain( |
| 495 | mem, |
| 496 | &self.tap, |
| 497 | queue, |
| 498 | &mut self.tx_rate_limiter, |
| 499 | self.access_platform.as_deref(), |
| 500 | )?; |
| 501 | |
| 502 | // We got told to try again when writing to the tap. Wait for the TAP to be writable |
| 503 | if tx_tap_retry && !self.tx_tap_listening { |
| 504 | register_listener( |
| 505 | self.epoll_fd.unwrap(), |
| 506 | self.tap_for_write_epoll.as_raw_fd(), |
| 507 | epoll::Events::EPOLLOUT, |
| 508 | u64::from(self.tap_tx_event_id), |
| 509 | ) |
| 510 | .map_err(NetQueuePairError::RegisterListener)?; |
| 511 | self.tx_tap_listening = true; |
| 512 | info!("Writing to TAP returned EAGAIN. Listening for TAP to become writable."); |
| 513 | } else if !tx_tap_retry && self.tx_tap_listening { |
| 514 | unregister_listener( |
| 515 | self.epoll_fd.unwrap(), |
| 516 | self.tap_for_write_epoll.as_raw_fd(), |
| 517 | epoll::Events::EPOLLOUT, |
| 518 | u64::from(self.tap_tx_event_id), |
| 519 | ) |
| 520 | .map_err(NetQueuePairError::UnregisterListener)?; |
| 521 | self.tx_tap_listening = false; |
| 522 | info!("Writing to TAP succeeded. No longer listening for TAP to become writable."); |
| 523 | } |
| 524 | |
| 525 | self.counters |
| 526 | .tx_bytes |
| 527 | .fetch_add(self.tx.counter_bytes.0, Ordering::AcqRel); |
| 528 | self.counters |
| 529 | .tx_frames |
| 530 | .fetch_add(self.tx.counter_frames.0, Ordering::AcqRel); |
| 531 | self.tx.counter_bytes = Wrapping(0); |
| 532 | self.tx.counter_frames = Wrapping(0); |
| 533 | |
| 534 | queue |
| 535 | .needs_notification(mem) |
| 536 | .map_err(NetQueuePairError::QueueNeedsNotification) |
| 537 | } |
| 538 | |
| 539 | pub fn process_rx<B: Bitmap + 'static>( |
| 540 | &mut self, |
nothing calls this directly
no test coverage detected