libc/new/linux_uapi/linux/
can.rs1pub(crate) mod bcm;
4pub(crate) mod j1939;
5pub(crate) mod raw;
6
7use crate::prelude::*;
8
9pub const CAN_EFF_FLAG: canid_t = 0x80000000;
10pub const CAN_RTR_FLAG: canid_t = 0x40000000;
11pub const CAN_ERR_FLAG: canid_t = 0x20000000;
12
13pub const CAN_SFF_MASK: canid_t = 0x000007FF;
14pub const CAN_EFF_MASK: canid_t = 0x1FFFFFFF;
15pub const CAN_ERR_MASK: canid_t = 0x1FFFFFFF;
16pub const CANXL_PRIO_MASK: crate::canid_t = CAN_SFF_MASK;
17
18pub type canid_t = u32;
19
20pub const CAN_SFF_ID_BITS: c_int = 11;
21pub const CAN_EFF_ID_BITS: c_int = 29;
22pub const CANXL_PRIO_BITS: c_int = CAN_SFF_ID_BITS;
23
24pub type can_err_mask_t = u32;
25
26pub const CAN_MAX_DLC: c_int = 8;
27pub const CAN_MAX_DLEN: usize = 8;
28
29pub const CANFD_MAX_DLC: c_int = 15;
30pub const CANFD_MAX_DLEN: usize = 64;
31
32pub const CANXL_MIN_DLC: c_int = 0;
33pub const CANXL_MAX_DLC: c_int = 2047;
34pub const CANXL_MAX_DLC_MASK: c_int = 0x07FF;
35pub const CANXL_MIN_DLEN: usize = 1;
36pub const CANXL_MAX_DLEN: usize = 2048;
37
38s! {
39 #[repr(align(8))]
40 pub struct can_frame {
41 pub can_id: canid_t,
42 pub can_dlc: u8,
44 __pad: Padding<u8>,
45 __res0: u8,
46 pub len8_dlc: u8,
47 pub data: [u8; CAN_MAX_DLEN],
48 }
49}
50
51pub const CANFD_BRS: c_int = 0x01;
52pub const CANFD_ESI: c_int = 0x02;
53pub const CANFD_FDF: c_int = 0x04;
54
55s! {
56 #[repr(align(8))]
57 pub struct canfd_frame {
58 pub can_id: canid_t,
59 pub len: u8,
60 pub flags: u8,
61 __res0: u8,
62 __res1: u8,
63 pub data: [u8; CANFD_MAX_DLEN],
64 }
65}
66
67pub const CANXL_XLF: c_int = 0x80;
68pub const CANXL_SEC: c_int = 0x01;
69
70s! {
71 pub struct canxl_frame {
72 pub prio: canid_t,
73 pub flags: u8,
74 pub sdt: u8,
75 pub len: u16,
76 pub af: u32,
77 pub data: [u8; CANXL_MAX_DLEN],
78 }
79}
80
81pub const CAN_MTU: usize = size_of::<can_frame>();
82pub const CANFD_MTU: usize = size_of::<canfd_frame>();
83pub const CANXL_MTU: usize = size_of::<canxl_frame>();
84pub const CANXL_HDR_SIZE: usize = 12;
88pub const CANXL_MIN_MTU: usize = CANXL_HDR_SIZE + 64;
89pub const CANXL_MAX_MTU: usize = CANXL_MTU;
90
91pub const CAN_RAW: c_int = 1;
92pub const CAN_BCM: c_int = 2;
93pub const CAN_TP16: c_int = 3;
94pub const CAN_TP20: c_int = 4;
95pub const CAN_MCNET: c_int = 5;
96pub const CAN_ISOTP: c_int = 6;
97pub const CAN_J1939: c_int = 7;
98pub const CAN_NPROTO: c_int = 8;
99
100pub const SOL_CAN_BASE: c_int = 100;
101
102s_no_extra_traits! {
103 pub struct sockaddr_can {
104 pub can_family: crate::sa_family_t,
105 pub can_ifindex: c_int,
106 pub can_addr: __c_anonymous_sockaddr_can_can_addr,
107 }
108
109 pub union __c_anonymous_sockaddr_can_can_addr {
110 pub tp: __c_anonymous_sockaddr_can_tp,
111 pub j1939: __c_anonymous_sockaddr_can_j1939,
112 }
113}
114
115s! {
116 pub struct __c_anonymous_sockaddr_can_tp {
117 pub rx_id: canid_t,
118 pub tx_id: canid_t,
119 }
120
121 pub struct __c_anonymous_sockaddr_can_j1939 {
122 pub name: u64,
123 pub pgn: u32,
124 pub addr: u8,
125 }
126
127 pub struct can_filter {
128 pub can_id: canid_t,
129 pub can_mask: canid_t,
130 }
131}
132
133pub const CAN_INV_FILTER: canid_t = 0x20000000;