Skip to content

Commit a9b6b09

Browse files
rumpelseppmenschel
andauthored
gh-86819: Add ISO-TP CAN socket constants (#23794)
Co-authored-by: Stefan Tatschner <[email protected]> Co-authored-by: Patrick Menschel <[email protected]>
1 parent e92599e commit a9b6b09

File tree

8 files changed

+105
-3
lines changed

8 files changed

+105
-3
lines changed

Doc/whatsnew/3.15.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,13 @@ shelve
404404
(Contributed by Andrea Oliveri in :gh:`134004`.)
405405

406406

407+
socket
408+
------
409+
410+
* Add constants for the ISO-TP CAN protocol.
411+
(Contributed by Patrick Menschel and Stefan Tatschner in :gh:`86819`.)
412+
413+
407414
sqlite3
408415
-------
409416

Lib/test/test_socket.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2393,6 +2393,45 @@ def testCrucialConstants(self):
23932393
socket.CAN_ISOTP
23942394
socket.SOCK_DGRAM
23952395

2396+
@unittest.skipUnless(hasattr(socket, "SOL_CAN_ISOTP"),
2397+
"missing <linux/can/isotp.h>")
2398+
def testISOTP(self):
2399+
socket.SOL_CAN_ISOTP
2400+
2401+
socket.CAN_ISOTP_OPTS
2402+
socket.CAN_ISOTP_RECV_FC
2403+
2404+
socket.CAN_ISOTP_TX_STMIN
2405+
socket.CAN_ISOTP_RX_STMIN
2406+
socket.CAN_ISOTP_LL_OPTS
2407+
2408+
socket.CAN_ISOTP_LISTEN_MODE
2409+
socket.CAN_ISOTP_EXTEND_ADDR
2410+
socket.CAN_ISOTP_TX_PADDING
2411+
socket.CAN_ISOTP_RX_PADDING
2412+
socket.CAN_ISOTP_CHK_PAD_LEN
2413+
socket.CAN_ISOTP_CHK_PAD_DATA
2414+
socket.CAN_ISOTP_HALF_DUPLEX
2415+
socket.CAN_ISOTP_FORCE_TXSTMIN
2416+
socket.CAN_ISOTP_FORCE_RXSTMIN
2417+
socket.CAN_ISOTP_RX_EXT_ADDR
2418+
socket.CAN_ISOTP_WAIT_TX_DONE
2419+
# This constant is not always available
2420+
# socket.CAN_ISOTP_SF_BROADCAST
2421+
2422+
socket.CAN_ISOTP_DEFAULT_FLAGS
2423+
socket.CAN_ISOTP_DEFAULT_EXT_ADDRESS
2424+
socket.CAN_ISOTP_DEFAULT_PAD_CONTENT
2425+
socket.CAN_ISOTP_DEFAULT_FRAME_TXTIME
2426+
socket.CAN_ISOTP_DEFAULT_RECV_BS
2427+
socket.CAN_ISOTP_DEFAULT_EXT_ADDRESS
2428+
socket.CAN_ISOTP_DEFAULT_RECV_STMIN
2429+
socket.CAN_ISOTP_DEFAULT_RECV_WFTMAX
2430+
2431+
socket.CAN_ISOTP_DEFAULT_LL_MTU
2432+
socket.CAN_ISOTP_DEFAULT_LL_TX_DL
2433+
socket.CAN_ISOTP_DEFAULT_LL_TX_FLAGS
2434+
23962435
def testCreateSocket(self):
23972436
with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
23982437
pass
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
:mod:`socket`: Add missing constants for ISO-TP sockets.

Modules/socketmodule.c

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

85298529
ADD_INT_MACRO(m, J1939_FILTER_MAX);
85308530
#endif
8531+
#ifdef HAVE_LINUX_CAN_ISOTP_H
8532+
ADD_INT_MACRO(m, SOL_CAN_ISOTP);
8533+
8534+
ADD_INT_MACRO(m, CAN_ISOTP_OPTS);
8535+
ADD_INT_MACRO(m, CAN_ISOTP_RECV_FC);
8536+
8537+
ADD_INT_MACRO(m, CAN_ISOTP_TX_STMIN);
8538+
ADD_INT_MACRO(m, CAN_ISOTP_RX_STMIN);
8539+
ADD_INT_MACRO(m, CAN_ISOTP_LL_OPTS);
8540+
8541+
ADD_INT_MACRO(m, CAN_ISOTP_LISTEN_MODE);
8542+
ADD_INT_MACRO(m, CAN_ISOTP_EXTEND_ADDR);
8543+
ADD_INT_MACRO(m, CAN_ISOTP_TX_PADDING);
8544+
ADD_INT_MACRO(m, CAN_ISOTP_RX_PADDING);
8545+
ADD_INT_MACRO(m, CAN_ISOTP_CHK_PAD_LEN);
8546+
ADD_INT_MACRO(m, CAN_ISOTP_CHK_PAD_DATA);
8547+
ADD_INT_MACRO(m, CAN_ISOTP_HALF_DUPLEX);
8548+
ADD_INT_MACRO(m, CAN_ISOTP_FORCE_TXSTMIN);
8549+
ADD_INT_MACRO(m, CAN_ISOTP_FORCE_RXSTMIN);
8550+
ADD_INT_MACRO(m, CAN_ISOTP_RX_EXT_ADDR);
8551+
ADD_INT_MACRO(m, CAN_ISOTP_WAIT_TX_DONE);
8552+
#ifdef CAN_ISOTP_SF_BROADCAST
8553+
ADD_INT_MACRO(m, CAN_ISOTP_SF_BROADCAST);
8554+
#endif
8555+
8556+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_FLAGS);
8557+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_EXT_ADDRESS);
8558+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_PAD_CONTENT);
8559+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_FRAME_TXTIME);
8560+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_RECV_BS);
8561+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_RECV_STMIN);
8562+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_RECV_WFTMAX);
8563+
8564+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_LL_MTU);
8565+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_LL_TX_DL);
8566+
ADD_INT_MACRO(m, CAN_ISOTP_DEFAULT_LL_TX_FLAGS);
8567+
#endif
85318568
#ifdef SOL_RDS
85328569
ADD_INT_MACRO(m, SOL_RDS);
85338570
#endif

