.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright (C) 2020 Nordix

.. _sdnc-a1-controller-api:

.. |nbsp| unicode:: 0xA0
   :trim:

.. |nbh| unicode:: 0x2011
   :trim:

######################
SDNC A1 Controller API
######################

The A1 of a Near |nbh| RT |nbsp| RIC can be used through the SDNC A1 Controller.

The OSC A1 Controller supports using multiple versions of A1 API southbound. By passing the full URL for each southbound
A1 operation the problem of version-specific URL formats is avoided.

Since different versions of A1 operations may use different data formats for data payloads for similar REST requests and
responses the data formatting requirements are flexible, so version-specific encoding/decoding is handled by the service
that requests the A1 operation.

Get Policy Type
~~~~~~~~~~~~~~~

POST
++++

Gets a policy type.

Definition
""""""""""

**URL path:**

/restconf/operations/A1-ADAPTER-API:getA1PolicyType

**Parameters:**

None.

**Body:** (*Required*)

A JSON object. ::

  {
    "input": {
      "near-rt-ric-url": "<url-to-near-rt-ric-to-get-type>"
    }
  }

**Responses:**

200:

A JSON object where the body tag contains the JSON object of the policy type. ::

  {
    "output": {
      "http-status": "integer",
      "body": "{
        <policy-type>
      }"
    }
  }

Examples
""""""""

Get a policy type from a Near |nbh| RT |nbsp| RIC that is using the OSC 2.1.0 version. The STD 1.1.3 version does not
support types, so this function is not available for that version.

**Call**: ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1PolicyType"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://nearRtRic-sim1:8085/a1-p/policytypes/11"
      }
    }'

**Result**:

200: ::

  {
    "output": {
      "http-status": 200,
      "body": "{
        \"$schema\": \"http://json-schema.org/draft-07/schema#\",
        \"title\": \"Example_QoETarget_1.0.0\",
        \"description\": \"Example QoE Target policy type\",
        \"type\": \"object\",
        \"properties\": {
          \"scope\": {
            \"type\": \"object\",
            \"properties\": {
              \"ueId\": {
                \"type\": \"string\"
              },
              \"sliceId\": {
                \"type\": \"string\"
              },
              \"qosId\": {
                \"type\": \"string\"
              },
              \"cellId\": {
                \"type\": \"string\"
              }
            },
            \"additionalProperties\": false,
            \"required\": [
              \"ueId\",
              \"sliceId\"
            ]
          },
          \"statement\": {
            \"type\": \"object\",
            \"properties\": {
              \"qoeScore\": {
                \"type\": \"number\"
              },
              \"initialBuffering\": {
                \"type\": \"number\"
              },
              \"reBuffFreq\": {
                \"type\": \"number\"
              },
              \"stallRatio\": {
                \"type\": \"number\"
              }
            },
            \"minProperties\": 1,
            \"additionalProperties\": false
          }
        }
      }"
    }
  }

Put Policy
~~~~~~~~~~

POST
++++

Creates or updates a policy instance.

Definition
""""""""""

**URL path:**

/restconf/operations/A1-ADAPTER-API:putA1Policy

**Parameters:**

None.

**Body:** (*Required*)

A JSON object where the body tag contains the JSON object of the policy. ::

  {
    "input": {
      "near-rt-ric-url": "<url-to-near-rt-ric-to-put-policy>",
      "body": "<policy-as-json-string>"
    }
  }

**Responses:**

200:

A JSON object with the response. ::

  {
    "output": {
      "http-status": "integer"
    }
  }

Examples
""""""""

**Call**:

Create a policy in a Near |nbh| RT |nbsp| RIC that is using the OSC 2.1.0 version. ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:putA1Policy"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://nearRtRic-sim1:8085/a1-p/policytypes/11/policies/5000",
        "body": "{
          "blocking_rate":20,
          "enforce":true,
          "trigger_threshold":10,
          "window_length":10
        }"
      }
    }'

Create a policy in a Near |nbh| RT |nbsp| RIC that is using the STD 1.1.3 version. ::

    curl -X POST http://localhost:8282/restconf/operations/A1-ADAPTER-API:putA1Policy
    -H Content-Type:application/json -d '{
      "input": {
        "near-rt-ric-url": "http://ricsim_g2_1:8085/A1-P/v1/policies/5000",
        "body": "{
          "scope": {
            "ueId": "ue5000",
            "qosId": "qos5000"
          },
          "qosObjective": {
            "priorityLevel": 5000
          }
        }"
      }
    }'

**Result**:

The result is the same irrespective of which API that is used.

200: ::

  {
    "output": {
      "http-status": 200
    }
  }

Get Policy
~~~~~~~~~~

POST
++++

Gets a policy instance.

