diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index e3ddebdcbc0..eebbe810abe 100644 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -391,6 +391,9 @@ Constants .. availability:: Linux >= 2.6.25. + .. note:: + The :data:`CAN_BCM_CAN_FD_FRAME` flag is only available on Linux >= 4.8. + .. versionadded:: 3.4 .. data:: CAN_RAW_FD_FRAMES diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 2705eff4794..11b2a38ad76 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -1908,6 +1908,19 @@ class BasicCANTest(unittest.TestCase): socket.CAN_BCM_RX_TIMEOUT # cyclic message is absent socket.CAN_BCM_RX_CHANGED # updated CAN frame (detected content change) + # flags + socket.CAN_BCM_SETTIMER + socket.CAN_BCM_STARTTIMER + socket.CAN_BCM_TX_COUNTEVT + socket.CAN_BCM_TX_ANNOUNCE + socket.CAN_BCM_TX_CP_CAN_ID + socket.CAN_BCM_RX_FILTER_ID + socket.CAN_BCM_RX_CHECK_DLC + socket.CAN_BCM_RX_NO_AUTOTIMER + socket.CAN_BCM_RX_ANNOUNCE_RESUME + socket.CAN_BCM_TX_RESET_MULTI_IDX + socket.CAN_BCM_RX_RTR_FRAME + def testCreateSocket(self): with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s: pass diff --git a/Misc/ACKS b/Misc/ACKS index e02e8e1fa51..9ff74ec0cca 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -397,6 +397,7 @@ Alon Diamant Toby Dickenson Mark Dickinson Jack Diederich +Karl Ding Daniel Diniz Humberto Diogenes Yves Dionne diff --git a/Misc/NEWS.d/next/Library/2019-06-18-16-29-31.bpo-37085.GeYaD6.rst b/Misc/NEWS.d/next/Library/2019-06-18-16-29-31.bpo-37085.GeYaD6.rst new file mode 100644 index 00000000000..e8db521d7ab --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-06-18-16-29-31.bpo-37085.GeYaD6.rst @@ -0,0 +1,2 @@ +Add the optional Linux SocketCAN Broadcast Manager constants, used as flags +to configure the BCM behaviour, in the socket module. Patch by Karl Ding. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 73e64f235a6..99e350b4333 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -7656,6 +7656,8 @@ PyInit__socket(void) #endif #ifdef HAVE_LINUX_CAN_BCM_H PyModule_AddIntMacro(m, CAN_BCM); + + /* BCM opcodes */ PyModule_AddIntConstant(m, "CAN_BCM_TX_SETUP", TX_SETUP); PyModule_AddIntConstant(m, "CAN_BCM_TX_DELETE", TX_DELETE); PyModule_AddIntConstant(m, "CAN_BCM_TX_READ", TX_READ); @@ -7668,6 +7670,23 @@ PyInit__socket(void) PyModule_AddIntConstant(m, "CAN_BCM_RX_STATUS", RX_STATUS); PyModule_AddIntConstant(m, "CAN_BCM_RX_TIMEOUT", RX_TIMEOUT); PyModule_AddIntConstant(m, "CAN_BCM_RX_CHANGED", RX_CHANGED); + + /* BCM flags */ + PyModule_AddIntConstant(m, "CAN_BCM_SETTIMER", SETTIMER); + PyModule_AddIntConstant(m, "CAN_BCM_STARTTIMER", STARTTIMER); + PyModule_AddIntConstant(m, "CAN_BCM_TX_COUNTEVT", TX_COUNTEVT); + PyModule_AddIntConstant(m, "CAN_BCM_TX_ANNOUNCE", TX_ANNOUNCE); + PyModule_AddIntConstant(m, "CAN_BCM_TX_CP_CAN_ID", TX_CP_CAN_ID); + PyModule_AddIntConstant(m, "CAN_BCM_RX_FILTER_ID", RX_FILTER_ID); + PyModule_AddIntConstant(m, "CAN_BCM_RX_CHECK_DLC", RX_CHECK_DLC); + PyModule_AddIntConstant(m, "CAN_BCM_RX_NO_AUTOTIMER", RX_NO_AUTOTIMER); + PyModule_AddIntConstant(m, "CAN_BCM_RX_ANNOUNCE_RESUME", RX_ANNOUNCE_RESUME); + PyModule_AddIntConstant(m, "CAN_BCM_TX_RESET_MULTI_IDX", TX_RESET_MULTI_IDX); + PyModule_AddIntConstant(m, "CAN_BCM_RX_RTR_FRAME", RX_RTR_FRAME); +#ifdef CAN_FD_FRAME + /* CAN_FD_FRAME was only introduced in the 4.8.x kernel series */ + PyModule_AddIntConstant(m, "CAN_BCM_CAN_FD_FRAME", CAN_FD_FRAME); +#endif #endif #ifdef SOL_RDS PyModule_AddIntMacro(m, SOL_RDS);