Add supoprt for D release use-case.
[sim/o1-interface.git] / ntsimulator / ntsim-ng / core / app / manager.h
index ad1f0a9..50ee1f3 100644 (file)
 
 #include <stdbool.h>
 #include <stdint.h>
-#include <libyang/libyang.h>
+#include <semaphore.h>
+#include <sysrepo.h>
+#include <sysrepo/values.h>
+#include "core/docker.h"
+
+#define NTS_MANAGER_MODULE                          "nts-manager"
+#define NTS_SIMULATION_SCHEMA_XPATH                 "/nts-manager:simulation"
+#define NTS_FUNCTION_LIST_SCHEMA_XPATH              "/nts-manager:simulation/network-functions/network-function"
 
 typedef struct {
     //meta-data
-    char *docker_id;
+    const struct lys_ident *ft;
+    const char *function_type;
+    bool is_init;
     bool is_configured;
     bool is_mounted;
 
-    //yang data
-    char *name;
+    docker_container_t container;
     char *mount_point_addressing_method;
-    char *docker_ip;
-    uint16_t docker_port;
-    char *host_ip;
-    uint16_t host_port;
 } manager_network_function_instance_t;
 
 typedef struct {
     //manager_docker data
+    const struct lys_ident *ft;
+    char *function_type;
     manager_network_function_instance_t *instance;
-    bool data_changed;
-
-    //meta-data, constant
-    struct lys_ident *function_type;
-    char *function_type_string;
-    const char *docker_image_name;
+    docker_context_t *docker;
 
     //yang data
     int started_instances;
     int mounted_instances;
+
+    char *mount_point_addressing_method;
     
     char *docker_instance_name;
     char *docker_version_tag;
     char *docker_repository;
+} manager_context_t;
+
+typedef enum {
+    MANAGER_OPERATION_EDIT = 0,
+    MANAGER_OPERATION_RPC = 1,
+} manager_operation_type_t;
+
+typedef struct manager_operation {
+    manager_operation_type_t type;
+
+    int ft_index;
+    char *function_type;
+
+    int started_instances;
+    int mounted_instances;
+
+    char *docker_instance_name;
+    char *docker_repository;
+    char *docker_version_tag;
 
     char *mount_point_addressing_method;
-} manager_network_function_type;
+
+    //not used by EDIT, as datastore will be automatically updated
+    struct {
+        int *delay_period;
+        int delay_period_count;
+    } fault_generation;
+
+    struct {
+        int faults_enabled;
+        int call_home;
+    } netconf;
+
+    struct {
+        int faults_enabled;
+        int pnf_registration;
+        int heartbeat_period;
+    } ves;
+
+    char *errmsg;
+    struct manager_operation *next;
+} manager_operation_t;
+
+extern manager_context_t *manager_context;
+extern docker_context_t *docker_context;
+extern int docker_context_count;
+
+typedef enum {
+    MANAGER_PROTOCOL_UNUSED = 0,
+    MANAGER_PROTOCOL_UNAVAILABLE,
+
+    MANAGER_PROTOCOL_NETCONF_SSH,
+    MANAGER_PROTOCOL_NETCONF_TLS,
+    MANAGER_PROTOCOL_FTP,
+    MANAGER_PROTOCOL_SFTP,
+    MANAGER_PROTOCOL_HTTP,
+    MANAGER_PROTOCOL_HTTPS,
+} manager_protocol_type_t;
+
+extern manager_protocol_type_t manager_port[65536];
 
 //manager.c
 int manager_run(void);
 
+//manager_context.c
+int manager_context_init(void);
+void manager_context_free(void);
+
 //manager_operations.c
-void manager_operations_init(void);
+int manager_operations_init(void);
+void manager_operations_loop(void);
+void manager_operations_free(void);
+
+manager_operation_t *manager_operations_new_oper(manager_operation_type_t type);
+int manager_operations_free_oper(manager_operation_t *oper);
+
+int manager_operations_begin(void);
+int manager_operations_add(manager_operation_t *oper);
+void manager_operations_finish_and_execute(void);
+void manager_operations_finish_with_error(void);
+
+int manager_operations_validate(manager_operation_t *oper);
+
+//manager_actions.c
+int manager_actions_start(manager_context_t *ctx);
+int manager_actions_config_instance(manager_context_t *ctx, manager_network_function_instance_t *instance);
+int manager_actions_stop(manager_context_t *ctx);
+int manager_actions_mount(manager_context_t *ctx);
+int manager_actions_unmount(manager_context_t *ctx);
 
-int manager_start_instance(manager_network_function_type *function_type);
-int manager_config_instance(manager_network_function_type *function_type, manager_network_function_instance_t *instance);
-int manager_stop_instance(manager_network_function_type *function_type);
-int manager_mount_instance(manager_network_function_type *function_type);
-int manager_unmount_instance(manager_network_function_type *function_type);
+//manager_sysrepo.c
+int manager_sr_get_context_sync(void);
+int manager_sr_update_context(manager_context_t *ctx);
+int manager_sr_on_last_operation_status(const char *status, const char *errmsg);
+int manager_sr_notif_send_instance_changed(const char *status, const char *function_type, const char *name, const manager_network_function_instance_t* instance);
+int manager_sr_update_static_stats(void);
+int manager_sr_stats_get_items_cb(sr_session_ctx_t *session, const char *module_name, const char *xpath, const char *request_xpath, uint32_t request_id, struct lyd_node **parent, void *private_data);
+int manager_sr_populate_networking(struct lyd_node *parent, const manager_network_function_instance_t* instance);