Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

write: no buffer space available socket-can/linux-can

I'm running a program with two CAN channels (using TowerTech CAN Cape TT3201).

The two channels are can0 (500k) and can1 (125k). The can0 channels works perfectly but can1 runs a write:No buffer space available error.

I'm using ValueCAN3/VehicleSpy to check the messages.

This is before I run the program. can0 and can1 both seem to send, but only can0 shows up in VehicleSpy.

root@cantool:~# cansend can0 100#00 
root@cantool:~# cansend can1 100#20

enter image description here

This is after I try running the program

root@cantool:~# cansend can1 100#20 
write: No buffer space available 
root@cantool:~# cansend can0 111#10

enter image description here

While my program is running : I get this error for all messages to be sent on can1

2016-11-02 15:36:03,052 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 
2016-11-02 15:36:03,131 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af81118    010    6    00 00 00 00 00 00 
2016-11-02 15:36:03,148 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f81018    010    6    00 00 00 00 00 00 
2016-11-02 15:36:03,174 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af87018    010    3    00 00 00 
2016-11-02 15:36:03,220 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f89018    010    4    00 00 00 00 
2016-11-02 15:36:03,352 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 

However sometimes the whole program works perfectly (if the module is rebooted or some random instances).

How do I fix this?

root@cantool:~# uname -r 
4.1.15-ti-rt-r43

after doing some digging, I found this

 root@cantool:-#ip -details link show can0
 4:can0: <NOARP,UP,LOWER_UP, ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
      link/can promiscuity 0
      can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100
      bitrate 500000 sample-point 0.875
      tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
      c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1
      clock 24000000
 root@cantool:-#ip -details link show can1
 5: can1: <NOARP,UP,LOWER_UP, ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
      link/can promiscuity 0
      can state STOPPED restart-ms 100
      bitrate 125000 sample-point 0.875
      tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
      c_can: tseg1 2..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
      clock 8000000

Turns out that can1 is STOPPED for some reason

however when I try:

ip link set can1 type can restart 
RNETLINK answers: Invalid argument
like image 738
avelampudi Avatar asked Nov 04 '16 13:11

avelampudi


People also ask

Can Errno 105 no buffer space available?

The "Errno 105" in this message indicates that the errno value returned by the Linux network stack is 105, or ENOBUFS. This return value while adding a multicast address indicates that your machine is trying to be a member of too many multicast groups at the same time.

What does no buffer space mean?

The "no buffer space available" error indicates a lack of buffer space available for the TCP/IP stack. When this happens, any programs(discovery/polling) that attempt to create additional resources, like ping or snmp, will fail with this type of error.


1 Answers

After you enable the can0 interface with sudo ifconfig can0 up, run:

sudo ifconfig can0 txqueuelen 1000

This will increase the number of frames allowed per kernel transmission queue for the queuing discipline. More info here

... sometimes the whole program works perfectly (if the module is rebooted or some random instances).

The reason why it works when you restart the SocketCAN interface, is that you might clear up just enough buffer space to make it work.

like image 177
thewheelz Avatar answered Oct 03 '22 17:10

thewheelz