linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Kleine-Budde <mkl@pengutronix.de>
To: Oliver Hartkopp <socketcan@hartkopp.net>,
	Sebastian Haas <dev@sebastianhaas.info>,
	Kurt Van Dijck <kurt.van.dijck@eia.be>,
	Sandro Anders | CarMediaLab <sandro.anders@carmedialab.de>
Cc: linux-can Mailing List <linux-can@vger.kernel.org>
Subject: Re: RFC: (optional) software filtering in candump
Date: Tue, 17 Mar 2015 11:44:58 +0100	[thread overview]
Message-ID: <550805AA.4010306@pengutronix.de> (raw)
In-Reply-To: <51AA01F0.8020308@hartkopp.net>

[-- Attachment #1: Type: text/plain, Size: 5233 bytes --]

On 06/01/2013 04:15 PM, Oliver Hartkopp wrote:
> Hi all,
> 
> On 30.05.2013 17:37, Sebastian Haas wrote:
>> Am 30.05.2013 14:35, schrieb Kurt Van Dijck:
>>> On Thu, May 30, 2013 at 02:07:03PM +0200, Oliver Hartkopp wrote:
>>>> Am 30.05.2013 12:17, schrieb Kurt Van Dijck:
>>>>> On Thu, May 30, 2013 at 11:06:30AM +0200, Sebastian Haas wrote:
>>>>>> Am 30.05.2013 10:49, schrieb Oliver Hartkopp:
>>>>>>>>> On 29.05.2013 22:55, Sebastian Haas wrote:
>>>>>>>>>> If I start candump this way:
>>>>>>>>>> sh@helios:~/workspace/node-can$ candump vcan0,100~7ff,101~7ff
>>>>>>>>>>   I want to receive any messages except 100h and 101h.
>>>>>>>>>>
>>>>>>>>>> When I send a message which matches the filter, it is received twice:
>>>>>>>>>> sh@helios:~/workspace/node-can$ cansend vcan0 1ff#22
>>>>>>>>>>    vcan0  1FF   [1]  22
>>>>>>>>>>    vcan0  1FF   [1]  22
>>>>>>>>>>
>>>>>>>>>> When I send a message which should not received at all, it is received:
>>>>>>>>>> sh@helios:~/workspace/node-can$ cansend vcan0 100#22
>>>>>>>>>>    vcan0  100   [1]  22
>>>>>>>>>>
>>>>>>>>>> Did I misunderstood the filter here?
>>>>>>>>>
>>>>>>>>> The filters are independent and therefore "logical OR".
>>>>>>>> Ok. That explain why received 100h even though I tried to filter it
>>>>>>>> out. But
>>>>>>>> why receive a message twice while it was only sent once?
>>>>>>>
>>>>>>> You have defined two(!) filters that let pass the CAN-ID 0x1FF.
>>>>>>>
>>>>>>> So what else would you expect?
>>>>>> This is actually the way it meant to be? Why? Honestly this is a bug
>>>>>> for me! The filter should stop when it matched and not going further
>>>>>> generating ghost messages which were never sent?
>>>>>
>>>>> I had initially the same feeling. The problem here IMHO is
>>>>> what the user expects is different from what the kernel does.
>>>>>
>>>>> What the user expects is a 'socket' based filter.
>>>>> The kernel implements an optimised, socket-agnostic filter.
>>>>> This is even more generic, but the kernel expects a CAN_RAW program
>>>>> to set 'rough' filters and have the fine control in the program.
>>>>>
>>>>> This actually works very good, and is a clever thing to do.
>>>>>
>>>>> However, candump does expose this kernel behaviour to the user. The user,
>>>>> as said, expects something different that what he gets.
>>>>> So the user thinks it is a bug.
>>>>>
>>>>> How to solve this: I think the correct way is to let candump
>>>>> expose the filtering that a user expects, whether in userspace
>>>>> or in kernelspace.
>>>>> Is such approach efficient? no. Does that matter? probably not.
>>>>> candump is, IMO, not an automation tool. It's an administrator/diagnostic
>>>>> tool.
>>>>>
>>>>> Although I have no real code in mind yet, I think the expected
>>>>> filtering is much easier to implement within a single program,
>>>>> than it would be in kernelspace.
>>>>>
>>>>> On the other hand, I have found candump's exposure of kernel work
>>>>> a true friend during development.
>>>>> So I'd vote to have an extra control on candump which filtering to use.
>>>>>
>>>>> Any thoughts?
> 
> I used the last days to check different concepts and implementation ideas how
> to integrate another filter policy into the 'socket-agnostic' filters in
> af_can.c Kurt wrote this nice pleading about :-)
> 
> It turned out that linked filters would become a mess in implementation and
> configuration (e.g. extensive locking / performance reduction). Additionally
> it would only make sense for a concatenation of inverted filters, like:
> 
> 100~7FF,101~7FF,103~7FF
> 
> Finally i dropped the idea to fiddle with the really efficient filters in
> af_can.c that follow the original idea of the CAN controller HW filters.
> 
> The main drawback of the independent filters is that the user does not expect
> to get the same message several times due to the match of overlapping filters.
> 
> Below you will find an approach that does not push this problem into
> userspace but only omits identical frames that had multiple matches.
> 
> The idea is to introduce a new socket option CAN_RAW_FILTER_UNIQUE for the
> RAW socket, that catches and omits duplicate frames when it's enabled.
> This is a per-socket option and is active for all configured filters applied
> to this socket.
> 
> It's a relatively small and clear change and it fixes your "bug".
> 
> Here's the output of candump with and without the 'unique' option when
> invoking "cansend vcan0 1FF#" in another terminal:
> 
> $ ./candump vcan0,100~7FF,101~7FF
>   vcan0  1FF   [0] 
>   vcan0  1FF   [0] 
> 
> $ ./candump vcan0,100~7FF,101~7FF,U
>   vcan0  1FF   [0] 
> 
> I hope this fit your needs ?! :-)

