diff --git a/libc-test/build.rs b/libc-test/build.rs index 6854e3c47d8fd..cb577fd5e363e 100644 --- a/libc-test/build.rs +++ b/libc-test/build.rs @@ -3851,8 +3851,9 @@ fn test_linux(target: &str) { "linux/can.h", "linux/can/bcm.h", "linux/can/error.h", - "linux/can/raw.h", "linux/can/j1939.h", + "linux/can/netlink.h", + "linux/can/raw.h", "linux/cn_proc.h", "linux/connector.h", "linux/dccp.h", @@ -4506,6 +4507,7 @@ fn test_linux(target: &str) { }); let c_enums = [ + "can_state", "membarrier_cmd", "pid_type", "proc_cn_event", diff --git a/libc-test/semver/linux.txt b/libc-test/semver/linux.txt index 398b18d19ab5b..e211a7da48410 100644 --- a/libc-test/semver/linux.txt +++ b/libc-test/semver/linux.txt @@ -234,6 +234,17 @@ CANXL_SEC CANXL_XLF CAN_BCM CAN_BUS_OFF_THRESHOLD +CAN_CTRLMODE_3_SAMPLES +CAN_CTRLMODE_BERR_REPORTING +CAN_CTRLMODE_CC_LEN8_DLC +CAN_CTRLMODE_FD +CAN_CTRLMODE_FD_NON_ISO +CAN_CTRLMODE_LISTENONLY +CAN_CTRLMODE_LOOPBACK +CAN_CTRLMODE_ONE_SHOT +CAN_CTRLMODE_PRESUME_ACK +CAN_CTRLMODE_TDC_AUTO +CAN_CTRLMODE_TDC_MANUAL CAN_EFF_FLAG CAN_EFF_ID_BITS CAN_EFF_MASK @@ -321,6 +332,13 @@ CAN_RAW_XL_FRAMES CAN_RTR_FLAG CAN_SFF_ID_BITS CAN_SFF_MASK +CAN_STATE_BUS_OFF +CAN_STATE_ERROR_ACTIVE +CAN_STATE_ERROR_PASSIVE +CAN_STATE_ERROR_WARNING +CAN_STATE_SLEEPING +CAN_STATE_STOPPED +CAN_TERMINATION_DISABLED CAN_TP16 CAN_TP20 CBAUD @@ -1058,6 +1076,36 @@ IFLA_AF_SPEC IFLA_ALLMULTI IFLA_ALT_IFNAME IFLA_BROADCAST +IFLA_CAN_BERR_COUNTER +IFLA_CAN_BITRATE_CONST +IFLA_CAN_BITRATE_MAX +IFLA_CAN_BITTIMING +IFLA_CAN_BITTIMING_CONST +IFLA_CAN_CLOCK +IFLA_CAN_CTRLMODE +IFLA_CAN_CTRLMODE_EXT +IFLA_CAN_CTRLMODE_SUPPORTED +IFLA_CAN_CTRLMODE_UNSPEC +IFLA_CAN_DATA_BITRATE_CONST +IFLA_CAN_DATA_BITTIMING +IFLA_CAN_DATA_BITTIMING_CONST +IFLA_CAN_RESTART +IFLA_CAN_RESTART_MS +IFLA_CAN_STATE +IFLA_CAN_TDC +IFLA_CAN_TDC_TDCF +IFLA_CAN_TDC_TDCF_MAX +IFLA_CAN_TDC_TDCF_MIN +IFLA_CAN_TDC_TDCO +IFLA_CAN_TDC_TDCO_MAX +IFLA_CAN_TDC_TDCO_MIN +IFLA_CAN_TDC_TDCV +IFLA_CAN_TDC_TDCV_MAX +IFLA_CAN_TDC_TDCV_MIN +IFLA_CAN_TDC_UNSPEC +IFLA_CAN_TERMINATION +IFLA_CAN_TERMINATION_CONST +IFLA_CAN_UNSPEC IFLA_CARRIER IFLA_CARRIER_CHANGES IFLA_CARRIER_DOWN_COUNT @@ -3961,9 +4009,16 @@ bcm_timeval blkcnt64_t brk bsearch +can_berr_counter +can_bittiming +can_bittiming_const +can_clock +can_ctrlmode +can_device_stats can_err_mask_t can_filter can_frame +can_state canfd_frame canid_t canxl_frame diff --git a/src/new/linux_uapi/linux/can.rs b/src/new/linux_uapi/linux/can.rs index d984835a6c10f..604e107a51220 100644 --- a/src/new/linux_uapi/linux/can.rs +++ b/src/new/linux_uapi/linux/can.rs @@ -3,6 +3,7 @@ pub(crate) mod bcm; pub(crate) mod error; pub(crate) mod j1939; +pub(crate) mod netlink; pub(crate) mod raw; use crate::prelude::*; diff --git a/src/new/linux_uapi/linux/can/netlink.rs b/src/new/linux_uapi/linux/can/netlink.rs new file mode 100644 index 0000000000000..2892941090cb9 --- /dev/null +++ b/src/new/linux_uapi/linux/can/netlink.rs @@ -0,0 +1,125 @@ +//! Header: `linux/can/netlink.h` + +use crate::prelude::*; + +s! { + pub struct can_bittiming { + pub bitrate: u32, + pub sample_point: u32, + pub tq: u32, + pub prop_seg: u32, + pub phase_seg1: u32, + pub phase_seg2: u32, + pub sjw: u32, + pub brp: u32, + } + + pub struct can_bittiming_const { + pub name: [c_char; 16], + pub tseg1_min: u32, + pub tseg1_max: u32, + pub tseg2_min: u32, + pub tseg2_max: u32, + pub sjw_max: u32, + pub brp_min: u32, + pub brp_max: u32, + pub brp_inc: u32, + } + + pub struct can_clock { + pub freq: u32, + } + + pub struct can_berr_counter { + pub txerr: u16, + pub rxerr: u16, + } + + pub struct can_ctrlmode { + pub mask: u32, + pub flags: u32, + } + + pub struct can_device_stats { + pub bus_error: u32, + pub error_warning: u32, + pub error_passive: u32, + pub bus_off: u32, + pub arbitration_lost: u32, + pub restarts: u32, + } +} + +c_enum! { + #[repr(c_uint)] + pub enum can_state { + pub CAN_STATE_ERROR_ACTIVE = 0, + pub CAN_STATE_ERROR_WARNING, + pub CAN_STATE_ERROR_PASSIVE, + pub CAN_STATE_BUS_OFF, + pub CAN_STATE_STOPPED, + pub CAN_STATE_SLEEPING, + } +} + +pub const CAN_CTRLMODE_LOOPBACK: u32 = 0x01; +pub const CAN_CTRLMODE_LISTENONLY: u32 = 0x02; +pub const CAN_CTRLMODE_3_SAMPLES: u32 = 0x04; +pub const CAN_CTRLMODE_ONE_SHOT: u32 = 0x08; +pub const CAN_CTRLMODE_BERR_REPORTING: u32 = 0x10; +pub const CAN_CTRLMODE_FD: u32 = 0x20; +pub const CAN_CTRLMODE_PRESUME_ACK: u32 = 0x40; +pub const CAN_CTRLMODE_FD_NON_ISO: u32 = 0x80; +pub const CAN_CTRLMODE_CC_LEN8_DLC: u32 = 0x100; +pub const CAN_CTRLMODE_TDC_AUTO: u32 = 0x200; +pub const CAN_CTRLMODE_TDC_MANUAL: u32 = 0x400; + +c_enum! { + #[repr(c_int)] + pub enum #anon { + pub IFLA_CAN_UNSPEC = 0, + pub IFLA_CAN_BITTIMING, + pub IFLA_CAN_BITTIMING_CONST, + pub IFLA_CAN_CLOCK, + pub IFLA_CAN_STATE, + pub IFLA_CAN_CTRLMODE, + pub IFLA_CAN_RESTART_MS, + pub IFLA_CAN_RESTART, + pub IFLA_CAN_BERR_COUNTER, + pub IFLA_CAN_DATA_BITTIMING, + pub IFLA_CAN_DATA_BITTIMING_CONST, + pub IFLA_CAN_TERMINATION, + pub IFLA_CAN_TERMINATION_CONST, + pub IFLA_CAN_BITRATE_CONST, + pub IFLA_CAN_DATA_BITRATE_CONST, + pub IFLA_CAN_BITRATE_MAX, + pub IFLA_CAN_TDC, + pub IFLA_CAN_CTRLMODE_EXT, + } +} + +c_enum! { + #[repr(c_int)] + pub enum #anon { + pub IFLA_CAN_TDC_UNSPEC = 0, + pub IFLA_CAN_TDC_TDCV_MIN, + pub IFLA_CAN_TDC_TDCV_MAX, + pub IFLA_CAN_TDC_TDCO_MIN, + pub IFLA_CAN_TDC_TDCO_MAX, + pub IFLA_CAN_TDC_TDCF_MIN, + pub IFLA_CAN_TDC_TDCF_MAX, + pub IFLA_CAN_TDC_TDCV, + pub IFLA_CAN_TDC_TDCO, + pub IFLA_CAN_TDC_TDCF, + } +} + +c_enum! { + #[repr(c_int)] + pub enum #anon { + pub IFLA_CAN_CTRLMODE_UNSPEC = 0, + pub IFLA_CAN_CTRLMODE_SUPPORTED, + } +} + +pub const CAN_TERMINATION_DISABLED: u16 = 0; diff --git a/src/new/mod.rs b/src/new/mod.rs index c0c6891242ad4..2ea2c9bdcdc5f 100644 --- a/src/new/mod.rs +++ b/src/new/mod.rs @@ -179,6 +179,7 @@ cfg_if! { pub use linux::can::bcm::*; pub use linux::can::error::*; pub use linux::can::j1939::*; + pub use linux::can::netlink::*; pub use linux::can::raw::*; pub use linux::can::*; pub use linux::keyctl::*;