Kurt Van Dijck wrote:
> Oliver,
> 
> in the patch below, I identified a line which I don't understand.
> The targeted statement is within can_send(), when loopback is requested
> but not supported by the device driver.
> can_send() clones the skb (newskb) which will soon be injected in the
> receive flow of the net_device.
> By setting the type to PACKET_BROADCAST (over PACKET_LOOPBACK), a
> socketcan receiver cannot distinguish between loopback'd and external
> broadcasted can messages, which I tought was the reason to set
> PACKET_LOOPBACK in the first place (a few lines up).
> 
> I seem not to understand the logic. Where did I go wrong?

Hi Kurt,

you need to distinguish skb->pkt_type in downstream and upstream.

I remember we had to check, if the skb's got mangled inside the network stack
when setting wrong skb->pkt_type values.

Every received CAN skb has the type PACKET_BROADCAST in upstream, as we're
dealing with 'broadcasted' CAN frames. And there is no difference (for a
subscribed receiver) whether the frame has been received from a 'real' bus or
if it has been sent on the 'real' bus (and is therefore looped back).
Therefore there is no reason for the receiver to know the pkt_type at all.

In the downstream we use PACKET_HOST and PACKET_LOOP to tell the driver
whether a loopback is required or not.

That's all.

Regards,
Oliver

_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to