Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iproute2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
iproute2
Commits
13eea5a6
Commit
13eea5a6
authored
Aug 01, 2012
by
Rostislav Lisovy
Committed by
Stephen Hemminger
Aug 01, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add can.h
parent
73579339
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
161 additions
and
0 deletions
+161
-0
include/linux/can.h
include/linux/can.h
+161
-0
No files found.
include/linux/can.h
0 → 100644
View file @
13eea5a6
/*
* linux/can.h
*
* Definitions for CAN network layer (socket addr / CAN frame / CAN filter)
*
* Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
* Urs Thuermann <urs.thuermann@volkswagen.de>
* Copyright (c) 2002-2007 Volkswagen Group Electronic Research
* All rights reserved.
*
*/
#ifndef CAN_H
#define CAN_H
#include <linux/types.h>
#include <linux/socket.h>
/* controller area network (CAN) kernel definitions */
/* special address description flags for the CAN_ID */
#define CAN_EFF_FLAG 0x80000000U
/* EFF/SFF is set in the MSB */
#define CAN_RTR_FLAG 0x40000000U
/* remote transmission request */
#define CAN_ERR_FLAG 0x20000000U
/* error message frame */
/* valid bits in CAN ID for frame formats */
#define CAN_SFF_MASK 0x000007FFU
/* standard frame format (SFF) */
#define CAN_EFF_MASK 0x1FFFFFFFU
/* extended frame format (EFF) */
#define CAN_ERR_MASK 0x1FFFFFFFU
/* omit EFF, RTR, ERR flags */
/*
* Controller Area Network Identifier structure
*
* bit 0-28 : CAN identifier (11/29 bit)
* bit 29 : error message frame flag (0 = data frame, 1 = error message)
* bit 30 : remote transmission request flag (1 = rtr frame)
* bit 31 : frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
*/
typedef
__u32
canid_t
;
#define CAN_SFF_ID_BITS 11
#define CAN_EFF_ID_BITS 29
/*
* Controller Area Network Error Message Frame Mask structure
*
* bit 0-28 : error class mask (see include/linux/can/error.h)
* bit 29-31 : set to zero
*/
typedef
__u32
can_err_mask_t
;
/* CAN payload length and DLC definitions according to ISO 11898-1 */
#define CAN_MAX_DLC 8
#define CAN_MAX_DLEN 8
/* CAN FD payload length and DLC definitions according to ISO 11898-7 */
#define CANFD_MAX_DLC 15
#define CANFD_MAX_DLEN 64
/**
* struct can_frame - basic CAN frame structure
* @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
* @can_dlc: frame payload length in byte (0 .. 8) aka data length code
* N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
* mapping of the 'data length code' to the real payload length
* @data: CAN frame payload (up to 8 byte)
*/
struct
can_frame
{
canid_t
can_id
;
/* 32 bit CAN_ID + EFF/RTR/ERR flags */
__u8
can_dlc
;
/* frame payload length in byte (0 .. CAN_MAX_DLEN) */
__u8
data
[
CAN_MAX_DLEN
]
__attribute__
((
aligned
(
8
)));
};
/*
* defined bits for canfd_frame.flags
*
* As the default for CAN FD should be to support the high data rate in the
* payload section of the frame (HDR) and to support up to 64 byte in the
* data section (EDL) the bits are only set in the non-default case.
* Btw. as long as there's no real implementation for CAN FD network driver
* these bits are only preliminary.
*
* RX: NOHDR/NOEDL - info about received CAN FD frame
* ESI - bit from originating CAN controller
* TX: NOHDR/NOEDL - control per-frame settings if supported by CAN controller
* ESI - bit is set by local CAN controller
*/
#define CANFD_NOHDR 0x01
/* frame without high data rate */
#define CANFD_NOEDL 0x02
/* frame without extended data length */
#define CANFD_ESI 0x04
/* error state indicator */
/**
* struct canfd_frame - CAN flexible data rate frame structure
* @can_id: CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
* @len: frame payload length in byte (0 .. CANFD_MAX_DLEN)
* @flags: additional flags for CAN FD
* @__res0: reserved / padding
* @__res1: reserved / padding
* @data: CAN FD frame payload (up to CANFD_MAX_DLEN byte)
*/
struct
canfd_frame
{
canid_t
can_id
;
/* 32 bit CAN_ID + EFF/RTR/ERR flags */
__u8
len
;
/* frame payload length in byte */
__u8
flags
;
/* additional flags for CAN FD */
__u8
__res0
;
/* reserved / padding */
__u8
__res1
;
/* reserved / padding */
__u8
data
[
CANFD_MAX_DLEN
]
__attribute__
((
aligned
(
8
)));
};
#define CAN_MTU (sizeof(struct can_frame))
#define CANFD_MTU (sizeof(struct canfd_frame))
/* particular protocols of the protocol family PF_CAN */
#define CAN_RAW 1
/* RAW sockets */
#define CAN_BCM 2
/* Broadcast Manager */
#define CAN_TP16 3
/* VAG Transport Protocol v1.6 */
#define CAN_TP20 4
/* VAG Transport Protocol v2.0 */
#define CAN_MCNET 5
/* Bosch MCNet */
#define CAN_ISOTP 6
/* ISO 15765-2 Transport Protocol */
#define CAN_NPROTO 7
#define SOL_CAN_BASE 100
/**
* struct sockaddr_can - the sockaddr structure for CAN sockets
* @can_family: address family number AF_CAN.
* @can_ifindex: CAN network interface index.
* @can_addr: protocol specific address information
*/
struct
sockaddr_can
{
__kernel_sa_family_t
can_family
;
int
can_ifindex
;
union
{
/* transport protocol class address information (e.g. ISOTP) */
struct
{
canid_t
rx_id
,
tx_id
;
}
tp
;
/* reserved for future CAN protocols address information */
}
can_addr
;
};
/**
* struct can_filter - CAN ID based filter in can_register().
* @can_id: relevant bits of CAN ID which are not masked out.
* @can_mask: CAN mask (see description)
*
* Description:
* A filter matches, when
*
* <received_can_id> & mask == can_id & mask
*
* The filter can be inverted (CAN_INV_FILTER bit set in can_id) or it can
* filter for error message frames (CAN_ERR_FLAG bit set in mask).
*/
struct
can_filter
{
canid_t
can_id
;
canid_t
can_mask
;
};
#define CAN_INV_FILTER 0x20000000U
/* to be set in can_filter.can_id */
#endif
/* CAN_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment