diff options
author | David LeGare <legare@google.com> | 2022-03-21 20:19:12 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-03-21 20:19:12 +0000 |
commit | 34c25bb318dc916018e33e50b1fec97323b38532 (patch) | |
tree | 911bb07584e758873118951a14ea4e361198c485 /src/lib.rs | |
parent | ca1ebcc270db869099c84b08e37b55f6587766b7 (diff) | |
parent | eadfc342ff5fdb6033c0a9dd39f04f64a3232753 (diff) | |
download | vsock-android13-qpr2-s3-release.tar.gz |
Update vsock to 0.2.6 am: bc5a1c46a7 am: 12119859e2 am: eadfc342fft_frc_odp_330442040t_frc_odp_330442000t_frc_ase_330444010android-13.0.0_r83android-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android-13.0.0_r57android-13.0.0_r56android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android-13.0.0_r49android-13.0.0_r48android-13.0.0_r47android-13.0.0_r46android-13.0.0_r45android-13.0.0_r44android-13.0.0_r43android-13.0.0_r42android-13.0.0_r41android-13.0.0_r40android-13.0.0_r39android-13.0.0_r38android-13.0.0_r37android-13.0.0_r36android-13.0.0_r35android-13.0.0_r34android-13.0.0_r33android-13.0.0_r32aml_go_odp_330912000aml_go_ads_330915100aml_go_ads_330915000aml_go_ads_330913000android13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-releaseandroid13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-releaseandroid13-qpr2-s9-releaseandroid13-qpr2-s8-releaseandroid13-qpr2-s7-releaseandroid13-qpr2-s6-releaseandroid13-qpr2-s5-releaseandroid13-qpr2-s3-releaseandroid13-qpr2-s2-releaseandroid13-qpr2-s12-releaseandroid13-qpr2-s11-releaseandroid13-qpr2-s10-releaseandroid13-qpr2-s1-releaseandroid13-qpr2-releaseandroid13-qpr2-b-s1-releaseandroid13-mainline-go-adservices-releaseandroid13-frc-odp-releaseandroid13-devandroid13-d4-s2-releaseandroid13-d4-s1-releaseandroid13-d4-releaseandroid13-d3-s1-release
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/vsock/+/2005052
Change-Id: I043a75863ce7428517cdb243d3a4844de23ea475
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 29 |
1 files changed, 25 insertions, 4 deletions
@@ -17,15 +17,17 @@ //! Virtio socket support for Rust. -use std::io::{Error, ErrorKind, Read, Result, Write}; -use std::mem::{self, size_of}; -use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd}; - use libc::*; +use nix::ioctl_read_bad; use std::ffi::c_void; +use std::fs::File; +use std::io::{Error, ErrorKind, Read, Result, Write}; +use std::mem::{self, size_of}; use std::net::Shutdown; +use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd}; use std::time::Duration; +pub use libc::{VMADDR_CID_ANY, VMADDR_CID_HOST, VMADDR_CID_HYPERVISOR, VMADDR_CID_LOCAL}; pub use nix::sys::socket::{SockAddr, VsockAddr}; fn new_socket() -> libc::c_int { @@ -505,3 +507,22 @@ impl Drop for VsockStream { unsafe { close(self.socket) }; } } + +const IOCTL_VM_SOCKETS_GET_LOCAL_CID: usize = 0x7b9; +ioctl_read_bad!( + vm_sockets_get_local_cid, + IOCTL_VM_SOCKETS_GET_LOCAL_CID, + u32 +); + +/// Gets the CID of the local machine. +/// +/// Note that when calling [`VsockListener::bind`], you should generally use [`VMADDR_CID_ANY`] +/// instead, and for making a loopback connection you should use [`VMADDR_CID_LOCAL`]. +pub fn get_local_cid() -> Result<u32> { + let f = File::open("/dev/vsock")?; + let mut cid = 0; + // SAFETY: the kernel only modifies the given u32 integer. + unsafe { vm_sockets_get_local_cid(f.as_raw_fd(), &mut cid) }?; + Ok(cid) +} |