From c9e7aeaef64e4e16a32baac1c66d772afbaf8ed0 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 13 Jan 2018 12:41:16 +0100 Subject: sys/linux: add AF_CAN descriptions --- sys/linux/socket_can.txt | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 sys/linux/socket_can.txt (limited to 'sys/linux/socket_can.txt') diff --git a/sys/linux/socket_can.txt b/sys/linux/socket_can.txt new file mode 100644 index 000000000..fdedf7c1e --- /dev/null +++ b/sys/linux/socket_can.txt @@ -0,0 +1,87 @@ +# Copyright 2018 syzkaller project authors. All rights reserved. +# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +# AF_CAN support. + +include +include +include +include +include +include + +resource sock_can[sock] +resource sock_can_raw[sock_can] +resource sock_can_bcm[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]) + +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]) + +# TODO: do setsockopt/getsockopt/ioctl. + +ioctl$ifreq_SIOCGIFINDEX_vcan(fd sock_can, cmd const[SIOCGIFINDEX], arg ptr[inout, ifreq_SIOCGIFINDEX_vcan]) + +ifreq_SIOCGIFINDEX_vcan { + ifr_ifrn string["vcan0", IFNAMSIZ] + ifr_ifru ifindex_vcan + pad array[const[0, int8], 20] +} [packed] + +sockaddr_can { + can_family const[AF_CAN, int16] + can_ifindex ifindex_vcan[opt] + rx_id const[0, int32] + tx_id const[0, int32] +} + +type msghdr_can[MSG] { + addr ptr[in, sockaddr_can] + addrlen len[addr, int32] + vec ptr[in, iovec[in, MSG]] + vlen const[1, intptr] + ctrl const[0, intptr] + ctrllen const[0, intptr] + f flags[send_flags, int32] +} + +can_raw_msg [ + can can_frame_t[CAN_MAX_DLEN] + canfd can_frame_t[CANFD_MAX_DLEN] +] [varlen] + +can_bcm_msg { + opcode flags[can_bcm_opcodes, int32] + flags flags[can_bcm_flags, int32] + count int32 + ival1 timeval + ival2 timeval + can_id canid_t + nframes const[1, int32] + frames can_raw_msg +} + +type can_frame_t[DATA_SIZE] { + can_id canid_t + len int8[0:DATA_SIZE] + flags flags[can_frame_flags, int8] + __res0 const[0, int8] + __res1 const[0, int8] + data array[int8, DATA_SIZE] +} + +canid_t { + id int32:29[0:4] + err int32:1 + rtr int32:1 + eff int32:1 +} + +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 -- cgit mrf-deployment