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

Method handle_rx_event

virtio-devices/src/net.rs:189–216  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

187 }
188
189 fn handle_rx_event(&mut self) -> result::Result<(), DeviceError> {
190 let queue_evt = &self.queue_evt_pair.0;
191 if let Err(e) = queue_evt.read() {
192 error!("Failed to get rx queue event: {e:?}");
193 }
194
195 self.net.rx_desc_avail = true;
196
197 let rate_limit_reached = self
198 .net
199 .rx_rate_limiter
200 .as_ref()
201 .is_some_and(|r| r.is_blocked());
202
203 // Start to listen on RX_TAP_EVENT only when the rate limit is not reached
204 if !self.net.rx_tap_listening && !rate_limit_reached {
205 net_util::register_listener(
206 self.net.epoll_fd.unwrap(),
207 self.net.tap.as_raw_fd(),
208 epoll::Events::EPOLLIN,
209 u64::from(self.net.tap_rx_event_id),
210 )
211 .map_err(DeviceError::IoError)?;
212 self.net.rx_tap_listening = true;
213 }
214
215 Ok(())
216 }
217
218 fn process_tx(&mut self) -> result::Result<(), DeviceError> {
219 let res = self

Callers 1

handle_eventMethod · 0.80

Calls 4

register_listenerFunction · 0.85
readMethod · 0.45
is_blockedMethod · 0.45
as_raw_fdMethod · 0.45

Tested by

no test coverage detected