Bug fix. 35/4435/1
authorAlex Stancu <alexandru.stancu@highstreet-technologies.com>
Thu, 23 Jul 2020 11:49:17 +0000 (14:49 +0300)
committerAlex Stancu <alexandru.stancu@highstreet-technologies.com>
Thu, 23 Jul 2020 11:49:39 +0000 (14:49 +0300)
Add basic-auth method for sending pnfRegistration VES messages.

Align O1 interface YANG models to spec instead of pre-spec.

Issue-ID: SIM-34

Issue-ID: SIM-35
Change-Id: I80ada7ea570015e74d606116850584ccb620ec24
Signed-off-by: Alex Stancu <alexandru.stancu@highstreet-technologies.com>
39 files changed:
ntsimulator/README.md
ntsimulator/deploy/nts-manager/Dockerfile
ntsimulator/deploy/nts-manager/container-tag.yaml
ntsimulator/deploy/o-ran-sc/o-ran-ru/container-tag.yaml
ntsimulator/deploy/o-ran/ru-fh/container-tag.yaml
ntsimulator/deploy/x-ran/container-tag.yaml
ntsimulator/inc/utils/utils.h
ntsimulator/scripts/docker-compose.yml
ntsimulator/src/ntsimulator-manager/ntsimulator-manager.c
ntsimulator/src/ntsimulator-manager/simulator-operations.c
ntsimulator/src/ntsimulator-manager/simulator-operations.h
ntsimulator/src/utils/utils.c
ntsimulator/yang/o-ran/ru-fh/o-ran-ald-port.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-ald.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-antenna-calibration.yang [new file with mode: 0644]
ntsimulator/yang/o-ran/ru-fh/o-ran-beamforming.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-compression-factors.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-delay-management.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-dhcp.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-externalio.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-fan.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-file-management.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-fm.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-hardware.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-interfaces.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-laa-operations.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-laa.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-module-cap.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-mplane-int.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-operations.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-performance-management.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-processing-element.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-software-management.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-supervision.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-sync.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-trace.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-transceiver.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-uplane-conf.yang
ntsimulator/yang/o-ran/ru-fh/o-ran-usermgmt.yang

index acee38f..1b545d4 100644 (file)
@@ -365,6 +365,11 @@ This means that `MODELS_IMAGE: "ntsim_oran_light:latest"` can be used as an envi
 
 ## Release notes
 
+### **version 0.6.5**
+
+Added features:
+* **basic-auth** is now available for pnfRegistration messages - if the VES Endpoint supports basic-auth (with username and password), the user can configure these endpoint details and the pnfRegistration message will use them.
+
 ### **version 0.6.4**
 
 Bug fixes and improvements:
index 121627e..e5362ea 100644 (file)
@@ -130,6 +130,8 @@ LABEL maintainer="alexandru.stancu@highstreet-technologies.com"
 
 ENV NETCONF_BASE=40000
 ENV NTS_IP="127.0.0.1"
+# ENV EXTERNAL_NTS_IP="172.17.0.1" - this can be given in the docker-compose.yml file to
+# overwrite the IP that is exposed via pnfRegistration or via mount HTTP REST; if not specified, NTS_IP will be used
 ENV SCRIPTS_DIR=/opt/dev/scripts
 ENV DOCKER_ENGINE_VERSION="1.40"
 ENV MODELS_IMAGE="ntsim_oran"
@@ -139,6 +141,9 @@ ENV IsNetconfAvailable=true
 ENV VesRegistration=false
 ENV VesEndpointPort=8080
 ENV VesEndpointIp="172.17.0.1"
+ENV VesEndpointAuthMethod="no-auth"
+ENV VesEndpointUsername="admin"
+ENV VesEndpointPassword="admin"
 ENV SshConnections=1
 ENV TlsConnections=0
 ENV K8S_DEPLOYMENT=false
index c046509..61ce1e3 100644 (file)
@@ -80,6 +80,8 @@ int   getFaultNotificationDelayPeriodFromConfigJson(int *period_array, int *count
 int    getVesHeartbeatPeriodFromConfigJson(void);
 char*  getVesAuthMethodFromConfigJson(void);
 char*  getVesIpFromConfigJson(void);
+char*  getVesUsernameFromConfigJson(void);
+char*  getVesPasswordFromConfigJson(void);
 int    getVesPortFromConfigJson(void);
 int    getVesRegistrationFromConfigJson(void);
 int    getNetconfAvailableFromConfigJson(void);
index 0756327..710f46b 100644 (file)
@@ -25,7 +25,10 @@ services:
       VesRegistration: "false"
       VesEndpointPort: 8080
       VesEndpointIp: "172.17.0.1"
-      SshConnections: 4
+      VesEndpointAuthMethod: "basic-auth"
+      VesEndpointUsername: "sample1"
+      VesEndpointPassword: "sample1"
+      SshConnections: 1
       TlsConnections: 0
       K8S_DEPLOYMENT: "false"
       CONTAINER_NAME: "nts-o-ran-sc"
index 7674824..b4e1a0f 100644 (file)
@@ -284,19 +284,61 @@ simulator_config_change_cb(sr_session_ctx_t *session, const char *module_name, s
        sr_free_val(val);
        val = NULL;
 
-       /* get the value from sysrepo, we do not care if the value did not change in our case */
-       rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-ip", &val);
-       if (rc != SR_ERR_OK) {
-               goto sr_error;
-       }
+    /* get the value from sysrepo, we do not care if the value did not change in our case */
+    rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-ip", &val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
 
-       rc = ves_ip_changed(val->data.string_val);
-       if (rc != SR_ERR_OK) {
-               goto sr_error;
-       }
+    rc = ves_ip_changed(val->data.string_val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
 
-       sr_free_val(val);
-       val = NULL;
+    sr_free_val(val);
+    val = NULL;
+
+    /* get the value from sysrepo, we do not care if the value did not change in our case */
+    rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-auth-method", &val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
+
+    rc = ves_auth_method_changed(val->data.enum_val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
+
+    sr_free_val(val);
+    val = NULL;
+
+    /* get the value from sysrepo, we do not care if the value did not change in our case */
+    rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-username", &val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
+
+    rc = ves_username_changed(val->data.string_val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
+
+    sr_free_val(val);
+    val = NULL;
+
+    /* get the value from sysrepo, we do not care if the value did not change in our case */
+    rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-password", &val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
+
+    rc = ves_password_changed(val->data.string_val);
+    if (rc != SR_ERR_OK) {
+        goto sr_error;
+    }
+
+    sr_free_val(val);
+    val = NULL;
 
        /* get the value from sysrepo, we do not care if the value did not change in our case */
        rc = sr_get_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-port", &val);
@@ -973,6 +1015,93 @@ main(int argc, char **argv)
         goto cleanup;
     }
 
+    // setting the values that come in an ENV variable as defaults - ves-endpoint-auth-method
+
+    value = (const sr_val_t) { 0 };
+    value.type = SR_ENUM_T;
+    value.data.enum_val = getenv("VesEndpointAuthMethod");
+    rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-auth-method", 
+            &value, SR_EDIT_DEFAULT);
+    if (SR_ERR_OK != rc) {
+        printf("Error by sr_set_item: %s\n", sr_strerror(rc));
+        goto cleanup;
+    }
+
+    rc = ves_auth_method_changed(getenv("VesEndpointAuthMethod"));
+    if (SR_ERR_OK != rc) {
+        printf("Error by ves_auth_method_changed: %s\n", sr_strerror(rc));
+        goto cleanup;
+    }
+
+    //TODO only basic-auth implemented vor VES
+    if (strcmp(getenv("VesEndpointAuthMethod"), "basic-auth")  == 0)
+    {
+        // setting the values that come in an ENV variable as defaults - ves-endpoint-usename
+
+        value = (const sr_val_t) { 0 };
+        value.type = SR_STRING_T;
+        value.data.string_val = getenv("VesEndpointUsername");
+        rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-username",
+                &value, SR_EDIT_DEFAULT);
+        if (SR_ERR_OK != rc) {
+            printf("Error by sr_set_item: %s\n", sr_strerror(rc));
+            goto cleanup;
+        }
+
+        rc = ves_username_changed(getenv("VesEndpointUsername"));
+        if (SR_ERR_OK != rc) {
+            printf("Error by ves_username_changed: %s\n", sr_strerror(rc));
+            goto cleanup;
+        }
+
+        // setting the values that come in an ENV variable as defaults - ves-endpoint-password
+
+        value = (const sr_val_t) { 0 };
+        value.type = SR_STRING_T;
+        value.data.string_val = getenv("VesEndpointPassword");
+        rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-endpoint-password",
+                &value, SR_EDIT_DEFAULT);
+        if (SR_ERR_OK != rc) {
+            printf("Error by sr_set_item: %s\n", sr_strerror(rc));
+            goto cleanup;
+        }
+
+        rc = ves_password_changed(getenv("VesEndpointPassword"));
+        if (SR_ERR_OK != rc) {
+            printf("Error by ves_password_changed: %s\n", sr_strerror(rc));
+            goto cleanup;
+        }
+    }
+
+    // setting the values that come in an ENV variable as defaults - ves-registration
+
+    int vesRegistration = 1;
+
+    char *vesRegistrationString = getenv("VesRegistration");
+    if (vesRegistrationString != NULL)
+    {
+        if (strcmp(vesRegistrationString, "false") == 0)
+        {
+            vesRegistration = 0;
+        }
+    }
+
+    value = (const sr_val_t) { 0 };
+    value.type = SR_BOOL_T;
+    value.data.bool_val = vesRegistration;
+    rc = sr_set_item(session, "/network-topology-simulator:simulator-config/ves-endpoint-details/ves-registration",
+            &value, SR_EDIT_DEFAULT);
+    if (SR_ERR_OK != rc) {
+        printf("Error by sr_set_item: %s\n", sr_strerror(rc));
+        goto cleanup;
+    }
+
+    rc = ves_registration_changed(vesRegistration);
+    if (SR_ERR_OK != rc) {
+        printf("Error by ves_registration_changed: %s\n", sr_strerror(rc));
+        goto cleanup;
+    }
+
     // setting the values that come in an ENV variable as defaults - ssh-connections
 
     int sshConnections = getIntFromString(getenv("SshConnections"), 1);
index 11bd9ff..87b1d68 100644 (file)
@@ -370,7 +370,7 @@ static char* create_docker_container_curl(int base_netconf_port, cJSON* managerB
 
     cJSON_AddItemToObject(postDataJson, "Env", env_variables_array);
 
-    char environment_var[50];
+    char environment_var[100];
     sprintf(environment_var, "NTS_IP=%s", getenv("NTS_IP"));
 
     cJSON *env_var_obj = cJSON_CreateString(environment_var);
@@ -381,6 +381,24 @@ static char* create_docker_container_curl(int base_netconf_port, cJSON* managerB
        }
     cJSON_AddItemToArray(env_variables_array, env_var_obj);
 
+    char *external_nts_ip = getenv("EXTERNAL_NTS_IP");
+    if (external_nts_ip == NULL)
+    {
+        sprintf(environment_var, "EXTERNAL_NTS_IP=%s", getenv("NTS_IP"));
+    }
+    else
+    {
+        sprintf(environment_var, "EXTERNAL_NTS_IP=%s", external_nts_ip);
+    }
+
+    cJSON *env_var_obj_0 = cJSON_CreateString(environment_var);
+    if (env_var_obj_0 == NULL)
+       {
+        printf("Could not create JSON object: Env array object EXTERNAL_NTS_IP\n");
+               return NULL;
+       }
+    cJSON_AddItemToArray(env_variables_array, env_var_obj_0);
+
     sprintf(environment_var, "NETCONF_BASE=%d", base_netconf_port);
     cJSON *env_var_obj_2 = cJSON_CreateString(environment_var);
     if (env_var_obj_2 == NULL)
@@ -619,7 +637,8 @@ static int send_mount_device_instance_ssh(char *url, char *credentials, char *de
             "<max-connection-attempts xmlns=\"urn:opendaylight:netconf-node-topology\">100</max-connection-attempts>"
             "<between-attempts-timeout-millis xmlns=\"urn:opendaylight:netconf-node-topology\">2000</between-attempts-timeout-millis>"
             "</node>",
-                       device_name, device_port, getenv("NTS_IP"), device_port, "netconf", "netconf");
+                       device_name, device_port, (getenv("EXTERNAL_NTS_IP") == NULL) ? getenv("NTS_IP") : getenv("EXTERNAL_NTS_IP"),
+            device_port, "netconf", "netconf");
 
        printf("Post data:\n%s\n", post_data_xml);
 
@@ -682,7 +701,7 @@ static int send_mount_device_instance_tls(char *url, char *credentials, char *de
                        "<max-connection-attempts xmlns=\"urn:opendaylight:netconf-node-topology\">100</max-connection-attempts>"
                        "<between-attempts-timeout-millis xmlns=\"urn:opendaylight:netconf-node-topology\">2000</between-attempts-timeout-millis>"
                        "</node>",
-                       device_name, device_port, getenv("NTS_IP"), "netconf", device_port);
+                       device_name, device_port, (getenv("EXTERNAL_NTS_IP") == NULL) ? getenv("NTS_IP") : getenv("EXTERNAL_NTS_IP"), "netconf", device_port);
 
        printf("Post data:\n%s\n", post_data_xml);
 
