CAN(4)                  NetBSD Kernel Interfaces Manual                 CAN(4)

     CAN -- CAN Protocol

     #include <sys/socket.h>
     #include <netcan/can.h>

     socket(AF_CAN, SOCK_RAW, CAN_RAW);

     CAN is the network layer protocol used on top of CAN bus networks.  At
     this time only the SOCK_RAW socket type is supported.  This protocol
     layer is intended to be compatible with the Linux SocketCAN implementa-

     A CAN frame consists of a 11 bits (standard frame format) or 29 bits
     (extended frame format) identifier, followed by up to 8 data bytes.  The
     interpretation of the identifier is application-dependent, the CAN stan-
     dard itself doesn't define an addressing.

     The CAN layer uses a 32bits identifier.  The 3 upper bits are used as
     control flags.  The extended frame format is selected by setting the
     CAN_EFF_FLAG control bit.

     The socket address is defined as

     struct sockaddr_can {
             u_int8_t        can_len;
             sa_family_t     can_family;
             int             can_ifindex;
             union {
                     /* transport protocol class address information */
                     struct { canid_t rx_id, tx_id; } tp;
                     /* reserved for future CAN protocols address information */
             } can_addr;
     For CAN raw sockets, the 32bits identifier is part of the message data.
     The can_addr field of the sockaddr structure is not used.

     Raw CAN sockets use fixed-length messages defined as follow:

     struct can_frame {
             canid_t can_id; /* ID + EFF/RTR/ERR flags */
             uint8_t can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
             uint8_t __pad;
             uint8_t __res0;
             uint8_t __res1;
             uint8_t data[CAN_MAX_DLEN] __aligned(8);
     The lower 11 bits (for standard frames) or 29 bits (for extended frames)
     are used as the on-wire identifier.  The CAN_EFF_FLAG bit is set in
     can_id for extended frames.  The CAN_RTR_FLAG bit is set in can_id for
     remote transmission request frames.

     socket(2), canloop(4), netintro(4), canconfig(8),

     SocketCAN - Wikipedia:
     Readme file for the Controller Area Network Protocol Family:

     The CAN protocol appeared in NetBSD 8.0.

     CANFD and error frames are not implemented.

NetBSD 8.0                       May 18, 2017                       NetBSD 8.0

You can also request any man page by name and (optionally) by section:


Use the DEFAULT collection to view manual pages for third-party software.

©1994 Man-cgi 1.15, Panagiotis Christias
©1996-2018 Modified for NetBSD by Kimmo Suominen