(&mut self)
| 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 |
no test coverage detected