Sorry for resurrecting this old thread, but a $CUSTOMER stumbled over
the same "issue". So there seems to be realworld need for a solution :)

Are there any new thoughts on the problem?

Marc

-- 
Pengutronix e.K.                  | Marc Kleine-Budde           |
Industrial Linux Solutions        | Phone: +49-231-2826-924     |
Vertretung West/Dortmund          | Fax:   +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686  | http://www.pengutronix.de   |


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  parent reply	other threads:[~2015-03-17 10:45 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-29 20:55 RxFilter issues vcan Sebastian Haas
2013-05-30  4:58 ` Oliver Hartkopp
2013-05-30  8:34   ` Sebastian Haas
2013-05-30  8:49     ` Oliver Hartkopp
2013-05-30  9:06       ` Sebastian Haas
2013-05-30 10:17         ` RFC: (optional) software filtering in candump Kurt Van Dijck
2013-05-30 12:07           ` Oliver Hartkopp
2013-05-30 12:35             ` Kurt Van Dijck
2013-05-30 15:37               ` Sebastian Haas
2013-05-30 15:55                 ` Oliver Hartkopp
2013-05-31 20:40                   ` Sebastian Haas
2013-06-01 14:15                 ` Oliver Hartkopp
2013-06-01 18:35                   ` Sebastian Haas
2013-06-02  9:59                     ` RFC SFF bitfield filter - was " Oliver Hartkopp
2013-06-02 11:17                       ` Kurt Van Dijck
2013-06-02 12:23                         ` Sebastian Haas
2013-06-02 11:23                   ` Kurt Van Dijck
2013-06-04  8:22                     ` AW: " Sandro Anders | CarMedialab
2015-03-17 10:44                   ` Marc Kleine-Budde [this message]
2015-03-17 11:34                   ` Marc Kleine-Budde
2015-03-17 12:04                     ` Oliver Hartkopp
2015-03-17 13:02                       ` Oliver Hartkopp
2015-03-17 13:33                         ` Marc Kleine-Budde
  -- strict thread matches above, loose matches on Subject: below --
2013-06-14  8:42 Janusz Uzycki
     [not found] <190D92B052C049F4B059DCFE8F841940@laptop2>
2013-06-14 18:05 ` Oliver Hartkopp
2013-06-17 11:27   ` Janusz Uzycki
2013-06-19 16:59     ` 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=550805AA.4010306@pengutronix.de \
    --to=mkl@pengutronix.de \
    --cc=dev@sebastianhaas.info \
    --cc=kurt.van.dijck@eia.be \
    --cc=linux-can@vger.kernel.org \
    --cc=sandro.anders@carmedialab.de \
    --cc=socketcan@hartkopp.net \
    /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).