@@ -1662,51 +1681,51 @@ int add_key_pair_to_odl(controller_t *controller_list, int controller_list_size)
 
 int ves_ip_changed(char *new_ip)
 {
-       char *stringConfiguration = readConfigFileInString();
+    char *stringConfiguration = readConfigFileInString();
 
-       if (stringConfiguration == NULL)
-       {
-               printf("Could not read configuration file!\n");
-               return SR_ERR_OPERATION_FAILED;
-       }
+    if (stringConfiguration == NULL)
+    {
+        printf("Could not read configuration file!\n");
+        return SR_ERR_OPERATION_FAILED;
+    }
 
-       cJSON *jsonConfig = cJSON_Parse(stringConfiguration);
-       if (jsonConfig == NULL)
-       {
-               free(stringConfiguration);
-               const char *error_ptr = cJSON_GetErrorPtr();
-               if (error_ptr != NULL)
-               {
-                       fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
-               }
-               return SR_ERR_OPERATION_FAILED;
-       }
-       //we don't need the string anymore
-       free(stringConfiguration);
-       stringConfiguration = NULL;
+    cJSON *jsonConfig = cJSON_Parse(stringConfiguration);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfiguration);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return SR_ERR_OPERATION_FAILED;
+    }
+    //we don't need the string anymore
+    free(stringConfiguration);
+    stringConfiguration = NULL;
 
-       cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
-       if (!cJSON_IsObject(vesDetails))
-       {
-               printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
-               cJSON_Delete(jsonConfig);
-               return SR_ERR_OPERATION_FAILED;
-       }
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
 
-       cJSON *vesIp = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-ip");
-       if (!cJSON_IsString(vesIp))
-       {
-               printf("Configuration JSON is not as expected: ves-endpoint-ip is not a string");
-               cJSON_Delete(jsonConfig);
-               return SR_ERR_OPERATION_FAILED;
-       }
+    cJSON *vesIp = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-ip");
+    if (!cJSON_IsString(vesIp))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-ip is not a string");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
 
-       //we set the value of the fault-notification-delay-period object
-       cJSON_ReplaceItemInObject(vesDetails, "ves-endpoint-ip", cJSON_CreateString(new_ip));
+    //we set the value of the fault-notification-delay-period object
+    cJSON_ReplaceItemInObject(vesDetails, "ves-endpoint-ip", cJSON_CreateString(new_ip));
 
-       //writing the new JSON to the configuration file
-       stringConfiguration = cJSON_Print(jsonConfig);
-       writeConfigFile(stringConfiguration);
+    //writing the new JSON to the configuration file
+    stringConfiguration = cJSON_Print(jsonConfig);
+    writeConfigFile(stringConfiguration);
 
     if (stringConfiguration != NULL)
     {
@@ -1714,9 +1733,9 @@ int ves_ip_changed(char *new_ip)
         stringConfiguration = NULL;
     }
 
-       cJSON_Delete(jsonConfig);
+    cJSON_Delete(jsonConfig);
 
-       return SR_ERR_OK;
+    return SR_ERR_OK;
 }
 
 int ves_port_changed(int new_port)
@@ -1778,6 +1797,183 @@ int ves_port_changed(int new_port)
        return SR_ERR_OK;
 }
 
+int ves_username_changed(char *new_username)
+{
+    char *stringConfiguration = readConfigFileInString();
+
+    if (stringConfiguration == NULL)
+    {
+        printf("Could not read configuration file!\n");
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    cJSON *jsonConfig = cJSON_Parse(stringConfiguration);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfiguration);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return SR_ERR_OPERATION_FAILED;
+    }
+    //we don't need the string anymore
+    free(stringConfiguration);
+    stringConfiguration = NULL;
+
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    cJSON *vesUsername = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-username");
+    if (!cJSON_IsString(vesUsername))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-username is not a string");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    //we set the value of the fault-notification-delay-period object
+    cJSON_ReplaceItemInObject(vesDetails, "ves-endpoint-username", cJSON_CreateString(new_username));
+
+    //writing the new JSON to the configuration file
+    stringConfiguration = cJSON_Print(jsonConfig);
+    writeConfigFile(stringConfiguration);
+
+    if (stringConfiguration != NULL)
+    {
+        free(stringConfiguration);
+        stringConfiguration = NULL;
+    }
+
+    cJSON_Delete(jsonConfig);
+
+    return SR_ERR_OK;
+}
+
+int ves_password_changed(char *new_password)
+{
+    char *stringConfiguration = readConfigFileInString();
+
+    if (stringConfiguration == NULL)
+    {
+        printf("Could not read configuration file!\n");
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    cJSON *jsonConfig = cJSON_Parse(stringConfiguration);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfiguration);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return SR_ERR_OPERATION_FAILED;
+    }
+    //we don't need the string anymore
+    free(stringConfiguration);
+    stringConfiguration = NULL;
+
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    cJSON *vesPassword = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-password");
+    if (!cJSON_IsString(vesPassword))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-password is not a string");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    //we set the value of the fault-notification-delay-period object
+    cJSON_ReplaceItemInObject(vesDetails, "ves-endpoint-password", cJSON_CreateString(new_password));
+
+    //writing the new JSON to the configuration file
+    stringConfiguration = cJSON_Print(jsonConfig);
+    writeConfigFile(stringConfiguration);
+
+    if (stringConfiguration != NULL)
+    {
+        free(stringConfiguration);
+        stringConfiguration = NULL;
+    }
+
+    cJSON_Delete(jsonConfig);
+
+    return SR_ERR_OK;
+}
+
+int ves_auth_method_changed(char *new_auth_method)
+{
+    char *stringConfiguration = readConfigFileInString();
+
+    if (stringConfiguration == NULL)
+    {
+        printf("Could not read configuration file!\n");
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    cJSON *jsonConfig = cJSON_Parse(stringConfiguration);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfiguration);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return SR_ERR_OPERATION_FAILED;
+    }
+    //we don't need the string anymore
+    free(stringConfiguration);
+    stringConfiguration = NULL;
+
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    cJSON *vesAuthMethod = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-auth-method");
+    if (!cJSON_IsString(vesAuthMethod))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-auth-method is not a string");
+        cJSON_Delete(jsonConfig);
+        return SR_ERR_OPERATION_FAILED;
+    }
+
+    //we set the value of the fault-notification-delay-period object
+    cJSON_ReplaceItemInObject(vesDetails, "ves-endpoint-auth-method", cJSON_CreateString(new_auth_method));
+
+    //writing the new JSON to the configuration file
+    stringConfiguration = cJSON_Print(jsonConfig);
+    writeConfigFile(stringConfiguration);
+
+    if (stringConfiguration != NULL)
+    {
+        free(stringConfiguration);
+        stringConfiguration = NULL;
+    }
+
+    cJSON_Delete(jsonConfig);
+
+    return SR_ERR_OK;
+}
+
 int ves_registration_changed(cJSON_bool new_bool)
 {
        char *stringConfiguration = readConfigFileInString();
index 364633c..8958b1d 100644 (file)
@@ -105,6 +105,9 @@ int notification_delay_period_changed(sr_val_t *val, size_t count);
 int ves_heartbeat_period_changed(int period);
 int ves_ip_changed(char *new_ip);
 int ves_port_changed(int new_port);
+int ves_username_changed(char *new_username);
+int ves_password_changed(char *new_password);
+int ves_auth_method_changed(char *new_auth_method);
 int ves_registration_changed(cJSON_bool new_bool);
 int is_netconf_available_changed(cJSON_bool new_bool);
 int is_ves_available_changed(cJSON_bool new_bool);
index 217675b..3da6599 100644 (file)
@@ -193,11 +193,31 @@ void prepare_ves_message_curl(CURL *curl)
 
        char *ves_ip = getVesIpFromConfigJson();
        int ves_port = getVesPortFromConfigJson();
+    char *ves_auth_method = getVesAuthMethodFromConfigJson();
+    if (strcmp(ves_auth_method, "basic-auth") == 0)
+    {
+        char *ves_username = getVesUsernameFromConfigJson();
+        char *ves_password = getVesPasswordFromConfigJson();
+
+        char credentials[200];
+        sprintf(credentials, "%s:%s", ves_username, ves_password);
+
+        free(ves_username);
+        free(ves_password);
+
+        curl_easy_setopt(curl, CURLOPT_USERPWD, credentials);
+    }
+    free(ves_auth_method);
 
-       char url[100];
-       sprintf(url, "http://%s:%d/eventListener/v7", ves_ip, ves_port);
+       char url[300];
+       sprintf(url, "https://%s:%d/eventListener/v7", ves_ip, ves_port);
        curl_easy_setopt(curl, CURLOPT_URL, url);
 
+    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
+    curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+    curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYPEER, 0L);
+    curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYHOST, 0L);
+
        free(ves_ip);
 
        return;
