unix: add can netlink types and constants
Change-Id: Ie234f26c38a9ced6407f2970fa97b49d18119f06
Reviewed-on: https://go-review.googlesource.com/c/sys/+/387474
Reviewed-by: Matt Layher <mdlayher@gmail.com>
Trust: Matt Layher <mdlayher@gmail.com>
Run-TryBot: Matt Layher <mdlayher@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Trust: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
diff --git a/unix/linux/types.go b/unix/linux/types.go
index e93be95..dfd5e50 100644
--- a/unix/linux/types.go
+++ b/unix/linux/types.go
@@ -82,6 +82,7 @@
#include <linux/blkpg.h>
#include <linux/bpf.h>
#include <linux/can.h>
+#include <linux/can/netlink.h>
#include <linux/can/raw.h>
#include <linux/capability.h>
#include <linux/cgroupstats.h>
@@ -426,6 +427,19 @@
// From the union.
__u32 domain;
};
+
+// copied from /usr/include/linux/can/netlink.h modified with explicit unsigned chars.
+struct my_can_bittiming_const {
+ uint8_t name[16];
+ __u32 tseg1_min;
+ __u32 tseg1_max;
+ __u32 tseg2_min;
+ __u32 tseg2_max;
+ __u32 sjw_max;
+ __u32 brp_min;
+ __u32 brp_max;
+ __u32 brp_inc;
+};
*/
import "C"
@@ -3982,3 +3996,50 @@
NL_POLICY_TYPE_ATTR_MASK = C.NL_POLICY_TYPE_ATTR_MASK
NL_POLICY_TYPE_ATTR_MAX = C.NL_POLICY_TYPE_ATTR_MAX
)
+
+// CAN netlink types
+
+type CANBitTiming C.struct_can_bittiming
+
+type CANBitTimingConst C.struct_my_can_bittiming_const
+
+type CANClock C.struct_can_clock
+
+type CANBusErrorCounters C.struct_can_berr_counter
+
+type CANCtrlMode C.struct_can_ctrlmode
+
+type CANDeviceStats C.struct_can_device_stats
+
+// Generated by:
+// perl -nlE '/^\s*(CAN_STATE\w+)/ && say "$1 = C.$1"' /usr/include/linux/can/netlink.h
+const (
+ CAN_STATE_ERROR_ACTIVE = C.CAN_STATE_ERROR_ACTIVE
+ CAN_STATE_ERROR_WARNING = C.CAN_STATE_ERROR_WARNING
+ CAN_STATE_ERROR_PASSIVE = C.CAN_STATE_ERROR_PASSIVE
+ CAN_STATE_BUS_OFF = C.CAN_STATE_BUS_OFF
+ CAN_STATE_STOPPED = C.CAN_STATE_STOPPED
+ CAN_STATE_SLEEPING = C.CAN_STATE_SLEEPING
+ CAN_STATE_MAX = C.CAN_STATE_MAX
+)
+
+// Generated by:
+// perl -nlE '/^\s*(IFLA_CAN\w+)/ && say "$1 = C.$1"' /usr/include/linux/can/netlink.h
+const (
+ IFLA_CAN_UNSPEC = C.IFLA_CAN_UNSPEC
+ IFLA_CAN_BITTIMING = C.IFLA_CAN_BITTIMING
+ IFLA_CAN_BITTIMING_CONST = C.IFLA_CAN_BITTIMING_CONST
+ IFLA_CAN_CLOCK = C.IFLA_CAN_CLOCK
+ IFLA_CAN_STATE = C.IFLA_CAN_STATE
+ IFLA_CAN_CTRLMODE = C.IFLA_CAN_CTRLMODE
+ IFLA_CAN_RESTART_MS = C.IFLA_CAN_RESTART_MS
+ IFLA_CAN_RESTART = C.IFLA_CAN_RESTART
+ IFLA_CAN_BERR_COUNTER = C.IFLA_CAN_BERR_COUNTER
+ IFLA_CAN_DATA_BITTIMING = C.IFLA_CAN_DATA_BITTIMING
+ IFLA_CAN_DATA_BITTIMING_CONST = C.IFLA_CAN_DATA_BITTIMING_CONST
+ IFLA_CAN_TERMINATION = C.IFLA_CAN_TERMINATION
+ IFLA_CAN_TERMINATION_CONST = C.IFLA_CAN_TERMINATION_CONST
+ IFLA_CAN_BITRATE_CONST = C.IFLA_CAN_BITRATE_CONST
+ IFLA_CAN_DATA_BITRATE_CONST = C.IFLA_CAN_DATA_BITRATE_CONST
+ IFLA_CAN_BITRATE_MAX = C.IFLA_CAN_BITRATE_MAX
+)
diff --git a/unix/mkerrors.sh b/unix/mkerrors.sh
index e92ddea..bcc0039 100755
--- a/unix/mkerrors.sh
+++ b/unix/mkerrors.sh
@@ -205,6 +205,7 @@
#include <linux/bpf.h>
#include <linux/can.h>
#include <linux/can/error.h>
+#include <linux/can/netlink.h>
#include <linux/can/raw.h>
#include <linux/capability.h>
#include <linux/cryptouser.h>
diff --git a/unix/zerrors_linux.go b/unix/zerrors_linux.go
index 664db64..5038341 100644
--- a/unix/zerrors_linux.go
+++ b/unix/zerrors_linux.go
@@ -260,6 +260,17 @@
BUS_USB = 0x3
BUS_VIRTUAL = 0x6
CAN_BCM = 0x2
+ CAN_CTRLMODE_3_SAMPLES = 0x4
+ CAN_CTRLMODE_BERR_REPORTING = 0x10
+ CAN_CTRLMODE_CC_LEN8_DLC = 0x100
+ CAN_CTRLMODE_FD = 0x20
+ CAN_CTRLMODE_FD_NON_ISO = 0x80
+ CAN_CTRLMODE_LISTENONLY = 0x2
+ CAN_CTRLMODE_LOOPBACK = 0x1
+ CAN_CTRLMODE_ONE_SHOT = 0x8
+ CAN_CTRLMODE_PRESUME_ACK = 0x40
+ CAN_CTRLMODE_TDC_AUTO = 0x200
+ CAN_CTRLMODE_TDC_MANUAL = 0x400
CAN_EFF_FLAG = 0x80000000
CAN_EFF_ID_BITS = 0x1d
CAN_EFF_MASK = 0x1fffffff
@@ -337,6 +348,7 @@
CAN_RTR_FLAG = 0x40000000
CAN_SFF_ID_BITS = 0xb
CAN_SFF_MASK = 0x7ff
+ CAN_TERMINATION_DISABLED = 0x0
CAN_TP16 = 0x3
CAN_TP20 = 0x4
CAP_AUDIT_CONTROL = 0x1e
diff --git a/unix/ztypes_linux.go b/unix/ztypes_linux.go
index 824cadb..27f7d7a 100644
--- a/unix/ztypes_linux.go
+++ b/unix/ztypes_linux.go
@@ -4070,3 +4070,78 @@
NL_POLICY_TYPE_ATTR_MASK = 0xc
NL_POLICY_TYPE_ATTR_MAX = 0xc
)
+
+type CANBitTiming struct {
+ Bitrate uint32
+ Sample_point uint32
+ Tq uint32
+ Prop_seg uint32
+ Phase_seg1 uint32
+ Phase_seg2 uint32
+ Sjw uint32
+ Brp uint32
+}
+
+type CANBitTimingConst struct {
+ Name [16]uint8
+ Tseg1_min uint32
+ Tseg1_max uint32
+ Tseg2_min uint32
+ Tseg2_max uint32
+ Sjw_max uint32
+ Brp_min uint32
+ Brp_max uint32
+ Brp_inc uint32
+}
+
+type CANClock struct {
+ Freq uint32
+}
+
+type CANBusErrorCounters struct {
+ Txerr uint16
+ Rxerr uint16
+}
+
+type CANCtrlMode struct {
+ Mask uint32
+ Flags uint32
+}
+
+type CANDeviceStats struct {
+ Bus_error uint32
+ Error_warning uint32
+ Error_passive uint32
+ Bus_off uint32
+ Arbitration_lost uint32
+ Restarts uint32
+}
+
+const (
+ CAN_STATE_ERROR_ACTIVE = 0x0
+ CAN_STATE_ERROR_WARNING = 0x1
+ CAN_STATE_ERROR_PASSIVE = 0x2
+ CAN_STATE_BUS_OFF = 0x3
+ CAN_STATE_STOPPED = 0x4
+ CAN_STATE_SLEEPING = 0x5
+ CAN_STATE_MAX = 0x6
+)
+
+const (
+ IFLA_CAN_UNSPEC = 0x0
+ IFLA_CAN_BITTIMING = 0x1
+ IFLA_CAN_BITTIMING_CONST = 0x2
+ IFLA_CAN_CLOCK = 0x3
+ IFLA_CAN_STATE = 0x4
+ IFLA_CAN_CTRLMODE = 0x5
+ IFLA_CAN_RESTART_MS = 0x6
+ IFLA_CAN_RESTART = 0x7
+ IFLA_CAN_BERR_COUNTER = 0x8
+ IFLA_CAN_DATA_BITTIMING = 0x9
+ IFLA_CAN_DATA_BITTIMING_CONST = 0xa
+ IFLA_CAN_TERMINATION = 0xb
+ IFLA_CAN_TERMINATION_CONST = 0xc
+ IFLA_CAN_BITRATE_CONST = 0xd
+ IFLA_CAN_DATA_BITRATE_CONST = 0xe
+ IFLA_CAN_BITRATE_MAX = 0xf
+)