netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).