]> rtime.felk.cvut.cz Git - socketcan-devel.git/blob - kernel/2.6/Documentation/networking/can.txt
Fix common misspellings
[socketcan-devel.git] / kernel / 2.6 / Documentation / networking / can.txt
1 ============================================================================
2
3 can.txt
4
5 Readme file for the Controller Area Network Protocol Family (aka Socket CAN)
6
7 This file contains
8
9   1 Overview / What is Socket CAN
10
11   2 Motivation / Why using the socket API
12
13   3 Socket CAN concept
14     3.1 receive lists
15     3.2 local loopback of sent frames
16     3.3 network security issues (capabilities)
17     3.4 network problem notifications
18
19   4 How to use Socket CAN
20     4.1 RAW protocol sockets with can_filters (SOCK_RAW)
21       4.1.1 RAW socket option CAN_RAW_FILTER
22       4.1.2 RAW socket option CAN_RAW_ERR_FILTER
23       4.1.3 RAW socket option CAN_RAW_LOOPBACK
24       4.1.4 RAW socket option CAN_RAW_RECV_OWN_MSGS
25       4.1.5 RAW socket returned message flags
26     4.2 Broadcast Manager protocol sockets (SOCK_DGRAM)
27     4.3 connected transport protocols (SOCK_SEQPACKET)
28     4.4 unconnected transport protocols (SOCK_DGRAM)
29     4.5 Timestamps
30
31   5 Socket CAN core module
32     5.1 can.ko module params
33     5.2 procfs content
34     5.3 writing own CAN protocol modules
35
36   6 CAN network drivers
37     6.1 general settings
38     6.2 local loopback of sent frames
39     6.3 CAN controller hardware filters
40     6.4 The virtual CAN driver (vcan)
41     6.5 The CAN network device driver interface
42       6.5.1 Netlink interface to set/get devices properties
43       6.5.2 Setting the CAN bit-timing
44       6.5.3 Starting and stopping the CAN network device
45     6.6 supported CAN hardware
46
47   7 Socket CAN resources
48
49   8 Credits
50
51 ============================================================================
52
53 1. Overview / What is Socket CAN
54 --------------------------------
55
56 The socketcan package is an implementation of CAN protocols
57 (Controller Area Network) for Linux.  CAN is a networking technology
58 which has widespread use in automation, embedded devices, and
59 automotive fields.  While there have been other CAN implementations
60 for Linux based on character devices, Socket CAN uses the Berkeley
61 socket API, the Linux network stack and implements the CAN device
62 drivers as network interfaces.  The CAN socket API has been designed
63 as similar as possible to the TCP/IP protocols to allow programmers,
64 familiar with network programming, to easily learn how to use CAN
65 sockets.
66
67 2. Motivation / Why using the socket API
68 ----------------------------------------
69
70 There have been CAN implementations for Linux before Socket CAN so the
71 question arises, why we have started another project.  Most existing
72 implementations come as a device driver for some CAN hardware, they
73 are based on character devices and provide comparatively little
74 functionality.  Usually, there is only a hardware-specific device
75 driver which provides a character device interface to send and
76 receive raw CAN frames, directly to/from the controller hardware.
77 Queueing of frames and higher-level transport protocols like ISO-TP
78 have to be implemented in user space applications.  Also, most
79 character-device implementations support only one single process to
80 open the device at a time, similar to a serial interface.  Exchanging
81 the CAN controller requires employment of another device driver and
82 often the need for adaption of large parts of the application to the
83 new driver's API.
84
85 Socket CAN was designed to overcome all of these limitations.  A new
86 protocol family has been implemented which provides a socket interface
87 to user space applications and which builds upon the Linux network
88 layer, so to use all of the provided queueing functionality.  A device
89 driver for CAN controller hardware registers itself with the Linux
90 network layer as a network device, so that CAN frames from the
91 controller can be passed up to the network layer and on to the CAN
92 protocol family module and also vice-versa.  Also, the protocol family
93 module provides an API for transport protocol modules to register, so
94 that any number of transport protocols can be loaded or unloaded
95 dynamically.  In fact, the can core module alone does not provide any
96 protocol and cannot be used without loading at least one additional
97 protocol module.  Multiple sockets can be opened at the same time,
98 on different or the same protocol module and they can listen/send
99 frames on different or the same CAN IDs.  Several sockets listening on
100 the same interface for frames with the same CAN ID are all passed the
101 same received matching CAN frames.  An application wishing to
102 communicate using a specific transport protocol, e.g. ISO-TP, just
103 selects that protocol when opening the socket, and then can read and
104 write application data byte streams, without having to deal with
105 CAN-IDs, frames, etc.
106
107 Similar functionality visible from user-space could be provided by a
108 character device, too, but this would lead to a technically inelegant
109 solution for a couple of reasons:
110
111 * Intricate usage.  Instead of passing a protocol argument to
112   socket(2) and using bind(2) to select a CAN interface and CAN ID, an
113   application would have to do all these operations using ioctl(2)s.
114
115 * Code duplication.  A character device cannot make use of the Linux
116   network queueing code, so all that code would have to be duplicated
117   for CAN networking.
118
119 * Abstraction.  In most existing character-device implementations, the
120   hardware-specific device driver for a CAN controller directly
121   provides the character device for the application to work with.
122   This is at least very unusual in Unix systems for both, char and
123   block devices.  For example you don't have a character device for a
124   certain UART of a serial interface, a certain sound chip in your
125   computer, a SCSI or IDE controller providing access to your hard
126   disk or tape streamer device.  Instead, you have abstraction layers
127   which provide a unified character or block device interface to the
128   application on the one hand, and a interface for hardware-specific
129   device drivers on the other hand.  These abstractions are provided
130   by subsystems like the tty layer, the audio subsystem or the SCSI
131   and IDE subsystems for the devices mentioned above.
132
133   The easiest way to implement a CAN device driver is as a character
134   device without such a (complete) abstraction layer, as is done by most
135   existing drivers.  The right way, however, would be to add such a
136   layer with all the functionality like registering for certain CAN
137   IDs, supporting several open file descriptors and (de)multiplexing
138   CAN frames between them, (sophisticated) queueing of CAN frames, and
139   providing an API for device drivers to register with.  However, then
140   it would be no more difficult, or may be even easier, to use the
141   networking framework provided by the Linux kernel, and this is what
142   Socket CAN does.
143
144   The use of the networking framework of the Linux kernel is just the
145   natural and most appropriate way to implement CAN for Linux.
146
147 3. Socket CAN concept
148 ---------------------
149
150   As described in chapter 2 it is the main goal of Socket CAN to
151   provide a socket interface to user space applications which builds
152   upon the Linux network layer. In contrast to the commonly known
153   TCP/IP and ethernet networking, the CAN bus is a broadcast-only(!)
154   medium that has no MAC-layer addressing like ethernet. The CAN-identifier
155   (can_id) is used for arbitration on the CAN-bus. Therefore the CAN-IDs
156   have to be chosen uniquely on the bus. When designing a CAN-ECU
157   network the CAN-IDs are mapped to be sent by a specific ECU.
158   For this reason a CAN-ID can be treated best as a kind of source address.
159
160   3.1 receive lists
161
162   The network transparent access of multiple applications leads to the
163   problem that different applications may be interested in the same
164   CAN-IDs from the same CAN network interface. The Socket CAN core
165   module - which implements the protocol family CAN - provides several
166   high efficient receive lists for this reason. If e.g. a user space
167   application opens a CAN RAW socket, the raw protocol module itself
168   requests the (range of) CAN-IDs from the Socket CAN core that are
169   requested by the user. The subscription and unsubscription of
170   CAN-IDs can be done for specific CAN interfaces or for all(!) known
171   CAN interfaces with the can_rx_(un)register() functions provided to
172   CAN protocol modules by the SocketCAN core (see chapter 5).
173   To optimize the CPU usage at runtime the receive lists are split up
174   into several specific lists per device that match the requested
175   filter complexity for a given use-case.
176
177   3.2 local loopback of sent frames
178
179   As known from other networking concepts the data exchanging
180   applications may run on the same or different nodes without any
181   change (except for the according addressing information):
182
183          ___   ___   ___                   _______   ___
184         | _ | | _ | | _ |                 | _   _ | | _ |
185         ||A|| ||B|| ||C||                 ||A| |B|| ||C||
186         |___| |___| |___|                 |_______| |___|
187           |     |     |                       |       |
188         -----------------(1)- CAN bus -(2)---------------
189
190   To ensure that application A receives the same information in the
191   example (2) as it would receive in example (1) there is need for
192   some kind of local loopback of the sent CAN frames on the appropriate
193   node.
194
195   The Linux network devices (by default) just can handle the
196   transmission and reception of media dependent frames. Due to the
197   arbitration on the CAN bus the transmission of a low prio CAN-ID
198   may be delayed by the reception of a high prio CAN frame. To
199   reflect the correct* traffic on the node the loopback of the sent
200   data has to be performed right after a successful transmission. If
201   the CAN network interface is not capable of performing the loopback for
202   some reason the SocketCAN core can do this task as a fallback solution.
203   See chapter 6.2 for details (recommended).
204
205   The loopback functionality is enabled by default to reflect standard
206   networking behaviour for CAN applications. Due to some requests from
207   the RT-SocketCAN group the loopback optionally may be disabled for each
208   separate socket. See sockopts from the CAN RAW sockets in chapter 4.1.
209
210   * = you really like to have this when you're running analyser tools
211       like 'candump' or 'cansniffer' on the (same) node.
212
213   3.3 network security issues (capabilities)
214
215   The Controller Area Network is a local field bus transmitting only
216   broadcast messages without any routing and security concepts.
217   In the majority of cases the user application has to deal with
218   raw CAN frames. Therefore it might be reasonable NOT to restrict
219   the CAN access only to the user root, as known from other networks.
220   Since the currently implemented CAN_RAW and CAN_BCM sockets can only
221   send and receive frames to/from CAN interfaces it does not affect
222   security of others networks to allow all users to access the CAN.
223   To enable non-root users to access CAN_RAW and CAN_BCM protocol
224   sockets the Kconfig options CAN_RAW_USER and/or CAN_BCM_USER may be
225   selected at kernel compile time.
226
227   3.4 network problem notifications
228
229   The use of the CAN bus may lead to several problems on the physical
230   and media access control layer. Detecting and logging of these lower
231   layer problems is a vital requirement for CAN users to identify
232   hardware issues on the physical transceiver layer as well as
233   arbitration problems and error frames caused by the different
234   ECUs. The occurrence of detected errors are important for diagnosis
235   and have to be logged together with the exact timestamp. For this
236   reason the CAN interface driver can generate so called Error Frames
237   that can optionally be passed to the user application in the same
238   way as other CAN frames. Whenever an error on the physical layer
239   or the MAC layer is detected (e.g. by the CAN controller) the driver
240   creates an appropriate error frame. Error frames can be requested by
241   the user application using the common CAN filter mechanisms. Inside
242   this filter definition the (interested) type of errors may be
243   selected. The reception of error frames is disabled by default.
244   The format of the CAN error frame is briefly described in the Linux
245   header file "include/linux/can/error.h".
246
247 4. How to use Socket CAN
248 ------------------------
249
250   Like TCP/IP, you first need to open a socket for communicating over a
251   CAN network. Since Socket CAN implements a new protocol family, you
252   need to pass PF_CAN as the first argument to the socket(2) system
253   call. Currently, there are two CAN protocols to choose from, the raw
254   socket protocol and the broadcast manager (BCM). So to open a socket,
255   you would write
256
257     s = socket(PF_CAN, SOCK_RAW, CAN_RAW);
258
259   and
260
261     s = socket(PF_CAN, SOCK_DGRAM, CAN_BCM);
262
263   respectively.  After the successful creation of the socket, you would
264   normally use the bind(2) system call to bind the socket to a CAN
265   interface (which is different from TCP/IP due to different addressing
266   - see chapter 3). After binding (CAN_RAW) or connecting (CAN_BCM)
267   the socket, you can read(2) and write(2) from/to the socket or use
268   send(2), sendto(2), sendmsg(2) and the recv* counterpart operations
269   on the socket as usual. There are also CAN specific socket options
270   described below.
271
272   The basic CAN frame structure and the sockaddr structure are defined
273   in include/linux/can.h:
274
275     struct can_frame {
276             canid_t can_id;  /* 32 bit CAN_ID + EFF/RTR/ERR flags */
277             __u8    can_dlc; /* data length code: 0 .. 8 */
278             __u8    data[8] __attribute__((aligned(8)));
279     };
280
281   The alignment of the (linear) payload data[] to a 64bit boundary
282   allows the user to define own structs and unions to easily access the
283   CAN payload. There is no given byteorder on the CAN bus by
284   default. A read(2) system call on a CAN_RAW socket transfers a
285   struct can_frame to the user space.
286
287   The sockaddr_can structure has an interface index like the
288   PF_PACKET socket, that also binds to a specific interface:
289
290     struct sockaddr_can {
291             sa_family_t can_family;
292             int         can_ifindex;
293             union {
294                     /* transport protocol class address info (e.g. ISOTP) */
295                     struct { canid_t rx_id, tx_id; } tp;
296
297                     /* reserved for future CAN protocols address information */
298             } can_addr;
299     };
300
301   To determine the interface index an appropriate ioctl() has to
302   be used (example for CAN_RAW sockets without error checking):
303
304     int s;
305     struct sockaddr_can addr;
306     struct ifreq ifr;
307
308     s = socket(PF_CAN, SOCK_RAW, CAN_RAW);
309
310     strcpy(ifr.ifr_name, "can0" );
311     ioctl(s, SIOCGIFINDEX, &ifr);
312
313     addr.can_family = AF_CAN;
314     addr.can_ifindex = ifr.ifr_ifindex;
315
316     bind(s, (struct sockaddr *)&addr, sizeof(addr));
317
318     (..)
319
320   To bind a socket to all(!) CAN interfaces the interface index must
321   be 0 (zero). In this case the socket receives CAN frames from every
322   enabled CAN interface. To determine the originating CAN interface
323   the system call recvfrom(2) may be used instead of read(2). To send
324   on a socket that is bound to 'any' interface sendto(2) is needed to
325   specify the outgoing interface.
326
327   Reading CAN frames from a bound CAN_RAW socket (see above) consists
328   of reading a struct can_frame:
329
330     struct can_frame frame;
331
332     nbytes = read(s, &frame, sizeof(struct can_frame));
333
334     if (nbytes < 0) {
335             perror("can raw socket read");
336             return 1;
337     }
338
339     /* paranoid check ... */
340     if (nbytes < sizeof(struct can_frame)) {
341             fprintf(stderr, "read: incomplete CAN frame\n");
342             return 1;
343     }
344
345     /* do something with the received CAN frame */
346
347   Writing CAN frames can be done similarly, with the write(2) system call:
348
349     nbytes = write(s, &frame, sizeof(struct can_frame));
350
351   When the CAN interface is bound to 'any' existing CAN interface
352   (addr.can_ifindex = 0) it is recommended to use recvfrom(2) if the
353   information about the originating CAN interface is needed:
354
355     struct sockaddr_can addr;
356     struct ifreq ifr;
357     socklen_t len = sizeof(addr);
358     struct can_frame frame;
359
360     nbytes = recvfrom(s, &frame, sizeof(struct can_frame),
361                       0, (struct sockaddr*)&addr, &len);
362
363     /* get interface name of the received CAN frame */
364     ifr.ifr_ifindex = addr.can_ifindex;
365     ioctl(s, SIOCGIFNAME, &ifr);
366     printf("Received a CAN frame from interface %s", ifr.ifr_name);
367
368   To write CAN frames on sockets bound to 'any' CAN interface the
369   outgoing interface has to be defined certainly.
370
371     strcpy(ifr.ifr_name, "can0");
372     ioctl(s, SIOCGIFINDEX, &ifr);
373     addr.can_ifindex = ifr.ifr_ifindex;
374     addr.can_family  = AF_CAN;
375
376     nbytes = sendto(s, &frame, sizeof(struct can_frame),
377                     0, (struct sockaddr*)&addr, sizeof(addr));
378
379   4.1 RAW protocol sockets with can_filters (SOCK_RAW)
380
381   Using CAN_RAW sockets is extensively comparable to the commonly
382   known access to CAN character devices. To meet the new possibilities
383   provided by the multi user SocketCAN approach, some reasonable
384   defaults are set at RAW socket binding time:
385
386   - The filters are set to exactly one filter receiving everything
387   - The socket only receives valid data frames (=> no error frames)
388   - The loopback of sent CAN frames is enabled (see chapter 3.2)
389   - The socket does not receive its own sent frames (in loopback mode)
390
391   These default settings may be changed before or after binding the socket.
392   To use the referenced definitions of the socket options for CAN_RAW
393   sockets, include <linux/can/raw.h>.
394
395   4.1.1 RAW socket option CAN_RAW_FILTER
396
397   The reception of CAN frames using CAN_RAW sockets can be controlled
398   by defining 0 .. n filters with the CAN_RAW_FILTER socket option.
399
400   The CAN filter structure is defined in include/linux/can.h:
401
402     struct can_filter {
403             canid_t can_id;
404             canid_t can_mask;
405     };
406
407   A filter matches, when
408
409     <received_can_id> & mask == can_id & mask
410
411   which is analogous to known CAN controllers hardware filter semantics.
412   The filter can be inverted in this semantic, when the CAN_INV_FILTER
413   bit is set in can_id element of the can_filter structure. In
414   contrast to CAN controller hardware filters the user may set 0 .. n
415   receive filters for each open socket separately:
416
417     struct can_filter rfilter[2];
418
419     rfilter[0].can_id   = 0x123;
420     rfilter[0].can_mask = CAN_SFF_MASK;
421     rfilter[1].can_id   = 0x200;
422     rfilter[1].can_mask = 0x700;
423
424     setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));
425
426   To disable the reception of CAN frames on the selected CAN_RAW socket:
427
428     setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, NULL, 0);
429
430   To set the filters to zero filters is quite obsolete as not read
431   data causes the raw socket to discard the received CAN frames. But
432   having this 'send only' use-case we may remove the receive list in the
433   Kernel to save a little (really a very little!) CPU usage.
434
435   4.1.2 RAW socket option CAN_RAW_ERR_FILTER
436
437   As described in chapter 3.4 the CAN interface driver can generate so
438   called Error Frames that can optionally be passed to the user
439   application in the same way as other CAN frames. The possible
440   errors are divided into different error classes that may be filtered
441   using the appropriate error mask. To register for every possible
442   error condition CAN_ERR_MASK can be used as value for the error mask.
443   The values for the error mask are defined in linux/can/error.h .
444
445     can_err_mask_t err_mask = ( CAN_ERR_TX_TIMEOUT | CAN_ERR_BUSOFF );
446
447     setsockopt(s, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,
448                &err_mask, sizeof(err_mask));
449
450   4.1.3 RAW socket option CAN_RAW_LOOPBACK
451
452   To meet multi user needs the local loopback is enabled by default
453   (see chapter 3.2 for details). But in some embedded use-cases
454   (e.g. when only one application uses the CAN bus) this loopback
455   functionality can be disabled (separately for each socket):
456
457     int loopback = 0; /* 0 = disabled, 1 = enabled (default) */
458
459     setsockopt(s, SOL_CAN_RAW, CAN_RAW_LOOPBACK, &loopback, sizeof(loopback));
460
461   4.1.4 RAW socket option CAN_RAW_RECV_OWN_MSGS
462
463   When the local loopback is enabled, all the sent CAN frames are
464   looped back to the open CAN sockets that registered for the CAN
465   frames' CAN-ID on this given interface to meet the multi user
466   needs. The reception of the CAN frames on the same socket that was
467   sending the CAN frame is assumed to be unwanted and therefore
468   disabled by default. This default behaviour may be changed on
469   demand:
470
471     int recv_own_msgs = 1; /* 0 = disabled (default), 1 = enabled */
472
473     setsockopt(s, SOL_CAN_RAW, CAN_RAW_RECV_OWN_MSGS,
474                &recv_own_msgs, sizeof(recv_own_msgs));
475
476   4.1.5 RAW socket returned message flags
477
478   When using recvmsg() call, the msg->msg_flags may contain following flags:
479
480     MSG_DONTROUTE: set when the received frame was created on the local host.
481
482     MSG_CONFIRM: set when the frame was sent via the socket it is received on.
483       This flag can be interpreted as a 'transmission confirmation' when the
484       CAN driver supports the echo of frames on driver level, see 3.2 and 6.2.
485       In order to receive such messages, CAN_RAW_RECV_OWN_MSGS must be set.
486
487   4.2 Broadcast Manager protocol sockets (SOCK_DGRAM)
488   4.3 connected transport protocols (SOCK_SEQPACKET)
489   4.4 unconnected transport protocols (SOCK_DGRAM)
490
491   4.5 Timestamps
492   
493   For applications in the CAN environment it is often of interest an
494   accurate timestamp of the instant a message from CAN bus has been received.
495   Such a timestamp can be read with ioctl(2) after reading a message from
496   the socket. Example:
497
498     struct timeval tv;
499     ioctl(s, SIOCGSTAMP, &tv);
500
501   The timestamp on Linux has a resolution of one microsecond and it is set
502   automatically at the reception of a CAN frame.
503
504   Alternatively the timestamp can be obtained as a control message (cmsg) using
505   the recvmsg() system call. After enabling the timestamps in the cmsg's by
506
507     const int timestamp = 1;
508     setsockopt(s, SOL_SOCKET, SO_TIMESTAMP, &timestamp, sizeof(timestamp));  
509
510   the data structures filled by recvmsg() need to be parsed for
511   cmsg->cmsg_type == SO_TIMESTAMP to get the timestamp. See cmsg() manpage.
512
513 5. Socket CAN core module
514 -------------------------
515
516   The Socket CAN core module implements the protocol family
517   PF_CAN. CAN protocol modules are loaded by the core module at
518   runtime. The core module provides an interface for CAN protocol
519   modules to subscribe needed CAN IDs (see chapter 3.1).
520
521   5.1 can.ko module params
522
523   - stats_timer: To calculate the Socket CAN core statistics
524     (e.g. current/maximum frames per second) this 1 second timer is
525     invoked at can.ko module start time by default. This timer can be
526     disabled by using stattimer=0 on the module commandline.
527
528   - debug: (removed since SocketCAN SVN r546)
529
530   5.2 procfs content
531
532   As described in chapter 3.1 the Socket CAN core uses several filter
533   lists to deliver received CAN frames to CAN protocol modules. These
534   receive lists, their filters and the count of filter matches can be
535   checked in the appropriate receive list. All entries contain the
536   device and a protocol module identifier:
537
538     foo@bar:~$ cat /proc/net/can/rcvlist_all
539
540     receive list 'rx_all':
541       (vcan3: no entry)
542       (vcan2: no entry)
543       (vcan1: no entry)
544       device   can_id   can_mask  function  userdata   matches  ident
545        vcan0     000    00000000  f88e6370  f6c6f400         0  raw
546       (any: no entry)
547
548   In this example an application requests any CAN traffic from vcan0.
549
550     rcvlist_all - list for unfiltered entries (no filter operations)
551     rcvlist_eff - list for single extended frame (EFF) entries
552     rcvlist_err - list for error frames masks
553     rcvlist_fil - list for mask/value filters
554     rcvlist_inv - list for mask/value filters (inverse semantic)
555     rcvlist_sff - list for single standard frame (SFF) entries
556
557   Additional procfs files in /proc/net/can
558
559     stats       - Socket CAN core statistics (rx/tx frames, match ratios, ...)
560     reset_stats - manual statistic reset
561     version     - prints the Socket CAN core version and the ABI version
562
563   5.3 writing own CAN protocol modules
564
565   To implement a new protocol in the protocol family PF_CAN a new
566   protocol has to be defined in include/linux/can.h .
567   The prototypes and definitions to use the Socket CAN core can be
568   accessed by including include/linux/can/core.h .
569   In addition to functions that register the CAN protocol and the
570   CAN device notifier chain there are functions to subscribe CAN
571   frames received by CAN interfaces and to send CAN frames:
572
573     can_rx_register   - subscribe CAN frames from a specific interface
574     can_rx_unregister - unsubscribe CAN frames from a specific interface
575     can_send          - transmit a CAN frame (optional with local loopback)
576
577   For details see the kerneldoc documentation in net/can/af_can.c or
578   the source code of net/can/raw.c or net/can/bcm.c .
579
580 6. CAN network drivers
581 ----------------------
582
583   Writing a CAN network device driver is much easier than writing a
584   CAN character device driver. Similar to other known network device
585   drivers you mainly have to deal with:
586
587   - TX: Put the CAN frame from the socket buffer to the CAN controller.
588   - RX: Put the CAN frame from the CAN controller to the socket buffer.
589
590   See e.g. at Documentation/networking/netdevices.txt . The differences
591   for writing CAN network device driver are described below:
592
593   6.1 general settings
594
595     dev->type  = ARPHRD_CAN; /* the netdevice hardware type */
596     dev->flags = IFF_NOARP;  /* CAN has no arp */
597
598     dev->mtu   = sizeof(struct can_frame);
599
600   The struct can_frame is the payload of each socket buffer in the
601   protocol family PF_CAN.
602
603   6.2 local loopback of sent frames
604
605   As described in chapter 3.2 the CAN network device driver should
606   support a local loopback functionality similar to the local echo
607   e.g. of tty devices. In this case the driver flag IFF_ECHO has to be
608   set to prevent the PF_CAN core from locally echoing sent frames
609   (aka loopback) as fallback solution:
610
611     dev->flags = (IFF_NOARP | IFF_ECHO);
612
613   6.3 CAN controller hardware filters
614
615   To reduce the interrupt load on deep embedded systems some CAN
616   controllers support the filtering of CAN IDs or ranges of CAN IDs.
617   These hardware filter capabilities vary from controller to
618   controller and have to be identified as not feasible in a multi-user
619   networking approach. The use of the very controller specific
620   hardware filters could make sense in a very dedicated use-case, as a
621   filter on driver level would affect all users in the multi-user
622   system. The high efficient filter sets inside the PF_CAN core allow
623   to set different multiple filters for each socket separately.
624   Therefore the use of hardware filters goes to the category 'handmade
625   tuning on deep embedded systems'. The author is running a MPC603e
626   @133MHz with four SJA1000 CAN controllers from 2002 under heavy bus
627   load without any problems ...
628
629   6.4 The virtual CAN driver (vcan)
630
631   Similar to the network loopback devices, vcan offers a virtual local
632   CAN interface. A full qualified address on CAN consists of
633
634   - a unique CAN Identifier (CAN ID)
635   - the CAN bus this CAN ID is transmitted on (e.g. can0)
636
637   so in common use cases more than one virtual CAN interface is needed.
638
639   The virtual CAN interfaces allow the transmission and reception of CAN
640   frames without real CAN controller hardware. Virtual CAN network
641   devices are usually named 'vcanX', like vcan0 vcan1 vcan2 ...
642   When compiled as a module the virtual CAN driver module is called vcan.ko
643
644   Since Linux Kernel version 2.6.24 the vcan driver supports the Kernel
645   netlink interface to create vcan network devices. The creation and
646   removal of vcan network devices can be managed with the ip(8) tool:
647
648   - Create a virtual CAN network interface:
649        $ ip link add type vcan
650
651   - Create a virtual CAN network interface with a specific name 'vcan42':
652        $ ip link add dev vcan42 type vcan
653
654   - Remove a (virtual CAN) network interface 'vcan42':
655        $ ip link del vcan42
656
657   6.5 The CAN network device driver interface
658
659   The CAN network device driver interface provides a generic interface
660   to setup, configure and monitor CAN network devices. The user can then
661   configure the CAN device, like setting the bit-timing parameters, via
662   the netlink interface using the program "ip" from the "IPROUTE2"
663   utility suite. The following chapter describes briefly how to use it.
664   Furthermore, the interface uses a common data structure and exports a
665   set of common functions, which all real CAN network device drivers
666   should use. Please have a look to the SJA1000 or MSCAN driver to
667   understand how to use them. The name of the module is can-dev.ko.
668
669   6.5.1 Netlink interface to set/get devices properties
670
671   The CAN device must be configured via netlink interface. The supported
672   netlink message types are defined and briefly described in
673   "include/linux/can/netlink.h". CAN link support for the program "ip"
674   of the IPROUTE2 utility suite is avaiable and it can be used as shown
675   below:
676
677   - Setting CAN device properties:
678
679     $ ip link set can0 type can help
680     Usage: ip link set DEVICE type can
681         [ bitrate BITRATE [ sample-point SAMPLE-POINT] ] |
682         [ tq TQ prop-seg PROP_SEG phase-seg1 PHASE-SEG1
683           phase-seg2 PHASE-SEG2 [ sjw SJW ] ]
684
685         [ loopback { on | off } ]
686         [ listen-only { on | off } ]
687         [ triple-sampling { on | off } ]
688
689         [ restart-ms TIME-MS ]
690         [ restart ]
691
692         Where: BITRATE       := { 1..1000000 }
693                SAMPLE-POINT  := { 0.000..0.999 }
694                TQ            := { NUMBER }
695                PROP-SEG      := { 1..8 }
696                PHASE-SEG1    := { 1..8 }
697                PHASE-SEG2    := { 1..8 }
698                SJW           := { 1..4 }
699                RESTART-MS    := { 0 | NUMBER }
700
701   - Display CAN device details and statistics:
702
703     $ ip -details -statistics link show can0
704     2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP qlen 10
705       link/can
706       can <TRIPLE-SAMPLING> state ERROR-ACTIVE restart-ms 100
707       bitrate 125000 sample_point 0.875
708       tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
709       sja1000: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
710       clock 8000000
711       re-started bus-errors arbit-lost error-warn error-pass bus-off
712       41         17457      0          41         42         41
713       RX: bytes  packets  errors  dropped overrun mcast
714       140859     17608    17457   0       0       0
715       TX: bytes  packets  errors  dropped carrier collsns
716       861        112      0       41      0       0
717
718   More info to the above output:
719
720     "<TRIPLE-SAMPLING>"
721         Shows the list of selected CAN controller modes: LOOPBACK,
722         LISTEN-ONLY, or TRIPLE-SAMPLING.
723
724     "state ERROR-ACTIVE"
725         The current state of the CAN controller: "ERROR-ACTIVE",
726         "ERROR-WARNING", "ERROR-PASSIVE", "BUS-OFF" or "STOPPED"
727
728     "restart-ms 100"
729         Automatic restart delay time. If set to a non-zero value, a
730         restart of the CAN controller will be triggered automatically
731         in case of a bus-off condition after the specified delay time
732         in milliseconds. By default it's off.
733
734     "bitrate 125000 sample_point 0.875"
735         Shows the real bit-rate in bits/sec and the sample-point in the
736         range 0.000..0.999. If the calculation of bit-timing parameters
737         is enabled in the kernel (CONFIG_CAN_CALC_BITTIMING=y), the
738         bit-timing can be defined by setting the "bitrate" argument.
739         Optionally the "sample-point" can be specified. By default it's
740         0.000 assuming CIA-recommended sample-points.
741
742     "tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1"
743         Shows the time quanta in ns, propagation segment, phase buffer
744         segment 1 and 2 and the synchronisation jump width in units of
745         tq. They allow to define the CAN bit-timing in a hardware
746         independent format as proposed by the Bosch CAN 2.0 spec (see
747         chapter 8 of http://www.semiconductors.bosch.de/pdf/can2spec.pdf).
748
749     "sja1000: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
750      clock 8000000"
751         Shows the bit-timing constants of the CAN controller, here the
752         "sja1000". The minimum and maximum values of the time segment 1
753         and 2, the synchronisation jump width in units of tq, the
754         bitrate pre-scaler and the CAN system clock frequency in Hz.
755         These constants could be used for user-defined (non-standard)
756         bit-timing calculation algorithms in user-space.
757
758     "re-started bus-errors arbit-lost error-warn error-pass bus-off"
759         Shows the number of restarts, bus and arbitration lost errors,
760         and the state changes to the error-warning, error-passive and
761         bus-off state. RX overrun errors are listed in the "overrun"
762         field of the standard network statistics.
763
764   6.5.2 Setting the CAN bit-timing
765
766   The CAN bit-timing parameters can always be defined in a hardware
767   independent format as proposed in the Bosch CAN 2.0 specification
768   specifying the arguments "tq", "prop_seg", "phase_seg1", "phase_seg2"
769   and "sjw":
770
771     $ ip link set canX type can tq 125 prop-seg 6 \
772                                 phase-seg1 7 phase-seg2 2 sjw 1
773
774   If the kernel option CONFIG_CAN_CALC_BITTIMING is enabled, CIA
775   recommended CAN bit-timing parameters will be calculated if the bit-
776   rate is specified with the argument "bitrate":
777
778     $ ip link set canX type can bitrate 125000
779
780   Note that this works fine for the most common CAN controllers with
781   standard bit-rates but may *fail* for exotic bit-rates or CAN system
782   clock frequencies. Disabling CONFIG_CAN_CALC_BITTIMING saves some
783   space and allows user-space tools to solely determine and set the
784   bit-timing parameters. The CAN controller specific bit-timing
785   constants can be used for that purpose. They are listed by the
786   following command:
787
788     $ ip -details link show can0
789     ...
790       sja1000: clock 8000000 tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
791
792   6.5.3 Starting and stopping the CAN network device
793
794   A CAN network device is started or stopped as usual with the command
795   "ifconfig canX up/down" or "ip link set canX up/down". Be aware that
796   you *must* define proper bit-timing parameters for real CAN devices
797   before you can start it to avoid error-prone default settings:
798
799     $ ip link set canX up type can bitrate 125000
800
801   A device may enter the "bus-off" state if too much errors occurred on
802   the CAN bus. Then no more messages are received or sent. An automatic
803   bus-off recovery can be enabled by setting the "restart-ms" to a
804   non-zero value, e.g.:
805
806     $ ip link set canX type can restart-ms 100
807
808   Alternatively, the application may realize the "bus-off" condition
809   by monitoring CAN error frames and do a restart when appropriate with
810   the command:
811
812     $ ip link set canX type can restart
813
814   Note that a restart will also create a CAN error frame (see also
815   chapter 3.4).
816
817   6.6 Supported CAN hardware
818
819   Please check the "Kconfig" file in "drivers/net/can" to get an actual
820   list of the support CAN hardware. On the Socket CAN project website
821   (see chapter 7) there might be further drivers available, also for
822   older kernel versions.
823
824 7. Socket CAN resources
825 -----------------------
826
827   You can find further resources for Socket CAN like user space tools,
828   support for old kernel versions, more drivers, mailing lists, etc.
829   at the BerliOS OSS project website for Socket CAN:
830
831     http://developer.berlios.de/projects/socketcan
832
833   If you have questions, bug fixes, etc., don't hesitate to post them to
834   the Socketcan-Users mailing list. But please search the archives first.
835
836 8. Credits
837 ----------
838
839   Oliver Hartkopp (PF_CAN core, filters, drivers, bcm, SJA1000 driver)
840   Urs Thuermann (PF_CAN core, kernel integration, socket interfaces, raw, vcan)
841   Jan Kizka (RT-SocketCAN core, Socket-API reconciliation)
842   Wolfgang Grandegger (RT-SocketCAN core & drivers, Raw Socket-API reviews,
843                        CAN device driver interface, MSCAN driver)
844   Robert Schwebel (design reviews, PTXdist integration)
845   Marc Kleine-Budde (design reviews, Kernel 2.6 cleanups, drivers)
846   Benedikt Spranger (reviews)
847   Thomas Gleixner (LKML reviews, coding style, posting hints)
848   Andrey Volkov (kernel subtree structure, ioctls, MSCAN driver)
849   Matthias Brukner (first SJA1000 CAN netdevice implementation Q2/2003)
850   Klaus Hitschler (PEAK driver integration)
851   Uwe Koppe (CAN netdevices with PF_PACKET approach)
852   Michael Schulze (driver layer loopback requirement, RT CAN drivers review)
853   Pavel Pisa (Bit-timing calculation)
854   Sascha Hauer (SJA1000 platform driver)
855   Sebastian Haas (SJA1000 EMS PCI driver)
856   Markus Plessing (SJA1000 EMS PCI driver)
857   Per Dalen (SJA1000 Kvaser PCI driver)
858   Sam Ravnborg (reviews, coding style, kbuild help)