Skip to content

Illumos support #174

Description

@extrowerk
szilard@build:~/projekt$ git clone --depth 1 --recursive https://github.com/shellrow/netdev                                         Cloning into 'netdev'...                                          remote: Enumerating objects: 113, done.                           remote: Counting objects: 100% (113/113), done.                   remote: Compressing objects: 100% (100/100), done.                remote: Total 113 (delta 12), reused 50 (delta 4), pack-reused 0 (from 0)                                                           Receiving objects: 100% (113/113), 88.78 KiB | 2.02 MiB/s, done.  Resolving deltas: 100% (12/12), done.                             szilard@build:~/projekt$ cd net                                   netbird-0.72.2/      nethack-500-src.tgz                          netdev/              netmaker-1.5.1/                              szilard@build:~/projekt$ cd netdev/                               szilard@build:~/projekt/netdev$ ls                                Cargo.toml  README.md   examples    src
LICENSE     build.rs    scripts
szilard@build:~/projekt/netdev$ cargo b
    Updating crates.io index                                           Locking 72 packages to latest Rust 1.95.0 compatible versions
      Adding jni v0.21.1 (available: v0.22.4)                        Compiling libc v0.2.186                                           Compiling netdev v0.45.0 (/export/home/szilard/projekt/netdev)    Compiling ipnet v2.12.0                                           Compiling mac-addr v0.3.0                                      error[E0432]: unresolved imports `super::sockaddr::netmask_ip_autolen`, `super::sockaddr::try_mac_from_raw`                            --> src/os/unix/interface.rs:6:58                                  |
  6 | ...r_len, netmask_ip_autolen, try_mac_from_raw};
    |           ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^ no `try_mac_from_raw` in `os::unix::sockaddr`                                      |           |
    |           no `netmask_ip_autolen` in `os::unix::sockaddr`       |                                                             note: found an item that was configured out                          --> src/os/unix/sockaddr.rs:375:22
    |                                                             373 | ...any(target_os = "linux", target_os = "android"))]
    |       -------------------------------------------- the item is gated here                                                     374 | ...ne]
375 | ...ate) unsafe fn netmask_ip_autolen(sa: *const libc::soc...    |                   ^^^^^^^^^^^^^^^^^^                        note: found an item that was configured out                          --> src/os/unix/sockaddr.rs:403:22
    |
395 |   #[cfg(any(
    |  __________-                                                396 | |     target_vendor = "apple",
397 | |     target_os = "freebsd",                                398 | |     target_os = "netbsd",                                 399 | |     target_os = "openbsd"                                 400 | | ))]
    | |_- the item is gated here                                  ...
403 |   pub(crate) unsafe fn netmask_ip_autolen(sa: *const libc...
    |                        ^^^^^^^^^^^^^^^^^^                   note: found an item that was configured out
   --> src/os/unix/sockaddr.rs:185:22                                 |                                                             184 | #[cfg(any(target_os = "linux", target_os = "android"))]
    |          -------------------------------------------- the item is gated here
185 | pub(crate) unsafe fn try_mac_from_raw(                          |                      ^^^^^^^^^^^^^^^^
note: found an item that was configured out
   --> src/os/unix/sockaddr.rs:225:22                                 |
219 |   #[cfg(any(                                                    |  __________-
220 | |     target_vendor = "apple",                              221 | |     target_os = "freebsd",
222 | |     target_os = "netbsd",
223 | |     target_os = "openbsd"
224 | | ))]
    | |_- the item is gated here
225 |   pub(crate) unsafe fn try_mac_from_raw(                        |                        ^^^^^^^^^^^^^^^^

error[E0432]: unresolved import `crate::interface::mtu::get_mtu`
 --> src/os/unix/interface.rs:9:5
  |                                                               9 | use crate::interface::mtu::get_mtu;
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `get_mtu` in `interface::mtu`                                                               |
note: found an item that was configured out
 --> src/interface/mtu.rs:2:15
  |                                                               1 | ...g(any(target_os = "linux", target_os = "android"))]
  |         -------------------------------------------- the item is gated here
2 | ...crate) fn get_mtu(_ifa: &libc::ifaddrs, name: &str) -> O...  |              ^^^^^^^
                                                                  error[E0432]: unresolved import `crate::os::unix::types::get_interface_type`                                                          --> src/os/unix/interface.rs:12:30
   |                                                              12 | ...:unix::types::{get_interface_type, interface_name_from_...
   |                   ^^^^^^^^^^^^^^^^^^ no `get_interface_type` in `os::unix::types`
   |                                                              note: found an item that was configured out
  --> src/os/unix/types.rs:14:8                                      |
13 | ...g(any(target_os = "linux", target_os = "android"))]          |         -------------------------------------------- the item is gated here                                                    14 | ...fn get_interface_type(addr_ref: &libc::ifaddrs) -> Inte...
   |       ^^^^^^^^^^^^^^^^^^                                     note: found an item that was configured out
  --> src/os/unix/types.rs:28:35                                     |