Modules/socketmodule.h

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

168+
#ifdef HAVE_LINUX_CAN_ISOTP_H
169+
#include <linux/can/isotp.h>
170+
#endif
171+
168172
#ifdef HAVE_LINUX_CAN_J1939_H
169173
#include <linux/can/j1939.h>
170174
#endif

configure

Lines changed: 12 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

configure.ac

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3053,10 +3053,10 @@ AC_CHECK_HEADERS([linux/vm_sockets.h], [], [], [
30533053
#endif
30543054
])
30553055

3056-
# On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h
3056+
# On Linux, can.h, can/bcm.h, can/isotp.h, can/j1939.h, can/raw.h require sys/socket.h
30573057
# On NetBSD, netcan/can.h requires sys/socket.h
30583058
AC_CHECK_HEADERS(
3059-
[linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h netcan/can.h],
3059+
[linux/can.h linux/can/bcm.h linux/can/isotp.h linux/can/j1939.h linux/can/raw.h netcan/can.h],
30603060
[], [], [
30613061
#ifdef HAVE_SYS_SOCKET_H
30623062
#include <sys/socket.h>

pyconfig.h.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,9 @@
727727
/* Define to 1 if you have the <linux/can.h> header file. */
728728
#undef HAVE_LINUX_CAN_H
729729

730+
/* Define to 1 if you have the <linux/can/isotp.h> header file. */
731+
#undef HAVE_LINUX_CAN_ISOTP_H
732+
730733
/* Define to 1 if you have the <linux/can/j1939.h> header file. */
731734
#undef HAVE_LINUX_CAN_J1939_H
732735

0 commit comments

Comments
 (0)