chore(deps): bump dependencies to latest and fix build failure with

`neli`
This commit is contained in:
Datong Sun 2025-08-22 08:02:44 -07:00
parent 869c79422f
commit 6a424fd43c
3 changed files with 402 additions and 190 deletions

528
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -127,7 +127,7 @@ pub fn build_tcp_packet(
ip_buf.freeze()
}
pub fn parse_ip_packet(buf: &Bytes) -> Option<(IPPacket, tcp::TcpPacket)> {
pub fn parse_ip_packet(buf: &Bytes) -> Option<(IPPacket<'_>, tcp::TcpPacket<'_>)> {
if buf[0] >> 4 == 4 {
let v4 = ipv4::Ipv4Packet::new(buf).unwrap();
if v4.get_next_level_protocol() != ip::IpNextHeaderProtocols::Tcp {

View File

@ -1,13 +1,14 @@
use neli::{
consts::{
nl::{NlmF, NlmFFlags},
rtnl::{Ifa, IfaFFlags, RtAddrFamily, Rtm},
nl::NlmF,
rtnl::{Ifa, IfaF, RtAddrFamily, RtScope, Rtm},
socket::NlFamily,
},
nl::{NlPayload, Nlmsghdr},
rtnl::{Ifaddrmsg, Rtattr},
socket::NlSocketHandle,
nl::{NlPayload, NlmsghdrBuilder},
rtnl::{IfaddrmsgBuilder, RtattrBuilder},
socket::synchronous::NlSocketHandle,
types::RtBuffer,
utils::Groups,
};
use std::net::{Ipv6Addr, SocketAddr};
use tokio::net::UdpSocket;
@ -35,26 +36,37 @@ pub fn new_udp_reuseport(local_addr: SocketAddr) -> UdpSocket {
pub fn assign_ipv6_address(device_name: &str, local: Ipv6Addr, peer: Ipv6Addr) {
let index = nix::net::if_::if_nametoindex(device_name).unwrap();
let mut rtnl = NlSocketHandle::connect(NlFamily::Route, None, &[]).unwrap();
let rtnl = NlSocketHandle::connect(NlFamily::Route, None, Groups::empty()).unwrap();
let mut rtattrs = RtBuffer::new();
rtattrs.push(Rtattr::new(None, Ifa::Local, &local.octets()[..]).unwrap());
rtattrs.push(Rtattr::new(None, Ifa::Address, &peer.octets()[..]).unwrap());
let ifaddrmsg = Ifaddrmsg {
ifa_family: RtAddrFamily::Inet6,
ifa_prefixlen: 128,
ifa_flags: IfaFFlags::empty(),
ifa_scope: 0,
ifa_index: index as i32,
rtattrs,
};
let nl_header = Nlmsghdr::new(
None,
Rtm::Newaddr,
NlmFFlags::new(&[NlmF::Request]),
None,
None,
NlPayload::Payload(ifaddrmsg),
rtattrs.push(
RtattrBuilder::default()
.rta_type(Ifa::Local)
.rta_payload(&local.octets()[..])
.build()
.unwrap(),
);
rtnl.send(nl_header).unwrap();
rtattrs.push(
RtattrBuilder::default()
.rta_type(Ifa::Address)
.rta_payload(&peer.octets()[..])
.build()
.unwrap(),
);
let ifaddrmsg = IfaddrmsgBuilder::default()
.ifa_family(RtAddrFamily::Inet6)
.ifa_prefixlen(128)
.ifa_flags(IfaF::empty())
.ifa_scope(RtScope::Universe)
.ifa_index(index)
.rtattrs(rtattrs)
.build()
.unwrap();
let nl_header = NlmsghdrBuilder::default()
.nl_type(Rtm::Newaddr)
.nl_flags(NlmF::REQUEST)
.nl_payload(NlPayload::Payload(ifaddrmsg))
.build()
.unwrap();
rtnl.send(&nl_header).unwrap();
}