uevent/
bind_kobject_uevent.rs
1#![expect(unsafe_code)]
6
7use socket2::SockAddr;
8use socket2::Socket;
9use std::io;
10
11pub(crate) fn bind_kobject_uevent_socket() -> io::Result<Socket> {
12 let socket = Socket::new(
13 libc::PF_NETLINK.into(),
14 socket2::Type::DGRAM,
15 Some(libc::NETLINK_KOBJECT_UEVENT.into()),
16 )?;
17
18 let ((), sockaddr) = unsafe {
20 SockAddr::try_init(|storage, len| {
21 let mut address: libc::sockaddr_nl = std::mem::zeroed();
22 address.nl_family = libc::AF_NETLINK as _;
23 address.nl_pid = 0;
24 address.nl_groups = 1;
25 storage.cast::<libc::sockaddr_nl>().write(address);
26 len.write(size_of::<libc::sockaddr_nl>() as u32);
27 Ok(())
28 })?
29 };
30
31 socket.bind(&sockaddr)?;
32
33 Ok(socket)
34}