On Thursday 11 March 2010 17:40, Oliver Hartkopp wrote:
> Hi Matthias,
> 
> Matthias Fuchs wrote:
> > I played a little with various ways to manipulate tx/rxqueuesizes with 
> > SocketCAN.
> > I ended up with some questions:
> > 
> > 1) Does setsockopt(... ,SOL_SOCKET, SO_SNDBUF, ....) have any impact on 
> > CAN_RAW sockets?
> > My result: no!
> 
> Ack.
> 
> > 2) Does setsockopt(... ,SOL_SOCKET, SO_RCVBUF, ....) have any impact on 
> > CAN_RAW sockets?
> > Yes, that's also used by candump to prevent losing rx frames.
> > 
> > 1+2 brings me to the conclusion that setsockopt(..., SO_RCVBUF, ...) 
> > configures receive
> > behavior and "ip link set can0 txqueuelen <whatever>" configures tx 
> > behavior. Did I miss 
> > anything?
> 
> No. That's the current behaviour.
> 
> > 3) Do we have a way to make write() on CAN_RAW sockets block when there is
> > no more buffer space? Typical behavior is returning ENOBUFS. I haven't 
> > tried to
> > use select() for sending. Does this work?
> 
> Yes. That should work.
> 
> We had a discussion on this recently.
> 
> http://old.nabble.com/-PATCH-0-2--add-support-for-Janz-MODULbus-devices-tp27662172p27715072.html
> 
> Due to that discussion, i added the poll support to the 'cangen' tool:
> 
> http://svn.berlios.de/wsvn/socketcan/?op=comp&compare[]=%2ftrunk%2fcan-ut...@1149&compare[]=%2ftrunk%2fcan-ut...@1146
> 
> 
> 
> > 
> > 4) Do we have a way to flush the txqueue and block until all messages are 
> > on the bus?
> > fsync() does not seem to be the right choice.
> 
> AFAIK there's no way from the userspace to flush the txqueue - only set the
> interface state to "down" ...
> 
> > 
> > 5) Is there any special reason why read/write can only handle single 
> > messages?
> > Is it just because nobody asked? It should be possible with our
> > fixed size stuct can_frame. It could even speed thing up.
> 
> This is an interesting idea. BUT the problem is that all the drivers and
> especially the echo_skb handling deals with single skb's. For a good reason.
> 
> But i could imagine to implement a multi-frame handling inside the CAN_RAW
> socket. This could be done with a loop that splits it into single skb's in
> raw_sendmsg() quite easily.
> 
> At least this would reduce the number of userspace->kernelspace copies.
Yes.
> 
> But you would need to check the return code to check how many frames have been
> written (when the txqueue is getting full).
Don't you check the return code of every systemcall :-)
> 
> Interested?
Yes. But of course we could live with the current implementation.
So it's a nice to have feature.

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

Reply via email to