Thread (6 messages) 6 messages, 4 authors, 2021-06-14

Re: How to statically set J1939 addresses and names

From: Rémy DZIEMIASZKO <hidden>
Date: 2021-06-14 08:32:49

Le ven. 11 juin 2021 à 08:57, Kurt Van Dijck
[off-list ref] a écrit :
On Fri, 11 Jun 2021 06:12:32 +0200, Oleksij Rempel wrote:
quoted
Hi Rémy,

On Tue, Jun 08, 2021 at 05:27:45PM +0200, Rémy DZIEMIASZKO wrote:
quoted
Hello,

I need that my applications do not care about J1939 node addresses but
directly bind / connect to socket based on node name only and the
kernel takes care of the conversion to addresses.

I know this is possible if addresses are dynamically assigned through
the Address Claiming protocol that is implemented in the kernel. The
kernel keeps track of its own address and name as well as the
addresses and names of other ECUs on the network and convert name to
adresse when requested by the applications.

But I don't want to use the Address Claiming protocol. I want to
statically set all addresses and names.
It is supported to not use Address Claiming.
quoted
quoted
Is there a way to assign J1939 addresses and names to a CAN interface
without using the J1939 address claim protocol?
Current version do not have this functionality.
If you bind() your socket with only sockaddr_can.j1939.sa set to your
SA, and sockaddr_can.j1939.name to 0, makes your socket use your SA as
static address.
quoted
quoted
I found in old j1939 kernel documentation something like
ip addr add dev canX j1939 0xXX
ip addr add dev canX j1939 name 0xXX
See https://www.spinics.net/lists/netdev/msg162350.html

But in the latest j1939 kernel documentation I do not find any
reference to these commands.
Yes, it was pre mainline version. For mainlining we reduced UAPI to the
minimum to simplify reviewing, mainlining and testing process.
The strict addressing was rejected because it felt much heavier than
what most CAN users were used to. Moving to the current ad-hoc
implementation allowed to drop quite some kernel code too.
Hi Kurt,

When I develop my application I don't know it's source address. I only
know its name.
In the future my application shall be integrated in different
projects/vehicules.
For each project, the source_address may be different but the name
will never change.
I don't want to adapt the source code of the application for each
project so I don't want to bind/connect to source_addresses but to
names.
That's why it would be nice if the platform / the kernel does the
translation name --> source_address.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help