Implement software TCP stack

This commit is contained in:
Jackson Coxson
2025-03-21 23:29:16 -06:00
parent c3395b032a
commit e1bfcd39ff
20 changed files with 1768 additions and 818 deletions

View File

@@ -3,7 +3,6 @@
use clap::{Arg, Command};
use idevice::{
core_device_proxy::{self},
xpc::XPCDevice,
IdeviceService,
};
use tun_rs::AbstractDevice;
@@ -63,57 +62,51 @@ async fn main() {
let mut tun_proxy = core_device_proxy::CoreDeviceProxy::connect(&*provider)
.await
.expect("Unable to connect");
let rsd_port = tun_proxy.handshake.server_rsd_port;
let mut tunnel = tun_proxy.create_software_tunnel().unwrap();
let channel = tunnel.connect_tcp(rsd_port).unwrap();
let client = XPCDevice::new(Box::new(channel)).await.expect("no xpc??");
todo!();
let dev = tun_rs::create(&tun_rs::Configuration::default()).unwrap();
dev.add_address_v6(
tun_proxy
.handshake
.client_parameters
.address
.parse()
.unwrap(),
32,
)
.unwrap();
dev.set_mtu(tun_proxy.handshake.client_parameters.mtu)
.unwrap();
dev.set_network_address(
tun_proxy.handshake.client_parameters.address.clone(),
tun_proxy
.handshake
.client_parameters
.netmask
.parse()
.unwrap(),
Some(tun_proxy.handshake.server_address.parse().unwrap()),
)
.unwrap();
// let dev = tun_rs::create(&tun_rs::Configuration::default()).unwrap();
// dev.add_address_v6(
// tun_proxy
// .handshake
// .client_parameters
// .address
// .parse()
// .unwrap(),
// 32,
// )
// .unwrap();
// dev.set_mtu(tun_proxy.handshake.client_parameters.mtu)
// .unwrap();
// dev.set_network_address(
// tun_proxy.handshake.client_parameters.address.clone(),
// tun_proxy
// .handshake
// .client_parameters
// .netmask
// .parse()
// .unwrap(),
// Some(tun_proxy.handshake.server_address.parse().unwrap()),
// )
// .unwrap();
//
// let async_dev = tun_rs::AsyncDevice::new(dev).unwrap();
// async_dev.enabled(true).unwrap();
// println!("-----------------------------");
// println!("tun device created: {:?}", async_dev.name());
// println!("server address: {}", tun_proxy.handshake.server_address);
// println!("rsd port: {}", tun_proxy.handshake.server_rsd_port);
// println!("-----------------------------");
//
// let mut buf = vec![0; 1500];
// loop {
// tokio::select! {
// Ok(len) = async_dev.recv(&mut buf) => {
// println!("tun pkt: {:?}", &buf[..len]);
// tun_proxy.send(&buf[..len]).await.unwrap();
// }
// Ok(res) = tun_proxy.recv() => {
// println!("dev pkt: {:?}", &res);
// async_dev.send(&res).await.unwrap();
// }
// }
// }
let async_dev = tun_rs::AsyncDevice::new(dev).unwrap();
async_dev.enabled(true).unwrap();
println!("-----------------------------");
println!("tun device created: {:?}", async_dev.name());
println!("server address: {}", tun_proxy.handshake.server_address);
println!("rsd port: {}", tun_proxy.handshake.server_rsd_port);
println!("-----------------------------");
let mut buf = vec![0; 1500];
loop {
tokio::select! {
Ok(len) = async_dev.recv(&mut buf) => {
println!("tun pkt: {:?}", &buf[..len]);
tun_proxy.send(&buf[..len]).await.unwrap();
}
Ok(res) = tun_proxy.recv() => {
println!("dev pkt: {:?}", &res);
async_dev.send(&res).await.unwrap();
}
}
}
}