1b8a62b91Sopenharmony_ciuse std::fs::File; 2b8a62b91Sopenharmony_ci 3b8a62b91Sopenharmony_ciuse rustix::fd::AsFd; 4b8a62b91Sopenharmony_ci#[cfg(not(target_os = "android"))] 5b8a62b91Sopenharmony_ciuse rustix::fd::{FromRawFd, OwnedFd, RawFd}; 6b8a62b91Sopenharmony_ci#[cfg(not(target_os = "android"))] 7b8a62b91Sopenharmony_ciuse rustix::thread::*; 8b8a62b91Sopenharmony_ci 9b8a62b91Sopenharmony_ci#[test] 10b8a62b91Sopenharmony_ci#[ignore = "Requires CAP_SYS_ADMIN capability"] 11b8a62b91Sopenharmony_cifn test_move_into_link_name_space() { 12b8a62b91Sopenharmony_ci let f = File::open("/proc/self/ns/uts").unwrap(); 13b8a62b91Sopenharmony_ci 14b8a62b91Sopenharmony_ci rustix::thread::move_into_link_name_space( 15b8a62b91Sopenharmony_ci f.as_fd(), 16b8a62b91Sopenharmony_ci Some(rustix::thread::LinkNameSpaceType::HostNameAndNISDomainName), 17b8a62b91Sopenharmony_ci ) 18b8a62b91Sopenharmony_ci .unwrap(); 19b8a62b91Sopenharmony_ci} 20b8a62b91Sopenharmony_ci 21b8a62b91Sopenharmony_ci#[test] 22b8a62b91Sopenharmony_ci#[ignore = "Requires CAP_SYS_ADMIN capability"] 23b8a62b91Sopenharmony_ci#[cfg(not(target_os = "android"))] // Android libc bindings don't have `SYS_pidfd_open` yet. 24b8a62b91Sopenharmony_cifn test_move_into_thread_name_spaces() { 25b8a62b91Sopenharmony_ci let fd = unsafe { libc::syscall(libc::SYS_pidfd_open, std::process::id() as usize, 0_usize) }; 26b8a62b91Sopenharmony_ci if fd == -1 { 27b8a62b91Sopenharmony_ci panic!("{}", std::io::Error::last_os_error()); 28b8a62b91Sopenharmony_ci } 29b8a62b91Sopenharmony_ci 30b8a62b91Sopenharmony_ci let fd = unsafe { OwnedFd::from_raw_fd(fd as RawFd) }; 31b8a62b91Sopenharmony_ci 32b8a62b91Sopenharmony_ci rustix::thread::move_into_thread_name_spaces( 33b8a62b91Sopenharmony_ci fd.as_fd(), 34b8a62b91Sopenharmony_ci ThreadNameSpaceType::HOST_NAME_AND_NIS_DOMAIN_NAME, 35b8a62b91Sopenharmony_ci ) 36b8a62b91Sopenharmony_ci .unwrap(); 37b8a62b91Sopenharmony_ci} 38