fix(deps): update rust crate smoltcp to 0.12 (#1785)

* fix(deps): update rust crate smoltcp to 0.12

* fix(shadowsocks-service): compatible with smoltcp v0.12

* fix(ci): service msrv 1.80, rust msrv 1.80, lib msrv 1.75

* chore(shadowsocks-service): smoltcp v0.12 uses libcore Ipv4Addr, Ipv6Addr

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: zonyitoo <zonyitoo@gmail.com>
This commit is contained in:
renovate[bot]
2024-11-28 23:19:52 +08:00
committed by GitHub
parent 707b8bc0c1
commit 1adb52d4ef
7 changed files with 74 additions and 27 deletions

View File

@@ -11,7 +11,57 @@ env:
RUST_LOG: "trace"
jobs:
buid-test-check:
shadowsocks-rust:
strategy:
matrix:
platform:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
- if: ${{ runner.os == 'Windows' }}
uses: ilammy/setup-nasm@v1
- name: Install Rust
run: |
rustup set profile minimal
rustup toolchain install 1.80
rustup default 1.80
rustup override set 1.80
- name: Build with All Features Enabled (Unix)
if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }}
run: cargo build --verbose --features "full-extra local-flow-stat utility-url-outline"
- name: Build with All Features Enabled (Windows)
if: ${{ runner.os == 'Windows' }}
run: cargo build --verbose --features "full-extra local-flow-stat utility-url-outline winservice"
shadowsocks-service:
strategy:
matrix:
platform:
- ubuntu-latest
- windows-latest
- macos-latest
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- uses: Swatinem/rust-cache@v2
- if: ${{ runner.os == 'Windows' }}
uses: ilammy/setup-nasm@v1
- name: Install Rust
run: |
rustup set profile minimal
rustup toolchain install 1.80
rustup default 1.80
rustup override set 1.80
- name: Build with All Features Enabled
run: cargo build --manifest-path crates/shadowsocks-service/Cargo.toml --verbose --features "full dns-over-tls dns-over-https dns-over-h3 local-dns local-flow-stat local-http-rustls local-tun local-fake-dns local-online-config stream-cipher aead-cipher-extra aead-cipher-2022 aead-cipher-2022-extra security-replay-attack-detect"
shadowsocks:
strategy:
matrix:
platform:
@@ -31,9 +81,5 @@ jobs:
rustup toolchain install 1.75
rustup default 1.75
rustup override set 1.75
- name: Build with All Features Enabled (Unix)
if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }}
run: cargo build --verbose --features "full-extra local-flow-stat utility-url-outline"
- name: Build with All Features Enabled (Windows)
if: ${{ runner.os == 'Windows' }}
run: cargo build --verbose --features "full-extra local-flow-stat utility-url-outline winservice"
- name: Build with All Features Enabled
run: cargo build --manifest-path crates/shadowsocks/Cargo.toml --verbose --features "stream-cipher aead-cipher-extra aead-cipher-2022 aead-cipher-2022-extra security-replay-attack-detect"

4
Cargo.lock generated
View File

