From 40fcd16889028bd3cd2289e0f8a2af43f17a5824 Mon Sep 17 00:00:00 2001 From: Thomas Klausner Date: Fri, 21 Jan 2022 08:44:05 +0100 Subject: bpo-30512: Add CAN Socket support for NetBSD (GH-30066) --- Doc/library/socket.rst | 5 ++++- Doc/whatsnew/3.11.rst | 7 +++++++ .../Core and Builtins/2021-12-12-00-49-19.bpo-30512.nU9E9V.rst | 1 + Modules/socketmodule.c | 6 ++++-- Modules/socketmodule.h | 4 +++- configure | 3 ++- configure.ac | 3 ++- pyconfig.h.in | 3 +++ 8 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-12-12-00-49-19.bpo-30512.nU9E9V.rst diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index d6edc05..679631a 100755 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -396,10 +396,13 @@ Constants Many constants of these forms, documented in the Linux documentation, are also defined in the socket module. - .. availability:: Linux >= 2.6.25. + .. availability:: Linux >= 2.6.25, NetBSD >= 8. .. versionadded:: 3.3 + .. versionchanged:: 3.11 + NetBSD support was added. + .. data:: CAN_BCM CAN_BCM_* diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 5563e3d..ad421b1 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -264,6 +264,13 @@ os (Contributed by Dong-hee Na in :issue:`44611`.) +socket +------ + +* Add CAN Socket support for NetBSD. + (Contributed by Thomas Klausner in :issue:`30512`.) + + sqlite3 ------- diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-12-12-00-49-19.bpo-30512.nU9E9V.rst b/Misc/NEWS.d/next/Core and Builtins/2021-12-12-00-49-19.bpo-30512.nU9E9V.rst new file mode 100644 index 0000000..da2ce12 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-12-12-00-49-19.bpo-30512.nU9E9V.rst @@ -0,0 +1 @@ +Add CAN Socket support for NetBSD. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 0e27563..1c8ef1e 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -7703,7 +7703,7 @@ PyInit__socket(void) PyModule_AddIntMacro(m, SOL_CAN_RAW); PyModule_AddIntMacro(m, CAN_RAW); #endif -#ifdef HAVE_LINUX_CAN_H +#if defined(HAVE_LINUX_CAN_H) || defined(HAVE_NETCAN_CAN_H) PyModule_AddIntMacro(m, CAN_EFF_FLAG); PyModule_AddIntMacro(m, CAN_RTR_FLAG); PyModule_AddIntMacro(m, CAN_ERR_FLAG); @@ -7718,9 +7718,11 @@ PyInit__socket(void) PyModule_AddIntMacro(m, CAN_J1939); #endif #endif -#ifdef HAVE_LINUX_CAN_RAW_H +#if defined(HAVE_LINUX_CAN_RAW_H) || defined(HAVE_NETCAN_CAN_H) PyModule_AddIntMacro(m, CAN_RAW_FILTER); +#ifdef CAN_RAW_ERR_FILTER PyModule_AddIntMacro(m, CAN_RAW_ERR_FILTER); +#endif PyModule_AddIntMacro(m, CAN_RAW_LOOPBACK); PyModule_AddIntMacro(m, CAN_RAW_RECV_OWN_MSGS); #endif diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h index aea599f..db26c04 100644 --- a/Modules/socketmodule.h +++ b/Modules/socketmodule.h @@ -129,6 +129,8 @@ typedef int socklen_t; #ifdef HAVE_LINUX_CAN_H # include +#elif defined(HAVE_NETCAN_CAN_H) +# include #else # undef AF_CAN # undef PF_CAN @@ -253,7 +255,7 @@ typedef union sock_addr { #ifdef HAVE_NETPACKET_PACKET_H struct sockaddr_ll ll; #endif -#ifdef HAVE_LINUX_CAN_H +#if defined(HAVE_LINUX_CAN_H) || defined(HAVE_NETCAN_CAN_H) struct sockaddr_can can; #endif #ifdef HAVE_SYS_KERN_CONTROL_H diff --git a/configure b/configure index 402e626..f40d425 100755 --- a/configure +++ b/configure @@ -8940,7 +8940,8 @@ done # On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h -for ac_header in linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h +# On NetBSD, netcan/can.h requires sys/socket.h +for ac_header in linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h netcan/can.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " diff --git a/configure.ac b/configure.ac index 9c9a338..8d14042 100644 --- a/configure.ac +++ b/configure.ac @@ -2411,7 +2411,8 @@ AC_CHECK_HEADERS(linux/vm_sockets.h,,,[ ]) # On Linux, can.h, can/bcm.h, can/j1939.h, can/raw.h require sys/socket.h -AC_CHECK_HEADERS(linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h,,,[ +# On NetBSD, netcan/can.h requires sys/socket.h +AC_CHECK_HEADERS(linux/can.h linux/can/bcm.h linux/can/j1939.h linux/can/raw.h netcan/can.h,,,[ #ifdef HAVE_SYS_SOCKET_H #include #endif diff --git a/pyconfig.h.in b/pyconfig.h.in index 2182219..a779ffa 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -772,6 +772,9 @@ /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H +/* Define to 1 if you have the header file. */ +#undef HAVE_NETCAN_CAN_H + /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H -- cgit v0.12