start to implementig clone to create namespaces

This commit is contained in:
netjaileRS 2024-08-25 21:34:18 +02:00
parent 750426ad1d
commit dec755a2a5
962 changed files with 7477 additions and 193 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
./target/

285
Cargo.lock generated
View File

@ -17,6 +17,64 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "aho-corasick"
version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
dependencies = [
"memchr",
]
[[package]]
name = "anstream"
version = "0.6.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"is_terminal_polyfill",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
[[package]]
name = "anstyle-parse"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a"
dependencies = [
"windows-sys",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8"
dependencies = [
"anstyle",
"windows-sys",
]
[[package]]
name = "anyhow"
version = "1.0.86"
@ -46,9 +104,9 @@ dependencies = [
[[package]]
name = "bitflags"
version = "2.5.0"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
[[package]]
name = "byteorder"
@ -77,6 +135,35 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "colorchoice"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0"
[[package]]
name = "env_filter"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab"
dependencies = [
"log",
"regex",
]
[[package]]
name = "env_logger"
version = "0.11.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d"
dependencies = [
"anstream",
"anstyle",
"env_filter",
"humantime",
"log",
]
[[package]]
name = "futures"
version = "0.3.30"
@ -179,10 +266,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]]
name = "libc"
version = "0.2.153"
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "is_terminal_polyfill"
version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "libc"
version = "0.2.158"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
[[package]]
name = "lock_api"
version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
dependencies = [
"autocfg",
"scopeguard",
]
[[package]]
name = "log"
@ -192,9 +301,9 @@ checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
[[package]]
name = "memchr"
version = "2.7.2"
version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "miniz_oxide"
@ -221,8 +330,12 @@ dependencies = [
name = "netjailers"
version = "0.1.0"
dependencies = [
"env_logger",
"futures",
"log",
"nix",
"rtnetlink",
"tokio",
]
[[package]]
@ -310,6 +423,29 @@ dependencies = [
"memchr",
]
[[package]]
name = "parking_lot"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
dependencies = [
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.9.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
"redox_syscall",
"smallvec",
"windows-targets",
]
[[package]]
name = "paste"
version = "1.0.15"
@ -330,22 +466,60 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "proc-macro2"
version = "1.0.81"
version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.36"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
version = "1.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
[[package]]
name = "rtnetlink"
version = "0.14.1"
@ -370,12 +544,27 @@ version = "0.1.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
[[package]]
name = "scopeguard"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "shlex"
version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
[[package]]
name = "signal-hook-registry"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
dependencies = [
"libc",
]
[[package]]
name = "slab"
version = "0.4.9"
@ -385,6 +574,12 @@ dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "socket2"
version = "0.5.7"
@ -397,9 +592,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.60"
version = "2.0.76"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3"
checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525"
dependencies = [
"proc-macro2",
"quote",
@ -408,18 +603,18 @@ dependencies = [
[[package]]
name = "thiserror"
version = "1.0.59"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa"
checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.59"
version = "1.0.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66"
checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
dependencies = [
"proc-macro2",
"quote",
@ -436,17 +631,37 @@ dependencies = [
"bytes",
"libc",
"mio",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"socket2",
"tokio-macros",
"windows-sys",
]
[[package]]
name = "tokio-macros"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "unicode-ident"
version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "utf8parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
@ -464,9 +679,9 @@ dependencies = [
[[package]]
name = "windows-targets"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb"
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
@ -480,48 +695,48 @@ dependencies = [
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
[[package]]
name = "windows_i686_gnu"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
[[package]]
name = "windows_i686_msvc"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.5"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"

View File

@ -4,5 +4,10 @@ version = "0.1.0"
edition = "2021"
[dependencies]
nix = '*'
rtnetlink = '*'
nix = {version = '*', features= ["fs", "mount", "sched"] }
rtnetlink = {version = '*', features = ["tokio_socket"] }
futures = '*'
log = '*'
env_logger = '*'
tokio = {version = '*', features = ["full"] }

View File

@ -1,47 +1,15 @@
use std::fs::create_dir;
use std::io::{Result, ErrorKind};
use std::fs::File;
use nix::mount::{
mount,
MsFlags
};
mod namespace;
use std::io::Result;
use rtnetlink::NetworkNamespace;
use futures::executor::block_on;
const PATH_MAX:u32 = 4096;
const NET_NS_DIR:&str = "/var/run/netns";
const PROC_NS_DIR:&str = "/proc/self/ns/net";
fn main() -> Result<()> {
create_ns_dir()?;
let nsdir = format!("{}/{}",NET_NS_DIR,"fake-net");
File::create(nsdir.clone())?;
bind_ns_file(nsdir)?;
println!("end");
Ok(())
}
fn create_ns_dir() -> Result<()> {
match create_dir(NET_NS_DIR) {
Err(e) if e.kind() != ErrorKind::AlreadyExists => {
println!("entra 2");
Err(e)
},
_ => {
println!("entra 1");
Ok(())
},
}
}
fn bind_ns_file(ns_file: String) -> Result<()> {
match create_mount(ns_file) {
Ok(_mount) => {
println!("mount succes");
Ok(())
},
Err(e) => Err(e),
}
}
fn create_mount(ns_file: String) -> Result<()> {
Ok(mount::<str, str, str, str>(Some(PROC_NS_DIR), ns_file.as_str(), None, MsFlags::MS_BIND, None)?)
fn main() {
env_logger::Builder::from_default_env()
.format_timestamp_secs()
.filter(None, log::LevelFilter::Debug)
.init();
//namespace::create_ns::create_ns();
let ns_name = "test-newns".to_string();
block_on(NetworkNamespace::add(ns_name.clone()));
namespace::bind_interface::run_in_namespace(&ns_name);
}

View File

@ -0,0 +1,172 @@
use nix::sched::{CloneFlags, clone, unshare, setns};
use nix::sys::signal::Signal;
use crate::namespace::consts::{
NET_NS_DIR,
STACK_SIZE
};
use futures::TryStreamExt;
use nix::fcntl::{open, OFlag};
use nix::mount::{mount, MsFlags};
use nix::unistd::{fork, ForkResult, Pid};
use nix::sys::wait::{waitpid, WaitStatus};
use nix::sys::stat::Mode;
use nix::sys::statvfs::{statvfs, FsFlags};
use rtnetlink::{new_connection, Error, Handle, NetworkNamespace};
use std::env;
use std::fs::{File, OpenOptions};
use std::path::{Path, PathBuf};
use std::process::exit;
use std::os::unix::io::RawFd;
use std::os::fd::FromRawFd;
pub fn run_in_namespace(ns_name: &String) -> Result<(), ()> {
// Configure networking in the child namespace:
// Fork a process that is set to the newly created namespace
// Here set the veth ip addr, routing tables etc.
// Unfortunately the NetworkNamespace interface of rtnetlink does
// not offer these functionalities
let mut tmp_stack: [u8; STACK_SIZE] = [0; STACK_SIZE];
let mut flags = CloneFlags::empty();
flags.insert(CloneFlags::CLONE_VM);
flags.insert(CloneFlags::CLONE_VFORK);
unsafe {
match clone(
Box::new(|| run_child(&ns_name.clone())),
&mut tmp_stack,
flags,
Some(Signal::SIGCHLD as i32)) {
Ok(pid) => Ok(()),
Err(e) => {
return Err(());
}
}
}
}
fn run_child(ns_name: &String) -> isize {
let res = split_namespace(ns_name);
match res {
Err(_) => {
log::error!("Child process crashed");
return -1;
}
Ok(()) => {
log::debug!("Child exited normally");
return 0;
}
}
}
fn split_namespace(ns_name: &String) -> Result<(), ()> {
// First create the network namespace
// NetworkNamespace::add(ns_name.to_string()).await.map_err(|e| {
// log::error!("Can not create namespace {}", e);
// }).unwrap();
// Open NS path
let ns_path = format!("{}/{}", NET_NS_DIR, ns_name);
log::debug!("ns_path:{}", ns_path);
let mut open_flags = OFlag::empty();
open_flags.insert(OFlag::O_RDONLY);
open_flags.insert(OFlag::O_CLOEXEC);
let fd = match open(Path::new(&ns_path), open_flags, Mode::empty()) {
Ok(raw_fd) => unsafe {
File::from_raw_fd(raw_fd)
}
Err(e) => {
log::error!("Can not open network namespace: {}", e);
return Err(());
}
};
// Switch to network namespace with CLONE_NEWNET
if let Err(e) = setns(fd, CloneFlags::CLONE_NEWNET) {
log::error!("Can not set namespace to target {}: {}", ns_name, e);
return Err(());
}
// unshare with CLONE_NEWNS
if let Err(e) = unshare(CloneFlags::CLONE_NEWNS) {
log::error!("Can not unshare: {}", e);
return Err(());
}
// mount blind the fs
// let's avoid that any mount propagates to the parent process
// mount_directory(None, &PathBuf::from("/"), vec![MsFlags::MS_REC, MsFlags::MS_PRIVATE])?;
let mut mount_flags = MsFlags::empty();
mount_flags.insert(MsFlags::MS_REC);
mount_flags.insert(MsFlags::MS_PRIVATE);
if let Err(e) = mount::<PathBuf, PathBuf, str, PathBuf>(None, &PathBuf::from("/"), None, mount_flags, None) {
log::error!("Can not remount root directory");
()
}
// Now unmount /sys
let sys_path = PathBuf::from("/sys");
mount_flags = MsFlags::empty();
// Needed to respect the trait for NixPath
let ns_name_path = PathBuf::from(ns_name);
// TODO do not exit for EINVAL error
// unmount_path(&sys_path)?;
// consider the case that a sysfs is not present
let stat_sys = statvfs(&sys_path)
.map_err(|e| {
log::error!("Can not stat sys: {}", e);
}).unwrap();
if stat_sys.flags().contains(FsFlags::ST_RDONLY) {
mount_flags.insert(MsFlags::MS_RDONLY);
}
// and remount a version of /sys that describes the network namespace
if let Err(e) = mount::<PathBuf, PathBuf, str, PathBuf>(Some(&ns_name_path), &sys_path, Some("sysfs"), mount_flags, None) {
log::error!("Can not remount /sys to namespace: {}", e);
()
}
set_lo_up().unwrap();
Ok(())
}
pub fn set_lo_up() -> Result<(), Error> {
tokio::runtime::Runtime::new().unwrap().handle().block_on( async {
let (connection, handle, _) = new_connection().unwrap();
tokio::spawn(connection);
log::debug!("ARE WE STOPPING YET???");
let mut links = handle.link().get().match_name("lo".to_string()).execute();
if let Some(link) = links.try_next().await.unwrap() {
let index = link.header.index;
log::debug!("index:{}", index);
handle
.link()
.set(index)
.up()
.execute()
.await.unwrap()
} else {
println!("no link link lo found");
}
});
Ok(())
}
pub fn get_inferfaces() -> Result<(), Error> {
tokio::runtime::Runtime::new().unwrap().handle().block_on( async {
let (connection, handle, _) = new_connection().unwrap();
tokio::spawn(connection);
log::debug!("ARE WE STOPPING YET???");
let mut links = handle.link().get().match_name("lo".to_string()).execute();
if let Some(link) = links.try_next().await.unwrap() {
let index = link.header.index;
log::debug!("index:{}", index);
} else {
println!("no link link lo found");
}
});
Ok(())
}

3
src/namespace/consts.rs Normal file
View File

@ -0,0 +1,3 @@
pub const NET_NS_DIR:&str = "/var/run/netns";
pub const PROC_NS_DIR:&str = "/proc/self/ns/net";
pub const STACK_SIZE: usize = 1024 * 1024;

View File

@ -0,0 +1,43 @@
use std::fs::create_dir;
use std::io::{Result, ErrorKind};
use std::fs::File;
use crate::namespace::consts::{
NET_NS_DIR,
PROC_NS_DIR
};
use nix::mount::{
mount,
MsFlags
};
pub fn create_ns() -> Result<()> {
create_ns_dir()?;
let nsdir = format!("{}/{}",NET_NS_DIR,"fake-net");
File::create(nsdir.clone())?;
bind_ns_file(nsdir)?;
Ok(())
}
fn create_ns_dir() -> Result<()> {
match create_dir(NET_NS_DIR) {
Err(e) if e.kind() != ErrorKind::AlreadyExists => {
Err(e)
},
_ => {
Ok(())
},
}
}
fn bind_ns_file(ns_file: String) -> Result<()> {
match create_mount(ns_file) {
Ok(_mount) => {
Ok(())
},
Err(e) => Err(e),
}
}
fn create_mount(ns_file: String) -> Result<()> {
Ok(mount::<str, str, str, str>(Some(PROC_NS_DIR), ns_file.as_str(), None, MsFlags::MS_BIND, None)?)
}

3
src/namespace/mod.rs Normal file
View File

@ -0,0 +1,3 @@
pub mod create_ns;
pub mod bind_interface;
mod consts;

View File

@ -1 +1 @@
{"rustc_fingerprint":6810405396222242824,"outputs":{"14371922958718593042":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/usr/lib/rust/1.75.0\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.75.0-nightly (82e1608df 2023-12-21) (gentoo)\nbinary: rustc\ncommit-hash: 82e1608dfa6e0b5569232559e3d385fea5a93112\ncommit-date: 2023-12-21\nhost: x86_64-unknown-linux-gnu\nrelease: 1.75.0-nightly\nLLVM version: 17.0.6\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/usr/lib/rust/1.75.0\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}
{"rustc_fingerprint":16843398912199516732,"outputs":{"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.77.1-nightly (7cf61ebde 2024-03-27) (gentoo)\nbinary: rustc\ncommit-hash: 7cf61ebde7b22796c69757901dd346d0fe70bd97\ncommit-date: 2024-03-27\nhost: x86_64-unknown-linux-gnu\nrelease: 1.77.1-nightly\nLLVM version: 17.0.6\n","stderr":""},"15729799797837862367":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/usr/lib/rust/1.77.1\noff\npacked\nunpacked\n___\ndebug_assertions\noverflow_checks\npanic=\"unwind\"\nproc_macro\nrelocation_model=\"pic\"\ntarget_abi=\"\"\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_has_atomic_equal_alignment=\"16\"\ntarget_has_atomic_equal_alignment=\"32\"\ntarget_has_atomic_equal_alignment=\"64\"\ntarget_has_atomic_equal_alignment=\"8\"\ntarget_has_atomic_equal_alignment=\"ptr\"\ntarget_has_atomic_load_store\ntarget_has_atomic_load_store=\"16\"\ntarget_has_atomic_load_store=\"32\"\ntarget_has_atomic_load_store=\"64\"\ntarget_has_atomic_load_store=\"8\"\ntarget_has_atomic_load_store=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_thread_local\ntarget_vendor=\"unknown\"\nunix\n","stderr":""}},"successes":{}}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
0b4a466cbef669a6

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"perf-literal\", \"std\"]","declared_features":"","target":12812136000324506373,"profile":10243973527296709326,"path":2971844613553093254,"deps":[[15818844694086178958,"memchr",false,12906208283825589802]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aho-corasick-380a7a96c0a1ba62/dep-lib-aho_corasick"}}],"rustflags":[],"metadata":13904389431191498124,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
42afad93b8694766

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"perf-literal\", \"std\"]","declared_features":"","target":12812136000324506373,"profile":10243973527296709326,"path":2971844613553093254,"deps":[[554324495028472449,"memchr",false,15179918458959061077]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/aho-corasick-8555408cfc02a94e/dep-lib-aho_corasick"}}],"rustflags":[],"metadata":13904389431191498124,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
69784b3f83445b2f

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"auto\", \"wincon\"]","declared_features":"","target":16157420304466204941,"profile":7959395715337908301,"path":17008840370713652988,"deps":[[4140584164330467587,"anstyle_parse",false,7397021863188073708],[4841825386763765772,"anstyle",false,1883430076433240692],[8720183142424604966,"utf8parse",false,3747497813813928829],[9119385831240683871,"is_terminal_polyfill",false,7682525050476323852],[11373957721457960839,"colorchoice",false,14823648757850095299],[17875114200413610454,"anstyle_query",false,8328454441242376391]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstream-03005e2dccd36c5a/dep-lib-anstream"}}],"rustflags":[],"metadata":7500874485387469444,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
741217f9ac49231a

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"default\", \"std\"]","declared_features":"","target":13663407036240438623,"profile":7959395715337908301,"path":12465602841095431332,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-3c24e018428cb281/dep-lib-anstyle"}}],"rustflags":[],"metadata":14064844656010464607,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
ec8c1f873180a766

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"default\", \"utf8\"]","declared_features":"","target":14060034144933290917,"profile":7959395715337908301,"path":8361312151712045008,"deps":[[8720183142424604966,"utf8parse",false,3747497813813928829]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-parse-3162f58a267a82d1/dep-lib-anstyle_parse"}}],"rustflags":[],"metadata":9799137552285937175,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
c7b84632309d9473

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":4180334433859559650,"profile":7959395715337908301,"path":6542451989483504666,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anstyle-query-ba85be343c043f10/dep-lib-anstyle_query"}}],"rustflags":[],"metadata":10674566383365303417,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
2239456ab88b58cd

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"default\", \"std\"]","declared_features":"","target":2297296889237502566,"profile":13232757476167777671,"path":59827710957018798,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-02fe9e44969ee97d/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":17154292783084528516,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
f4c9624cb5b5b4af

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"default\", \"std\"]","declared_features":"","target":18338613112069040866,"profile":10243973527296709326,"path":2008250343690022255,"deps":[[16045357212464686133,"build_script_build",false,12135854289225791291]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/anyhow-307a696a835b9a50/dep-lib-anyhow"}}],"rustflags":[],"metadata":17154292783084528516,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
3b3734732d376ba8

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[16045357212464686133,"build_script_build",false,14796730199898929442]],"local":[{"RerunIfChanged":{"output":"debug/build/anyhow-7345f3df037033ed/output","paths":["build/probe.rs"]}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
a9c9a4730edf7788

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":14886237245231788030,"profile":13232757476167777671,"path":10139091292005370064,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/autocfg-12e34dc06f010928/dep-lib-autocfg"}}],"rustflags":[],"metadata":13102859075309379048,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
bdae259f81fa1a5e
7c36b2cc43d33ede

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[\"runtime\"]","target":2297296889237502566,"profile":13232757476167777671,"path":16441280068773014788,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bindgen-3e9776b5caf0602b/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":12047033523087941064,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[\"runtime\"]","declared_features":"","target":2297296889237502566,"profile":13232757476167777671,"path":16441280068773014788,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bindgen-3e9776b5caf0602b/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":12047033523087941064,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
a8845d19fb2e0a2c
c3d72b7d08e89bed

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"","target":0,"profile":0,"path":0,"deps":[[16657950103275413129,"build_script_build",false,6781007623587475133],[3645781541664732627,"build_script_build",false,13381621582300735131]],"local":[{"RerunIfEnvChanged":{"var":"LLVM_CONFIG_PATH","val":null}},{"RerunIfEnvChanged":{"var":"LIBCLANG_PATH","val":null}},{"RerunIfEnvChanged":{"var":"LIBCLANG_STATIC_PATH","val":null}},{"RerunIfEnvChanged":{"var":"BINDGEN_EXTRA_CLANG_ARGS","val":null}},{"RerunIfEnvChanged":{"var":"BINDGEN_EXTRA_CLANG_ARGS_x86_64-unknown-linux-gnu","val":null}},{"RerunIfEnvChanged":{"var":"BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_linux_gnu","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}
{"rustc":7148235511965463537,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[16657950103275413129,"build_script_build",false,16014469613126563452],[3645781541664732627,"build_script_build",false,15744894913902412371]],"local":[{"RerunIfEnvChanged":{"var":"LLVM_CONFIG_PATH","val":null}},{"RerunIfEnvChanged":{"var":"LIBCLANG_PATH","val":null}},{"RerunIfEnvChanged":{"var":"LIBCLANG_STATIC_PATH","val":null}},{"RerunIfEnvChanged":{"var":"BINDGEN_EXTRA_CLANG_ARGS","val":null}},{"RerunIfEnvChanged":{"var":"BINDGEN_EXTRA_CLANG_ARGS_x86_64-unknown-linux-gnu","val":null}},{"RerunIfEnvChanged":{"var":"BINDGEN_EXTRA_CLANG_ARGS_x86_64_unknown_linux_gnu","val":null}}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}

View File

@ -1 +1 @@
a0c36e22caab4da7
6d67f0c9a6ef1e4c

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[\"runtime\"]","target":16970473089856473606,"profile":13232757476167777671,"path":10135709493537907987,"deps":[[781203651122893512,"itertools",false,1196255805855801766],[1098045598771442027,"rustc_hash",false,15873768857435819073],[3315648657471645960,"syn",false,5069628571888748611],[3645781541664732627,"clang_sys",false,3586882353191584289],[6685014296130524576,"lazy_static",false,14456438003198516100],[7667881417093566568,"regex",false,10131567605926034710],[7803147409971559194,"bitflags",false,13774089662621865957],[9919038314455684856,"cexpr",false,9758609279652146378],[12879454158807538225,"proc_macro2",false,6269066671878042494],[14268468010440576439,"quote",false,934534267851553249],[15215384180442390425,"shlex",false,1155142216850249724],[16657950103275413129,"build_script_build",false,3173400543433163944],[17982777832778715688,"lazycell",false,3696227459918614681]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bindgen-975d40f2171e6a4b/dep-lib-bindgen"}}],"rustflags":[],"metadata":12047033523087941064,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[\"runtime\"]","declared_features":"","target":16970473089856473606,"profile":13232757476167777671,"path":10135709493537907987,"deps":[[781203651122893512,"itertools",false,17963160126496189210],[1098045598771442027,"rustc_hash",false,6410205461376918822],[3315648657471645960,"syn",false,1418781551455076159],[3645781541664732627,"clang_sys",false,9962078604898871477],[6685014296130524576,"lazy_static",false,8390294726635418236],[7667881417093566568,"regex",false,1120269004853361790],[7803147409971559194,"bitflags",false,5054310738842885462],[9919038314455684856,"cexpr",false,6759785643936588298],[12879454158807538225,"proc_macro2",false,15550522315831839980],[14268468010440576439,"quote",false,12812348526856516459],[15215384180442390425,"shlex",false,3392064947751036622],[16657950103275413129,"build_script_build",false,17121533531536480195],[17982777832778715688,"lazycell",false,9186778222242795488]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bindgen-975d40f2171e6a4b/dep-lib-bindgen"}}],"rustflags":[],"metadata":12047033523087941064,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
c4aafae66c8a0ba8

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":17263469766201294439,"profile":10243973527296709326,"path":3904161143572546884,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-04194a51d71f18e8/dep-lib-bitflags"}}],"rustflags":[],"metadata":14564035643000669268,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
e5d7f4e4916527bf
561d2c8dd6842446

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[]","target":17263469766201294439,"profile":13232757476167777671,"path":12965942823663347115,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-7c79278797171fe4/dep-lib-bitflags"}}],"rustflags":[],"metadata":14564035643000669268,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":17263469766201294439,"profile":13232757476167777671,"path":12965942823663347115,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-7c79278797171fe4/dep-lib-bitflags"}}],"rustflags":[],"metadata":14564035643000669268,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
c2de4d22c149740b
49672502dfaebf0b

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[]","target":17263469766201294439,"profile":10243973527296709326,"path":12965942823663347115,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-e2ec6af07d04812b/dep-lib-bitflags"}}],"rustflags":[],"metadata":14564035643000669268,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":17263469766201294439,"profile":10243973527296709326,"path":12965942823663347115,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bitflags-e2ec6af07d04812b/dep-lib-bitflags"}}],"rustflags":[],"metadata":14564035643000669268,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
e9f8b1fd0883aee9

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"default\", \"std\"]","declared_features":"","target":18335588937564793828,"profile":10243973527296709326,"path":3402790763499476678,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/byteorder-f457975fa4e321fd/dep-lib-byteorder"}}],"rustflags":[],"metadata":5398730104718078656,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
eb76815c0a4f4f27

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"default\", \"std\"]","declared_features":"","target":3193619734832674211,"profile":10243973527296709326,"path":11929486172863314308,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/bytes-88a901ae17f9b8c6/dep-lib-bytes"}}],"rustflags":[],"metadata":11501112221997671841,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
ca2c7fbf6f8b6d87
0a22a0703a95cf5d

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[]","target":6156026458003474340,"profile":13232757476167777671,"path":16781895747561641039,"deps":[[6954241390595330609,"nom",false,18266198037604573168]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cexpr-9030ae258cba2f75/dep-lib-cexpr"}}],"rustflags":[],"metadata":10749519017815238760,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":6156026458003474340,"profile":13232757476167777671,"path":16781895747561641039,"deps":[[6954241390595330609,"nom",false,10580008855826337156]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cexpr-9030ae258cba2f75/dep-lib-cexpr"}}],"rustflags":[],"metadata":10749519017815238760,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
d9d668884144ab04
e5d4637022e1cfbe

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[]","target":10623512480563079566,"profile":13232757476167777671,"path":6989630276718306723,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-567b18db5e64b918/dep-lib-cfg-if"}}],"rustflags":[],"metadata":8462187951337715540,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":10623512480563079566,"profile":13232757476167777671,"path":6989630276718306723,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-567b18db5e64b918/dep-lib-cfg-if"}}],"rustflags":[],"metadata":8462187951337715540,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
e73b76dfca30c24e

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":10623512480563079566,"profile":10243973527296709326,"path":6989630276718306723,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg-if-e245088e9dfd77f4/dep-lib-cfg-if"}}],"rustflags":[],"metadata":8462187951337715540,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
26f4026160e95ea8

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":14135410566186380836,"profile":9659778293828062018,"path":13359542114083016871,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/cfg_aliases-0c13ead8cb1e0916/dep-lib-cfg_aliases"}}],"rustflags":[],"metadata":16709548127506949239,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
9b66bc23ee11b5b9
53020211811a81da

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"","target":0,"profile":0,"path":0,"deps":[[3645781541664732627,"build_script_build",false,7944119245256798479]],"local":[{"Precalculated":"1.7.0"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}
{"rustc":7148235511965463537,"features":"","declared_features":"","target":0,"profile":0,"path":0,"deps":[[3645781541664732627,"build_script_build",false,8364822712810638366]],"local":[{"Precalculated":"1.7.0"}],"rustflags":[],"metadata":0,"config":0,"compile_kind":0}

View File

@ -1 +1 @@
0f31e0225d2e3f6e
1e8c3246f0d11574

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[\"clang_3_5\", \"clang_3_6\", \"clang_3_7\", \"clang_3_8\", \"clang_3_9\", \"clang_4_0\", \"clang_5_0\", \"clang_6_0\", \"libloading\", \"runtime\"]","target":8188216131759486267,"profile":13232757476167777671,"path":3264583103793129916,"deps":[[11695236103535428844,"glob",false,12405090853772603720]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/clang-sys-78aed8adf867dace/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":16670924540240920614,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[\"clang_3_5\", \"clang_3_6\", \"clang_3_7\", \"clang_3_8\", \"clang_3_9\", \"clang_4_0\", \"clang_5_0\", \"clang_6_0\", \"libloading\", \"runtime\"]","declared_features":"","target":8188216131759486267,"profile":13232757476167777671,"path":3264583103793129916,"deps":[[11695236103535428844,"glob",false,10400476037138367243]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/clang-sys-78aed8adf867dace/dep-build-script-build-script-build"}}],"rustflags":[],"metadata":16670924540240920614,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
21021a017f2ac731
b52884b5b569408a

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[\"clang_3_5\", \"clang_3_6\", \"clang_3_7\", \"clang_3_8\", \"clang_3_9\", \"clang_4_0\", \"clang_5_0\", \"clang_6_0\", \"libloading\", \"runtime\"]","target":3695163521108343623,"profile":13232757476167777671,"path":7073536676544276869,"deps":[[3645781541664732627,"build_script_build",false,13381621582300735131],[4419231006748921122,"libloading",false,11846970560759831048],[11695236103535428844,"glob",false,12405090853772603720],[11943424025318460506,"libc",false,11606914615387550226]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/clang-sys-8c39b8e66d6251b3/dep-lib-clang-sys"}}],"rustflags":[],"metadata":16670924540240920614,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[\"clang_3_5\", \"clang_3_6\", \"clang_3_7\", \"clang_3_8\", \"clang_3_9\", \"clang_4_0\", \"clang_5_0\", \"clang_6_0\", \"libloading\", \"runtime\"]","declared_features":"","target":3695163521108343623,"profile":13232757476167777671,"path":7073536676544276869,"deps":[[3645781541664732627,"build_script_build",false,15744894913902412371],[4419231006748921122,"libloading",false,13055013296483097481],[11695236103535428844,"glob",false,10400476037138367243],[11943424025318460506,"libc",false,14265260396336396368]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/clang-sys-8c39b8e66d6251b3/dep-lib-clang-sys"}}],"rustflags":[],"metadata":16670924540240920614,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
c3bed096012eb8cd

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":6039773940249072176,"profile":7959395715337908301,"path":9220678370376129898,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/colorchoice-c95a30e1795634ff/dep-lib-colorchoice"}}],"rustflags":[],"metadata":16033661185762923568,"config":2202906307356721367,"compile_kind":0}

View File

@ -1 +1 @@
16937f196a70c830
dd8a1be3fb0bf394

View File

@ -1 +1 @@
{"rustc":13421329839480389204,"features":"[]","target":10519268927367075084,"profile":13232757476167777671,"path":1720556288695834191,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/either-7f1aafcb85617e4f/dep-lib-either"}}],"rustflags":[],"metadata":14516623572814205243,"config":2202906307356721367,"compile_kind":0}
{"rustc":7148235511965463537,"features":"[]","declared_features":"","target":10519268927367075084,"profile":13232757476167777671,"path":1720556288695834191,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/either-7f1aafcb85617e4f/dep-lib-either"}}],"rustflags":[],"metadata":14516623572814205243,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
a69da2a18263279c

View File

@ -0,0 +1 @@
{"rustc":7148235511965463537,"features":"[\"regex\"]","declared_features":"","target":7948988592201928665,"profile":4773716172779844209,"path":2256710772158208240,"deps":[[11752053697376755573,"regex",false,10104769297377264673],[17157248321732533341,"log",false,10355495188920205597]],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/env_filter-4300dff6c64b849f/dep-lib-env_filter"}}],"rustflags":[],"metadata":10457561132037420740,"config":2202906307356721367,"compile_kind":0}

View File

@ -0,0 +1 @@
This file has an mtime of when this was started.

View File

@ -0,0 +1 @@
eacbc670c34adb7f

Some files were not shown because too many files have changed in this diff Show More