@@ -3370,9 +3370,9 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]]
name = "smoltcp"
version = "0.11.0"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a1a996951e50b5971a2c8c0fa05a381480d70a933064245c4a223ddc87ccc97"
checksum = "dad095989c1533c1c266d9b1e8d70a1329dd3723c3edac6d03bbd67e7bf6f4bb"
dependencies = [
"bitflags 1.3.2",
"byteorder",

View File

@@ -9,7 +9,7 @@ documentation = "https://docs.rs/shadowsocks-rust"
keywords = ["shadowsocks", "proxy", "socks", "socks5", "firewall"]
license = "MIT"
edition = "2021"
rust-version = "1.75"
rust-version = "1.80"
[badges]
maintenance = { status = "passively-maintained" }

View File

@@ -9,7 +9,7 @@ documentation = "https://docs.rs/shadowsocks-service"
keywords = ["shadowsocks", "proxy", "socks", "socks5", "firewall"]
license = "MIT"
edition = "2021"
rust-version = "1.75"
rust-version = "1.80"
[badges]
maintenance = { status = "passively-maintained" }
@@ -199,7 +199,7 @@ tun2 = { version = "4.0", optional = true, default-features = false, features =
"async",
] }
etherparse = { version = "0.16", optional = true }
smoltcp = { version = "0.11", optional = true, default-features = false, features = [
smoltcp = { version = "0.12", optional = true, default-features = false, features = [
"std",
"log",
"medium-ip",

View File

@@ -1,6 +1,6 @@
//! IP packet encapsulation
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
use std::net::IpAddr;
use smoltcp::wire::{IpProtocol, IpVersion, Ipv4Packet, Ipv6Packet};
@@ -21,15 +21,15 @@ impl<T: AsRef<[u8]> + Copy> IpPacket<T> {
pub fn src_addr(&self) -> IpAddr {
match *self {
IpPacket::Ipv4(ref packet) => IpAddr::from(Ipv4Addr::from(packet.src_addr())),
IpPacket::Ipv6(ref packet) => IpAddr::from(Ipv6Addr::from(packet.src_addr())),
IpPacket::Ipv4(ref packet) => IpAddr::from(packet.src_addr()),
IpPacket::Ipv6(ref packet) => IpAddr::from(packet.src_addr()),
}
}
pub fn dst_addr(&self) -> IpAddr {
match *self {
IpPacket::Ipv4(ref packet) => IpAddr::from(Ipv4Addr::from(packet.dst_addr())),
IpPacket::Ipv6(ref packet) => IpAddr::from(Ipv6Addr::from(packet.dst_addr())),
IpPacket::Ipv4(ref packet) => IpAddr::from(packet.dst_addr()),
IpPacket::Ipv6(ref packet) => IpAddr::from(packet.dst_addr()),
}
}

View File

@@ -17,7 +17,7 @@ use std::{
use log::{debug, error, trace};
use shadowsocks::{net::TcpSocketOpts, relay::socks5::Address};
use smoltcp::{
iface::{Config as InterfaceConfig, Interface, SocketHandle, SocketSet},
iface::{Config as InterfaceConfig, Interface, PollResult, SocketHandle, SocketSet},
phy::{DeviceCapabilities, Medium},
socket::tcp::{Socket as TcpSocket, SocketBuffer as TcpSocketBuffer, State as TcpState},
storage::RingBuffer,
@@ -324,9 +324,7 @@ impl TcpTun {
}
let before_poll = SmolInstant::now();
let updated_sockets = iface.poll(before_poll, device, &mut socket_set);
if updated_sockets {
if let PollResult::SocketStateChanged = iface.poll(before_poll, device, &mut socket_set) {
trace!("VirtDevice::poll costed {}", SmolInstant::now() - before_poll);
}
@@ -357,7 +355,10 @@ impl TcpTun {
}
// SHUT_WR
if matches!(control.send_state, TcpSocketState::Close) && socket.send_queue() == 0 && control.send_buffer.is_empty() {
if matches!(control.send_state, TcpSocketState::Close)
&& socket.send_queue() == 0
&& control.send_buffer.is_empty()
{
trace!("closing TCP Write Half, {:?}", socket.state());
// Close the socket. Set to FIN state

View File

@@ -72,7 +72,7 @@ impl Device for VirtTunDevice {
}
fn transmit(&mut self, _timestamp: Instant) -> Option<Self::TxToken<'_>> {
return Some(VirtTxToken(self));
Some(VirtTxToken(self))
}
fn capabilities(&self) -> DeviceCapabilities {
@@ -86,17 +86,17 @@ pub struct VirtRxToken<'a> {
}
impl phy::RxToken for VirtRxToken<'_> {
fn consume<R, F>(mut self, f: F) -> R
fn consume<R, F>(self, f: F) -> R
where
F: FnOnce(&mut [u8]) -> R,
F: FnOnce(&[u8]) -> R,
{
f(&mut self.buffer[..])
f(&self.buffer)
}
}
pub struct VirtTxToken<'a>(&'a mut VirtTunDevice);
impl<'a> phy::TxToken for VirtTxToken<'a> {
impl phy::TxToken for VirtTxToken<'_> {
fn consume<R, F>(self, len: usize, f: F) -> R
where
F: FnOnce(&mut [u8]) -> R,