summaryrefslogtreecommitdiff
path: root/static/netbsd/man4/can.4
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man4/can.4')
-rw-r--r--static/netbsd/man4/can.4106
1 files changed, 106 insertions, 0 deletions
diff --git a/static/netbsd/man4/can.4 b/static/netbsd/man4/can.4
new file mode 100644
index 00000000..af00d4ad
--- /dev/null
+++ b/static/netbsd/man4/can.4
@@ -0,0 +1,106 @@
+.\" $NetBSD: can.4,v 1.3 2017/05/29 08:41:57 wiz Exp $
+.\"
+.\" Copyright (c) 2017 Manuel Bouyer.
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd May 18, 2017
+.Dt CAN 4
+.Os
+.Sh NAME
+.Nm CAN
+.Nd CAN Protocol
+.Sh SYNOPSIS
+.In sys/socket.h
+.In netcan/can.h
+.Ft int
+.Fn socket AF_CAN SOCK_RAW CAN_RAW
+.Sh DESCRIPTION
+.Nm
+is the network layer protocol used on top of CAN bus networks.
+At this time only the
+.Dv SOCK_RAW
+socket type is supported.
+This protocol layer is intended to be compatible with the Linux SocketCAN implementation.
+.Ss ADDRESSING
+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
+standard itself doesn't define an addressing.
+.Pp
+The
+.Nm
+layer uses a 32bits identifier.
+The 3 upper bits are used as control flags.
+The extended frame format is selected by setting the
+.Dv CAN_EFF_FLAG
+control bit.
+.Pp
+The socket address is defined as
+.Bd -literal
+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;
+};
+.Ed
+For CAN raw sockets, the 32bits identifier is part of the message data.
+The can_addr field of the sockaddr structure is not used.
+.Ss MESSAGE
+Raw CAN sockets use fixed-length messages defined as follow:
+.Bd -literal
+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);
+};
+.Ed
+The lower 11 bits (for standard frames) or 29 bits (for extended frames) are
+used as the on-wire identifier.
+The
+.Dv CAN_EFF_FLAG
+bit is set in can_id for extended frames.
+The
+.Dv CAN_RTR_FLAG
+bit is set in can_id for remote transmission request frames.
+.Sh SEE ALSO
+.Xr socket 2 ,
+.Xr canloop 4 ,
+.Xr netintro 4 ,
+.Xr canconfig 8 ,
+.Pa /usr/include/netcan/can.h
+.Pp
+.Lk https://en.wikipedia.org/wiki/SocketCAN "SocketCAN - Wikipedia"
+.Lk https://www.kernel.org/doc/Documentation/networking/can.txt "Readme file for the Controller Area Network Protocol Family"
+.Sh HISTORY
+The
+.Nm
+protocol appeared in
+.Nx 8.0 .
+.Sh BUGS
+.Dv CANFD
+and error frames are not implemented.