diff options
author | Stephen Barber <smbarber@chromium.org> | 2017-08-07 16:15:10 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-08-09 11:47:55 -0700 |
commit | 604d989d7e8f7a159e160b86302d41aa2ddd4f35 (patch) | |
tree | 9d040689c1f2bf18e4f86d761751efe365bbe24d /net_util | |
parent | 2fb1969902f8b81466c21df02dfc283732998bbf (diff) | |
download | crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.tar crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.tar.gz crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.tar.bz2 crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.tar.lz crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.tar.xz crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.tar.zst crosvm-604d989d7e8f7a159e160b86302d41aa2ddd4f35.zip |
net_util: implement Read, Write, and Pollable for Tap
BUG=none TEST=none Change-Id: I1baf242a605ee6ff8e3bcc26e49042c3c2dd8cbb Signed-off-by: Stephen Barber <smbarber@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/604935 Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'net_util')
-rw-r--r-- | net_util/src/lib.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/net_util/src/lib.rs b/net_util/src/lib.rs index 5ef4cd9..41ca236 100644 --- a/net_util/src/lib.rs +++ b/net_util/src/lib.rs @@ -7,11 +7,13 @@ extern crate net_sys; extern crate sys_util; use std::fs::File; +use std::io::{Read, Write, Result as IoResult}; use std::mem; use std::net; use std::os::raw::*; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; +use sys_util::Pollable; use sys_util::{ioctl_with_val, ioctl_with_ref, ioctl_with_mut_ref}; #[derive(Debug)] @@ -212,12 +214,36 @@ impl Tap { } } +impl Read for Tap { + fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> { + self.tap_file.read(buf) + } +} + +impl Write for Tap { + fn write(&mut self, buf: &[u8]) -> IoResult<usize> { + self.tap_file.write(&buf) + } + + fn flush(&mut self) -> IoResult<()> { + Ok(()) + } +} + impl AsRawFd for Tap { fn as_raw_fd(&self) -> RawFd { self.tap_file.as_raw_fd() } } +// Safe since the tap fd's lifetime lasts as long as this trait object, and the +// tap fd is pollable. +unsafe impl Pollable for Tap { + fn pollable_fd(&self) -> RawFd { + self.tap_file.as_raw_fd() + } +} + #[cfg(test)] mod tests { use super::*; |