Compare commits

..

No commits in common. "master" and "v0.3.9" have entirely different histories.

11 changed files with 381 additions and 356 deletions

View file

@ -1,10 +0,0 @@
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "weekly"
rebase-strategy: "disabled"

View file

@ -10,7 +10,7 @@ jobs:
matrix:
rust:
- stable
- 1.80.0
- 1.78.0
steps:
- name: Checkout sources
uses: actions/checkout@v2
@ -39,7 +39,7 @@ jobs:
matrix:
rust:
- stable
- 1.80.0
- 1.78.0
steps:
- name: Checkout sources
uses: actions/checkout@v2

View file

@ -75,28 +75,20 @@ jobs:
RUST_BACKTRACE: 1
strategy:
matrix:
build: [ linux-amd64, linux-aarch64, macos-aarch64, windows ]
build: [ linux-amd64, macos-aarch64, windows ]
include:
- build: linux-amd64
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-musl
cross: true
- build: linux-aarch64
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-musl
cross: true
- build: macos-aarch64
os: macos-latest
rust: stable
target: aarch64-apple-darwin
cross: false
- build: windows
os: windows-2019
rust: stable
target: x86_64-pc-windows-msvc
cross: false
steps:
- name: Checkout repository
@ -134,24 +126,17 @@ jobs:
echo "release upload url: $release_upload_url"
- name: Build onetun binary
shell: bash
run: |
if [ "${{ matrix.cross }}" = "true" ]; then
cargo install cross
cross build --release --target ${{ matrix.target }}
else
cargo build --release --target ${{ matrix.target }}
fi
run: cargo build --release
- name: Prepare onetun binary
shell: bash
run: |
mkdir -p ci/assets
if [ "${{ matrix.build }}" = "windows" ]; then
cp "target/${{ matrix.target }}/release/onetun.exe" "ci/assets/onetun.exe"
cp "target/release/onetun.exe" "ci/assets/onetun.exe"
echo "ASSET=onetun.exe" >> $GITHUB_ENV
else
cp "target/${{ matrix.target }}/release/onetun" "ci/assets/onetun-${{ matrix.build }}"
cp "target/release/onetun" "ci/assets/onetun-${{ matrix.build }}"
echo "ASSET=onetun-${{ matrix.build }}" >> $GITHUB_ENV
fi