27 | #[cfg(target_vendor = "apple")]                                 |       ----------------------- the item is gated behind the `apple` feature                                                     28 | pub use crate::os::darwin::types::get_interface_type;
   |                                   ^^^^^^^^^^^^^^^^^^         note: found an item that was configured out
  --> src/os/unix/types.rs:31:32                                     |
30 | ...any(target_os = "openbsd", target_os = "freebsd", target_os = "netbsd"))]
   |       -------------------------------------------------------------------- the item is gated here
31 | ...e crate::os::bsd::types::get_interface_type;
   |                             ^^^^^^^^^^^^^^^^^^
                                                                  error[E0432]: unresolved import `crate::interface::ipv6_addr_flags::get_ipv6_addr_flags`
  --> src/os/unix/interface.rs:8:5
   |                                                               8 | use crate::interface::ipv6_addr_flags::get_ipv6_addr_flags;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `get_ipv6_addr_flags` in `interface::ipv6_addr_flags`
   |
note: found an item that was configured out
  --> src/interface/ipv6_addr_flags.rs:60:15
   |
59 | ...g(any(target_os = "linux", target_os = "android"))]
   |         -------------------------------------------- the item is gated here
60 | ...crate) fn get_ipv6_addr_flags(_ifname: &str, _addr: &st...
   |              ^^^^^^^^^^^^^^^^^^^

error[E0432]: unresolved import `crate::stats::counters::get_stats`
  --> src/os/unix/interface.rs:13:46
   |
13 | use crate::stats::counters::{InterfaceStats, get_stats};
   |                                              ^^^^^^^^^ no `get_stats` in `stats::counters`
   |
note: found an item that was configured out
  --> src/stats/counters.rs:31:15
   |
25 |   #[cfg(any(
   |  __________-
26 | |     target_vendor = "apple",
27 | |     target_os = "openbsd",
28 | |     target_os = "freebsd",
29 | |     target_os = "netbsd"
30 | | ))]                                                           | |_- the item is gated here
31 |   pub(crate) fn get_stats(ifa: Option<&libc::ifaddrs>, _na...
   |                 ^^^^^^^^^
note: found an item that was configured out
  --> src/stats/counters.rs:49:15
   |                                                              48 | ...g(any(target_os = "linux", target_os = "android"))]
   |         -------------------------------------------- the item is gated here
