diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-11-02 21:28:26 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-11-02 21:31:45 +0100 |
| commit | 841212d4cc293fc5fcf57066eb506477ee3936ab (patch) | |
| tree | c0a022193c7741e7161d9b42b76d72e1aeb656bd /sys/linux/socket_can.txt | |
| parent | 1297f2394760dc7237eeb27a41b3380233684d4e (diff) | |
sys/linux: extend CAN descriptions
Diffstat (limited to 'sys/linux/socket_can.txt')
| -rw-r--r-- | sys/linux/socket_can.txt | 76 |
1 files changed, 73 insertions, 3 deletions
diff --git a/sys/linux/socket_can.txt b/sys/linux/socket_can.txt index f538f8137..ce63ac925 100644 --- a/sys/linux/socket_can.txt +++ b/sys/linux/socket_can.txt @@ -9,23 +9,50 @@ include <uapi/linux/if.h> include <uapi/linux/can.h> include <uapi/linux/can/raw.h> include <uapi/linux/can/bcm.h> +include <uapi/linux/can/j1939.h> resource sock_can[sock] resource sock_can_raw[sock_can] resource sock_can_bcm[sock_can] +resource sock_can_j1939[sock_can] resource ifindex_vcan[ifindex] socket$can_raw(domain const[AF_CAN], type const[SOCK_RAW], proto const[CAN_RAW]) sock_can_raw bind$can_raw(fd sock_can_raw, addr ptr[in, sockaddr_can], len bytesize[addr]) sendmsg$can_raw(fd sock_can_raw, msg ptr[in, msghdr_can[can_raw_msg]], f flags[send_flags]) +recvmsg$can_raw(fd sock_can_raw, msg ptr[inout, recv_msghdr], f flags[recv_flags]) +setsockopt$CAN_RAW_FILTER(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_FILTER], val ptr[in, array[can_filter]], len bytesize[val]) +setsockopt$CAN_RAW_ERR_FILTER(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_ERR_FILTER], val ptr[in, int32], len bytesize[val]) +setsockopt$CAN_RAW_LOOPBACK(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_LOOPBACK], val ptr[in, bool32], len bytesize[val]) +setsockopt$CAN_RAW_RECV_OWN_MSGS(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_RECV_OWN_MSGS], val ptr[in, bool32], len bytesize[val]) +setsockopt$CAN_RAW_FD_FRAMES(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_FD_FRAMES], val ptr[in, bool32], len bytesize[val]) +setsockopt$CAN_RAW_JOIN_FILTERS(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_JOIN_FILTERS], val ptr[in, bool32], len bytesize[val]) +getsockopt$CAN_RAW_FILTER(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_FILTER], val ptr[out, array[can_filter]], len ptr[inout, bytesize[val, int32]]) +getsockopt$CAN_RAW_LOOPBACK(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_LOOPBACK], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) +getsockopt$CAN_RAW_RECV_OWN_MSGS(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_RECV_OWN_MSGS], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) +getsockopt$CAN_RAW_FD_FRAMES(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_FD_FRAMES], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) +getsockopt$CAN_RAW_JOIN_FILTERS(fd sock_can_raw, level const[SOL_CAN_RAW], opt const[CAN_RAW_JOIN_FILTERS], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) socket$can_bcm(domain const[AF_CAN], type const[SOCK_DGRAM], proto const[CAN_BCM]) sock_can_bcm connect$can_bcm(fd sock_can_bcm, addr ptr[in, sockaddr_can], len bytesize[addr]) sendmsg$can_bcm(fd sock_can_bcm, msg ptr[in, msghdr_can[can_bcm_msg]], f flags[send_flags]) +recvmsg$can_bcm(fd sock_can_bcm, msg ptr[inout, recv_msghdr], f flags[recv_flags]) -# TODO: do setsockopt/getsockopt/ioctl. +socket$can_j1939(domain const[AF_CAN], type const[SOCK_DGRAM], proto const[CAN_J1939]) sock_can_j1939 +bind$can_j1939(fd sock_can_j1939, addr ptr[in, sockaddr_can_j1939], len bytesize[addr]) +connect$can_j1939(fd sock_can_j1939, addr ptr[in, sockaddr_can_j1939], len bytesize[addr]) +sendmsg$can_j1939(fd sock_can_j1939, msg ptr[in, msghdr_can_j1939], f flags[send_flags]) +recvmsg$can_j1939(fd sock_can_j1939, msg ptr[inout, recv_msghdr], f flags[recv_flags]) +setsockopt$SO_J1939_FILTER(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_FILTER], val ptr[in, array[j1939_filter]], len bytesize[val]) +setsockopt$SO_J1939_PROMISC(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_PROMISC], val ptr[in, bool32], len bytesize[val]) +setsockopt$SO_J1939_ERRQUEUE(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_ERRQUEUE], val ptr[in, bool32], len bytesize[val]) +setsockopt$SO_J1939_SEND_PRIO(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_SEND_PRIO], val ptr[in, int32[0:7]], len bytesize[val]) +getsockopt$SO_J1939_PROMISC(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_PROMISC], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) +getsockopt$SO_J1939_ERRQUEUE(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_ERRQUEUE], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) +getsockopt$SO_J1939_SEND_PRIO(fd sock_can_j1939, level const[SOL_CAN_J1939], opt const[SO_J1939_SEND_PRIO], val ptr[out, int32], len ptr[inout, bytesize[val, int32]]) ioctl$ifreq_SIOCGIFINDEX_vcan(fd sock_can, cmd const[SIOCGIFINDEX], arg ptr[inout, ifreq_dev_t["vcan0", ifindex_vcan]]) +ioctl$ifreq_SIOCGIFINDEX_vxcan(fd sock_can, cmd const[SIOCGIFINDEX], arg ptr[inout, ifreq_dev_t["vxcan1", ifindex_vcan]]) sockaddr_can { can_family const[AF_CAN, int16] @@ -34,8 +61,27 @@ sockaddr_can { tx_id const[0, int32] } +sockaddr_can_j1939 { + can_family const[AF_CAN, int16] + can_ifindex ifindex_vcan[opt] + name int64 + pgn can_j1939_pgn + addr int8 +} + +can_j1939_pgn { + pgn_ps flags[can_j1939_pgn_ps, int8] + pgn_pf flags[can_j1939_pgn_pf, int8] + pgn_flags flags[can_j1939_pgn_flags, int8] + pgn_unused const[0, int8] +} [align_4] + +can_j1939_pgn_ps = 0, 1, 2 +can_j1939_pgn_pf = 0, 1, 0xf0, 0xff +can_j1939_pgn_flags = 0, 1, 2, 3, 4 + type msghdr_can[MSG] { - addr ptr[in, sockaddr_can] + addr ptr[in, sockaddr_can, opt] addrlen len[addr, int32] vec ptr[in, iovec[in, MSG]] vlen const[1, intptr] @@ -44,6 +90,16 @@ type msghdr_can[MSG] { f flags[send_flags, int32] } +msghdr_can_j1939 { + addr ptr[in, sockaddr_can_j1939, opt] + addrlen len[addr, int32] + vec ptr[in, iovec[in, array[int8]]] + vlen const[1, intptr] + ctrl const[0, intptr] + ctrllen const[0, intptr] + f flags[send_flags, int32] +} + can_raw_msg [ can can_frame canfd canfd_frame @@ -79,6 +135,20 @@ canid_t { eff int32:1 } +can_filter { + can_id canid_t + can_mask canid_t +} + +j1939_filter { + name int64 + name_mask int64 + pgn can_j1939_pgn + pgn_mask can_j1939_pgn + addr int8 + addr_mask int8 +} + can_bcm_opcodes = TX_SETUP, TX_DELETE, TX_READ, TX_SEND, RX_SETUP, RX_DELETE, RX_READ can_bcm_flags = SETTIMER, STARTTIMER, TX_COUNTEVT, TX_ANNOUNCE, TX_CP_CAN_ID, RX_FILTER_ID, RX_CHECK_DLC, RX_NO_AUTOTIMER, RX_ANNOUNCE_RESUME, TX_RESET_MULTI_IDX, RX_RTR_FRAME, CAN_FD_FRAME -can_frame_flags = CANFD_BRS, CANFD_ESI +can_frame_flags = 0, CANFD_BRS, CANFD_ESI |