Definition
""""""""""

**URL path:**

/restconf/operations/A1-ADAPTER-API:getA1Policy

**Parameters:**

None.

**Body:** (*Required*)

A JSON object. ::

  {
    "input": {
      "near-rt-ric-url": "<url-to-near-rt-ric-to-get-policy>"
    }
  }

**Responses:**

200:
  A JSON object where the body tag contains the JSON object of the policy. ::

    {
      "output": {
        "http-status": "integer",
        "body": "{
          <result>
        }"
      }
    }

Examples
""""""""

**Call**:

Get **all** policy IDs from a Near |nbh| RT |nbsp| RIC that is using the OSC 2.1.0 version. ::

    curl -X POST http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1Policy
    -H Content-Type:application/json -d '{
      "input": {
        "near-rt-ric-url":"http://ricsim_g1_1:8085/a1-p/policytypes/11/policies"
      }
    }'

Get **all** policy IDs from a Near |nbh| RT |nbsp| RIC that is using the STD 1.1.3 version. ::

    curl -X POST http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1Policy
    -H Content-Type:application/json -d '{
      "input": {
        "near-rt-ric-url":"http://ricsim_g2_1:8085/A1-P/v1/policies"
      }
    }'

**Result**:

The result is the same irrespective of which API that is used.

200: ::

  {
    "output": {
      "http-status":200,
      "body":"[
        \"5000\",
          .
          .
          .
        \"6000\"
      ]"
    }
  }

**Call**:

Get **a specific** policy from a Near |nbh| RT |nbsp| RIC that is using the OSC 2.1.0 version. ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1Policy"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://nearRtRic-sim1:8085/a1-p/policytypes/11/policies/5000"
      }
    }'

Get **a specific** policy from a Near |nbh| RT |nbsp| RIC that is using the STD 1.1.3 version. ::

    curl -X POST http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1PolicyType
    -H Content-Type:application/json -d '{
      "input": {
        "near-rt-ric-url":"http://ricsim_g2_1:8085/A1-P/v1/policies/5000"
      }
    }'

**Result**:

The result is the same irrespective of which API that is used.

200: ::

  {
    "output": {
      "http-status": 200,
      "body": "{
        \"blocking_rate\": 20,
        \"enforce\": true,
        \"trigger_threshold\": 10,
        \"window_length\": 10
      }"
    }
  }

Delete Policy
~~~~~~~~~~~~~

POST
++++

Deletes a policy instance.

Definition
""""""""""

**URL path:**

/restconf/operations/A1-ADAPTER-API:deleteA1Policy

**Parameters:**

None.

**Body:** (*Required*)

A JSON object. ::

  {
    "input": {
      "near-rt-ric-url": "<url-to-near-rt-ric-to-delete-policy>"
    }
  }

**Responses:**

200:

A JSON object with the response. ::

  {
    "output": {
      "http-status": "integer"
    }
  }

Examples
""""""""

**Call**:

Delete a policy from a Near |nbh| RT |nbsp| RIC that is using the OSC 2.1.0 version. ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:deleteA1Policy"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://nearRtRic-sim1:8085/a1-p/policytypes/11/policies/5000"
      }
    }'

Delete a policy from a Near |nbh| RT |nbsp| RIC that is using the STD 1.1.3 version. ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:deleteA1Policy"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://ricsim_g2_1:8085/A1-P/v1/policies/5000"
      }
    }'

**Result**:

The result is the same irrespective of which API that is used.

200: ::

  {
    "output": {
      "http-status": 202
    }
  }

Get Policy Status
~~~~~~~~~~~~~~~~~

POST
++++

Get the status of a policy instance.

Definition
""""""""""

**URL path:**

/restconf/operations/A1-ADAPTER-API:getA1PolicyStatus

**Parameters:**

None.

**Body:** (*Required*)

A JSON object. ::

  {
    "input": {
      "near-rt-ric-url": "<url-to-near-rt-ric-to-get-policy-status>"
    }
  }

**Responses:**

200:

A JSON object where the body tag contains the JSON object with the policy status according to the API version used. ::

  {
    "output": {
      "http-status": "integer",
      "body": "{
        <policy-status-object>
      }"
    }
  }

Examples
""""""""

**Call**:

Get the policy status for a specific policy from a Near |nbh| RT |nbsp| RIC that is using the OSC 2.1.0 version. ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1PolicyStatus"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://nearRtRic-sim1:8085/a1-p/policytypes/11/policies/5000/status"
      }
    }'

**Result**:

200: ::

  {
    "output": {
      "http-status": 200,
      "body": "{
        \"instance_status\": \"IN EFFECT\",
        \"has_been_deleted\": \"true\",
        \"created_at\": \"Wed, 01 Apr 2020 07:45:45 GMT\"
      }"
    }
  }

**Call**:

Get the policy status for a specific policy from a Near |nbh| RT |nbsp| RIC that is using the STD 1.1.3 version. ::

    curl -X POST "http://localhost:8282/restconf/operations/A1-ADAPTER-API:getA1PolicyStatus"
    -H "Content-Type: application/json" -d '{
      "input": {
        "near-rt-ric-url": "http://ricsim_g2_1:8085/A1-P/v1/policies/5000/status"
      }
    }'

**Result**:

200: ::

  {
    "output": {
      "http-status": 200,
      "body": "{
        \"enforceStatus\": \"UNDEFINED\"
      }"
    }
  }
