/****************************************************************************
****************************************************************************
***
*** This header was automatically generated from a Linux kernel header
*** of the same name, to make information necessary for userspace to
*** call into the kernel available to libc. It contains only constants,
*** structures, and macros generated from the original header, and thus,
*** contains no copyrightable information.
***
*** To edit the content of this header, modify the corresponding
*** source file (e.g. under external/kernel-headers/original/) then
*** run bionic/libc/kernel/tools/update_all.py
***
*** Any manual change here will be lost the next time this script will
*** be run. You've been warned!
***
****************************************************************************
****************************************************************************/
#ifndef KCT_H_
#define KCT_H_
#include <linux/netlink.h>
#define EV_FLAGS_PRIORITY_LOW (1<<0)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#ifndef MAX_SB_N
#define MAX_SB_N 32
#endif
#ifndef MAX_EV_N
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define MAX_EV_N 32
#endif
#define NETLINK_CRASHTOOL 27
#define ATTCHMT_ALIGN 4U
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
enum ct_ev_type {
CT_EV_STAT,
CT_EV_INFO,
CT_EV_ERROR,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CT_EV_CRASH,
CT_EV_LAST
};
enum ct_attchmt_type {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CT_ATTCHMT_DATA0,
CT_ATTCHMT_DATA1,
CT_ATTCHMT_DATA2,
CT_ATTCHMT_DATA3,
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
CT_ATTCHMT_DATA4,
CT_ATTCHMT_DATA5,
CT_ATTCHMT_BINARY,
CT_ATTCHMT_FILELIST
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
};
struct ct_attchmt {
__u32 size;
enum ct_attchmt_type type;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
char data[];
} __aligned(4);
struct ct_event {
__u64 timestamp;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
char submitter_name[MAX_SB_N];
char ev_name[MAX_EV_N];
enum ct_ev_type type;
__u32 attchmt_size;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
__u32 flags;
struct ct_attchmt attachments[];
} __aligned(4);
enum kct_nlmsg_type {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
KCT_EVENT,
KCT_SET_PID = 4200,
};
struct kct_packet {
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
struct nlmsghdr nlh;
struct ct_event event;
};
#define ATTCHMT_ALIGNMENT 4
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#ifndef KCT_ALIGN
#define __KCT_ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask))
#define __KCT_ALIGN(x, a) __KCT_ALIGN_MASK(x, (typeof(x))(a) - 1)
#define KCT_ALIGN(x, a) __KCT_ALIGN((x), (a))
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#endif
#define foreach_attchmt(Event, Attchmt) if ((Event)->attchmt_size) for ((Attchmt) = (Event)->attachments; (Attchmt) < (typeof(Attchmt))(((char *) (Event)->attachments) + (Event)->attchmt_size); (Attchmt) = (typeof(Attchmt))KCT_ALIGN(((size_t)(Attchmt)) + sizeof(*(Attchmt)) + (Attchmt)->size, ATTCHMT_ALIGNMENT))
#define MKFN(fn, ...) MKFN_N(fn, ##__VA_ARGS__, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)(__VA_ARGS__)
#define MKFN_N(fn, n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n, ...) fn##n
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define kct_log(...) MKFN(__kct_log_, ##__VA_ARGS__)
#define __kct_log_4(Type, Submitter_name, Ev_name, flags) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
#define __kct_log_5(Type, Submitter_name, Ev_name, flags, Data0) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
#define __kct_log_6(Type, Submitter_name, Ev_name, flags, Data0, Data1) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); if (Data1) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA1, strlen(Data1) + 1, Data1, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define __kct_log_7(Type, Submitter_name, Ev_name, flags, Data0, Data1, Data2) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); if (Data1) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA1, strlen(Data1) + 1, Data1, GFP_ATOMIC); if (Data2) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA2, strlen(Data2) + 1, Data2, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
#define __kct_log_8(Type, Submitter_name, Ev_name, flags, Data0, Data1, Data2, Data3) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); if (Data1) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA1, strlen(Data1) + 1, Data1, GFP_ATOMIC); if (Data2) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA2, strlen(Data2) + 1, Data2, GFP_ATOMIC); if (Data3) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA3, strlen(Data3) + 1, Data3, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
#define __kct_log_9(Type, Submitter_name, Ev_name, flags, Data0, Data1, Data2, Data3, Data4) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); if (Data1) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA1, strlen(Data1) + 1, Data1, GFP_ATOMIC); if (Data2) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA2, strlen(Data2) + 1, Data2, GFP_ATOMIC); if (Data3) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA3, strlen(Data3) + 1, Data3, GFP_ATOMIC); if (Data4) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA4, strlen(Data4) + 1, Data4, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
#define __kct_log_10(Type, Submitter_name, Ev_name, flags, Data0, Data1, Data2, Data3, Data4, Data5) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); if (Data1) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA1, strlen(Data1) + 1, Data1, GFP_ATOMIC); if (Data2) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA2, strlen(Data2) + 1, Data2, GFP_ATOMIC); if (Data3) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA3, strlen(Data3) + 1, Data3, GFP_ATOMIC); if (Data4) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA4, strlen(Data4) + 1, Data4, GFP_ATOMIC); if (Data5) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA5, strlen(Data5) + 1, Data5, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
#define __kct_log_11(Type, Submitter_name, Ev_name, flags, Data0, Data1, Data2, Data3, Data4, Data5, filelist) do { if (kct_alloc_event) { struct ct_event *__ev = kct_alloc_event(Submitter_name, Ev_name, Type, GFP_ATOMIC, flags); if (__ev) { if (Data0) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA0, strlen(Data0) + 1, Data0, GFP_ATOMIC); if (Data1) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA1, strlen(Data1) + 1, Data1, GFP_ATOMIC); if (Data2) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA2, strlen(Data2) + 1, Data2, GFP_ATOMIC); if (Data3) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA3, strlen(Data3) + 1, Data3, GFP_ATOMIC); if (Data4) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA4, strlen(Data4) + 1, Data4, GFP_ATOMIC); if (Data5) kct_add_attchmt(&__ev, CT_ATTCHMT_DATA5, strlen(Data5) + 1, Data5, GFP_ATOMIC); if (filelist) kct_add_attchmt(&__ev, CT_ATTCHMT_FILELIST, strlen(filelist) + 1, filelist, GFP_ATOMIC); kct_log_event(__ev, GFP_ATOMIC); } } } while (0)
#endif