49 | ...crate) fn get_stats(_ifa: Option<&libc::ifaddrs>, name:...
   |              ^^^^^^^^^

error[E0425]: cannot find function `is_physical_interface` in module `super::flags`
   --> src/interface/interface.rs:199:23
    |
199 |         super::flags::is_physical_interface(&self)
    |                       ^^^^^^^^^^^^^^^^^^^^^ not found in `super::flags`

warning: unused import: `crate::net::mac::MacAddr`
 --> src/os/unix/sockaddr.rs:1:5
  |
1 | use crate::net::mac::MacAddr;
  |     ^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default

error[E0308]: mismatched types
   --> src/interface/state.rs:102:36
    |
102 | pub fn operstate(if_name: &str) -> OperState {
    |        ---------                   ^^^^^^^^^ expected `OperState`, found `()`
    |        |
    |        implicitly returns `()` as its body has no tail or `return` expression

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope                                              --> src/interface/types.rs:227:46
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
227 |             x if x == InterfaceType::Unknown.value() => O...
    |                                              ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:228:47
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
228 |             x if x == InterfaceType::Ethernet.value() => ...    |                                               ^^^^^ method not found in `InterfaceType`                                       
error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:229:48
    |                                                              11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
229 |             x if x == InterfaceType::TokenRing.value() =>...
    |                                                ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:230:43
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
230 |             x if x == InterfaceType::Fddi.value() => Ok(I...
    |                                           ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:231:48
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
231 |             x if x == InterfaceType::BasicIsdn.value() =>...
    |                                                ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:232:50
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
232 |             x if x == InterfaceType::PrimaryIsdn.value() ...
    |                                                  ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:233:42
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
233 |             x if x == InterfaceType::Ppp.value() => Ok(In...
    |                                          ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:234:47
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
234 |             x if x == InterfaceType::Loopback.value() => ...
    |                                               ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:235:55
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
235 |             x if x == InterfaceType::Ethernet3Megabit.value() ...
    |                                                       ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:238:43
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
238 |             x if x == InterfaceType::Slip.value() => Ok(I...
    |                                           ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:239:42
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
239 |             x if x == InterfaceType::Atm.value() => Ok(In...
    |                                          ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:240:51
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
240 |             x if x == InterfaceType::GenericModem.value() ...
    |                                                   ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:241:57
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
241 |             x if x == InterfaceType::ProprietaryVirtual.value() ...
    |                                                         ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:244:52
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
244 |             x if x == InterfaceType::FastEthernetT.value() ...
    |                                                    ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:245:43
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
245 |             x if x == InterfaceType::Isdn.value() => Ok(I...
    |                                           ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:246:53
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
246 |             x if x == InterfaceType::FastEthernetFx.value() ...
    |                                                     ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:247:52
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
247 |             x if x == InterfaceType::Wireless80211.value() ...
    |                                                    ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:248:52
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
248 |             x if x == InterfaceType::AsymmetricDsl.value() ...
    |                                                    ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:249:51
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
249 |             x if x == InterfaceType::RateAdaptDsl.value() ...
    |                                                   ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:250:51
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
250 |             x if x == InterfaceType::SymmetricDsl.value() ...
    |                                                   ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:251:55
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
251 |             x if x == InterfaceType::VeryHighSpeedDsl.value() ...
    |                                                       ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:254:48
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
254 |             x if x == InterfaceType::IPOverAtm.value() =>...
    |                                                ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:255:54
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
255 |             x if x == InterfaceType::GigabitEthernet.value() ...
    |                                                      ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:256:45
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
256 |             x if x == InterfaceType::Tunnel.value() => Ok...
    |                                             ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:257:60
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
257 |             x if x == InterfaceType::MultiRateSymmetricDsl.value() ...
    |                                                            ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:260:63
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
260 |             x if x == InterfaceType::HighPerformanceSerialBus.value() ...
    |                                                               ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:263:43
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
263 |             x if x == InterfaceType::Wman.value() => Ok(I...
    |                                           ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:264:45
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
264 |             x if x == InterfaceType::Wwanpp.value() => Ok...
    |                                             ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:265:46
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
265 |             x if x == InterfaceType::Wwanpp2.value() => O...
    |                                              ^^^^^ method not found in `InterfaceType`

error[E0599]: no method named `value` found for enum `InterfaceType` in the current scope
   --> src/interface/types.rs:266:42
    |
 11 | pub enum InterfaceType {
    | ---------------------- method `value` not found for this enum
...
266 |             x if x == InterfaceType::Can.value() => Ok(In...
    |                                          ^^^^^ method not found in `InterfaceType`

error[E0308]: mismatched types
  --> src/interface/mod.rs:89:31
   |
89 | pub(crate) fn interfaces() -> Vec<Interface> {
   |               ----------      ^^^^^^^^^^^^^^ expected `Vec<Interface>`, found `()`
   |               |
   |               implicitly returns `()` as its body has no tail or `return` expression
   |
   = note: expected struct `Vec<Interface>`
           found unit type `()`

error[E0308]: mismatched types
   --> src/os/unix/interface.rs:163:24
    |
163 |                 flags: addr_ref.ifa_flags,
    |                        ^^^^^^^^^^^^^^^^^^ expected `u32`, found `u64`

error[E0308]: mismatched types
   --> src/os/unix/interface.rs:164:54
    |
164 | ...ate: OperState::from_if_flags(addr_ref.ifa_flags),
    |         ------------------------ ^^^^^^^^^^^^^^^^^^ expected `u32`, found `u64`
    |         |
    |         arguments to this function are incorrect
    |
note: associated function defined here
   --> src/interface/state.rs:50:12
    |
 50 |     pub fn from_if_flags(if_flags: u32) -> Self {
    |            ^^^^^^^^^^^^^ -------------
help: you can convert a `u64` to a `u32` and panic if the converted value doesn't fit
    |
164 |                 oper_state: OperState::from_if_flags(addr_ref.ifa_flags.try_into().unwrap()),
    |                                                                        ++++++++++++++++++++

warning: unused variable: `iface`
   --> src/stats/counters.rs:166:38
    |
166 | ...te_interface_stats(iface: &mut Interface) -> std::io::...
    |                       ^^^^^ help: if this is intentional, prefix it with an underscore: `_iface`
    |
    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

Some errors have detailed explanations: E0308, E0425, E0432, E0599.
For more information about an error, try `rustc --explain E0308`.
warning: `netdev` (lib) generated 2 warnings
error: could not compile `netdev` (lib) due to 40 previous errors; 2 warnings emitted
szilard@build:~/projekt/netdev$ uname -a
SunOS build 5.11 omnios-r151058-c1eded413b i86pc i386 i86pc       
szilard@build:~/projekt/netdev$ rustc --version
rustc 1.95.0 (59807616e 2026-04-14) (OmniOS/151058)
szilard@build:~/projekt/netdev$

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions