All of lore.kernel.org
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Oliver Hartkopp <oliver@hartkopp.net>
Cc: Urs Thuermann <urs@isnogud.escape.de>,
	netdev@vger.kernel.org, David Miller <davem@davemloft.net>,
	Patrick McHardy <kaber@trash.net>,
	Thomas Gleixner <tglx@linutronix.de>,
	Oliver Hartkopp <oliver.hartkopp@volkswagen.de>,
	Urs Thuermann <urs.thuermann@volkswagen.de>,
	Daniel Lezcano <dlezcano@fr.ibm.com>
Subject: Re: [PATCH 5/7] CAN: Add virtual CAN netdevice driver
Date: Fri, 28 Sep 2007 10:52:39 -0600	[thread overview]
Message-ID: <m1hcled960.fsf@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <46FCBFC3.7020106@hartkopp.net> (Oliver Hartkopp's message of "Fri, 28 Sep 2007 10:48:03 +0200")

Oliver Hartkopp <oliver@hartkopp.net> writes:

> Eric W. Biederman wrote:
>>
>> Currently IFF_LOOPBACK set in dev->flags means we are dealing
>> with drivers/net/loopback.c. 
>>   
>
> This is a very general view, don't you think? The one is an interface
> flag and the other one is an interface itself. This looks like a risky
> mixture, when there is no clean separation.

The better definition followed that IFF_LOOPBACK means all packets
will loopback.  Currently we only have one such device in the tree.
And the CAN devices do not have that property.

>> So at a first glance the CAN usage of IFF_LOOPBACK looks completely
>> broken, and likely to confuse other networking layers if they see
>> a CAN device.  Say if someone attempts to run IP over CAN or
>> something like that.
>>   
>
> The CAN protocol family is some kind of a closed ecosystem with a
> complete different addressing scheme that uses the bare networking
> functionality of the Linux Kernel as well as DECNET or ARCNET. You would
> never been able to run the IP-stack on a CAN netdev (ARPHDR_CAN,
> ETH_P_CAN) due to several technical differences in addressing, etc.

However when register_netdev is the netdev_notifier chain is called
with NETDEV_REGISTER

So then we enter code paths such as "net/ipv4/inetdev_event()" and
process the network device.  There is some small amount of treatment
given to devices that have IFF_LOOPBACK set.

The core point being that CAN devices as currently constructed are not
in a closed ecosystem.  Other networking layers see them even if they
can not use the properly.

I don't know what all of the implications are but I do know we
need to be careful.


>> Do you think you can remove this incompatible usage of IFF_LOOPBACK
>> from the can code?
>>   
>
> Yes. We might pick another name for it (see below).

Thanks.

>> If I have read your documentation properly the only reason you are
>> doing this is so that the timing of frames to cansniffer more
>> accurately reflects when the frame hits the wire.  If CAN runs over a
>> very slow medium I guess I can see where that can be a concern.

>
> So it's not an issue of having better timings but to reproduce the
> *correct message order* from the CAN bus. One year ago this problem has
> originally been pointed out by Michael Schulze from the University of
> Magdeburg as having a correct message order created by the CSMA/CA
> treatment is a vital requirement for CAN bus users. As you might see now
> the CAN netdriver has to offer additional functionalities due to the
> CSMA/CA treatment in opposite to the 'standard' CSMA/CD behaviour you
> know from Ethernet netdrivers. And this arbitration information of the
> CAN controller is only available on driver level. It is therefore no
> question IF the CAN netdriver supports the CSMA/CA treatment but HOW to
> provide an interface for this functionality on a basis of a standard
> netdriver (which simply only sends and receives frames).

Ok.  So the difference here is that CAN devices provide ordering on
the wire between their transmitted packets and their received packets,
and you need an additional hook so you can properly observe this case.

Hmm. My gut feel says that we just want function your drivers can
call post transmit that will call dev_queue_xmit_nit if someone else
is watching.  Although calling netif_rx seems to work but at least
in the general case with routing I would be concerned that would get
you into packets that would get routed out the incoming interface
and cause a loop.

> As the CAN netdrivers (as described above) are only available and used
> by the PF_CAN core, the use of IFF_LOOPBACK looked like reasonable
> solution to distinguish whether the CAN netdriver is capable to do the
> loopback (e.g. due to the ability of the controller to generate
> TX-interrupts) or not. The usage of IFF_LOOPBACK in CAN netdrivers
> didn't affect or confuse the rest of the Linux networking system up to
> now. Btw. if you state that IFF_LOOPBACK means for a netdriver, that
> "all packets from a device will come right back to the current machine,
> and go nowhere else.", we should think about a new IFF_-flag here.

Yes. IFF_LOOPBACK for a netdriver means that all packets from a device
will come right back to the current machine.   I stated that in a
later message, as that seems a clearer way to express what it means.

Further I still don't see any mechanism that isolates CAN netdrivers
from the other protocol layers.

What makes this problem a little stronger is that I have been
simplifying some of the tests in some of the other networking layers
from being "if (dev == loopback_dev)" to "if (dev->flags &
IFF_LOOPBACK)" So there are fewer special cases I need to deal with.

I believe that if you now use your current CAN patches unless I have
misread something your can devices will now show up with ip 127.0.0.1

> I don't have any concerns creating a new IFF_-flag for this "loopback
> approved by CSMA/CA media access" i just have no idea for a really good
> name for it. But maybe the use of IFF_LOOPBACK for CAN netdrivers
> (ARPHRD_CAN) is also ok for you now?!?

Serial devices tend to call this echo or local echo, so how about
IFF_ECHO.

Eric


  reply	other threads:[~2007-09-28 16:53 UTC|newest]

Thread overview: 108+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 1/7] CAN: Allocate protocol numbers for PF_CAN 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-20 18:43 ` [PATCH 3/7] CAN: Add raw protocol Urs Thuermann
2007-09-21 12:49   ` Patrick McHardy
2007-09-21 21:05     ` Urs Thuermann
2007-09-22 11:02       ` Patrick McHardy
2007-09-20 18:43 ` [PATCH 4/7] CAN: Add broadcast manager (bcm) protocol Urs Thuermann
2007-09-20 18:43 ` [PATCH 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-09-27 15:54   ` Eric W. Biederman
2007-09-27 16:16     ` Eric W. Biederman
2007-09-27 19:18       ` David Miller
2007-09-28  8:48     ` Oliver Hartkopp
2007-09-28 16:52       ` Eric W. Biederman [this message]
2007-09-28 18:33         ` Oliver Hartkopp
2007-09-20 18:43 ` [PATCH 6/7] CAN: Add maintainer entries Urs Thuermann
2007-09-20 18:43 ` [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 5/7] CAN: Add virtual CAN netdevice driver 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 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-11-14 12:51   ` Patrick McHardy
2007-11-14 13:36     ` Urs Thuermann
2007-11-14 13:45       ` Patrick McHardy
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 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
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 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-09-25 12:20 [PATCH 0/7] CAN: Add new PF_CAN protocol family, try #8 Urs Thuermann
2007-09-25 12:20 ` [PATCH 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-09-25 13:26   ` YOSHIFUJI Hideaki / 吉藤英明
2007-09-25 14:00     ` Urs Thuermann
2007-09-25 14:47       ` Patrick McHardy
2007-09-25 17:55         ` Oliver Hartkopp
2007-09-25 17:53           ` Patrick McHardy
2007-09-25 19:09             ` Oliver Hartkopp
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 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-09-18 15:02   ` Patrick McHardy
2007-09-18 22:24     ` Urs Thuermann
2007-09-19  6:26       ` Oliver Hartkopp
2007-09-19  8:41       ` 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:07 ` [patch 5/7] CAN: Add virtual CAN netdevice driver 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 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-06-22 11:02   ` Patrick McHardy
2007-06-22 12:22     ` Urs Thuermann
2007-06-22 12:38       ` Patrick McHardy
2007-06-23 12:05         ` Oliver Hartkopp
2007-06-23 12:52           ` Patrick McHardy
2007-06-23 15:13             ` Oliver Hartkopp
2007-06-23 16:25               ` Patrick McHardy
2007-06-23 16:42                 ` Oliver Hartkopp
2007-06-23 17:13                   ` Patrick McHardy
2007-07-04 11:37                     ` Urs Thuermann
2007-07-04 14:01                       ` Patrick McHardy
2007-07-09 11:37                         ` Urs Thuermann
2007-07-09 14:18                           ` Patrick McHardy
2007-07-09 15:27                             ` Oliver Hartkopp
2007-07-11 19:41                               ` Oliver Hartkopp
2007-07-11 22:52                                 ` Patrick McHardy
2007-07-16  6:05                                   ` Oliver Hartkopp
2007-07-16  8:37                                     ` David Miller
2007-07-16 13:08                                     ` Patrick McHardy
2007-07-16 16:27                                       ` Oliver Hartkopp
2007-07-16 13:07                               ` Patrick McHardy
2007-07-16 16:00                                 ` Oliver Hartkopp
2007-06-23 21:01               ` David Miller
2007-06-23 21:44                 ` Oliver Hartkopp
2007-06-23 20:51           ` David Miller
2007-06-23 21:49             ` Oliver Hartkopp
2007-05-30 13:11 [patch 0/7] CAN: Add new PF_CAN protocol family, update Urs Thuermann
2007-05-30 13:11 ` [patch 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann
2007-05-30 17:13   ` Patrick McHardy
2007-05-30 18:39     ` Oliver Hartkopp
2007-05-30 19:16       ` Patrick McHardy
2007-05-30 19:48         ` Oliver Hartkopp
2007-05-30 19:58           ` Patrick McHardy
2007-05-31  5:13             ` Oliver Hartkopp
2007-05-31 20:25     ` Oliver Hartkopp
2007-06-01 14:54       ` Patrick McHardy
2007-06-02  9:51         ` Oliver Hartkopp
2007-06-02 19:58           ` Oliver Hartkopp
2007-06-03 19:16             ` Oliver Hartkopp
2007-06-04 11:53               ` Patrick McHardy
2007-06-04 12:44                 ` Urs Thuermann
2007-06-06 11:39                   ` Patrick McHardy
2007-06-04 12:17               ` Urs Thuermann
2007-06-04 16:32                 ` Oliver Hartkopp
2007-06-04 18:26                   ` Oliver Hartkopp
2007-06-02  8:09     ` Urs Thuermann
2007-06-03 18:27       ` Patrick McHardy
2007-05-30 17:28   ` Stephen Hemminger
2007-05-30 18:57     ` Oliver Hartkopp
2007-05-30 19:01       ` Stephen Hemminger
2007-05-30 19:25         ` Oliver Hartkopp
2007-05-16 14:51 [patch 0/7] CAN: Add new PF_CAN protocol family Urs Thuermann
2007-05-16 14:51 ` [patch 5/7] CAN: Add virtual CAN netdevice driver Urs Thuermann

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=m1hcled960.fsf@ebiederm.dsl.xmission.com \
    --to=ebiederm@xmission.com \
    --cc=davem@davemloft.net \
    --cc=dlezcano@fr.ibm.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 \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.