Skip to content

Commit 4615498

Browse files
Patrick Menschelrumpelsepp
andcommitted
Add constants to socket module for ISO-TP CAN protocol
Co-authored-by: Stefan Tatschner <stefan@rumpelsepp.org>
1 parent 11ad731 commit 4615498

6 files changed

Lines changed: 89 additions & 2 deletions

File tree

Doc/whatsnew/3.14.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,12 @@ pickle
162162
* Set the default protocol version on the :mod:`pickle` module to 5.
163163
For more details, please see :ref:`pickle protocols <pickle-protocols>`.
164164

165+
socket
166+
------
167+
168+
Add constants for the ISO-TP CAN protocol.
169+
(Contributed by Patrick Menschel and Stefan Tatschner in :gh:`86819`.)
170+
165171
symtable
166172
--------
167173

Lib/test/test_socket.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2308,6 +2308,45 @@ def testCrucialConstants(self):
23082308
socket.CAN_ISOTP
23092309
socket.SOCK_DGRAM
23102310

2311+
@unittest.skipUnless(hasattr(socket, "SOL_CAN_ISOTP"),
2312+
"missing <linux/can/isotp.h>")
2313+
def testISOTP(self):
2314+
socket.SOL_CAN_ISOTP
2315+
2316+
socket.CAN_ISOTP_OPTS
2317+
socket.CAN_ISOTP_RECV_FC
2318+
2319+
socket.CAN_ISOTP_TX_STMIN
2320+
socket.CAN_ISOTP_RX_STMIN
2321+
socket.CAN_ISOTP_LL_OPTS
2322+
2323+
socket.CAN_ISOTP_LISTEN_MODE
2324+
socket.CAN_ISOTP_EXTEND_ADDR
2325+
socket.CAN_ISOTP_TX_PADDING
2326+
socket.CAN_ISOTP_RX_PADDING
2327+
socket.CAN_ISOTP_CHK_PAD_LEN
2328+
socket.CAN_ISOTP_CHK_PAD_DATA
2329+
socket.CAN_ISOTP_HALF_DUPLEX
2330+
socket.CAN_ISOTP_FORCE_TXSTMIN
2331+
socket.CAN_ISOTP_FORCE_RXSTMIN
2332+
socket.CAN_ISOTP_RX_EXT_ADDR
2333+
socket.CAN_ISOTP_WAIT_TX_DONE
2334+
# This constant is and not always available
2335+
# socket.CAN_ISOTP_SF_BROADCAST
2336+
2337+
socket.CAN_ISOTP_DEFAULT_FLAGS
2338+
socket.CAN_ISOTP_DEFAULT_EXT_ADDRESS
2339+
socket.CAN_ISOTP_DEFAULT_PAD_CONTENT
2340+
socket.CAN_ISOTP_DEFAULT_FRAME_TXTIME
2341+
socket.CAN_ISOTP_DEFAULT_RECV_BS
2342+
socket.CAN_ISOTP_DEFAULT_EXT_ADDRESS
2343+
socket.CAN_ISOTP_DEFAULT_RECV_STMIN
2344+
socket.CAN_ISOTP_DEFAULT_RECV_WFTMAX
2345+
2346+
socket.CAN_ISOTP_DEFAULT_LL_MTU
2347+
socket.CAN_ISOTP_DEFAULT_LL_TX_DL
2348+
socket.CAN_ISOTP_DEFAULT_LL_TX_FLAGS
2349+
23112350
def testCreateSocket(self):
23122351
with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
23132352
pass
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add constants for the ISO-TP CAN protocol.

Modules/socketmodule.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8187,6 +8187,43 @@ socket_exec(PyObject *m)
81878187

81888188
ADD_INT_MACRO(m, J1939_FILTER_MAX);
81898189
#endif
8190+
#ifdef HAVE_LINUX_CAN_ISOTP_H
8191+
ADD_INT_MACRO(m, SOL_CAN_ISOTP);
8192+
8193+
ADD_INT_MACRO(m, CAN_ISOTP_OPTS);
8194+
ADD_INT_MACRO(m, CAN_ISOTP_RECV_FC);
8195+
8196+
ADD_INT_MACRO(m, CAN_ISOTP_TX_STMIN);
8197+
ADD_INT_MACRO(m, CAN_ISOTP_RX_STMIN);
8198+
ADD_INT_MACRO(m, CAN_ISOTP_LL_OPTS);
8199+
8200+
ADD_INT_MACRO(m, CAN_ISOTP_LISTEN_MODE);
8201+
ADD_INT_MACRO(m, CAN_ISOTP_EXTEND_ADDR);
8202+
ADD_INT_MACRO(m, CAN_ISOTP_TX_PADDING);
8203+
ADD_INT_MACRO(m, CAN_ISOTP_RX_PADDING);
8204+
ADD_INT_MACRO(m, CAN_ISOTP_CHK_PAD_LEN);
8205+
ADD_INT_MACRO(m, CAN_ISOTP_CHK_PAD_DATA);
8206+
ADD_INT_MACRO(m, CAN_ISOTP_HALF_DUPLEX);
8207+
ADD_INT_MACRO(m, CAN_ISOTP_FORCE_TXSTMIN);
8208+
ADD_INT_MACRO(m, CAN_ISOTP_FORCE_RXSTMIN);
8209+
ADD_INT_MACRO(m, CAN_ISOTP_RX_EXT_ADDR);
8210+
ADD_INT_MACRO(m, CAN_ISOTP_WAIT_TX_DONE);
8211+
#ifdef CAN_ISOTP_SF_BROADCAST
8212+
ADD_INT_MACRO(m, CAN_ISOTP_SF_BROADCAST);
8213+
#endif
8214+
8215+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_FLAGS);
8216+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_EXT_ADDRESS);
8217+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_PAD_CONTENT);
8218+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_FRAME_TXTIME);
8219+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_RECV_BS);
8220+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_RECV_STMIN);
8221+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_RECV_WFTMAX);
8222+
8223+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_LL_MTU);
8224+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_LL_TX_DL);
8225+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_LL_TX_FLAGS);
8226+
#endif
81908227
#ifdef SOL_RDS
81918228
ADD_INT_MACRO(m, SOL_RDS);
81928229
#endif

Modules/socketmodule.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,10 @@ typedef int socklen_t;
155155
#include <linux/can/bcm.h>
156156
#endif
157157

158+
#ifdef HAVE_LINUX_CAN_ISOTP_H
159+
#include <linux/can/isotp.h>
160+
#endif
161+
158162
#ifdef HAVE_LINUX_CAN_J1939_H
159163
#include <linux/can/j1939.h>
160164
#endif

configure.ac

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3062,10 +3062,10 @@ AC_CHECK_HEADERS([linux/vm_sockets.h], [], [], [
30623062
#endif
30633063
])
30643064

3065-
# On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h
3065+
# On Linux, can.h, can/bcm.h, can/isotp.h, can/j1939.h, can/raw.h require sys/socket.h
30663066
# On NetBSD, netcan/can.h requires sys/socket.h
30673067
AC_CHECK_HEADERS(
3068-
[linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h netcan/can.h],
3068+
[linux/can.h linux/can/bcm.h linux/can/isotp.h linux/can/j1939.h linux/can/raw.h netcan/can.h],
30693069
[], [], [
30703070
#ifdef HAVE_SYS_SOCKET_H
30713071
#include <sys/socket.h>

0 commit comments

Comments
 (0)