bpo-37085: Expose SocketCAN bcm_msg_head flags (#13646)
Expose the CAN_BCM SocketCAN constants used in the bcm_msg_head struct flags (provided by <linux/can/bcm.h>) under the socket library. This adds the following constants with a CAN_BCM prefix: * SETTIMER * STARTTIMER * TX_COUNTEVT * TX_ANNOUNCE * TX_CP_CAN_ID * RX_FILTER_ID * RX_CHECK_DLC * RX_NO_AUTOTIMER * RX_ANNOUNCE_RESUME * TX_RESET_MULTI_IDX * RX_RTR_FRAME * CAN_FD_FRAME The CAN_FD_FRAME flag was introduced in the 4.8 kernel, while the other ones were present since SocketCAN drivers were mainlined in 2.6.25. As such, it is probably unnecessary to guard against these constants being missing.
This commit is contained in:
parent
472eced677
commit
31c4fd2a10
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -397,6 +397,7 @@ Alon Diamant
|
|||
Toby Dickenson
|
||||
Mark Dickinson
|
||||
Jack Diederich
|
||||
Karl Ding
|
||||
Daniel Diniz
|
||||
Humberto Diogenes
|
||||
Yves Dionne
|
||||
|
|
|
@ -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.
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue