taskstats 0.1.1

high-level encapsulation of Linux's per-task statistics interface
Documentation
#![allow(dead_code, non_camel_case_types)]

use byteorder::NativeEndian;
use std::os::raw::c_char;
use zerocopy::{AsBytes, FromBytes, U64};

pub const TS_COMM_LEN: usize = 32;
pub const TASKSTATS_GENL_NAME: &[u8] = b"TASKSTATS\0";
pub const TASKSTATS_GENL_VERSION: u8 = 1;

type __u64 = U64<NativeEndian>;

#[repr(C)]
#[derive(Debug, Default, Copy, Clone, AsBytes, FromBytes)]
pub struct taskstats_v9 {
    pub version: u16,
    pub _padding_0: u16,
    pub ac_exitcode: u32,
    pub ac_flag: u8,
    pub ac_nice: u8,
    pub _padding_1: u16,
    pub _padding_2: u32,
    pub cpu_count: __u64,
    pub cpu_delay_total: __u64,
    pub blkio_count: __u64,
    pub blkio_delay_total: __u64,
    pub swapin_count: __u64,
    pub swapin_delay_total: __u64,
    pub cpu_run_real_total: __u64,
    pub cpu_run_virtual_total: __u64,
    pub ac_comm: [c_char; TS_COMM_LEN],
    pub ac_sched: u8,
    pub ac_pad: [u8; 3usize],
    pub _padding_3: u32,
    pub ac_uid: u32,
    pub ac_gid: u32,
    pub ac_pid: u32,
    pub ac_ppid: u32,
    pub ac_btime: u32,
    pub _padding_4: u32,
    pub ac_etime: __u64,
    pub ac_utime: __u64,
    pub ac_stime: __u64,
    pub ac_minflt: __u64,
    pub ac_majflt: __u64,
    pub coremem: __u64,
    pub virtmem: __u64,
    pub hiwater_rss: __u64,
    pub hiwater_vm: __u64,
    pub read_char: __u64,
    pub write_char: __u64,
    pub read_syscalls: __u64,
    pub write_syscalls: __u64,
    pub read_bytes: __u64,
    pub write_bytes: __u64,
    pub cancelled_write_bytes: __u64,
    pub nvcsw: __u64,
    pub nivcsw: __u64,
    pub ac_utimescaled: __u64,
    pub ac_stimescaled: __u64,
    pub cpu_scaled_run_real_total: __u64,
    pub freepages_count: __u64,
    pub freepages_delay_total: __u64,
    pub thrashing_count: __u64,
    pub thrashing_delay_total: __u64,
}

type _bindgen_ty_1 = u8;
pub const TASKSTATS_CMD_UNSPEC: _bindgen_ty_1 = 0;
pub const TASKSTATS_CMD_GET: _bindgen_ty_1 = 1;
pub const TASKSTATS_CMD_NEW: _bindgen_ty_1 = 2;
pub const __TASKSTATS_CMD_MAX: _bindgen_ty_1 = 3;

type _bindgen_ty_2 = u16;
pub const TASKSTATS_TYPE_UNSPEC: _bindgen_ty_2 = 0;
pub const TASKSTATS_TYPE_PID: _bindgen_ty_2 = 1;
pub const TASKSTATS_TYPE_TGID: _bindgen_ty_2 = 2;
pub const TASKSTATS_TYPE_STATS: _bindgen_ty_2 = 3;
pub const TASKSTATS_TYPE_AGGR_PID: _bindgen_ty_2 = 4;
pub const TASKSTATS_TYPE_AGGR_TGID: _bindgen_ty_2 = 5;
pub const TASKSTATS_TYPE_NULL: _bindgen_ty_2 = 6;
pub const __TASKSTATS_TYPE_MAX: _bindgen_ty_2 = 7;

type _bindgen_ty_3 = u16;
pub const TASKSTATS_CMD_ATTR_UNSPEC: _bindgen_ty_3 = 0;
pub const TASKSTATS_CMD_ATTR_PID: _bindgen_ty_3 = 1;
pub const TASKSTATS_CMD_ATTR_TGID: _bindgen_ty_3 = 2;
pub const TASKSTATS_CMD_ATTR_REGISTER_CPUMASK: _bindgen_ty_3 = 3;
pub const TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK: _bindgen_ty_3 = 4;
pub const __TASKSTATS_CMD_ATTR_MAX: _bindgen_ty_3 = 5;

#[cfg(test)]
mod tests {
    use super::*;
    use std::mem::{align_of, size_of};
    use std::ptr::null;

    #[test]
    fn bindgen_test_layout_taskstats_v9() {
        assert_eq!(size_of::<taskstats_v9>(), 344usize, "Size of: taskstats");
        assert_eq!(align_of::<taskstats_v9>(), 4usize, "Alignment of taskstats");
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).version as *const _ as usize },
            0usize,
            "Offset of field: taskstats::version"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_exitcode as *const _ as usize },
            4usize,
            "Offset of field: taskstats::ac_exitcode"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_flag as *const _ as usize },
            8usize,
            "Offset of field: taskstats::ac_flag"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_nice as *const _ as usize },
            9usize,
            "Offset of field: taskstats::ac_nice"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).cpu_count as *const _ as usize },
            16usize,
            "Offset of field: taskstats::cpu_count"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).cpu_delay_total as *const _ as usize },
            24usize,
            "Offset of field: taskstats::cpu_delay_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).blkio_count as *const _ as usize },
            32usize,
            "Offset of field: taskstats::blkio_count"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).blkio_delay_total as *const _ as usize },
            40usize,
            "Offset of field: taskstats::blkio_delay_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).swapin_count as *const _ as usize },
            48usize,
            "Offset of field: taskstats::swapin_count"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).swapin_delay_total as *const _ as usize },
            56usize,
            "Offset of field: taskstats::swapin_delay_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).cpu_run_real_total as *const _ as usize },
            64usize,
            "Offset of field: taskstats::cpu_run_real_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).cpu_run_virtual_total as *const _ as usize },
            72usize,
            "Offset of field: taskstats::cpu_run_virtual_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_comm as *const _ as usize },
            80usize,
            "Offset of field: taskstats::ac_comm"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_sched as *const _ as usize },
            112usize,
            "Offset of field: taskstats::ac_sched"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_pad as *const _ as usize },
            113usize,
            "Offset of field: taskstats::ac_pad"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_uid as *const _ as usize },
            120usize,
            "Offset of field: taskstats::ac_uid"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_gid as *const _ as usize },
            124usize,
            "Offset of field: taskstats::ac_gid"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_pid as *const _ as usize },
            128usize,
            "Offset of field: taskstats::ac_pid"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_ppid as *const _ as usize },
            132usize,
            "Offset of field: taskstats::ac_ppid"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_btime as *const _ as usize },
            136usize,
            "Offset of field: taskstats::ac_btime"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_etime as *const _ as usize },
            144usize,
            "Offset of field: taskstats::ac_etime"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_utime as *const _ as usize },
            152usize,
            "Offset of field: taskstats::ac_utime"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_stime as *const _ as usize },
            160usize,
            "Offset of field: taskstats::ac_stime"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_minflt as *const _ as usize },
            168usize,
            "Offset of field: taskstats::ac_minflt"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_majflt as *const _ as usize },
            176usize,
            "Offset of field: taskstats::ac_majflt"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).coremem as *const _ as usize },
            184usize,
            "Offset of field: taskstats::coremem"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).virtmem as *const _ as usize },
            192usize,
            "Offset of field: taskstats::virtmem"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).hiwater_rss as *const _ as usize },
            200usize,
            "Offset of field: taskstats::hiwater_rss"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).hiwater_vm as *const _ as usize },
            208usize,
            "Offset of field: taskstats::hiwater_vm"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).read_char as *const _ as usize },
            216usize,
            "Offset of field: taskstats::read_char"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).write_char as *const _ as usize },
            224usize,
            "Offset of field: taskstats::write_char"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).read_syscalls as *const _ as usize },
            232usize,
            "Offset of field: taskstats::read_syscalls"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).write_syscalls as *const _ as usize },
            240usize,
            "Offset of field: taskstats::write_syscalls"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).read_bytes as *const _ as usize },
            248usize,
            "Offset of field: taskstats::read_bytes"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).write_bytes as *const _ as usize },
            256usize,
            "Offset of field: taskstats::write_bytes"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).cancelled_write_bytes as *const _ as usize },
            264usize,
            "Offset of field: taskstats::cancelled_write_bytes"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).nvcsw as *const _ as usize },
            272usize,
            "Offset of field: taskstats::nvcsw"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).nivcsw as *const _ as usize },
            280usize,
            "Offset of field: taskstats::nivcsw"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_utimescaled as *const _ as usize },
            288usize,
            "Offset of field: taskstats::ac_utimescaled"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).ac_stimescaled as *const _ as usize },
            296usize,
            "Offset of field: taskstats::ac_stimescaled"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).cpu_scaled_run_real_total as *const _ as usize },
            304usize,
            "Offset of field: taskstats::cpu_scaled_run_real_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).freepages_count as *const _ as usize },
            312usize,
            "Offset of field: taskstats::freepages_count"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).freepages_delay_total as *const _ as usize },
            320usize,
            "Offset of field: taskstats::freepages_delay_total"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).thrashing_count as *const _ as usize },
            328usize,
            "Offset of field: taskstats::thrashing_count"
        );
        assert_eq!(
            unsafe { &(*(null::<taskstats_v9>())).thrashing_delay_total as *const _ as usize },
            336usize,
            "Offset of field: taskstats::thrashing_delay_total"
        );
    }
}