664
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
[package]
name = "onetun"
version = "0.3.10"
version = "0.3.9"
edition = "2021"
license = "MIT"
description = "A cross-platform, user-space WireGuard port-forwarder that requires no system network configurations."
@ -19,8 +19,8 @@ futures = "0.3"
rand = "0.8"
nom = "7"
async-trait = "0.1"
priority-queue = "2.1"
smoltcp = { version = "0.12", default-features = false, features = [
priority-queue = "1.3"
smoltcp = { version = "0.11", default-features = false, features = [
"std",
"log",
"medium-ip",
@ -37,7 +37,7 @@ tracing = { version = "0.1", default-features = false, features = ["log"] }
# bin-only dependencies
clap = { version = "4.4.11", default-features = false, features = ["suggestions", "std", "env", "help", "wrap_help"], optional = true }
pretty_env_logger = { version = "0.5", optional = true }
pretty_env_logger = { version = "0.4", optional = true }
async-recursion = "1.0"
[features]

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2025 Aram Peres
Copyright (c) 2023 Aram Peres
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -21,13 +21,13 @@ For example,
## Download
onetun is available to install from [crates.io](https://crates.io/crates/onetun) with Rust ≥1.80.0:
onetun is available to install from [crates.io](https://crates.io/crates/onetun) with Rust ≥1.78.0:
```shell
cargo install onetun
```
You can also download the binary for Windows, macOS (Apple Silicon), and Linux (amd64, arm64) from
You can also download the binary for Windows, macOS (Intel), and Linux (amd64) from
the [Releases](https://github.com/aramperes/onetun/releases) page.
You can also run onetun using [Docker](https://hub.docker.com/r/aramperes/onetun):
@ -37,7 +37,7 @@ docker run --rm --name onetun --user 1000 -p 8080:8080 aramperes/onetun \
0.0.0.0:8080:192.168.4.2:8080 [...options...]
```
You can also build onetun locally, using Rust ≥1.80.0:
You can also build onetun locally, using Rust ≥1.78.0:
```shell
git clone https://github.com/aramperes/onetun && cd onetun
@ -319,4 +319,4 @@ Please consider opening a GitHub issue if you are unsure if your contribution is
## License
MIT License. See `LICENSE` for details. Copyright © 2025 Aram Peres.
MIT License. See `LICENSE` for details. Copyright © 2023 Aram Peres.

View file

@ -109,11 +109,11 @@ pub struct RxToken {
}
impl smoltcp::phy::RxToken for RxToken {
fn consume<R, F>(self, f: F) -> R
fn consume<R, F>(mut self, f: F) -> R
where
F: FnOnce(&[u8]) -> R,
F: FnOnce(&mut [u8]) -> R,
{
f(&self.buffer)
f(&mut self.buffer)
}
}

View file

@ -6,7 +6,6 @@ use crate::Bus;
use anyhow::Context;
use async_trait::async_trait;
use bytes::Bytes;
use smoltcp::iface::PollResult;
use smoltcp::{
iface::{Config, Interface, SocketHandle, SocketSet},
socket::tcp,
@ -142,7 +141,7 @@ impl VirtualInterfacePoll for TcpVirtualInterface {
}
});
if iface.poll(loop_start, &mut device, &mut self.sockets) == PollResult::SocketStateChanged {
if iface.poll(loop_start, &mut device, &mut self.sockets) {
log::trace!("TCP virtual interface polled some packets to be processed");
}

View file

@ -6,7 +6,6 @@ use crate::{Bus, PortProtocol};
use anyhow::Context;
use async_trait::async_trait;
use bytes::Bytes;
use smoltcp::iface::PollResult;
use smoltcp::{
iface::{Config, Interface, SocketHandle, SocketSet},
socket::udp::{self, UdpMetadata},
@ -141,7 +140,7 @@ impl VirtualInterfacePoll for UdpVirtualInterface {
} => {
let loop_start = smoltcp::time::Instant::now();
if iface.poll(loop_start, &mut device, &mut self.sockets) == PollResult::SocketStateChanged {
if iface.poll(loop_start, &mut device, &mut self.sockets) {
log::trace!("UDP virtual interface polled some packets to be processed");
}

View file

@ -1,4 +1,4 @@
use std::net::{IpAddr, SocketAddr};
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr};
use std::time::Duration;
use crate::Bus;
@ -253,7 +253,7 @@ impl WireGuardTunnel {
Ok(IpVersion::Ipv4) => Ipv4Packet::new_checked(&packet)
.ok()
// Only care if the packet is destined for this tunnel
.filter(|packet| packet.dst_addr() == self.source_peer_ip)
.filter(|packet| Ipv4Addr::from(packet.dst_addr()) == self.source_peer_ip)
.and_then(|packet| match packet.next_header() {
IpProtocol::Tcp => Some(PortProtocol::Tcp),
IpProtocol::Udp => Some(PortProtocol::Udp),
@ -263,7 +263,7 @@ impl WireGuardTunnel {
Ok(IpVersion::Ipv6) => Ipv6Packet::new_checked(&packet)
.ok()
// Only care if the packet is destined for this tunnel
.filter(|packet| packet.dst_addr() == self.source_peer_ip)
.filter(|packet| Ipv6Addr::from(packet.dst_addr()) == self.source_peer_ip)
.and_then(|packet| match packet.next_header() {
IpProtocol::Tcp => Some(PortProtocol::Tcp),
IpProtocol::Udp => Some(PortProtocol::Udp),