/****************************************************************************** * 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 #include #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