Refactor folder structure.
[sim/o1-interface.git] / ntsimulator / src / o-ran-notifications / o-ran-notifications.c
index 49a6931..ad282d1 100644 (file)
@@ -1,9 +1,19 @@
-/*
- * o-ran-notifications.c
- *
- *  Created on: Oct 23, 2019
- *      Author: parallels
- */
+/*************************************************************************
+*
+* Copyright 2019 highstreet technologies GmbH and others
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+***************************************************************************/
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -29,22 +39,22 @@ struct faultAlarms
 {
        int             faultId;
        char*           faultSource;
-       int             cleared;
+       int             cleared[10];
        char*           faultSeverity;
        char*           faultText;
        char*           affectedObjects[AFFECTED_OBJECTS_MAX_NUMBER];
 };
 struct faultAlarms oran_fault_alarms[ORAN_FAULT_ALARMS_NUMBER] = {
-               {.faultId = 1, .faultSource = "jknsdfnui", .affectedObjects = {"akddconoj", "asodmnjvf", "roiemfkmods"}, .cleared = 1, .faultSeverity = "MAJOR", .faultText = "sdnjosopnojnsd"},
-               {.faultId = 2, .faultSource = "onascokjnasc", .affectedObjects = {"sdouvncsjdfv13", "asjdn13ejlncd4"}, .cleared = 1, .faultSeverity = "WARNING", .faultText = "4pionfcsofn42on"},
-               {.faultId = 3, .faultSource = "asonxpkn", .affectedObjects = {"0j4fiwef320fd", "sdlvkmsdv-9023"}, .cleared = 1, .faultSeverity = "CRITICAL", .faultText = "sdjnonj32onjsa23"},
-               {.faultId = 4, .faultSource = "asnjcpkd", .affectedObjects = {"0j4fiwef320fd", "sdlvkmsdv-9023", "laksmdklmdas21"}, .cleared = 1, .faultSeverity = "MINOR", .faultText = "asdjln12osa453"},
-               {.faultId = 5, .faultSource = "dskmfl", .affectedObjects = {"sdkm31wdlk"}, .cleared = 1, .faultSeverity = "MAJOR", .faultText = "dknovrf34ekl"},
-               {.faultId = 6, .faultSource = "dsllkje232kl", .affectedObjects = {"sFKOM24KLMerw"}, .cleared = 1, .faultSeverity = "MAJOR", .faultText = "frpkm24k lsd  kmewfpm"},
-               {.faultId = 7, .faultSource = "fvkdlsfjnwej23kloe", .affectedObjects = {"fvkm24km", "sdfk23d", "kmdfkmo32", "wekl2332"}, .cleared = 1, .faultSeverity = "WARNING", .faultText = "dsm 2d 32j sdfmr32"},
-               {.faultId = 8, .faultSource = "dkom32", .affectedObjects = {"kmsdfkpm23ds", "sdmkp32"}, .cleared = 1, .faultSeverity = "CRITICAL", .faultText = "dsonj32 don32 mdson32pk654"},
-               {.faultId = 9, .faultSource = "weflm3", .affectedObjects = {"klklm32kl3", "dsfln234poewj23-", "spmd32k"}, .cleared = 1, .faultSeverity = "MINOR", .faultText = "dsflknjwej32"},
-               {.faultId = 10, .faultSource = "fweiunvfrem32", .affectedObjects = {"sfkm23klsdf2343"}, .cleared = 1, .faultSeverity = "MAJOR", .faultText = "dfskjnl4j dsfknl2 fodn54 65k"}
+               {.faultId = 1, .faultSource = "jknsdfnui", .affectedObjects = {"akddconoj", "asodmnjvf", "roiemfkmods"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "MAJOR", .faultText = "sdnjosopnojnsd"},
+               {.faultId = 2, .faultSource = "onascokjnasc", .affectedObjects = {"sdouvncsjdfv13", "asjdn13ejlncd4"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "WARNING", .faultText = "4pionfcsofn42on"},
+               {.faultId = 3, .faultSource = "asonxpkn", .affectedObjects = {"0j4fiwef320fd", "sdlvkmsdv-9023"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "CRITICAL", .faultText = "sdjnonj32onjsa23"},
+               {.faultId = 4, .faultSource = "asnjcpkd", .affectedObjects = {"0j4fiwef320fd", "sdlvkmsdv-9023", "laksmdklmdas21"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "MINOR", .faultText = "asdjln12osa453"},
+               {.faultId = 5, .faultSource = "dskmfl", .affectedObjects = {"sdkm31wdlk"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "MAJOR", .faultText = "dknovrf34ekl"},
+               {.faultId = 6, .faultSource = "dsllkje232kl", .affectedObjects = {"sFKOM24KLMerw"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "MAJOR", .faultText = "frpkm24k lsd     kmewfpm"},
+               {.faultId = 7, .faultSource = "fvkdlsfjnwej23kloe", .affectedObjects = {"fvkm24km", "sdfk23d", "kmdfkmo32", "wekl2332"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "WARNING", .faultText = "dsm 2d 32j sdfmr32"},
+               {.faultId = 8, .faultSource = "dkom32", .affectedObjects = {"kmsdfkpm23ds", "sdmkp32"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "CRITICAL", .faultText = "dsonj32 don32 mdson32pk654"},
+               {.faultId = 9, .faultSource = "weflm3", .affectedObjects = {"klklm32kl3", "dsfln234poewj23-", "spmd32k"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "MINOR", .faultText = "dsflknjwej32"},
+               {.faultId = 10, .faultSource = "fweiunvfrem32", .affectedObjects = {"sfkm23klsdf2343"}, .cleared = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, .faultSeverity = "MAJOR", .faultText = "dfskjnl4j dsfknl2 fodn54 65k"}
 };
 
 static         CURL *curl;
@@ -71,10 +81,12 @@ static int cleanup_curl()
        return SR_ERR_OK;
 }
 
-static int send_fault_ves_message(char *alarm_condition, char *alarm_object, char *severity, char *date_time, char *specific_problem)
+static int send_fault_ves_message(char *alarm_condition, char *alarm_object, char *severity, char *date_time, char *specific_problem, int port)
 {
+       int rc = SR_ERR_OK;
        CURLcode res;
-       static sequence_id = 0;
+       static int sequence_id = 0;
+       int netconf_port_base = 0;
 
        prepare_ves_message_curl(curl);
 
@@ -89,8 +101,23 @@ static int send_fault_ves_message(char *alarm_condition, char *alarm_object, cha
        cJSON_AddItemToObject(postDataJson, "event", event);
 
        char *hostname = getenv("HOSTNAME");
+       char *netconf_base_string = getenv("NETCONF_BASE");
 
-       cJSON *commonEventHeader = vesCreateCommonEventHeader("fault", "O_RAN_COMPONENT_Alarms", hostname, sequence_id++);
+       if (netconf_base_string != NULL)
+       {
+               rc = sscanf(netconf_base_string, "%d", &netconf_port_base);
+               if (rc != 1)
+               {
+                       printf("Could not find the NETCONF base port, aborting the PNF registration...\n");
+                       return 1;
+               }
+               netconf_port_base += port;
+       }
+
+       char source_name[100];
+       sprintf(source_name, "%s_%d", hostname, netconf_port_base);
+
+       cJSON *commonEventHeader = vesCreateCommonEventHeader("fault", "O_RAN_COMPONENT_Alarms", source_name, sequence_id++);
        if (commonEventHeader == NULL)
        {
                printf("Could not create JSON object: commonEventHeader\n");
@@ -102,6 +129,10 @@ static int send_fault_ves_message(char *alarm_condition, char *alarm_object, cha
        if (faultFields == NULL)
        {
                printf("Could not create JSON object: faultFields\n");
+               if (postDataJson != NULL)
+               {
+                       cJSON_Delete(postDataJson);
+               }
                return 1;
        }
        cJSON_AddItemToObject(event, "faultFields", faultFields);
@@ -130,41 +161,6 @@ static int send_fault_ves_message(char *alarm_condition, char *alarm_object, cha
        return SR_ERR_OK;
 }
 
-static int send_dummy_notif_file_mgmt(sr_session_ctx_t *sess)
-{
-       int rc;
-
-       sr_val_t *vnotif;
-       size_t current_num_of_values= 0;
-
-       CREATE_NEW_VALUE(rc, vnotif, current_num_of_values);
-
-       sr_val_build_xpath(&vnotif[current_num_of_values - 1], "%s", "/o-ran-file-management:file-upload-notification/local-logical-file-path");
-       sr_val_set_str_data(&vnotif[current_num_of_values - 1], SR_STRING_T, "odsanzucjsdoj");
-
-       CREATE_NEW_VALUE(rc, vnotif, current_num_of_values);
-
-       sr_val_build_xpath(&vnotif[current_num_of_values - 1], "%s", "/o-ran-file-management:file-upload-notification/remote-file-path");
-       sr_val_set_str_data(&vnotif[current_num_of_values - 1], SR_STRING_T, "jsdknvjnkfd");
-
-       CREATE_NEW_VALUE(rc, vnotif, current_num_of_values);
-
-       sr_val_build_xpath(&vnotif[current_num_of_values - 1], "%s", "/o-ran-file-management:file-upload-notification/status");
-       sr_val_set_str_data(&vnotif[current_num_of_values - 1], SR_ENUM_T, "SUCCESS");
-
-       rc = sr_event_notif_send(sess, "/o-ran-file-management:file-upload-notification", vnotif, current_num_of_values, SR_EV_NOTIF_DEFAULT);
-       if (rc != SR_ERR_OK) {
-               printf("Failed to send notification send_dummy_notif_file_mgmt\n");
-               return SR_ERR_OPERATION_FAILED;
-       }
-
-       printf("Successfully sent notification...\n");
-
-       sr_free_values(vnotif, current_num_of_values);
-
-       return SR_ERR_OK;
-}
-
 static int send_dummy_notif(sr_session_ctx_t *sess)
 {
        int rc;
@@ -189,13 +185,16 @@ static int send_dummy_notif(sr_session_ctx_t *sess)
 
     int ran = (int) random_at_most(ORAN_FAULT_ALARMS_NUMBER - 1);
 
-    if (oran_fault_alarms[ran].cleared == 1)
+    //TODO we hardcode here the number of ports for each device, 10
+    int random_port = (int) random_at_most(9);
+
+    if (oran_fault_alarms[ran].cleared[random_port] == 1)
     {
-       oran_fault_alarms[ran].cleared = 0;
+       oran_fault_alarms[ran].cleared[random_port] = 0;
     }
     else
     {
-       oran_fault_alarms[ran].cleared = 1;
+       oran_fault_alarms[ran].cleared[random_port] = 1;
     }
 
        sr_val_t *vnotif;
@@ -221,7 +220,7 @@ static int send_dummy_notif(sr_session_ctx_t *sess)
 
        sr_val_build_xpath(&vnotif[current_num_of_values - 1], "%s", "/o-ran-fm:alarm-notif/is-cleared");
        vnotif[current_num_of_values - 1].type = SR_BOOL_T;
-       vnotif[current_num_of_values - 1].data.bool_val = oran_fault_alarms[ran].cleared;
+       vnotif[current_num_of_values - 1].data.bool_val = oran_fault_alarms[ran].cleared[random_port];
 
        CREATE_NEW_VALUE(rc, vnotif, current_num_of_values);
 
@@ -267,7 +266,7 @@ static int send_dummy_notif(sr_session_ctx_t *sess)
                char faultId[10];
                sprintf(faultId, "%d", oran_fault_alarms[ran].faultId);
                rc = send_fault_ves_message(faultId, oran_fault_alarms[ran].faultSource,
-                               (oran_fault_alarms[ran].cleared) ? "NORMAL" : oran_fault_alarms[ran].faultSeverity, dateAndTime, oran_fault_alarms[ran].faultText);
+                               (oran_fault_alarms[ran].cleared[random_port]) ? "NORMAL" : oran_fault_alarms[ran].faultSeverity, dateAndTime, oran_fault_alarms[ran].faultText, random_port);
                if (rc != SR_ERR_OK)
                {
                        printf("Could not send Fault VES message\n");
@@ -328,7 +327,6 @@ main(int argc, char **argv)
         if (notification_delay_period > 0)
         {
                send_dummy_notif(session);
-//             send_dummy_notif_file_mgmt(session);
 
             sleep(notification_delay_period);
         }