/* Automatically generated nanopb header */
/* Generated by nanopb-0.4.5 */

#ifndef PB_SCHEMA_CONFIG_PB_H_INCLUDED
#define PB_SCHEMA_CONFIG_PB_H_INCLUDED
#include <pb.h>

#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
#endif

/* Enum definitions */
typedef enum _schema_ConfigurationResponse_ErrorCode { 
    schema_ConfigurationResponse_ErrorCode_NO_ERROR = 0, 
    schema_ConfigurationResponse_ErrorCode_UNKNOWN = 2 
} schema_ConfigurationResponse_ErrorCode;

/* Struct definitions */
/* Report success or failure of previous ConfigurationRequest */
typedef struct _schema_ConfigurationResponse { 
    schema_ConfigurationResponse_ErrorCode error; 
    pb_callback_t msg; 
    uint64_t version; /* Version of the LSM */
    uint32_t kernel_version; /* LINUX_VERSION_CODE */
} schema_ConfigurationResponse;

/* Collect information about running containers */
typedef struct _schema_ContainerCollectorConfig { 
    bool enabled; 
} schema_ContainerCollectorConfig;

typedef struct _schema_ExecuteCollectorConfig { 
    bool enabled; 
    /* truncate argv/envp if cumulative length exceeds limit */
    uint32_t argv_limit; 
    uint32_t envp_limit; 
    /* If specified, only report the named environment variables.  An
 empty envp_allowlist indicates that all environment variables
 should be reported up to a cumulative total of envp_limit bytes. */
    pb_callback_t envp_allowlist; 
} schema_ExecuteCollectorConfig;

/* Collect information about executable memory mappings. */
typedef struct _schema_MemExecCollectorConfig { 
    bool enabled; 
} schema_MemExecCollectorConfig;

/* Convey configuration information to Guest LSM */
typedef struct _schema_ConfigurationRequest { 
    bool has_container_config;
    schema_ContainerCollectorConfig container_config; 
    bool has_execute_config;
    schema_ExecuteCollectorConfig execute_config; 
    bool has_memexec_config;
    schema_MemExecCollectorConfig memexec_config; 
} schema_ConfigurationRequest;


/* Helper constants for enums */
#define _schema_ConfigurationResponse_ErrorCode_MIN schema_ConfigurationResponse_ErrorCode_NO_ERROR
#define _schema_ConfigurationResponse_ErrorCode_MAX schema_ConfigurationResponse_ErrorCode_UNKNOWN
#define _schema_ConfigurationResponse_ErrorCode_ARRAYSIZE ((schema_ConfigurationResponse_ErrorCode)(schema_ConfigurationResponse_ErrorCode_UNKNOWN+1))


