iSulad/src/libisula.h
WangFengTu 4fabc9ffbf Support devicemapper
Signed-off-by: WangFengTu <wangfengtu@huawei.com>
2020-02-12 22:55:38 -05:00

844 lines
17 KiB
C

/******************************************************************************
* Copyright (c) Huawei Technologies Co., Ltd. 2018-2019. All rights reserved.
* iSulad licensed under the Mulan PSL v1.
* You can use this software according to the terms and conditions of the Mulan PSL v1.
* You may obtain a copy of Mulan PSL v1 at:
* http://license.coscl.org.cn/MulanPSL
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v1 for more details.
* Author: tanyifeng
* Create: 2018-11-08
* Description: provide container isula library definition
******************************************************************************/
#ifndef __LIB_ISULA_H
#define __LIB_ISULA_H
#include <stdbool.h>
#include <stdint.h>
#include "container_def.h"
#include "container_path_stat.h"
#include "json_common.h"
#include "console.h"
#ifdef __cplusplus
extern "C" {
#endif
struct isula_filters {
char **keys;
char **values;
size_t len;
};
typedef struct isula_container_config {
char **env;
size_t env_len;
char *hostname;
char *user;
bool attach_stdin;
bool attach_stdout;
bool attach_stderr;
bool open_stdin;
bool tty;
bool readonly;
bool all_devices;
bool system_container;
char *ns_change_opt;
char **mounts;
size_t mounts_len;
char *entrypoint;
char **cmd;
size_t cmd_len;
char *log_file;
char *log_file_size;
unsigned int log_file_rotate;
json_map_string_string *annotations;
char *workdir;
char *health_cmd;
int64_t health_interval;
int health_retries;
int64_t health_timeout;
int64_t health_start_period;
bool no_healthcheck;
bool exit_on_unhealthy;
char **accel;
size_t accel_len;
} isula_container_config_t;
typedef struct isula_host_config {
char **devices;
size_t devices_len;
char **hugetlbs;
size_t hugetlbs_len;
char **group_add;
size_t group_add_len;
char *network_mode;
char *ipc_mode;
char *pid_mode;
char *uts_mode;
char *userns_mode;
char *user_remap;
char **ulimits;
size_t ulimits_len;
char *restart_policy;
char *host_channel;
char **cap_add;
size_t cap_add_len;
char **cap_drop;
size_t cap_drop_len;
json_map_string_string *storage_opts;
json_map_string_string *sysctls;
char **dns;
size_t dns_len;
char **dns_options;
size_t dns_options_len;
char **dns_search;
size_t dns_search_len;
char **extra_hosts;
size_t extra_hosts_len;
char *hook_spec;
char **binds;
size_t binds_len;
char **blkio_weight_device;
size_t blkio_weight_device_len;
char **blkio_throttle_read_bps_device;
size_t blkio_throttle_read_bps_device_len;
char **blkio_throttle_write_bps_device;
size_t blkio_throttle_write_bps_device_len;
bool privileged;
bool system_container;
char **ns_change_files;
size_t ns_change_files_len;
bool auto_remove;
bool oom_kill_disable;
int64_t shm_size;
bool readonly_rootfs;
char *env_target_file;
char *cgroup_parent;
container_cgroup_resources_t *cr;
char **security;
size_t security_len;
} isula_host_config_t;
struct isula_create_request {
char *name;
char *rootfs;
char *image;
char *runtime;
isula_host_config_t *hostconfig;
isula_container_config_t *config;
};
struct isula_create_response {
char *id;
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_start_request {
char *name;
char *stdin;
bool attach_stdin;
char *stdout;
bool attach_stdout;
char *stderr;
bool attach_stderr;
};
struct isula_start_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_top_request {
char *name;
int ps_argc;
char **ps_args;
};
struct isula_top_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
char *titles;
char **processes;
size_t processes_len;
};
struct isula_stop_request {
char *name;
bool force;
int timeout;
};
struct isula_stop_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_restart_request {
char *name;
unsigned int timeout;
};
struct isula_restart_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_kill_request {
char *name;
uint32_t signal;
};
struct isula_kill_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_delete_request {
char *name;
bool force;
};
struct isula_delete_response {
char *name;
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_pause_request {
char *name;
};
struct isula_pause_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_resume_request {
char *name;
};
struct isula_resume_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_container_info {
char *id;
uint64_t pids_current;
// CPU usage
uint64_t cpu_use_nanos;
uint64_t cpu_system_use;
uint32_t online_cpus;
// BlkIO usage
uint64_t blkio_read;
uint64_t blkio_write;
// Memory usage
uint64_t mem_used;
uint64_t mem_limit;
// Kernel Memory usage
uint64_t kmem_used;
uint64_t kmem_limit;
};
struct isula_inspect_request {
char *name;
bool bformat;
int timeout;
};
struct isula_inspect_response {
uint32_t cc;
uint32_t server_errono;
char *json;
char *errmsg;
};
struct isula_list_request {
struct isula_filters *filters;
bool all;
};
struct isula_container_summary_info {
char *id;
char *image;
char *command;
char *name;
Container_Status status;
uint32_t exit_code;
uint32_t has_pid;
uint32_t pid;
uint32_t restart_count;
char *startat;
char *finishat;
char *runtime;
char *health_state;
int64_t created;
};
struct isula_list_response {
uint32_t cc;
uint32_t server_errono;
size_t container_num;
struct isula_container_summary_info **container_summary;
char *errmsg;
};
struct isula_stats_request {
char **containers;
size_t containers_len;
bool all;
};
struct isula_stats_response {
uint32_t cc;
uint32_t server_errono;
size_t container_num;
struct isula_container_info *container_stats;
char *errmsg;
};
struct isula_events_request {
container_events_callback_t cb;
bool storeonly;
char *id;
types_timestamp_t since;
types_timestamp_t until;
};
struct isula_events_response {
uint32_t server_errono;
uint32_t cc;
char *errmsg;
};
struct isula_copy_from_container_request {
char *id;
char *runtime;
char *srcpath;
};
struct isula_copy_from_container_response {
uint32_t server_errono;
uint32_t cc;
char *errmsg;
container_path_stat *stat;
struct io_read_wrapper reader;
};
struct isula_copy_to_container_request {
char *id;
char *runtime;
char *srcpath;
char *srcrebase;
bool srcisdir;
char *dstpath;
struct io_read_wrapper reader;
};
struct isula_copy_to_container_response {
uint32_t server_errono;
uint32_t cc;
char *errmsg;
};
struct isula_logs_request {
char *id;
char *runtime;
char *since;
char *until;
bool timestamps;
bool follow;
int64_t tail;
bool details;
};
struct isula_logs_response {
uint32_t server_errono;
uint32_t cc;
char *errmsg;
};
struct isula_wait_request {
char *id;
uint32_t condition;
};
struct isula_wait_response {
int exit_code;
uint32_t server_errono;
uint32_t cc;
char *errmsg;
};
struct isula_exec_request {
char *name;
char *suffix;
bool tty;
bool open_stdin;
bool attach_stdin;
bool attach_stdout;
bool attach_stderr;
char *stdin;
char *stdout;
char *stderr;
int argc;
char **argv;
size_t env_len;
char **env;
int64_t timeout;
char *user;
};
struct isula_exec_response {
uint32_t cc;
uint32_t server_errono;
uint32_t exit_code;
char *errmsg;
};
struct isula_attach_request {
char *name;
char *stdin;
char *stdout;
char *stderr;
bool attach_stdin;
bool attach_stdout;
bool attach_stderr;
};
struct isula_attach_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_health_check_request {
char *service;
};
struct isula_health_check_response {
Health_Serving_Status health_status;
uint32_t cc;
char *errmsg;
};
struct isula_version_request {
char unuseful;
};
struct isula_version_response {
uint32_t cc;
uint32_t server_errono;
char *version;
char *git_commit;
char *build_time;
char *root_path;
char *errmsg;
};
struct isula_info_request {
char unuseful;
};
struct isula_info_response {
uint32_t cc;
uint32_t server_errono;
char *version;
char *kversion;
char *os_type;
char *architecture;
char *nodename;
char *operating_system;
char *cgroup_driver;
char *logging_driver;
char *huge_page_size;
char *isulad_root_dir;
char *http_proxy;
char *https_proxy;
char *no_proxy;
char *driver_name;
char *driver_status;
uint32_t total_mem;
uint32_t containers_num;
uint32_t c_running;
uint32_t c_paused;
uint32_t c_stopped;
uint32_t images_num;
uint32_t cpus;
char *errmsg;
};
typedef struct isula_update_config {
char *restart_policy;
container_cgroup_resources_t *cr;
} isula_update_config_t;
struct isula_update_request {
char *name;
isula_update_config_t *updateconfig;
};
struct isula_update_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_image_info {
char *imageref;
char *type;
char *digest;
int64_t created; /* seconds */
int32_t created_nanos;
int64_t size; /* Bytes */
};
struct isula_create_image_request {
struct isula_image_info image_info;
};
struct isula_create_image_response {
uint32_t cc;
uint32_t server_errono;
struct isula_image_info image_info;
char *errmsg;
};
struct isula_list_images_request {
struct isula_filters *filters;
// unuseful definition to avoid generate empty struct which will get 0 if we call sizeof
char unuseful;
};
struct isula_list_images_response {
uint32_t cc;
uint32_t server_errono;
size_t images_num;
struct isula_image_info *images_list;
char *errmsg;
};
struct isula_rmi_request {
char *image_name;
bool force;
};
struct isula_rmi_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_pull_request {
char *image_name;
};
struct isula_pull_response {
char *image_ref;
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_load_request {
char *socketname;
char *file;
char *type;
char *tag;
};
struct isula_load_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_login_request {
char *socketname;
char *username;
char *password;
char *server;
char *type;
};
struct isula_login_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_logout_request {
char *socketname;
char *server;
char *type;
};
struct isula_logout_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_export_request {
char *name;
char *file;
};
struct isula_export_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_rename_request {
char *old_name;
char *new_name;
};
struct isula_rename_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
struct isula_resize_request {
char *id;
char *suffix;
uint32_t height;
uint32_t width;
};
struct isula_resize_response {
uint32_t cc;
uint32_t server_errono;
char *errmsg;
};
Container_Status isulastastr2sta(const char *state);
struct isula_filters *isula_filters_parse_args(const char **array, size_t len);
void isula_filters_free(struct isula_filters *filters);
void isula_container_info_free(struct isula_container_info *info);
void isula_version_request_free(struct isula_version_request *request);
void isula_version_response_free(struct isula_version_response *response);
void isula_info_request_free(struct isula_info_request *request);
void isula_info_response_free(struct isula_info_response *response);
void isula_ns_change_files_free(isula_host_config_t *hostconfig);
void isula_host_config_storage_opts_free(isula_host_config_t *hostconfig);
void isula_host_config_sysctl_free(isula_host_config_t *hostconfig);
void isula_host_config_free(isula_host_config_t *hostconfig);
void isula_container_config_free(isula_container_config_t *config);
void isula_create_request_free(struct isula_create_request *request);
void isula_create_response_free(struct isula_create_response *response);
void isula_start_request_free(struct isula_start_request *request);
void isula_start_response_free(struct isula_start_response *response);
void isula_top_request_free(struct isula_top_request *request);
void isula_top_response_free(struct isula_top_response *response);
void isula_stop_request_free(struct isula_stop_request *request);
void isula_stop_response_free(struct isula_stop_response *response);
void isula_restart_request_free(struct isula_restart_request *request);
void isula_restart_response_free(struct isula_restart_response *response);
void isula_delete_request_free(struct isula_delete_request *request);
void isula_delete_response_free(struct isula_delete_response *response);
void isula_list_request_free(struct isula_list_request *request);
void isula_list_response_free(struct isula_list_response *response);
void isula_exec_request_free(struct isula_exec_request *request);
void isula_exec_response_free(struct isula_exec_response *response);
void isula_attach_request_free(struct isula_attach_request *request);
void isula_attach_response_free(struct isula_attach_response *response);
void isula_pause_request_free(struct isula_pause_request *request);
void isula_pause_response_free(struct isula_pause_response *response);
void isula_resume_request_free(struct isula_resume_request *request);
void isula_resume_response_free(struct isula_resume_response *response);
void isula_kill_request_free(struct isula_kill_request *request);
void isula_kill_response_free(struct isula_kill_response *response);
void isula_update_config_free(isula_update_config_t *config);
void isula_update_request_free(struct isula_update_request *request);
void isula_update_response_free(struct isula_update_response *response);
void isula_stats_request_free(struct isula_stats_request *request);
void isula_stats_response_free(struct isula_stats_response *response);
void isula_events_request_free(struct isula_events_request *request);
void isula_events_response_free(struct isula_events_response *response);
void isula_copy_from_container_request_free(struct isula_copy_from_container_request *request);
void isula_copy_from_container_response_free(struct isula_copy_from_container_response *response);
void isula_copy_to_container_request_free(struct isula_copy_to_container_request *request);
void isula_copy_to_container_response_free(struct isula_copy_to_container_response *response);
void isula_inspect_request_free(struct isula_inspect_request *request);
void isula_inspect_response_free(struct isula_inspect_response *response);
void isula_wait_request_free(struct isula_wait_request *request);
void isula_wait_response_free(struct isula_wait_response *response);
void isula_health_check_request_free(struct isula_health_check_request *request);
void isula_health_check_response_free(struct isula_health_check_response *response);
void isula_create_image_request_free(struct isula_create_image_request *request);
void isula_create_image_response_free(struct isula_create_image_response *response);
void isula_images_list_free(size_t images_num, struct isula_image_info *images_list);
void isula_list_images_request_free(struct isula_list_images_request *request);
void isula_list_images_response_free(struct isula_list_images_response *response);
void isula_rmi_request_free(struct isula_rmi_request *request);
void isula_rmi_response_free(struct isula_rmi_response *response);
void isula_load_request_free(struct isula_load_request *request);
void isula_load_response_free(struct isula_load_response *response);
void isula_login_response_free(struct isula_login_response *response);
void isula_logout_response_free(struct isula_logout_response *response);
void isula_pull_request_free(struct isula_pull_request *request);
void isula_pull_response_free(struct isula_pull_response *response);
void isula_export_request_free(struct isula_export_request *request);
void isula_export_response_free(struct isula_export_response *response);
void isula_rename_request_free(struct isula_rename_request *request);
void isula_rename_response_free(struct isula_rename_response *response);
void isula_resize_request_free(struct isula_resize_request *request);
void isula_resize_response_free(struct isula_resize_response *response);
void isula_logs_request_free(struct isula_logs_request *request);
void isula_logs_response_free(struct isula_logs_response *response);
#ifdef __cplusplus
}
#endif
#endif