From: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
To: Urs Thuermann <urs@isnogud.escape.de>
Cc: netdev@vger.kernel.org, David Miller <davem@davemloft.net>,
Patrick McHardy <kaber@trash.net>,
Thomas Gleixner <tglx@linutronix.de>,
YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Oliver Hartkopp <oliver@hartkopp.net>,
Oliver Hartkopp <oliver.hartkopp@volkswagen.de>,
Urs Thuermann <urs.thuermann@volkswagen.de>
Subject: Re: [PATCH 2/7] CAN: Add PF_CAN core module
Date: Tue, 2 Oct 2007 11:38:55 -0300 [thread overview]
Message-ID: <20071002143855.GG7881@ghostprotocols.net> (raw)
In-Reply-To: <20071002131108.31727.2@janus.isnogud.escape.de>
Em Tue, Oct 02, 2007 at 03:10:08PM +0200, Urs Thuermann escreveu:
> This patch adds the CAN core functionality but no protocols or drivers.
> No protocol implementations are included here. They come as separate
> patches. Protocol numbers are already in include/linux/can.h.
>
> Signed-off-by: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
> Signed-off-by: Urs Thuermann <urs.thuermann@volkswagen.de>
>
> ---
> include/linux/can.h | 111 +++++
> include/linux/can/core.h | 77 +++
> include/linux/can/error.h | 93 ++++
> net/Kconfig | 1
> net/Makefile | 1
> net/can/Kconfig | 25 +
> net/can/Makefile | 6
> net/can/af_can.c | 970 ++++++++++++++++++++++++++++++++++++++++++++++
> net/can/af_can.h | 120 +++++
> net/can/proc.c | 532 +++++++++++++++++++++++++
> 10 files changed, 1936 insertions(+)
>
> Index: net-2.6.24/include/linux/can.h
> ===================================================================
> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
> +++ net-2.6.24/include/linux/can.h 2007-10-02 12:10:18.000000000 +0200
> @@ -0,0 +1,111 @@
> +/*
> + * 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.
> + *
> + * Send feedback to <socketcan-users@lists.berlios.de>
> + *
> + */
> +
> +#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 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 frame flag (0 = data frame, 1 = error frame)
> + * 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;
> +
> +/*
> + * Controller Area Network Error 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;
> +
> +/**
> + * struct can_frame - basic CAN frame structure
> + * @can_id: the CAN ID of the frame and CAN_*_FLAG flags, see above.
> + * @can_dlc: the data length field of the CAN frame
> + * @data: the CAN frame payload.
> + */
> +struct can_frame {
> + canid_t can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */
> + __u8 can_dlc; /* data length code: 0 .. 8 */
> + __u8 data[8] __attribute__((aligned(8)));
> +};
> +
> +/* 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: transport protocol specific address, mostly CAN IDs.
> + */
> +struct sockaddr_can {
> + sa_family_t can_family;
> + int can_ifindex;
> + union {
> + struct { canid_t rx_id, tx_id; } tp16;
> + struct { canid_t rx_id, tx_id; } tp20;
> + struct { canid_t rx_id, tx_id; } mcnet;
> + struct { canid_t rx_id, tx_id; } isotp;
> + } can_addr;
Again being curious, what is the value of this union of all its members
have the same definition? Backward source code compatibility?
> +};
> +
> +/**
> + * 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 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 */
> Index: net-2.6.24/include/linux/can/core.h
> ===================================================================
> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
> +++ net-2.6.24/include/linux/can/core.h 2007-10-02 12:10:18.000000000 +0200
> @@ -0,0 +1,77 @@
> +/*
> + * linux/can/core.h
> + *
> + * Protoypes and definitions for CAN protocol modules using the PF_CAN core
> + *
> + * Authors: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
> + * Urs Thuermann <urs.thuermann@volkswagen.de>
> + * Copyright (c) 2002-2007 Volkswagen Group Electronic Research
> + * All rights reserved.
> + *
> + * Send feedback to <socketcan-users@lists.berlios.de>
> + *
> + */
> +
> +#ifndef CAN_CORE_H
> +#define CAN_CORE_H
> +
> +#include <linux/can.h>
> +#include <linux/skbuff.h>
> +#include <linux/netdevice.h>
> +
> +#define CAN_VERSION "20071001"
> +
> +/* increment this number each time you change some user-space interface */
> +#define CAN_ABI_VERSION "8"
> +
> +#define CAN_VERSION_STRING "rev " CAN_VERSION " abi " CAN_ABI_VERSION
> +
> +#define DNAME(dev) ((dev) ? (dev)->name : "any")
> +
> +/**
> + * struct can_proto - CAN protocol structure
> + * @type: type argument in socket() syscall, e.g. SOCK_DGRAM.
> + * @protocol: protocol number in socket() syscall.
> + * @capability: capability needed to open the socket, or -1 for no restriction.
> + * @ops: pointer to struct proto_ops for sock->ops.
> + * @prot: pointer to struct proto structure.
> + */
> +struct can_proto {
> + int type;
> + int protocol;
> + int capability;
> + struct proto_ops *ops;
> + struct proto *prot;
> +};
> +
> +/* function prototypes for the CAN networklayer core (af_can.c) */
> +
> +extern int can_proto_register(struct can_proto *cp);
> +extern void can_proto_unregister(struct can_proto *cp);
We have proto registering infrastructure for bluetooth, inet and now
CAN, have you looked at:
struct inet_protosw;
proto_{register,unregister}, etc?
You have been thru many iterations already, sigh, I should have looked
at this before :-\
- Arnaldo
next prev parent reply other threads:[~2007-10-02 14:39 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-02 13:10 [PATCH 0/7] CAN: Add new PF_CAN protocol family, try #9 Urs Thuermann
2007-10-02 13:10 ` [PATCH 1/7] CAN: Allocate protocol numbers for PF_CAN Urs Thuermann
2007-10-02 14:11 ` Arnaldo Carvalho de Melo
2007-10-02 14:27 ` Urs Thuermann
2007-10-02 14:43 ` Arnaldo Carvalho de Melo
2007-10-02 14:42 ` Oliver Hartkopp
2007-10-02 14:51 ` Arnaldo Carvalho de Melo
2007-10-02 13:10 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-10-02 14:38 ` Arnaldo Carvalho de Melo [this message]
2007-10-02 16:09 ` Oliver Hartkopp
2007-10-04 11:51 ` Urs Thuermann
2007-10-04 13:40 ` Arnaldo Carvalho de Melo
2007-10-02 13:10 ` [PATCH 3/7] CAN: Add raw protocol Urs Thuermann
2007-10-02 14:30 ` Arnaldo Carvalho de Melo
2007-10-02 14:53 ` Oliver Hartkopp
2007-10-04 11:52 ` Urs Thuermann
2007-10-02 13:10 ` [PATCH 4/7] CAN: Add broadcast manager (bcm) protocol Urs Thuermann
2007-10-02 13:10 ` [PATCH 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-10-02 14:20 ` Arnaldo Carvalho de Melo
2007-10-02 15:07 ` Oliver Hartkopp
2007-10-02 16:46 ` Arnaldo Carvalho de Melo
2007-10-02 21:02 ` Oliver Hartkopp
2007-10-02 21:43 ` Arnaldo Carvalho de Melo
2007-10-02 21:50 ` David Miller
2007-10-03 7:06 ` Oliver Hartkopp
2007-10-02 21:52 ` Stephen Hemminger
2007-10-02 22:04 ` David Miller
2007-10-03 17:47 ` Oliver Hartkopp
2007-10-04 11:52 ` Urs Thuermann
2007-10-02 13:10 ` [PATCH 6/7] CAN: Add maintainer entries Urs Thuermann
2007-10-02 13:10 ` [PATCH 7/7] CAN: Add documentation Urs Thuermann
-- strict thread matches above, loose matches on Subject: below --
2007-11-16 15:02 [PATCH 0/7] CAN: New PF_CAN protocol family for 2.6.25, update Urs Thuermann
2007-11-16 15:02 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-11-14 12:13 [PATCH 0/7] CAN: New PF_CAN protocol family for 2.6.25 Urs Thuermann
2007-11-14 12:13 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-11-14 21:38 ` Stephen Hemminger
2007-11-15 7:40 ` Oliver Hartkopp
2007-11-15 8:04 ` Joe Perches
2007-11-15 11:51 ` Urs Thuermann
2007-11-15 12:05 ` David Miller
2007-11-15 15:11 ` Sam Ravnborg
2007-11-16 14:33 ` Urs Thuermann
2007-11-16 23:42 ` David Miller
2007-11-15 11:36 ` Urs Thuermann
2007-11-15 15:09 ` Sam Ravnborg
2007-10-05 10:49 [PATCH 0/7] CAN: Add new PF_CAN protocol family, try #10 Urs Thuermann
2007-10-05 10:49 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-09-25 12:20 [PATCH 0/7] CAN: Add new PF_CAN protocol family, try #8 Urs Thuermann
2007-09-25 12:20 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-09-25 12:41 ` Arnaldo Carvalho de Melo
2007-09-25 13:24 ` Urs Thuermann
2007-09-25 15:33 ` Stephen Hemminger
2007-09-25 21:00 ` Urs Thuermann
2007-09-25 21:07 ` Stephen Hemminger
2007-09-25 21:09 ` David Miller
2007-09-28 16:27 ` Thomas Gleixner
2007-09-28 20:20 ` David Miller
2007-09-28 20:28 ` Thomas Gleixner
2007-09-20 18:43 [PATCH 0/7] CAN: Add new PF_CAN protocol family, try #7 Urs Thuermann
2007-09-20 18:43 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-09-20 20:06 ` Joe Perches
2007-09-20 20:27 ` Thomas Gleixner
2007-09-21 10:35 ` Urs Thuermann
2007-09-21 16:58 ` Joe Perches
2007-09-24 19:23 ` Urs Thuermann
2007-09-21 12:47 ` Patrick McHardy
2007-09-21 18:01 ` Urs Thuermann
2007-09-22 10:53 ` Patrick McHardy
2007-09-17 10:03 [PATCH 0/7] CAN: Add new PF_CAN protocol family, try #6 Urs Thuermann
2007-09-17 10:03 ` [PATCH 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-09-17 15:50 ` Paul E. McKenney
2007-09-18 13:31 ` Patrick McHardy
2007-09-18 14:54 ` Urs Thuermann
2007-09-18 15:07 ` Patrick McHardy
2007-09-18 21:20 ` Urs Thuermann
2007-09-19 8:27 ` Patrick McHardy
2007-09-20 8:53 ` Urs Thuermann
2007-09-20 10:33 ` Patrick McHardy
2007-09-20 11:30 ` Urs Thuermann
2007-09-20 11:43 ` Patrick McHardy
2007-08-04 2:06 [patch 0/7] CAN: Add new PF_CAN protocol family, try #5 Urs Thuermann
2007-08-04 2:06 ` [patch 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-06-22 3:44 [patch 0/7] CAN: Add new PF_CAN protocol family, try #3 Urs Thuermann
2007-06-22 3:44 ` [patch 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-05-30 13:11 [patch 0/7] CAN: Add new PF_CAN protocol family, update Urs Thuermann
2007-05-30 13:11 ` [patch 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-05-16 14:51 [patch 0/7] CAN: Add new PF_CAN protocol family Urs Thuermann
2007-05-16 14:51 ` [patch 2/7] CAN: Add PF_CAN core module Urs Thuermann
2007-05-16 16:35 ` Arnaldo Carvalho de Melo
2007-05-16 19:14 ` Urs Thuermann
2007-05-16 20:51 ` Arnaldo Carvalho de Melo
2007-05-18 0:59 ` Paul E. McKenney
2007-05-18 9:19 ` Oliver Hartkopp
2007-05-18 14:33 ` Paul E. McKenney
2007-05-18 15:03 ` Oliver Hartkopp
2007-05-18 21:06 ` Oliver Hartkopp
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071002143855.GG7881@ghostprotocols.net \
--to=acme@ghostprotocols.net \
--cc=davem@davemloft.net \
--cc=ebiederm@xmission.com \
--cc=kaber@trash.net \
--cc=netdev@vger.kernel.org \
--cc=oliver.hartkopp@volkswagen.de \
--cc=oliver@hartkopp.net \
--cc=tglx@linutronix.de \
--cc=urs.thuermann@volkswagen.de \
--cc=urs@isnogud.escape.de \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).