Skip to content

Commit 0de0617

Browse files
committed
build(deps): update nix requirement from 0.26.2 to 0.29.0
1 parent 1d0e1dd commit 0de0617

File tree

5 files changed

+45
-34
lines changed

5 files changed

+45
-34
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ figment = { version = "0.10", features = ["toml", "env", "json"] }
1515
futures = "0.3.29"
1616
human-bandwidth = { version = "0.1.1", features = ["serde"] }
1717
netem-trace = { version = "0.3.3", features = ["serde", "human", "mahimahi"] }
18-
nix = "0.26.2"
18+
nix = { version = "0.29.0", features = ["time", "net", "event", "ioctl", "mount", "sched"]}
1919
once_cell = "1.19"
2020
rand = "0.8.5"
2121
serde = { version = "1.0.160", features = ["derive"] }

rattan-core/src/metal/ioctl.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::os::fd::AsRawFd;
2+
13
use libc::{__c_anonymous_ifr_ifru, c_char, c_uint, ifreq};
24
use nix::{
35
errno::Errno,
@@ -108,7 +110,7 @@ pub fn get_feature_flag(name: &str) -> Result<[u32; OFF_FLAG_DEF_SIZE], VethErro
108110
eval.data = 0;
109111
ifr.ifr_ifru.ifru_data = &mut eval as *mut EthtoolValue as *mut c_char;
110112

111-
let res = unsafe { ethtool_ioctl(fd, &mut ifr) };
113+
let res = unsafe { ethtool_ioctl(fd.as_raw_fd(), &mut ifr) };
112114
match res {
113115
Ok(_) => {
114116
flags[i] = eval.data;
@@ -147,7 +149,7 @@ pub fn disable_checksum_offload(name: &str) -> Result<(), VethError> {
147149
eval.data = 0;
148150
ifr.ifr_ifru.ifru_data = &mut eval as *mut EthtoolValue as *mut c_char;
149151

150-
let res = unsafe { ethtool_ioctl(fd, &mut ifr) };
152+
let res = unsafe { ethtool_ioctl(fd.as_raw_fd(), &mut ifr) };
151153
match res {
152154
Ok(_) => {}
153155
Err(Errno::EOPNOTSUPP) => {}

rattan-core/src/metal/netns.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::fs::File;
2+
use std::os::fd::{AsFd, BorrowedFd};
23
use std::os::unix::fs::MetadataExt;
34
use std::os::unix::io::AsRawFd;
45
use std::path::{Path, PathBuf};
@@ -217,6 +218,12 @@ impl<E: Env> AsRawFd for NetNs<E> {
217218
}
218219
}
219220

221+
impl<E: Env> AsFd for NetNs<E> {
222+
fn as_fd(&self) -> BorrowedFd<'_> {
223+
self.file.as_fd()
224+
}
225+
}
226+
220227
impl<E: Env> std::fmt::Display for NetNs<E> {
221228
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
222229
if let Ok(meta) = self.file.metadata() {
@@ -276,7 +283,7 @@ impl<E: Env> NetNs<E> {
276283
pub fn enter(&self) -> Result<std::sync::Arc<NetNs<E>>, NsError> {
277284
let current_ns = self.env.clone().current()?;
278285
trace!("entering netns: {}", self.path.to_string_lossy());
279-
setns(self.as_raw_fd(), CloneFlags::CLONE_NEWNET).map_err(NsError::SetNsError)?;
286+
setns(self.as_fd(), CloneFlags::CLONE_NEWNET).map_err(NsError::SetNsError)?;
280287
Ok(current_ns)
281288
}
282289

rattan-core/src/metal/timer.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::os::fd::AsRawFd;
1+
use std::os::fd::{AsFd, AsRawFd};
22

33
use nix::sys::{
44
time::TimeSpec,
@@ -10,16 +10,24 @@ use crate::metal::error::MetalError;
1010

1111
// High-resolution timer
1212
pub struct Timer {
13-
timer: AsyncFd<TimerFd>,
13+
timer: AsyncFd<WrapperTimer>,
14+
}
15+
16+
pub struct WrapperTimer(pub TimerFd);
17+
18+
impl AsRawFd for WrapperTimer {
19+
fn as_raw_fd(&self) -> std::os::unix::io::RawFd {
20+
self.0.as_fd().as_raw_fd()
21+
}
1422
}
1523

1624
impl Timer {
1725
pub fn new() -> Result<Self, MetalError> {
1826
Ok(Self {
19-
timer: AsyncFd::new(TimerFd::new(
27+
timer: AsyncFd::new(WrapperTimer(TimerFd::new(
2028
ClockId::CLOCK_MONOTONIC,
2129
TimerFlags::TFD_NONBLOCK,
22-
)?)?,
30+
)?))?,
2331
})
2432
}
2533

@@ -28,7 +36,7 @@ impl Timer {
2836
if duration.as_nanos() == 0 {
2937
return Ok(());
3038
}
31-
self.timer.get_mut().set(
39+
self.timer.get_mut().0.set(
3240
Expiration::OneShot(TimeSpec::from_duration(duration)),
3341
TimerSetTimeFlags::empty(),
3442
)?;

rattan-core/tests/external/af_packet.rs

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
/// CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER='sudo -E' cargo test af_packet -- --ignored --nocapture
33
use libc::{c_void, size_t, sockaddr, sockaddr_ll, socklen_t};
44
use nix::errno::Errno;
5-
use nix::sys::epoll::{epoll_create, epoll_ctl, epoll_wait, EpollEvent, EpollFlags};
5+
use nix::sys::epoll::{Epoll, EpollCreateFlags, EpollEvent, EpollFlags, EpollTimeout};
66
use nix::sys::socket::{AddressFamily, SockType};
77
use rattan_core::env::{get_std_env, StdNetEnvConfig};
88
use rattan_core::metal::veth::{MacAddr, VethCell};
9+
use std::os::fd::{FromRawFd, OwnedFd};
910
use std::sync::atomic::{AtomicBool, Ordering};
1011
use std::sync::Arc;
1112
use std::{mem, ptr};
@@ -166,34 +167,27 @@ fn af_packet_test() -> anyhow::Result<()> {
166167
)
167168
};
168169

169-
let epoll_fd = epoll_create().unwrap();
170-
171-
epoll_ctl(
172-
epoll_fd,
173-
nix::sys::epoll::EpollOp::EpollCtlAdd,
174-
left_sniffer,
175-
Some(&mut EpollEvent::new(
176-
EpollFlags::EPOLLIN,
177-
left_sniffer as u64,
178-
)),
179-
)
180-
.unwrap();
181-
182-
epoll_ctl(
183-
epoll_fd,
184-
nix::sys::epoll::EpollOp::EpollCtlAdd,
185-
right_sniffer,
186-
Some(&mut EpollEvent::new(
187-
EpollFlags::EPOLLIN,
188-
right_sniffer as u64,
189-
)),
190-
)
191-
.unwrap();
170+
let left_sniffer_fd = unsafe { OwnedFd::from_raw_fd(left_sniffer) };
171+
let epoll_instance = Epoll::new(EpollCreateFlags::empty()).unwrap();
172+
epoll_instance
173+
.add(
174+
left_sniffer_fd,
175+
EpollEvent::new(EpollFlags::EPOLLIN, left_sniffer as u64),
176+
)
177+
.unwrap();
178+
let right_sniffer_fd = unsafe { OwnedFd::from_raw_fd(right_sniffer) };
179+
epoll_instance
180+
.add(
181+
right_sniffer_fd,
182+
EpollEvent::new(EpollFlags::EPOLLIN, right_sniffer as u64),
183+
)
184+
.unwrap();
192185

193186
// Large enough to receive frame of localhost.
194187
let mut buf = [0u8; 65537];
195188
let mut events = [EpollEvent::empty(); 100];
196189
let timeout_ms = 1000;
190+
let epoll_timeout = EpollTimeout::try_from(timeout_ms).unwrap();
197191

198192
let running = Arc::new(AtomicBool::new(true));
199193
let rclone = running.clone();
@@ -203,7 +197,7 @@ fn af_packet_test() -> anyhow::Result<()> {
203197
.expect("unable to install ctrl+c handler");
204198

205199
while running.load(Ordering::Acquire) {
206-
let _num_events = epoll_wait(epoll_fd, &mut events, timeout_ms).unwrap();
200+
let _num_events = epoll_instance.wait(&mut events, epoll_timeout).unwrap();
207201

208202
for event in events {
209203
let fd = event.data() as i32;

0 commit comments

Comments
 (0)