Use coarsetime::Updater to update time even when deep inside event loop
This commit is contained in:
parent
3fa8c2be5c
commit
6a95272dcf
|
|
@ -9,7 +9,6 @@ use std::time::Duration;
|
|||
pub struct Poller<'poller> {
|
||||
poller: polling::Poller,
|
||||
events: polling::Events,
|
||||
timeout: Duration,
|
||||
vm_fd: BorrowedFd<'poller>,
|
||||
host_fd: BorrowedFd<'poller>,
|
||||
}
|
||||
|
|
@ -23,17 +22,12 @@ enum EventKey {
|
|||
}
|
||||
|
||||
impl Poller<'_> {
|
||||
pub fn new<'poller>(
|
||||
vm_fd: RawFd,
|
||||
host_fd: RawFd,
|
||||
timeout: Duration,
|
||||
) -> Result<Poller<'poller>> {
|
||||
pub fn new<'poller>(vm_fd: RawFd, host_fd: RawFd) -> Result<Poller<'poller>> {
|
||||
let poller = polling::Poller::new()?;
|
||||
|
||||
Ok(Poller {
|
||||
poller,
|
||||
events: polling::Events::new(),
|
||||
timeout,
|
||||
vm_fd: unsafe { BorrowedFd::borrow_raw(vm_fd) },
|
||||
host_fd: unsafe { BorrowedFd::borrow_raw(host_fd) },
|
||||
})
|
||||
|
|
@ -65,7 +59,8 @@ impl Poller<'_> {
|
|||
}
|
||||
|
||||
pub fn wait(&mut self) -> Result<(bool, bool, bool)> {
|
||||
self.poller.wait(&mut self.events, Some(self.timeout))?;
|
||||
self.poller
|
||||
.wait(&mut self.events, Some(Duration::from_millis(100)))?;
|
||||
|
||||
let vm_readable = self
|
||||
.events
|
||||
|
|
|
|||
|
|
@ -49,8 +49,7 @@ impl Proxy<'_> {
|
|||
) -> Result<Proxy<'proxy>> {
|
||||
let vm = VM::new(vm_fd)?;
|
||||
let host = Host::new(vm_net_type, !allow.contains(&Ipv4Net::zero()))?;
|
||||
let poller_timeout = Duration::from_millis(100);
|
||||
let poller = Poller::new(vm.as_raw_fd(), host.as_raw_fd(), poller_timeout)?;
|
||||
let poller = Poller::new(vm.as_raw_fd(), host.as_raw_fd())?;
|
||||
|
||||
// Craft packet filter rules
|
||||
//
|
||||
|
|
@ -66,12 +65,17 @@ impl Proxy<'_> {
|
|||
rules.insert(block_net, Action::Block);
|
||||
}
|
||||
|
||||
let coarsetime_update_interval_millis = 100;
|
||||
coarsetime::Updater::new(coarsetime_update_interval_millis).start()?;
|
||||
|
||||
Ok(Proxy {
|
||||
vm,
|
||||
host,
|
||||
poller,
|
||||
vm_mac_address: smoltcp::wire::EthernetAddress(vm_mac_address.bytes()),
|
||||
dhcp_snooper: DhcpSnooper::new(poller_timeout),
|
||||
dhcp_snooper: DhcpSnooper::new(Duration::from_millis(
|
||||
coarsetime_update_interval_millis,
|
||||
)),
|
||||
rules,
|
||||
enobufs_encountered: false,
|
||||
port_forwarder: PortForwarder::new(exposed_ports),
|
||||
|
|
|
|||
Loading…
Reference in New Issue