@@ -420,11 +440,11 @@ char*     readConfigFileInString(void)
 
        if(NULL != scripts_dir)
        {
-           sprintf(config_file, "%s/configuration.json", scripts_dir);
+        sprintf(config_file, "%s/configuration.json", scripts_dir);
        }
        else
        {
-           sprintf(config_file, "%s/configuration.json", scripts_dir_default);
+        sprintf(config_file, "%s/configuration.json", scripts_dir_default);
            printf("warning: opening config file in default path: <%s>\n",
                   config_file);
        }
@@ -467,12 +487,12 @@ void      writeConfigFile(char *config)
 
        if(NULL != scripts_dir)
        {
-           sprintf(config_file, "%s/configuration.json", scripts_dir);
+        sprintf(config_file, "%s/configuration.json", scripts_dir);
        }
        else
        {
-           sprintf(config_file, "%s/configuration.json", scripts_dir_default);
-           printf("warning: opening config file in default path: <%s>\n",
+        sprintf(config_file, "%s/configuration.json", scripts_dir_default);
+        printf("warning: opening config file in default path: <%s>\n",
                   config_file);
        }
        // end of fix <--
@@ -664,50 +684,156 @@ char*    getVesAuthMethodFromConfigJson(void)
 */
 char*  getVesIpFromConfigJson(void)
 {
-       char *stringConfig = readConfigFileInString();
+    char *stringConfig = readConfigFileInString();
 
-       if (stringConfig == NULL)
-       {
-               printf("Could not read JSON configuration file in string.");
-               return 0;
-       }
+    if (stringConfig == NULL)
+    {
+        printf("Could not read JSON configuration file in string.");
+        return 0;
+    }
 
-       cJSON *jsonConfig = cJSON_Parse(stringConfig);
-       if (jsonConfig == NULL)
-       {
-               free(stringConfig);
-               const char *error_ptr = cJSON_GetErrorPtr();
-               if (error_ptr != NULL)
-               {
-                       fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
-               }
-               return NULL;
-       }
-       //we don't need the string anymore
-       free(stringConfig);
-       stringConfig = NULL;
+    cJSON *jsonConfig = cJSON_Parse(stringConfig);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfig);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return NULL;
+    }
+    //we don't need the string anymore
+    free(stringConfig);
+    stringConfig = NULL;
 
-       cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
-       if (!cJSON_IsObject(vesDetails))
-       {
-               printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
-               cJSON_Delete(jsonConfig);
-               return NULL;
-       }
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return NULL;
+    }
 
-       cJSON *vesIp = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-ip");
-       if (!cJSON_IsString(vesIp))
-       {
-               printf("Configuration JSON is not as expected: ves-endpoint-ip is not an object");
-               cJSON_Delete(jsonConfig);
-               return NULL;
-       }
+    cJSON *vesIp = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-ip");
+    if (!cJSON_IsString(vesIp))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-ip is not an object");
+        cJSON_Delete(jsonConfig);
+        return NULL;
+    }
 
-       char *ves_ip = strdup(cJSON_GetStringValue(vesIp));
+    char *ves_ip = strdup(cJSON_GetStringValue(vesIp));
 
-       cJSON_Delete(jsonConfig);
+    cJSON_Delete(jsonConfig);
+
+    return ves_ip;
+}
+
+/*
+ * Dynamically allocated memory;
+ * Caller needs to free the memory after it uses the value.
+ *
+*/
+char*  getVesUsernameFromConfigJson(void)
+{
+    char *stringConfig = readConfigFileInString();
+
+    if (stringConfig == NULL)
+    {
+        printf("Could not read JSON configuration file in string.");
+        return 0;
+    }
+
+    cJSON *jsonConfig = cJSON_Parse(stringConfig);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfig);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return NULL;
+    }
+    //we don't need the string anymore
+    free(stringConfig);
+    stringConfig = NULL;
+
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return NULL;
+    }
+
+    cJSON *vesUsername = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-username");
+    if (!cJSON_IsString(vesUsername))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-username is not an object");
+        cJSON_Delete(jsonConfig);
+        return NULL;
+    }
+
+    char *ves_username = strdup(cJSON_GetStringValue(vesUsername));
+
+    cJSON_Delete(jsonConfig);
+
+    return ves_username;
+}
+
+/*
+ * Dynamically allocated memory;
+ * Caller needs to free the memory after it uses the value.
+ *
+*/
+char*  getVesPasswordFromConfigJson(void)
+{
+    char *stringConfig = readConfigFileInString();
+
+    if (stringConfig == NULL)
+    {
+        printf("Could not read JSON configuration file in string.");
+        return 0;
+    }
+
+    cJSON *jsonConfig = cJSON_Parse(stringConfig);
+    if (jsonConfig == NULL)
+    {
+        free(stringConfig);
+        const char *error_ptr = cJSON_GetErrorPtr();
+        if (error_ptr != NULL)
+        {
+            fprintf(stderr, "Could not parse JSON configuration! Error before: %s\n", error_ptr);
+        }
+        return NULL;
+    }
+    //we don't need the string anymore
+    free(stringConfig);
+    stringConfig = NULL;
+
+    cJSON *vesDetails = cJSON_GetObjectItemCaseSensitive(jsonConfig, "ves-endpoint-details");
+    if (!cJSON_IsObject(vesDetails))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-details is not an object");
+        cJSON_Delete(jsonConfig);
+        return NULL;
+    }
+
+    cJSON *vesPassword = cJSON_GetObjectItemCaseSensitive(vesDetails, "ves-endpoint-password");
+    if (!cJSON_IsString(vesPassword))
+    {
+        printf("Configuration JSON is not as expected: ves-endpoint-password is not an object");
+        cJSON_Delete(jsonConfig);
+        return NULL;
+    }
+
+    char *ves_password = strdup(cJSON_GetStringValue(vesPassword));
+
+    cJSON_Delete(jsonConfig);
 
-       return ves_ip;
+    return ves_password;
 }
 
 int    getVesPortFromConfigJson(void)
@@ -858,7 +984,7 @@ cJSON*      vesCreatePnfRegistrationFields(int port, bool is_tls)
                return NULL;
        }
 
-       if (cJSON_AddStringToObject(pnfRegistrationFields, "oamV4IpAddress", getenv("NTS_IP")) == NULL)
+       if (cJSON_AddStringToObject(pnfRegistrationFields, "oamV4IpAddress", getenv("EXTERNAL_NTS_IP")) == NULL)
        {
                printf("Could not create JSON object: oamV4IpAddress\n");
                cJSON_Delete(pnfRegistrationFields);
@@ -873,7 +999,7 @@ cJSON*      vesCreatePnfRegistrationFields(int port, bool is_tls)
        }
 
        char serial_number[100];
-       sprintf(serial_number, "%s-%s-%d-Simulated Device Melacon", getenv("HOSTNAME"), getenv("NTS_IP"), port);
+       sprintf(serial_number, "%s-%s-%d-Simulated Device Melacon", getenv("HOSTNAME"), getenv("EXTERNAL_NTS_IP"), port);
 
        if (cJSON_AddStringToObject(pnfRegistrationFields, "serialNumber", serial_number) == NULL)
        {
index 366cba4..2cafb9e 100644 (file)
@@ -38,9 +38,9 @@ module o-ran-ald-port {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-07" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) backward compatible changes to introduce groupings.";
 
@@ -232,7 +232,7 @@ module o-ran-ald-port {
     description
       "The equipment is able to report the change of 'dc-enabled-status' of the ald-port.
       This is applicable when the leaf 'dc-control-support' of the ald-pot is 'TRUE'.";
-      
+
     uses dc-enabled-group;
   }
 }
index 55461db..d09cc30 100644 (file)
@@ -41,9 +41,9 @@ module o-ran-ald {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-07" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) backward compatible changes to introduce groupings.";
 
diff --git a/ntsimulator/yang/o-ran/ru-fh/o-ran-antenna-calibration.yang b/ntsimulator/yang/o-ran/ru-fh/o-ran-antenna-calibration.yang
new file mode 100644 (file)
index 0000000..b7ddb53
--- /dev/null
@@ -0,0 +1,367 @@
+module o-ran-antenna-calibration {
+  yang-version 1.1;
+  namespace "urn:o-ran:antcal:1.0";
+  prefix "o-ran-antcal";
+
+  organization "O-RAN Alliance";
+
+  contact
+    "www.o-ran.org";
+
+  description
+    "This module defines the configuration required for supporting the optional
+    antenna calibration functionality.
+
+     Copyright 2019 the O-RAN Alliance.
+
+     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+     ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+     LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+     CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+     SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+     INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+     POSSIBILITY OF SUCH DAMAGE.
+
+     Redistribution and use in source and binary forms, with or without
+     modification, are permitted provided that the following conditions are met:
+
+     * Redistributions of source code must retain the above copyright notice,
+     this list of conditions and the above disclaimer.
+     * Redistributions in binary form must reproduce the above copyright notice,
+     this list of conditions and the above disclaimer in the documentation
+     and/or other materials provided with the distribution.
+     * Neither the Members of the O-RAN Alliance nor the names of its
+     contributors may be used to endorse or promote products derived from
+     this software without specific prior written permission.";
+
+  revision 2019-07-03 {
+    description
+      "version 1.0.0
+
+       1) Newly introduced model for supporting optional
+       antenna calibration functionality";
+
+    reference "ORAN-WG4.MP-v02.00";
+  }
+
+  grouping antenna-calibration-capabilities {
+    description "container for collection of leafs for antenna calibration";
+
+    leaf self-calibration-support {
+      type boolean;
+      default false;
+      description
+        "Indicates whether O-RU supports self-calibration or not.
+
+        When true, indicates O-RU can initiate calibration without receiving an
+        rpc";
+    }
+    leaf number-of-calibration-symbols-per-block-dl {
+      type uint8 {
+        range "1..max";
+      }
+      units symbols;
+      mandatory true;
+      description
+        "Indicates how many consecutive symbols are required for DL antenna
+        calibration operation";
+    }
+    leaf number-of-calibration-symbols-per-block-ul {
+      type uint8 {
+        range "1..max";
+      }
+      units symbols;
+      mandatory true;
+      description
+        "Indicates how many consecutive symbols are required for UL antenna
+        calibration operation";
+    }
+    leaf interval-between-calibration-blocks {
+      type uint8;
+      units symbols;
+      description
+        "if time interval is required between consecutive antenna calibration
+        operation, defines this time value as unit of symbols.
+
+        A common value is used here for the intervals
+        between DL-DL blocks, UL-UL blocks, DL-UL blocks and UL-DL blocks,
+        which is the largest minimum interval required between any two adjacent
+        calibration blocks.";
+    }
+    leaf number-of-calibration-blocks-per-step-dl {
+      type uint8 {
+        range "1..max";
+      }
+      mandatory true;
+      description
+        "Indicates how many blocks are required for one step of DL antenna
+        calibration operation";
+    }
+    leaf number-of-calibration-blocks-per-step-ul {
+      type uint8 {
+        range "1..max";
+      }
+      mandatory true;
+      description
+        "Indicates how many blocks are required for one step of UL antenna
+        calibration operation";
+    }
+    leaf interval-between-calibration-steps {
+      type uint8;
+      units radio-frames;
+      description
+        "If time interval is required between consecutive step of antenna
+        calibration operation, defines this time value as unit of radio frames";
+    }
+    leaf number-of-calibration-steps {
+      type uint8 {
+        range "1..max";
+      }
+      mandatory true;
+      description
+        "Indicates how many steps are required for whole DL/UL antenna
+        calibration operation";
+    }
+  }
+
+  grouping antenna-calibration {
+    container antenna-calibration-capabilities {
+      config false;
+      description
+        "Describes the antenna calibration capabilities";
+      uses antenna-calibration-capabilities;
+    }
+    container self-calibration-policy {
+      leaf self-calibration-allowed {
+        type boolean;
+        default false;
+        description
+          "whether the self-calibration is allowed configured by operator.";
+      }
+      description
+        "Describes the self calibration policy of the operator";
+    }
+    description
+      "Describe the grouping set of antenna calibration";
+  }
+
+  container antenna-calibration {
+    uses antenna-calibration;
+    description
+      "Describes the antenna calibration top node";
+  }
+
+  rpc start-antenna-calibration {
+    description
+      "The antenna calibration operation can start when NETCONF client sends a
+      calibration start command with resource allocation parameters.
+      These parameters indicate how the O-RU can perform the antenna
+      calibration operation; at which Symbol, Slot, and Frame.
+      This scheduling information can be generated by O-RU itself.
+      However, in a dynamic TDD environment, the DL and UL configuration
+      is only determined and known by O-DU. Consequently, only O-DU (NETCONF
+      client ) can determine and configure the scheduling and resource
+      allocation permitted for use by the antenna calibration operation";
+    input  {
+      leaf symbol-bitmask-dl {
+        type string {
+          length "14";
+          pattern "[01]*";
+        }
+        mandatory true;
+        description
+          "Bitmask indicating DL calibration symbol within a calibration slot.
+           First character in the string indicate first symbol,
+           next character in the string indicate second symbol and so on.
+           Value 1 indicates that the symbol may be used for calibration
+           and 0 means the symbol shall not be used for calibration.";
+      }
+      leaf symbol-bitmask-ul {
+        type string {
+          length "14";
+          pattern "[01]*";
+        }
+        mandatory true;
+        description
+          "Bitmask indicating UL calibration symbol within a calibration slot.
+           First character in the string indicate first symbol,
+           next character in the string indicate second symbol and so on.
+           Value 1 indicates that the symbol may be used for calibration
+           and 0 means the symbol shall not be used for calibration.";
+      }
+      leaf slot-bitmask-dl {
+        type string {
+          length "10..255";
+          pattern "[01]*";
+        }
+        mandatory true;
+        description
+          "Bitmask indicating DL calibration slot within a calibration frame.
+           First character in the string indicate first slot,
+           next character in the string indicate second slot and so on.
+           Value 1 indicates that the slot may be used for calibration
+           and 0 means the slot shall not be used for calibration.";
+        }
+        leaf slot-bitmask-ul {
+          type string {
+            length "10..255";
+            pattern "[01]*";
+          }
+          mandatory true;
+          description
+            "Bitmask indicating UL calibration slot within a calibration frame.
+             First character in the string indicate first slot,
+             next character in the string indicate second slot and so on.
+             Value 1 indicates that the slot may be used for calibration
+             and 0 means the slot shall not be used for calibration.";
+        }
+        leaf frame-bitmask-dl {
+          type string {
+            length "1..255";
+            pattern "[01]*";
+          }
+          mandatory true;
+          description
+            "Bitmask indicating DL calibration frame within a calibration step.
+             First character in the string indicate first radio frame equal to
+             the start-SFN, next character in the string indicate the next frame
+             and so on.
+
+             Value 1 indicates that the frame may be used for calibration
+             and 0 means the frame shall not be used for calibration.";
+        }
+        leaf frame-bitmask-ul {
+          type string {
+            length "1..255";
+            pattern "[01]*";
+          }
+          mandatory true;
+          description
+            "Bitmask indicating UL calibration frame within a calibration step.
+             First character in the string indicate first radio frame equal to
+             the start-SFN, next character in the string indicate the next frame
+             and so on.
+
+             Value 1 indicates that the frame is may be used for calibration
+             and 0 means the frame shall not be used for calibration.";
+        }
+        leaf calibration-step-size {
+          type uint8;
+          mandatory true;
+          description " Number of frames within a calibration step";
+        }
+        leaf calibration-step-number {
+          type uint8;
+          mandatory true;
+          description "Number of calibration steps";
+        }
+        leaf start-sfn {
+          type uint16 {
+            range "0..1023";
+          }
+          mandatory true;
+          description "start SFN number of the first calibration step";
+        }
+    }
+    output  {
+      leaf status {
+        type enumeration {
+          enum ACCEPTED {
+            description
+              "Status information to indicate that O-RU accepted RPC
+              antenna calibration start request";
+          }
+          enum REJECTED {
+            description
+              "Status information to indicate that O-RU rejected RPC antenna
+              calibration start request";
+          }
+        }
+        mandatory true;
+        description
+          "Status of whether antenna calibration trigger by RPC is accepted
+          by the O-RU";
+      }
+      leaf error-message {
+        when "../status='REJECTED'";
+          type string;
+          description
+            "Detailed error Message when the status is rejected, e.g.,
+             because O-RU can not start antenna calibration
+             such as already running antenna calibration,
+             resource mask mismatch with O-RU antenna calibration capability,
+                              overlapped DL and UL masks, insufficient memory, O-RU internal reason";
+        }
+      }
+  }
+
+
+  notification antenna-calibration-required {
+    list dl-calibration-frequency-chunk {
+      leaf start-calibration-frequency-dl {
+        type uint64;
+        description
+          "lowest frequency value in Hz of the frequency range is required for
+           DL antenna calibration operation.";
+      }
+      leaf end-calibration-frequency-dl {
+        type uint64;
+        description
+          "highest frequency value in Hz of the frequency range is required for
+           DL antenna calibration operation.";
+      }
+      description
+         "min/max frequency of dl spectrum chunk affected by calibration process";
+    }
+    list ul-calibration-frequency-chunk {
+      leaf start-calibration-frequency-ul {
+        type uint64;
+        description
+          "lowest frequency value in Hz of the frequency range is required for
+           UL antenna calibration operation.";
+      }
+      leaf end-calibration-frequency-ul {
+        type uint64;
+        description
+          "highest frequency value in Hz of the frequency range is required for
+           UL antenna calibration operation.";
+      }
+      description
+        "min/max frequency of ul spectrum chunk affected by calibration process";
+    }
+    description
+      "this notification indicates that the antenna calibration is required in O-RU";
+  }
+
+  notification antenna-calibration-result {
+    leaf status {
+      type enumeration {
+        enum SUCCESS {
+          description "O-RU has succeeded in calibrating its antenna";
+        }
+        enum FAILURE {
+          description
+            "O-RU attemted to calibrate its antenna, but the procedure failed.";
+        }
+      }
+      mandatory true;
+      description
+        "Status of the antenna calibration procedure which has been triggered
+        by accepting an start-antenna-calibration RPC.";
+    }
+    leaf detailed-reason {
+      when "../status='FAILURE'";
+      type string;
+      description
+        "Detailed reason when the status is FAILURE, e.g.,
+        O-RU cannot complete the antenna calibration
+        because of lack of memory, self-calibration failure, etc";
+    }
+    description
+    "This notification indicates the antenna calibration result";
+  }
+}
index b733430..0d3c376 100644 (file)
@@ -50,22 +50,18 @@ module o-ran-beamforming {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-06-19" {
+  revision "2019-07-03" {
     description
-      "version 1.1.1
+      "version 2.0.0
 
-      1) adding possibilities to provide more compression types for beamforming";
+      1) re-designed/switched from per band to per capabilities-group for
+      addition flexibility
+      2) added in new beam tilt feature
+      3) adding possibilities to provide more compression types for beamforming
+      4) Adding possibility to configure beamforming per capabilities group
+      5) corrected xPATH boolean check from TRUE to true";
 
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-04-01" {
-    description
-      "version 1.1.0
-
-      1) corrested xPATH boolean check from TRUE to true";
-
-    reference "ORAN-WG4.M.0-v01.00";
+    reference "ORAN-WG4.M.0-v02.00";
   }
 
   revision "2019-02-04" {
@@ -85,6 +81,15 @@ module o-ran-beamforming {
       modify beamforming configuration information";
   }
 
+  feature BEAM-TILT {
+    description
+      "This feature indicates that the O-RU supports an optional feature to
+      allows to shift beam characteristic of all predefined-beams in elevation
+      and/or azimuth direction (i.e. changing the service area or sector
+      coverage) while preserving the beam adjacency among the beams within
+      the service area ";
+  }
+
   typedef beam-reference {
     type leafref {
       path "/o-ran-bf:beamforming-config/o-ran-bf:per-band-config/o-ran-bf:beam-information/o-ran-bf:beamforming-properties/o-ran-bf:beam-id";
@@ -318,6 +323,21 @@ module o-ran-beamforming {
     }
   }
 
+  grouping cap-group {
+    description
+      "Capabilities group grouping";
+
+    leaf capabilities-group {
+      type leafref {
+        path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+      }
+      mandatory true;
+      description
+        "Capabilities group identification number to which it refers.";
+    }
+
+  }
+
   grouping per-band-config-element {
     description
       "Grouping for per band config element";
@@ -395,6 +415,7 @@ module o-ran-beamforming {
 
     leaf beamforming-trough-attributes-supported {
       type boolean;
+      config false;
       description
         "Informs if beamforming can be controlled providing attributes to O-RU
           (like angles, beamwidth).";
@@ -402,6 +423,7 @@ module o-ran-beamforming {
 
     leaf beamforming-trough-ue-channel-info-supported {
       type boolean;
+      config false;
       description
         "Informs if beamforming can be controlled by UE information.";
     }
@@ -413,8 +435,26 @@ module o-ran-beamforming {
 
     list per-band-config {
       key band-number;
+      config false;
+      // [ast] libyang does not accept referencing deprecated leafs from non-deprecated elements
+      // status deprecated;
       description "beamforming information per band";
+      uses per-band-config-element;
+    }
+
+    list capabilities-groups {
+      key capabilities-group;
+      description
+        "Capabilities groups identification number assigned to be referenced by operations
+         and notifications.
+         This also help to group particular beamforming capabilities and bind it with arrays";
 
+      leaf capabilities-group {
+        type uint16;
+        description
+          "Capabilities group identification number. Number which is used just for reference in RPC
+           and notification";
+      }
       uses per-band-config-element;
     }
 
@@ -435,12 +475,231 @@ module o-ran-beamforming {
     }
     container operational-properties {
       if-feature MODIFY-BF-CONFIG;
+      config false;
       description "properties for dynamic beam weight/attribute support";
 
       uses operational-properties;
     }
   }
 
+  grouping beam-tilt-configuration {
+    description "grouping for beam-tilt feature";
+    list predefined-beam-tilt-offset {
+      if-feature BEAM-TILT;
+      key capabilities-group;
+      description "Configuration of the predefined-beam-tilt-offset per capabilities-group";
+      leaf capabilities-group {
+        type leafref {
+          path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+          require-instance false;
+        }
+        mandatory true;
+        description
+          "Capabilities group identification number for which
+          the predefined-beam-tilt-offset relates to";
+      }
+      leaf elevation-tilt-offset-angle {
+        type int16 {
+          range "-90..90";
+        }
+        units degrees;
+        default 0;
+        description
+          "Value 0 represents the default service area of the predefined-beams
+          in elevation domain, i.e. no tilt offset.
+
+          Values smaller than 0 represents an up-shift of the default service area
+          towards the zenith (i.e., corresponding to a decrease in zenith angle) and
+          values larger than 0 represent a down-shift of the default service area
+          away from the zenith (i.e., corresponding to an increase in zenith angle).
+
+          If the value is greater than the maximum supported angle, then the maximum
+          angle is used for configuration.
+          If the value is less than the minimum supported angle, then the minimum
+          angle is used for configuration.
+          The actual angle used is (angle DIV granularity) * granularity.
+
+          Any O-RU which is reset using the o-ran-operations:reset RPC shall reset
+          its offset angle to its default value.";
+      }
+      leaf azimuth-tilt-offset-angle {
+        type int16 {
+          range "-90..90";
+        }
+        units degrees;
+        default 0;
+        description
+          "Value 0 represents the default service area of the predefined-beams
+          in azimuth domain, i.e., no tile offset.
+
+          Azimuth tilt offset angle, represents counter-clockwise rotation around
+          z-axis. I.e., assuming view from the UE (observation of the O-RU
+          from the front), value larger than 0 and smaller than 0
+          respectively represent right-shifted and left-shifted of the default
+          service area in azimuth domain.
+
+          If the value is greater than the maximum supported angle, then the maximum
+          angle is used for configuration.
+          If the value is less than the minimum supported angle, then the minimum
+          angle is used for configuration.
+          The actual angle used is (angle DIV granularity) * granularity.
+
+          Any O-RU which is reset using the o-ran-operations:reset RPC shall reset
+          its offset angle to its default value.";
+      }
+    }
+  }
+
+  grouping beam-tilt-state {
+    description
+      "Grouping for beam tilt state";
+
+    list predefined-beam-tilt-offset-information {
+      key capabilities-group;
+      config false;
+      description
+        "Information which exposes predefined-beam-tilt-offset related O-RU capabilities.";
+      leaf capabilities-group {
+        type leafref {
+          path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+        }
+        mandatory true;
+        description
+          "Capabilities group identification number for which
+          the predefined-beam-tilt-offset-information relates to";
+      }
+      leaf elevation-tilt-offset-granularity {
+        type uint8 {
+          range "0..30";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "Indication of the supported granularity for the
+          predefined-beam-tilt-offset in elevation domain.
+
+          Value 0 represents that the O-RU doesn't support
+          the predefined-beam-tilt-offset in elevation domain.";
+      }
+      leaf azimuth-tilt-offset-granularity {
+        type uint8 {
+          range "0..30";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "Indication of the supported granularity for the
+          predefined-beam-tilt-offset in azimuth domain.
+
+          Value '0' represents that the O-RU doesn't support
+          the predefined-beam-tilt-offset in azimuth domain.";
+      }
+      leaf minimum-supported-elevation-tilt-offset {
+        type int16 {
+          range "-90..0";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "The minimum value which can be configured for
+          'elevation-tilt-offset-angle'.";
+      }
+      leaf maximum-supported-elevation-tilt-offset {
+        type int16 {
+          range "0..90";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "The maximum value which can be configured for
+          'elevation-tilt-offset-angle'.";
+      }
+      leaf minimum-supported-azimuth-tilt-offset {
+        type int16 {
+          range "-90..0";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "The minimum value which can be configured for
+          'azimuth-tilt-offset-angle'.";
+      }
+      leaf maximum-supported-azimuth-tilt-offset {
+        type int16 {
+          range "0..90";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "The maximum value which can be configured for
+          'azimuth-tilt-offset-angle'.";
+      }
+      leaf run-time-tilt-offset-supported {
+        type boolean;
+        mandatory true;
+        description
+          "If 'run-time-tilt-offset-supported' is FALSE, changing the values in
+          'predefined-beam-tilt-offset' for a specific band shall be allowed only
+          if all 'tx-array-carriers' and 'rx-array-carriers' corresponding
+          to the band are INACTIVE.";
+      }
+    }
+
+  }
+
+  grouping beam-tilt-report {
+    description
+      "Grouping for beam tilt report";
+
+    list predefined-beam-tilt-state {
+      key capabilities-group;
+      config false;
+      description
+        "Information which exposes state of predefined-beam-tilt-offset.";
+      leaf capabilities-group {
+        type leafref {
+          path "/o-ran-bf:beamforming-config/o-ran-bf:capabilities-groups/o-ran-bf:capabilities-group";
+        }
+        mandatory true;
+        description
+          "Capabilities group identification number for which
+          the predefined-beam-tilt-state relates to";
+      }
+      leaf elevation-tilt-offset-angle {
+        type int16 {
+          range "-90..90";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "Value 'zero' represents the default service area of the
+          predefined-beams in elevation domain.
+
+          Values smaller than 0 represents an up-shift of the default service area
+          towards the zenith (i.e., corresponding to a decrease in zenith angle) and
+          values larger than 0 represent a down-shift of the default service area
+          away from the zenith (i.e., corresponding to an increase in zenith angle).";
+      }
+      leaf azimuth-tilt-offset-angle {
+        type int16 {
+          range "-90..90";
+        }
+        units Degrees;
+        mandatory true;
+        description
+          "Value 'zero' represents the default service area of the
+          predefined-beams in azimuth domain.
+
+          Azimuth tilt offset angle, represents counter-clockwise rotation around
+          z-axis. I.e., assuming view from the UE (observation of the O-RU from
+          the front), value larger than 'zero' and smaller than 'zero'
+          respectively represent right-shifted and left-shifted of the default
+          service area in azimuth domain.";
+      }
+    }
+
+  }
+
   container beamforming-config {
     config false;
     description
@@ -448,6 +707,12 @@ module o-ran-beamforming {
 
     uses beamforming-config;
     uses beamforming-supported-type;
+    container beam-tilt {
+      if-feature BEAM-TILT;
+      description "container for pre-defined beam tilt feature";
+      uses beam-tilt-state;
+      uses beam-tilt-report;
+    }
   }
 
 
@@ -492,6 +757,81 @@ module o-ran-beamforming {
     }
   }
 
+  rpc activate-beamforming-config-by-capability-group {
+    if-feature MODIFY-BF-CONFIG;
+    description
+      "rpc to activate beamforming config information by indicating the file
+      stored in the folder O-RAN/beam-weights in advance";
+    input {
+      leaf beamforming-config-file {
+        type string;
+        mandatory true;
+        description
+          "file name stored in O-RAN/beamforming/ folder is indicated";
+      }
+
+      uses cap-group;
+    }
+    output {
+      leaf status {
+        type enumeration {
+          enum ACCEPTED {
+            description "O-RU has accepted the beamforming weight/attribute file";
+          }
+          enum REJECTED {
+            description
+              "O-RU has rejected the beamforming weight/attribute file. The O-RU
+              should then use the default beamforming file.";
+          }
+        }
+        mandatory true;
+        description "Status of activation of beamforming config information";
+      }
+      leaf error-message {
+        when "../status='REJECTED'";
+        type string;
+        description
+          "Detailed error Message when the status is rejected, e.g.,
+           because new beam forming file is attempted to be applied to a
+           carrier which is still active, or the beam-id does not exist.";
+      }
+    }
+  }
+
+
+  rpc modify-predefined-beam-tilt-offset {
+    if-feature BEAM-TILT;
+    description
+      "rpc to trigger the modification of the predefined beam tilt offset";
+    input {
+      uses beam-tilt-configuration;
+    }
+    output {
+      leaf status {
+        type enumeration {
+          enum ACCEPTED {
+            description "O-RU has accepted the predefind beamtilt offset configuration";
+          }
+          enum REJECTED {
+            description
+              "O-RU has rejected the predefind beamtilt offset configuration.";
+          }
+        }
+        mandatory true;
+        description "Status of acceptance of pre-defined beamtilt offset configuration";
+      }
+      leaf error-message {
+        when "../status='REJECTED'";
+        type string;
+        description
+          "Detailed error message when the pre-defined beam tilt configuration
+          is rejected, e.g., used when 'run-time-tilt-offset-supported' is FALSE and the
+          NETCONF client is attempting to modify the beam tilt on a band where
+          one or more array-carriers are still ACTIVE.";
+      }
+    }
+  }
+
 
   //notification statement
   notification beamforming-information-update {
@@ -499,4 +839,19 @@ module o-ran-beamforming {
     description
       "this notification indicates that the beamforming properties are updated for particular band";
   }
+
+  notification capability-group-beamforming-information-update {
+    uses cap-group;
+    description
+      "this notification indicates that the beamforming properties are updated for particular band
+       or capability group";
+  }
+
+  notification predefined-beam-tilt-offset-complete {
+    if-feature BEAM-TILT;
+    uses beam-tilt-report;
+    description
+      "this notification indicates that the re-generation of the predefined
+      beams is completed";
+  }
 }
index d974e88..c844724 100644 (file)
@@ -39,9 +39,9 @@ module o-ran-compression-factors {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-06-19" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) changes related to compression bitwidth presentation";
 
index 7a22dc3..fd6213c 100644 (file)
@@ -39,20 +39,12 @@ module o-ran-delay-management {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-06-03" {
+  revision "2019-07-03" {
     description
-      "version 1.0.2
+      "version 1.1.0
 
-      1) fixing descriptions of ta3-min and ta3-max.";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-  
-  revision "2019-04-12" {
-    description
-      "version 1.0.1
-
-      1) introducing grouping/uses to enable model re-use by WG5";
+      1) fixing descriptions of ta3-min and ta3-max.
+      2) introducing grouping/uses to enable model re-use by WG5";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
index 7a0ca47..d600a46 100644 (file)
@@ -50,21 +50,15 @@ module o-ran-dhcp {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-05-25" {
+  revision "2019-07-03" {
     description
       "version 1.1.0
 
-      1) backward compatible changes to introduce reporting of 3GPP
-      discovered MV-PnP information, including CA/RA Servers and SeGW ";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-03-07" {
-    description
-      "version 1.0.1
-
-      1) backward compatible changes to introduce groupings.";
+      1) backward compatible changes to fix pen number which always
+      should have been 32 bits
+      2) backward compatible changes to introduce reporting of 3GPP
+      discovered MV-PnP information, including CA/RA Servers and SeGW
+      3) backward compatible changes to introduce groupings";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
@@ -255,10 +249,16 @@ module o-ran-dhcp {
     container m-plane-dhcp {
       description "leafs covering off DHCP aspects of m-plane operations";
       leaf private-enterprise-number {
+        status deprecated;
         type uint16;
         default 53148;
         description "the private enteprise number allocated to O-RAN Alliance";
       }
+      leaf private-enterprise-num {
+        type uint32;
+        default 53148;
+        description "the private enterprise number allocated to O-RAN Alliance";
+      }
       leaf vendor-class-data {
         type string;
         description
index 9e44fdb..8779f71 100644 (file)
@@ -38,9 +38,9 @@ module o-ran-externalio {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-07" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) backward compatible changes to introduce groupings.";
 
index 6354302..79fb588 100644 (file)
@@ -38,9 +38,9 @@ module o-ran-fan {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-06" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) backward compatible changes to introduce groupings.";
 
index f7611be..ee07645 100644 (file)
@@ -42,21 +42,13 @@ module o-ran-file-management {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-06-05" {
+  revision "2019-07-03" {
     description
-      "version 1.0.2
+      "version 1.1.0
 
-      1) backward compatible changes according to NOK-0002 sFTP Server Authentication Correction.
-      2) minor fixes according to lack of descriptions";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-03-07" {
-    description
-      "version 1.0.1
-
-      1) backward compatible changes to introduce groupings.";
+      1) backward compatible changes to correct sFTP Server Authentication .
+      2) minor fixes according to lack of descriptions
+      3) backward compatible changes to introduce groupings";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
index 92238aa..27d06f3 100644 (file)
@@ -75,7 +75,9 @@ module o-ran-fm {
     }
 
     list affected-objects {
+      // [ast] Fix for list without a key
       key name;
+      // [ast] end fix
       leaf name {
         type string {
           length "1..255";
@@ -147,7 +149,9 @@ module o-ran-fm {
 
   container active-alarm-list {
     list active-alarms {
+      // [ast] Fix for list without a key
       key fault-id;
+      // [ast] end fix
       uses alarm;
 
       description
index 34cdada..ec6b359 100644 (file)
@@ -44,9 +44,9 @@ module o-ran-hardware {
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.";
 
-   revision "2019-03-28" {
+   revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) added new identities to accommodate cross working group use of
       o-ran-hardware and assoicated set of augmentations that are backwards
index 70a6d39..04b53ce 100644 (file)
@@ -67,9 +67,9 @@ module o-ran-interfaces {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-28" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) increasing max elements for user plane DSCP markings to 64
       2) re-organizing layout to facilitate cross-WG adoption, whilst ensuring
index dce0e31..0410c7f 100644 (file)
@@ -41,7 +41,7 @@ module o-ran-laa-operations {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-04-01" {
+  revision "2019-07-03" {
     description
       "version 1.1.0
 
index c2c3f25..2f02157 100644 (file)
@@ -5,6 +5,7 @@ module o-ran-laa {
 
   import o-ran-module-cap {
     prefix "mcap";
+    revision-date 2019-07-03;
   }
 
   organization "O-RAN Alliance";
@@ -42,6 +43,21 @@ module o-ran-laa {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
+  revision "2019-07-03" {
+    description
+      "version 1.1.0
+
+      1) fixing broken constraints (configuration cannot be dependent on
+        operational state). This is a backwards incompatible revision.
+
+        As these constraints only apply when the LAA feature is used, and also
+        when considering the limited number of implementation that need to be
+        taken into consideration for backwards compatibility, it has been
+        agreed to NOT increment the namespace integer.";
+
+    reference "ORAN-WG4.M.0-v01.00";
+  }
+
   revision "2019-02-04" {
     description
       "version 1.0.0
@@ -51,11 +67,11 @@ module o-ran-laa {
 
     reference "ORAN-WG4.M.0-v01.00";
   }
-  
+
   grouping laa-configuration {
     description
       "Grouping for LAA configuration";
-      
+
     leaf number-of-laa-scarriers {
       type uint8;
       description "Number of LAA secondary carriers to be supported at O-RU.";
@@ -99,7 +115,7 @@ module o-ran-laa {
   }
 
   container laa-config {
-    must "number-of-laa-scarriers <= /mcap:module-capability/mcap:band-capabilities[mcap:band-number = '46']/mcap:sub-band-info/mcap:number-of-laa-scarriers" {
+    must "number-of-laa-scarriers <= /mcap:module-capability/mcap:rw-sub-band-info/mcap:rw-number-of-laa-scarriers" {
       error-message "number of laa secondary carriers must be less than supported number of laa scells.";
     }
     presence "indicates LAA configuration";
index de5ec05..bf40a2f 100644 (file)
@@ -42,6 +42,17 @@ module o-ran-module-cap {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
+  revision "2019-07-03" {
+    description
+      "version 1.1.0
+
+      1) backward compatible change to introduce new RW leafs for use in
+      constraints in uplane-config and laa models.
+      2) removing unnecessary relations to band 46 in uplink";
+
+    reference "ORAN-WG4.M.0-v01.00";
+  }
+
   revision "2019-02-04" {
     description
       "version 1.0.0
@@ -196,7 +207,9 @@ module o-ran-module-cap {
     }
 
     list compression-method-supported {
+      // [ast] Fix for list without a key
       key "iq-bitwidth compression-type";
+      // [ast] end fix
       uses cf:compression-details;
 
       description
@@ -333,11 +346,17 @@ module o-ran-module-cap {
 
     list ul-mixed-num-required-guard-rbs {
       key "scs-a scs-b";
+      description
+        "List of required number of guard resource blocks
+        for the combination of subcarrier spacing values for downlink";
 
       uses ul-mixed-num-required-guard-rbs;
     }
     list dl-mixed-num-required-guard-rbs {
       key "scs-a scs-b";
+      description
+        "List of required number of guard resource blocks
+        for the combination of subcarrier spacing values for uplink";
 
       uses dl-mixed-num-required-guard-rbs;
     }
@@ -444,42 +463,36 @@ module o-ran-module-cap {
       "Grouping for UL specific parameters";
 
     leaf max-supported-frequency-ul {
-      when "../band-number != '46'";
       type uint64;
       description
         "This value indicates Maximum supported uplink frequency. Value unit is Hz.";
     }
 
     leaf min-supported-frequency-ul {
-      when "../band-number != '46'";
       type uint64;
       description
         "This value indicates Minimum supported uplink frequency. Value unit is Hz.";
     }
 
     leaf max-supported-bandwidth-ul {
-      when "../band-number != '46'";
       type uint64;
       description
         "This value indicates Maximum total uplink bandwidth in module. Value unit is Hz.";
     }
 
     leaf max-num-carriers-ul {
-      when "../band-number != '46'";
       type uint32;
       description
         "This value indicates Maximum number of uplink carriers in module.";
     }
 
     leaf max-carrier-bandwidth-ul {
-      when "../band-number != '46'";
       type uint64;
       description
         "This value indicates Maximum bandwidth per uplink carrier. Value unit is Hz.";
     }
 
     leaf min-carrier-bandwidth-ul {
-      when "../band-number != '46'";
       type uint64;
       description
         "This value indicates Minimum bandwidth per uplink carrier. Value unit is Hz.";
@@ -557,11 +570,12 @@ module o-ran-module-cap {
   }
 
   container module-capability {
-    config false;
+
     description
       "module capability object responsible for providing module capability.";
 
     container ru-capabilities {
+      config false;
       description
         "Structure representing set of capabilities.";
 
@@ -570,10 +584,31 @@ module o-ran-module-cap {
 
     list band-capabilities {
       key band-number;
+      config false;
       description
         "Capabilities that are needed to be defined per each band";
 
       uses band-capabilities;
     }
+    container rw-sub-band-info {
+      if-feature "o-ran-module-cap:LAA";
+      description "config true leafrefs for use as constraints for config true leafs";
+      leaf rw-number-of-laa-scarriers {
+        type leafref {
+          path "/module-capability/band-capabilities/sub-band-info/number-of-laa-scarriers";
+          require-instance false;
+        }
+        description
+          "This value indicates the number of LAA secondary carriers supported at O-RU.";
+      }
+      leaf rw-self-configure {
+        type leafref {
+          path "/module-capability/band-capabilities/sub-band-info/self-configure";
+          require-instance false;
+        }
+        description
+          "This value indicates that the O-RU can manage the contention window locally.";
+      }
+    }
   }
 }
index 80e1cab..84452cd 100644 (file)
@@ -50,25 +50,17 @@ module o-ran-mplane-int {
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.";
 
-  revision "2019-04-11" {
+  revision "2019-07-03" {
        description
-         "version 1.0.2
+         "version 1.1.0
 
-         1) Changes for ERI-001 - enabling NETCONF clients to be configured.
-         2) shifting new container to correct position.";
+         1) enabling NETCONF clients to be configured.
+         2) shifting new container to correct position
+         3) backward compatible changes to introduce groupings";
 
        reference "ORAN-WG4.M.0-v01.00";
   }
 
-  revision "2019-03-07" {
-    description
-      "version 1.0.1
-
-      1) backward compatible changes to introduce groupings.";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
   revision "2019-02-04" {
     description
       "version 1.0.0
index 19cfdbc..0623202 100644 (file)
@@ -51,32 +51,43 @@ module o-ran-operations {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-04-08" {
+  revision "2019-07-03" {
     description
-      "version 1.0.2
+      "version 2.0.0
 
-      1) added ru-instance-id ";
+      1) added timezone-name
+      2) added ru-instance-id
+      3) backward compatible changes to introduce groupings.";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
 
-  revision "2019-03-07" {
+  revision "2019-02-04" {
     description
-      "version 1.0.1
+      "version 1.0.0
 
-      1) backward compatible changes to introduce groupings.";
+      1) imported model from xRAN
+      2) changed namespace and reference from xran to o-ran";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
 
-  revision "2019-02-04" {
+
+  typedef timezone-name {
+    type string;
     description
-      "version 1.0.0
+      "A time zone name as used by the Time Zone Database,
+      sometimes referred to as the 'Olson Database'.
 
-      1) imported model from xRAN
-      2) changed namespace and reference from xran to o-ran";
+      The complete set of valid values is defined in
+      https://www.iana.org/time-zones.
 
-    reference "ORAN-WG4.M.0-v01.00";
+      The exact set of supported values is an
+      implementation-specific matter.";
+
+    reference
+      "RFC 6557: Procedures for Maintaining the Time Zone Database
+      IANA Time Zone Database https://www.iana.org/time-zones ";
   }
 
   typedef version {
@@ -100,9 +111,14 @@ module o-ran-operations {
 
       leaf ru-instance-id {
         type string;
+       // [ast] added extra concat, because only 3 params are accepted in NTS
+       // must "re-match(current(), concat(/hw:hardware/hw:component/hw:mfg-name,
+        //  '_', /hw:hardware/hw:component/hw:model-name, '_',
+        //  /hw:hardware/hw:component/hw:serial-num ))";
         must "re-match(current(), concat(concat(/hw:hardware/hw:component/hw:mfg-name,
           '_', /hw:hardware/hw:component/hw:model-name), '_',
           /hw:hardware/hw:component/hw:serial-num))";
+       // [ast] end fix
         description
           "a unique instance identifier that may be used to identify a
           particular hardware instance, e.g., when used performing hierarchical
@@ -205,6 +221,19 @@ module o-ran-operations {
       description
         "System date and time properties used by all working groups.";
 
+      leaf timezone-name {
+        type timezone-name;
+        description
+          "An optional TZ database name to use for the system,
+           such as 'Europe/Stockholm'
+
+           Time zone name is an informative leaf and is NOT used in the
+           managed element to convert local time zone.
+
+           The managed element may include time zone name in measurement or
+           fault data.";
+      }
+
       leaf timezone-utc-offset {
         type int16 {
           range "-720 .. 840";
index 86e1d10..ff210e2 100644 (file)
@@ -72,34 +72,19 @@ module o-ran-performance-management {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-06-05" {
+  revision "2019-07-03" {
     description
-      "version 1.0.2
+      "version 2.0.0
 
-      1) backward compatible changes according to NOK-0002 sFTP Server Authentication Correction.
-      2) simplifying file management and authentication to reuse from o-ran-file-management module
-      3) minor fixes according to lack of descriptions and reference";
+      1) added new measurement objects for QSFP
+      2) backward compatible changes to correct sFTP Server Authentication.
+      3) simplifying file management and authentication to reuse from o-ran-file-management module
+      4) minor fixes according to lack of descriptions and reference
+      5) added to descriptions to indicate applicability of leafs and Containers
+      to separate O-RAN use cases
+      6) backward compatible changes to introduce groupings.";
 
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-03-28" {
-    description
-      "version 1.0.2
-
-      1) added to descriptions to indicate applicability of leafs and Containers
-      to separate O-RAN use cases";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-03-07" {
-    description
-      "version 1.0.1
-
-      1) backward compatible changes to introduce groupings.";
-
-    reference "ORAN-WG4.M.0-v01.00";
+    reference "ORAN-WG4.M.0-v02.00";
   }
 
   revision "2019-02-04" {
@@ -279,7 +264,9 @@ module o-ran-performance-management {
 
       case TRANSPORT {
         list tr-measured-result{
+         // [ast] Fix for list without key
           key name;
+         // [ast] end fix
           leaf name{
             type leafref{
               path "/o-ran-elements:processing-elements/o-ran-elements:ru-elements/o-ran-elements:name";
@@ -307,7 +294,9 @@ module o-ran-performance-management {
 
       case EAXC_ID {
         list eaxc-measured-result {
+         // [ast] Fix for list without key
           key eaxc-id;
+         // [ast] end fix
           leaf eaxc-id{
             type uint16;
 
@@ -438,15 +427,51 @@ module o-ran-performance-management {
         type enumeration {
           enum RX_POWER {
             description
-              "Measured Rx input power in mW";
+              "Measured Rx input power in mW for SFP or lane 1 of QSFP";
+          }
+          enum RX_POWER_LANE_2 {
+            description
+              "Measured Rx input power in mW for lane 2 of QSFP";
+          }
+          enum RX_POWER_LANE_3 {
+            description
+              "Measured Rx input power in mW for lane 3 of QSFP";
+          }
+          enum RX_POWER_LANE_4 {
+            description
+              "Measured Rx input power in mW for lane 4 of QSFP";
           }
           enum TX_POPWER {
             description
               "Measured Tx input power in mW.";
           }
+          enum TX_POWER_LANE_2 {
+            description
+              "Measured Tx input power in mW for lane 2 of QSFP";
+          }
+          enum TX_POWER_LANE_3 {
+            description
+              "Measured Tx input power in mW for lane 3 of QSFP";
+          }
+          enum TX_POWER_LANE_4 {
+            description
+              "Measured Tx input power in mW for lane 4 of QSFP";
+          }
           enum TX_BIAS_COUNT {
             description
-              "Internally measured Tx Bias Current in mA";
+              "Internally measured Tx Bias Current in mA for SFP or lane 1 of QSFP";
+          }
+          enum TX_BIAS_COUNT_LANE_2 {
+            description
+              "Internally measured Tx Bias Current in mA for lane 2 of QSFP";
+          }
+          enum TX_BIAS_COUNT_LANE_3 {
+            description
+              "Internally measured Tx Bias Current in mA for lane 3 of QSFP";
+          }
+          enum TX_BIAS_COUNT_LANE_4 {
+            description
+              "Internally measured Tx Bias Current in mA for lane 4 of QSFP";
           }
           enum VOLTAGE {
             description
index be4dfbd..d0dc5f6 100644 (file)
@@ -61,6 +61,16 @@ module o-ran-processing-element {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
+  revision "2019-07-03" {
+    description
+      "version 1.1.0
+
+      1) added new leaf to enable O-RU to report the maximum number of
+      transport flows it can support, e.g., due to restrictions on number
+      of VLAN-IDs when ethernet type transport is used.";
+
+    reference "ORAN-WG4.M.0-v01.00";
+  }
   revision "2019-02-04" {
     description
       "version 1.0.0
@@ -74,6 +84,15 @@ module o-ran-processing-element {
 // groupings
 
   grouping pe-group {
+    leaf maximum-number-of-transport-flows {
+      type uint16 {
+        range "1..4094";
+      }
+      config false;
+      default 4094;
+      description
+        "The maximum number of transport flows that can be supported by an O-RU";
+    }
     leaf transport-session-type {
       type enumeration {
         enum ETH-INTERFACE {
index b48a4c5..e9f3448 100644 (file)
@@ -55,23 +55,15 @@ module o-ran-software-management {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-06-05" {
+  revision "2019-07-03" {
     description
       "version 1.0.2
 
-      1) backward compatible changes according to NOK-0002 sFTP Server Authentication Correction.
+      1) backward compatible changes to correct sFTP Server Authentication .
       2) simplifying file management and authentication to reuse from o-ran-file-management module
       3) minor fixes according to lack of descriptions
-      4) removal of not used grouping";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-03-07" {
-    description
-      "version 1.0.1
-
-      1) backward compatible changes to introduce groupings.";
+      4) removal of not used grouping
+      5) backward compatible changes to introduce groupings.";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
index 0491e90..e2c8a62 100644 (file)
@@ -42,21 +42,12 @@ module o-ran-supervision {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-04-11" {
+  revision "2019-07-03" {
     description
-      "version 1.0.2
+      "version 2.0.0
 
-      1) added leafs for CU plane monitoring as a companion change to
-      Change Request CIS-0001";
-
-    reference "ORAN-WG4.M.0-v01.00";
-  }
-
-  revision "2019-03-06" {
-    description
-      "version 1.0.1
-
-      1) backward compatible changes to introduce groupings.";
+      1) added leafs for CU plane monitoring
+      2) backward compatible changes to introduce groupings";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
index 95906a7..275a0f8 100644 (file)
@@ -45,9 +45,9 @@ module o-ran-sync {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-06" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) backward compatible changes to introduce groupings.";
 
index 7571aaa..5bfead9 100644 (file)
@@ -37,10 +37,11 @@ module o-ran-trace {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-02-21" {
+  revision "2019-07-03" {
     description
       "version 1.0.0
-      Initial module definition.";
+
+      1) Initial module definition.";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
@@ -90,7 +91,7 @@ module o-ran-trace {
       description
         "The list of trace log file names on the O-RU.";
     }
-    
+
     leaf is-notification-last {
       type boolean;
       default false;
index 312b11e..93d83d8 100644 (file)
@@ -46,13 +46,14 @@ module o-ran-transceiver {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-03-07" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 2.0.0
 
-      1) backward compatible changes to introduce groupings.";
+      1) introduction of reporting for QSFP.
+      2) backward compatible changes to introduce groupings.";
 
-    reference "ORAN-WG4.M.0-v01.00";
+    reference "ORAN-WG4.M.0-v02.00";
   }
 
   revision "2019-02-04" {
@@ -65,6 +66,7 @@ module o-ran-transceiver {
     reference "ORAN-WG4.M.0-v01.00";
   }
 
+
   // Groupings
 
   grouping transceiver-group {
@@ -268,6 +270,61 @@ module o-ran-transceiver {
         reference "https://ta.snia.org/higherlogic/ws/public/document?document_id=944";
       }
 
+      leaf identifier {
+        type enumeration {
+          enum unknown {
+            description "encoded as 00h in Table 4-1 of SFF-8024";
+          }
+          enum gbic {
+            description "encoded as 01h in Table 4-1 of SFF-8024";
+          }
+          enum soldered {
+            description "encoded as 02h in Table 4-1 of SFF-8024";
+          }
+          enum sfp {
+            description "encoded as 03h in Table 4-1 of SFF-8024";
+          }
+          enum xbi {
+            description "encoded as 04h in Table 4-1 of SFF-8024";
+          }
+          enum xenpack {
+            description "encoded as 05h in Table 4-1 of SFF-8024";
+          }
+          enum xfp {
+            description "encoded as 06h in Table 4-1 of SFF-8024";
+          }
+          enum xff {
+            description "encoded as 07h in Table 4-1 of SFF-8024";
+          }
+          enum xfp-e {
+            description "encoded as 08h in Table 4-1 of SFF-8024";
+          }
+          enum xpak {
+            description "encoded as 09h in Table 4-1 of SFF-8024";
+          }
+          enum x2 {
+            description "encoded as 0Ah in Table 4-1 of SFF-8024";
+          }
+          enum dwdm-sfp {
+            description "encoded as 0Bh in Table 4-1 of SFF-8024";
+          }
+          enum qsfp {
+            description "encoded as 0Ch in Table 4-1 of SFF-8024";
+          }
+          enum qsfp+ {
+            description "encoded as 0Dh in Table 4-1 of SFF-8024";
+          }
+        }
+        config false;
+        description
+          "Connector identifier as defined in the identifer
+          types derived from table 4-1 in SFF-8024.
+
+          Optional node included when the NETCONF Server has determined
+          the identifier type.";
+        reference "https://members.snia.org/document/dl/26423";
+      }
+
       leaf nominal-bitrate {
         type uint32;
         config false;
@@ -329,7 +386,10 @@ module o-ran-transceiver {
           "Measured RX input power in mW.
 
           Optional node included when the NETCONF Server has determined
-          the measured RX power.";
+          the measured RX power.
+
+          If operating with QSFP, this power corresponds to that of
+          Lane/Channel 1.";
       }
 
       leaf tx-power {
@@ -353,7 +413,10 @@ module o-ran-transceiver {
           "Measured transmitter laser bias current in mA.
 
           Optional node included when the NETCONF Server has determined
-          the tx bias current.";
+          the tx bias current.
+
+          If operating with QSFP, this bias current corresponds to that of
+          Lane/Channel 1.";
       }
 
       leaf voltage {
@@ -379,7 +442,61 @@ module o-ran-transceiver {
           Optional node included when the NETCONF Server has determined
           the temperature.";
       }
+
+      list additional-multi-lane-reporting {
+        when "(../identifier ='qsfp')or(../identifier ='qsfp+')";
+        config false;
+        description
+          "Additional reporting according to SFF8436 which specifies real time
+          channel monitoring for each transmit and receive channel and includes
+          optical input power and Tx bias current. ";
+        key lane;
+        leaf lane {
+          type uint8 {
+            range "2..4";
+          }
+          description
+            "the specific lane/channel associated with the report parameters";
+        }
+        leaf rx-power {
+          type decimal64{
+            fraction-digits 4;
+          }
+          config false;
+          description
+            "Measured RX input power in mW.
+
+            Optional node included when the NETCONF Server has determined
+            the measured RX power for a particular lane/channel
+            - see tabel 7-10 of SFF-8636.";
+        }
+        leaf tx-bias-current {
+          type decimal64{
+            fraction-digits 4;
+          }
+          config false;
+          description
+            "Measured transmitter laser bias current in mA.
+
+            Optional node included when the NETCONF Server has determined
+            the tx bias current for a particular lane/channel
+            - see tabel 7-10 of SFF-8636.";
+        }
+        leaf tx-power {
+          type decimal64{
+            fraction-digits 4;
+          }
+          config false;
+          description
+            "Measured coupled TX output power in mW.
+
+            Optional node included when the NETCONF Server has determined
+            the measured coupled TX power or a particular lane/channel
+            - see tabel 7010 of SFF-8636.";
+        }
+      }
     }
+
   }
 
   // Top Level Container
index a51933a..fb6c090 100644 (file)
@@ -13,6 +13,8 @@ module o-ran-uplane-conf {
 
   import o-ran-module-cap {
     prefix "mcap";
+    revision-date 2019-07-03;
+    // need to align/update with final date of publication
   }
 
   import o-ran-compression-factors {
@@ -54,11 +56,24 @@ module o-ran-uplane-conf {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-04-01" {
+  revision "2019-07-03" {
     description
       "version 1.1.0
 
-      1) removed redundant LAA import";
+      1) added new leaf multiple-numerology-supported to enable O-RU to report
+         whether it supports multiple numerologies.
+
+      2) fixing broken constraints (configuration cannot be dependent on
+        operational state). This is a backwards incompatible revision.
+
+       As these constraints only apply when the LAA feature is used, and also
+       when considering the limited number of implementation that need to be
+       taken into consideration for backwards compatibility, it has been
+       agreed to NOT increment the namespace integer.
+
+      3) added frequency related capabilities for tx-arrays and rx-array
+
+      4) removed redundant LAA import";
 
     reference "ORAN-WG4.M.0-v01.00";
   }
@@ -156,7 +171,7 @@ module o-ran-uplane-conf {
     }
 
     list max-cw-usage-counter {
-      when "/mcap:module-capability/mcap:band-capabilities[mcap:band-number = '46']/mcap:sub-band-info/mcap:self-configure = 'true'";
+      when "/mcap:module-capability/mcap:rw-sub-band-info/mcap:rw-self-configure = 'true'";
       key "priority";
       description "";
       leaf priority {
@@ -483,7 +498,7 @@ module o-ran-uplane-conf {
     }
   }
 
-  grouping common-array-carrier-elements {
+  grouping tx-common-array-carrier-elements {
     description
       "This grouping containes all common parameters for tx-array-carriers and rx-array-carriers";
 
@@ -589,7 +604,131 @@ module o-ran-uplane-conf {
 
       description
         "Type of duplex scheme O-RU supports.";
+    }
+    leaf rw-duplex-scheme {
+      type leafref {
+        path "/user-plane-configuration/tx-array-carriers[name=current()/../name]" + "/duplex-scheme";
+        require-instance false;
+      }
+      description
+        "Config true type of duplex scheme.";
+    }
+    leaf rw-type {
+      type leafref {
+        path "/user-plane-configuration/tx-array-carriers[name=current()/../name]" + "/type";
+        require-instance false;
+      }
+      description
+        "Config true type of carrier.";
+    }
+  }
+
+  grouping rx-common-array-carrier-elements {
+    description
+      "This grouping containes all common parameters for tx-array-carriers and rx-array-carriers";
+
+    leaf absolute-frequency-center {
+      type uint32;
+      mandatory true;
+      description
+        "Absolute Radio Frequency Channel Number - indirectly indicates RF center carrier frequency of signal.
+        Reflected in arfcn.";
+    }
+
+    leaf center-of-channel-bandwidth {
+      type uint64;
+          units Hz;
+      mandatory true;
+      description
+        "Center frequency of channel bandwidth in Hz. Common for all numerologies.";
+    }
+
+    leaf channel-bandwidth {
+      type uint64;
+      units Hz;
+      mandatory true;
+
+      description
+        "Width of carrier given in Hertz";
+    }
+
+    leaf active {
+      type enumeration {
+        enum INACTIVE {
+              description
+                "carrier does not provide signal - transmission is disabled";
+            }
+        enum SLEEP{
+              description
+                "carrier is fully configured and was active but is energy saving mode";
+            }
+        enum ACTIVE{
+              description
+                "carrier is fully configured and properly providing the signal";
+            }
+      }
+      default INACTIVE;
+
+      description
+        "Indicates if transmission is enabled for this array carriers. Note that Netconf server uses state parameter
+        to indicate actual state of array carriers operation. When array carriers is in sleep status,
+        Netconf server rejects all other operation request to tx-array-carriers object except either request to change from sleep
+        to active status or delete MO operation (see 4.8) to the object.";
+    }
+
+    leaf state {
+      type enumeration {
+        enum DISABLED {
+          description
+            "array carrier is not active - transmission of signal is disabled.";
+        }
+        enum BUSY {
+          description
+            "array carrier is processing an operation requested by change of active parameter.
+            When array carriers is BUSY the transmission of signal is not guaranteed.";
+        }
+        enum READY {
+          description
+            "array carrier had completed activation operation - is active and transmission of signal is ongoing.";
+        }
+      }
+      config false;
+      mandatory true;
+      description
+        "Indicates state of array carriers activation operation";
+    }
 
+    leaf type {
+      type enumeration {
+        enum NR {
+              description
+                "5G technology";
+            }
+        enum LTE {
+              description
+                "LTE technology";
+        }
+      }
+      config false;
+      mandatory true;
+      description
+        "Type of carrier. Indicates array-carrier technology.";
+    }
+    leaf duplex-scheme {
+      type enumeration {
+        enum TDD {
+              description
+                "TDD scheme";
+            }
+        enum FDD {
+              description
+                "FDD scheme";
+        }
+      }
+      config false;
+
+      description
+        "Type of duplex scheme O-RU supports.";
     }
   }
 
@@ -599,9 +738,9 @@ module o-ran-uplane-conf {
         range "1..12";
       }
       description
-        "Max number of C-plane sections (C-plane section is part of C-plane message that carries “section fields”)
+        "Max number of C-plane sections (C-plane section is part of C-plane message that carries 'section fields')
         referring to same U-plane section (U-plane section is part of U-plane message that carries
-        “section header fields” and “PRB fields”) that is supported by endpoint.
+        'section header fields' and 'PRB fields') that is supported by endpoint.
         Note that additional limitations specific for each section type apply on top of this number.";
     }
     leaf max-sections-per-symbol {
@@ -660,10 +799,16 @@ module o-ran-uplane-conf {
     }
 
     description
-      "Attributes presenting processing capacity related to numerology.";
+      "Attributes presenting processing capacity related to numerology.
+
+      This leaf contains valid data only when multiple-numerology-supported
+      is set to true.";
   }
 
   grouping uplane-conf-group {
+    description
+      "Grouping for uplane configuration related parameters";
+
     list low-level-tx-links {
       key name;
       description
@@ -815,6 +960,13 @@ module o-ran-uplane-conf {
           "Type of delay supported by the endpoint";
       }
 
+      leaf multiple-numerology-supported {
+        type boolean;
+        default true;
+        description
+          "Indicates whether the endpoint type supports multiple numerologies";
+      }
+
       leaf max-numerology-change-duration {
         type uint16 {
           range "0..10000";
@@ -822,8 +974,13 @@ module o-ran-uplane-conf {
 
         units Ts;
         description
-          "Maximum gap of endpoint operation that will be caused by changing of numerology.
-          This time is required for reconfiguration and flushing of pipes.";
+          "Maximum gap of endpoint operation that will be caused by changing of
+          numerology.
+
+          This time is required for reconfiguration and flushing of pipes.
+
+          This leaf contains valid data only when multiple-numerology-supported
+          is set to true.";
       }
 
       uses endpoint-section-capacity;
@@ -1106,7 +1263,7 @@ module o-ran-uplane-conf {
           "Unique name of tx-array-carriers object.";
       }
 
-      uses common-array-carrier-elements;
+      uses tx-common-array-carrier-elements;
 
       leaf band-number {
         if-feature mcap:LAA;
@@ -1121,7 +1278,7 @@ module o-ran-uplane-conf {
       }
 
       container lte-tdd-frame {
-        when "(/user-plane-configuration/rx-array-carriers/type = 'LTE') and  (/user-plane-configuration/rx-array-carriers/duplex-scheme = 'TDD')";
+        when "(/user-plane-configuration/tx-array-carriers/rw-type = 'LTE') and  (/user-plane-configuration/tx-array-carriers/rw-duplex-scheme = 'TDD')";
         description
           "Container which consists of global configurable parameters for tdd Frame";
 
@@ -1198,6 +1355,8 @@ module o-ran-uplane-conf {
       }
 
       container laa-carrier-configuration {
+        // [ast] Fix? added relative path
+        // when "../band-number = 46";
         when "./../band-number = 46";
         if-feature mcap:LAA;
         description "Container to specify LAA feature related carrier configuration.";
@@ -1251,7 +1410,7 @@ module o-ran-uplane-conf {
             "Unique name of rx-array-carriers object.";
       }
 
-      uses common-array-carrier-elements;
+      uses rx-common-array-carrier-elements;
 
       leaf downlink-radio-frame-offset {
         type uint32 {
@@ -1324,6 +1483,15 @@ module o-ran-uplane-conf {
           "If true then every element of array has own, power budget independent from power budget of other elements.
           Else all elements of array that are at same row and column and have same polarization share power budget";
       }
+
+      list capabilities {
+        description
+          "List of capabilities related to this tx-array";
+       // [ast] Fix for list without key
+        key max-supported-frequency-dl;
+        // [ast] end fix
+        uses mcap:support-for-dl;
+      }
     }
 
     list rx-arrays {
@@ -1353,6 +1521,15 @@ module o-ran-uplane-conf {
         description
           "Array gain correction factor";
       }
+
+      list capabilities {
+        description
+          "List of capabilities related to this rx-array";
+       // [ast] Fix for list without key
+        key max-supported-frequency-ul;
+        // [ast] end fix
+        uses mcap:support-for-ul;
+      }
     }
 
     list relations {
@@ -1418,6 +1595,9 @@ module o-ran-uplane-conf {
   }
 
   grouping tx-array-notification-group {
+    description
+      "Grouping for tx-array for notification";
+
     list tx-array-carriers{
       key name;
       description "notification of state change for tx-array-carriers";
@@ -1440,6 +1620,9 @@ module o-ran-uplane-conf {
   }
 
   grouping rx-array-notification-group {
+    description
+      "Grouping for rx-array for notification";
+
     list rx-array-carriers{
       key name;
       description
index 7da3b96..815ed63 100644 (file)
@@ -43,9 +43,9 @@ module o-ran-usermgmt {
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.";
 
-  revision "2019-04-25" {
+  revision "2019-07-03" {
     description
-      "version 1.0.1
+      "version 1.1.0
 
       1) change name leaf to type nacm:user-name-type
       2) added account-type to qualify when password is required ";