From: Patrick Menschel <menschel.p@posteo.de>
To: "Rémy DZIEMIASZKO" <remy.dziemiaszko@smile.fr>
Cc: linux-can@vger.kernel.org
Subject: Re: How to statically set J1939 addresses and names
Date: Sat, 12 Jun 2021 10:02:22 +0000 [thread overview]
Message-ID: <770b2bf9-5685-55ad-dcd9-e441dbe95a6a@posteo.de> (raw)
In-Reply-To: <20210611065708.GA2028@x1.vandijck-laurijssen.be>
Am 11.06.21 um 08:57 schrieb Kurt Van Dijck:
> On Fri, 11 Jun 2021 06:12:32 +0200, Oleksij Rempel wrote:
>> Hi Rémy,
>>
>> On Tue, Jun 08, 2021 at 05:27:45PM +0200, Rémy DZIEMIASZKO wrote:
>>> 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.
>
>>>
>>> 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.
>
I'm afraid I asked that question last month.
https://marc.info/?l=linux-can&m=162110222418338&w=2
In Python3.9, it basically sums up to
# making the socket
self._s = socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_J1939)
#binding the socket to a single defined address which is not 0, 254 or
255 by setting source_address to that value. pgn and source_address are
actually filter values in this context.
self._s.bind((interface, name, pgn, source_address))
#then use sendto and recvfrom.
self._s.sendto(data, (self.interface, self.name, pgn, addr))
data, (interface, name, pgn, addr) = self._s.recvfrom(bufsize)
C / C++ will work the same way.
Kind Regards,
Patrick Menschel
next prev parent reply other threads:[~2021-06-12 10:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-08 15:27 How to statically set J1939 addresses and names Rémy DZIEMIASZKO
2021-06-11 4:12 ` Oleksij Rempel
2021-06-11 6:57 ` Kurt Van Dijck
2021-06-12 10:02 ` Patrick Menschel [this message]
2021-06-14 8:32 ` Rémy DZIEMIASZKO
2021-06-14 9:10 ` Kurt Van Dijck
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=770b2bf9-5685-55ad-dcd9-e441dbe95a6a@posteo.de \
--to=menschel.p@posteo.de \
--cc=linux-can@vger.kernel.org \
--cc=remy.dziemiaszko@smile.fr \
/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