#ifdef __cplusplus
extern "C" {
#endif

/* Initializer values for message structs */
#define schema_ContainerCollectorConfig_init_default {0}
#define schema_ExecuteCollectorConfig_init_default {0, 0, 0, {{NULL}, NULL}}
#define schema_MemExecCollectorConfig_init_default {0}
#define schema_ConfigurationRequest_init_default {false, schema_ContainerCollectorConfig_init_default, false, schema_ExecuteCollectorConfig_init_default, false, schema_MemExecCollectorConfig_init_default}
#define schema_ConfigurationResponse_init_default {_schema_ConfigurationResponse_ErrorCode_MIN, {{NULL}, NULL}, 0, 0}
#define schema_ContainerCollectorConfig_init_zero {0}
#define schema_ExecuteCollectorConfig_init_zero  {0, 0, 0, {{NULL}, NULL}}
#define schema_MemExecCollectorConfig_init_zero  {0}
#define schema_ConfigurationRequest_init_zero    {false, schema_ContainerCollectorConfig_init_zero, false, schema_ExecuteCollectorConfig_init_zero, false, schema_MemExecCollectorConfig_init_zero}
#define schema_ConfigurationResponse_init_zero   {_schema_ConfigurationResponse_ErrorCode_MIN, {{NULL}, NULL}, 0, 0}

/* Field tags (for use in manual encoding/decoding) */
#define schema_ConfigurationResponse_error_tag   1
#define schema_ConfigurationResponse_msg_tag     2
#define schema_ConfigurationResponse_version_tag 3
#define schema_ConfigurationResponse_kernel_version_tag 4
#define schema_ContainerCollectorConfig_enabled_tag 1
#define schema_ExecuteCollectorConfig_enabled_tag 1
#define schema_ExecuteCollectorConfig_argv_limit_tag 2
#define schema_ExecuteCollectorConfig_envp_limit_tag 3
#define schema_ExecuteCollectorConfig_envp_allowlist_tag 4
#define schema_MemExecCollectorConfig_enabled_tag 1
#define schema_ConfigurationRequest_container_config_tag 1
#define schema_ConfigurationRequest_execute_config_tag 2
#define schema_ConfigurationRequest_memexec_config_tag 3

/* Struct field encoding specification for nanopb */
#define schema_ContainerCollectorConfig_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, BOOL,     enabled,           1)
#define schema_ContainerCollectorConfig_CALLBACK NULL
#define schema_ContainerCollectorConfig_DEFAULT NULL

#define schema_ExecuteCollectorConfig_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, BOOL,     enabled,           1) \
X(a, STATIC,   SINGULAR, UINT32,   argv_limit,        2) \
X(a, STATIC,   SINGULAR, UINT32,   envp_limit,        3) \
X(a, CALLBACK, REPEATED, STRING,   envp_allowlist,    4)
#define schema_ExecuteCollectorConfig_CALLBACK pb_default_field_callback
#define schema_ExecuteCollectorConfig_DEFAULT NULL

#define schema_MemExecCollectorConfig_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, BOOL,     enabled,           1)
#define schema_MemExecCollectorConfig_CALLBACK NULL
#define schema_MemExecCollectorConfig_DEFAULT NULL

#define schema_ConfigurationRequest_FIELDLIST(X, a) \
X(a, STATIC,   OPTIONAL, MESSAGE,  container_config,   1) \
X(a, STATIC,   OPTIONAL, MESSAGE,  execute_config,    2) \
X(a, STATIC,   OPTIONAL, MESSAGE,  memexec_config,    3)
#define schema_ConfigurationRequest_CALLBACK NULL
#define schema_ConfigurationRequest_DEFAULT NULL
#define schema_ConfigurationRequest_container_config_MSGTYPE schema_ContainerCollectorConfig
#define schema_ConfigurationRequest_execute_config_MSGTYPE schema_ExecuteCollectorConfig
#define schema_ConfigurationRequest_memexec_config_MSGTYPE schema_MemExecCollectorConfig

#define schema_ConfigurationResponse_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UENUM,    error,             1) \
X(a, CALLBACK, SINGULAR, STRING,   msg,               2) \
X(a, STATIC,   SINGULAR, UINT64,   version,           3) \
X(a, STATIC,   SINGULAR, UINT32,   kernel_version,    4)
#define schema_ConfigurationResponse_CALLBACK pb_default_field_callback
#define schema_ConfigurationResponse_DEFAULT NULL

extern const pb_msgdesc_t schema_ContainerCollectorConfig_msg;
extern const pb_msgdesc_t schema_ExecuteCollectorConfig_msg;
extern const pb_msgdesc_t schema_MemExecCollectorConfig_msg;
extern const pb_msgdesc_t schema_ConfigurationRequest_msg;
extern const pb_msgdesc_t schema_ConfigurationResponse_msg;

/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define schema_ContainerCollectorConfig_fields &schema_ContainerCollectorConfig_msg
#define schema_ExecuteCollectorConfig_fields &schema_ExecuteCollectorConfig_msg
#define schema_MemExecCollectorConfig_fields &schema_MemExecCollectorConfig_msg
#define schema_ConfigurationRequest_fields &schema_ConfigurationRequest_msg
#define schema_ConfigurationResponse_fields &schema_ConfigurationResponse_msg

/* Maximum encoded size of messages (where known) */
/* schema_ExecuteCollectorConfig_size depends on runtime parameters */
/* schema_ConfigurationRequest_size depends on runtime parameters */
/* schema_ConfigurationResponse_size depends on runtime parameters */
#define schema_ContainerCollectorConfig_size     2
#define schema_MemExecCollectorConfig_size       2

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif
