linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
To: Alexander Stein <alexander.stein@systec-electronic.com>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>, linux-can@vger.kernel.org
Subject: Re: exclusive access to can interface
Date: Tue, 08 Jan 2013 11:09:28 +0100	[thread overview]
Message-ID: <50EBF058.5050400@volkswagen.de> (raw)
In-Reply-To: <1943558.lxo8ZHFGuj@ws-stein>

Am 08.01.2013 10:48, schrieb Alexander Stein:
> Hello,
>
> On Tuesday 08 January 2013 10:32:25, Marc Kleine-Budde wrote:
>> On 01/08/2013 10:23 AM, Alexander Stein wrote:
>>> Hello Marc,
>>>
>>> On Monday 07 January 2013 19:16:20, Marc Kleine-Budde wrote:
>>>> On 01/07/2013 05:52 PM, Alexander Stein wrote:
>>>>> is there a way to get exclusive (write) access to a CAN interface, so
>>>>> that only one bound socket can write CAN frames on the bus?
>>>>
>>>> No, what's the use case?
>>>
>>> This was a customers request in order to prevent multiple applications (or
>>> instances) to send CAN frames on a specific CAN interface at the same time
>>> with the very same CAN-IDs. Concurrent reads shall still be allowed!
>>
>> Sending CAN frames is proper serialized by the networking subsystem :)
>> If back to back CAN frames are a problem it seems the design of the
>> application is fishy.
>
> I don't think serializaton or back to back frames are the problem. Think of CANopen there would be the same Node-ID twice on the bus.
>

This should be solved by the system setup.

E.g. if you start two applications using/providing identical resources at the 
same time, you'll always get into trouble.

If you start two inetd daemons, the second one would fail as he would like to 
bind the same IP ports. But this kind of mechanic is not available with CAN 
sockets.

I would tend to make sure that the Node-ID is always unique in your system.
What would happen, if you start a Node-ID on your host that already exists on 
the CAN networks attached to the system? You have to deal with that too:
E.g. terminate myself with some error logging if i see my own Node-ID

Even if i don't think you should go that way, you can use the can-gw routings 
and let the applications work on different (virtual) CAN interfaces.

One CAN interface, that can write to the real CAN and one that only reads from 
the real CAN:

ip link add dev can0_rw type vcan
ip link add dev can0_ro type vcan

cangw -A -s can0 -d can0_rw -e
cangw -A -s can0_rw -d can0 -e
cangw -A -s can0 -d can0_ro -e

Then let the sending app run on can0_rw and the others on can0_ro.

You might also add CAN filters to these routing rules.

Regards,
Oliver


  reply	other threads:[~2013-01-08 10:09 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-07 16:52 exclusive access to can interface Alexander Stein
2013-01-07 18:16 ` Marc Kleine-Budde
2013-01-08  9:23   ` Alexander Stein
2013-01-08  9:32     ` Marc Kleine-Budde
2013-01-08  9:48       ` Alexander Stein
2013-01-08 10:09         ` Oliver Hartkopp [this message]
2013-01-08 10:18           ` Heinz-Jürgen Oertel
2013-01-08 10:08     ` Wolfgang Grandegger
2013-01-08 10:15       ` Heinz-Jürgen Oertel
2013-01-22  9:41   ` Alexander Stein
2013-01-22 12:53     ` Kurt Van Dijck
2013-01-22 13:36       ` Alexander Stein
2013-01-07 18:37 ` 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=50EBF058.5050400@volkswagen.de \
    --to=oliver.hartkopp@volkswagen.de \
    --cc=alexander.stein@systec-electronic.com \
    --cc=linux-can@vger.kernel.org \
    --cc=mkl@pengutronix.de \
    /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).