MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / process_tx

Method process_tx

net_util/src/queue_pair.rs:489–537  ·  view source on GitHub ↗
(
        &mut self,
        mem: &vm_memory::GuestMemoryMmap<B>,
        queue: &mut Queue,
    )

Source from the content-addressed store, hash-verified

487
488impl 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,

Callers

nothing calls this directly

Calls 4

register_listenerFunction · 0.85
unregister_listenerFunction · 0.85
process_desc_chainMethod · 0.80
as_raw_fdMethod · 0.45

Tested by

no test coverage detected