.. This work is licensed under a Creative Commons Attribution 4.0 International License. .. SPDX-License-Identifier: CC-BY-4.0 .. Copyright (C) 2021 Nordix .. _simulator-api: ============= Simulator API ============= This document describes the API used to manage policy types and manipulate the simulator. The simulator supports different versions of the A1 interface. Some functions are common for all versions, and some are specific for a certain version. Common Functions ================ Health Check ------------ The status of the simulator. / ~~ GET +++ Returns the status of the simulator. **URL path:** / **Parameters:** None. **Responses:** 200: OK **Examples:** **Call**: :: curl -X GET "http://localhost:8085/" **Result**: 200: :: OK Supported Interfaces -------------------- The simulator can support different versions of the A1 interface. With this API the supported versions can be listed. /container_interfaces ~~~~~~~~~~~~~~~~~~~~~ GET +++ Returns the status of the simulator. (Not available for A1 Standard 1.1.3) **URL path:** /container_interfaces **Parameters:** None. **Responses:** 200: List of supported interfaces. **Examples:** **Call**: :: curl -X GET "http://localhost:8085/container_interfaces" **Result**: 200: :: Current interface: STD_2.0.0 All supported A1 interface yamls in this container: ['OSC_2.1.0', 'STD_1.1.3', 'STD_2.0.0'] Counters -------- The simulator keeps count of different things that can be accessed. /counter ~~~~~~~~ GET +++ Get a counter. Counter-name can be one of the following: 'num_instances', 'num_types', 'interface', 'remote_hosts' or 'datadelivery'. **URL path:** /counter/{counter-name} **Parameters:** None. **Responses:** 200: The counter value for the given counter. **Examples:** **Call**: :: curl -X GET "http://localhost:8085/counter/num_instances" **Result**: 200: :: 10 Reset simulator --------------- There are two ways to reset the simulator, delete all instances or make a complete reset which resets the simulator to its original state. /deleteinstances ~~~~~~~~~~~~~~~~ POST ++++ Delete all policy instances. **URL path:** /deleteinstances **Parameters:** None. **Responses:** 200: All policy instances deleted. **Examples:** **Call**: :: curl -X POST "http://localhost:8085/deleteinstances" **Result**: 200: :: All policy instances deleted. /deleteall ~~~~~~~~~~~~~~~~ POST ++++ Full reset. **URL path:** /deleteall **Parameters:** None. **Responses:** 200: All policy instances and types deleted. **Examples:** **Call**: :: curl -X POST "http://localhost:8085/deleteall" **Result**: 200: :: All policy instances and types deleted. 200 :: All policy instances deleted (Only for STD_1.1.3 since it has no types) Response manipulation --------------------- It is possible to manipulate the response of all operations on the A1 interface (admin interface is not affected) /forceresponse ~~~~~~~~~~~~~~ POST ++++ Force a specific response code for one (the next) A1 operation. After that response, the reponse code will go back to normal. **URL path:** /forceresponse?code= **Parameters:** code: (*Required*) The HTTP response code to return. **Responses:** 200: Force response code: set for one single A1 response **Examples:** **Call**: :: curl -X POST "http://localhost:8085/forceresponse?code=400" **Result**: 200: :: Force response code: 400 set for one single A1 response /forcedelay ~~~~~~~~~~~ POST ++++ Force delayed response of all A1 responses. The setting will remain until the delay is set to '0' **URL path:** /forcedelay?delay= **Parameters:** delay: (*Required*) The time in seconds to delay all responses. **Responses:** 200: Force delay: sec set for all A1 responses **Examples:** **Call**: :: curl -X POST "http://localhost:8085/forcedelay?delay=2" **Result**: 200: :: Force delay: 2 sec set for all A1 responses Configure logging ----------------- Detailed logging of the http headers and payload are activated by default. However, it is possible to turn this logging on or off. The 'off' state will only log ip, url and respose code. /payload_logging/ ~~~~~~~~~~~~~~~~~ POST ++++ Configure detailed logging on or off **URL path:** /payload_logging/ **Parameters:** state: (*Required*) The state, 'on' or 'off'. **Responses:** 200: Force delay: sec set for all A1 responses **Examples:** **Call**: :: curl -X POST "http://localhost:8085/payload_logging/on" **Result**: 200: :: Payload and header logging set to: on Version Specific Functions ========================== The methods available to control the simulator depends on the version of the A1 API the simulator is simulating. OSC_2.1.0 --------- This section describes the available administrative functions for the OSC_2.1.0 version of A1. To see the A1 functions for this version, see `OSC_2.1.0 API`_. .. _OSC_2.1.0 API: https://gerrit.o-ran-sc.org/r/gitweb?p=sim/a1-interface.git;a=blob;f=near-rt-ric-simulator/api/OSC_2.1.0/openapi.yaml /policytype ~~~~~~~~~~~ PUT +++ Create a policy type. **URL path:** /policytype?id= **Parameters:** id: (*Required*) The ID of the policy type. **Body:** (*Required*) A JSON object containing the schema for the type. **Responses:** 200: Policy type is OK. 201: Policy type is OK. **Examples:** **Call**: :: curl -X PUT "http://localhost:8085/policytype?id=1" -H "Content-Type: application/json" -d '{ "name": "pt1", "description": "pt1 policy type", "policy_type_id": 1, "create_schema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "STD_QoSNudging_0.2.0", "description": "QoS policy type", "type": "object", "properties": { "scope": { "type": "object", "properties": { "ueId": { "type": "string" }, "qosId": { "type": "string" } }, "additionalProperties": false, "required": [ "ueId", "qosId" ] }, "statement": { "type": "object", "properties": { "priorityLevel": { "type": "number" } }, "additionalProperties": false, "required": [ "priorityLevel" ] } } } }' **Result**: 201: :: Policy type 1 is OK DELETE ++++++ Delete a policy type. **URL path:** /policytype?id= **Parameters:** id: (*Required*) The ID of the policy type. **Responses:** 204: Policy type is OK. **Examples:** **Call**: :: curl -X DELETE "http://localhost:8085/policytype?id=1" **Result**: 204 /policytypes ~~~~~~~~~~~~ GET +++ Get a list of policy types. **URL path:** /policytypes **Parameters:** None. **Responses:** 200: A list of policy types. **Examples:** **Call**: :: curl -X GET "http://localhost:8085/policytypes" **Result**: 200: :: ["1"] /status ~~~~~~~ PUT +++ Set status and optional reason, delete and time stamp. **URL path:** /status?policyid=&status=&deleted=&created_at= **Parameters:** policyid: (*Required*) The ID of a policy. status: (*Required*) The status of a policy. deleted: (*Optional*) True or false for real values, but accepts anything for error testing. created_at: (*Optional*) Time stamp for the status. **Responses:** 200: Status set to for policy **Examples:** **Call**: :: curl -X PUT "http://localhost:8085/status?policyid=1&status=Accepted" **Result**: 200: :: Status set to Accepted for policy Policy1. A1 Standard 1.1.3 ----------------- This section describes the available administrative functions for the A1 Standard 1.1.3 version of A1. To see the A1 functions for this version, see `A1 Standard 1.1.3 API`_. .. _A1 Standard 1.1.3 API: https://gerrit.o-ran-sc.org/r/gitweb?p=sim/a1-interface.git;a=blob;f=near-rt-ric-simulator/api/STD_1.1.3/STD_A1.yaml /status ~~~~~~~ PUT +++ Set status and optional reason, delete and time stamp. **URL path:** /status?policyid=&status=&reason= **Parameters:** policyid: (*Required*) The ID of a policy. status: (*Required*) The status of a policy. reason: (*Optional*) The reason for the status. **Responses:** 200: Status set to for policy **Examples:** **Call**: :: curl -X PUT "http://localhost:8085/status?policyid=Policy1&status=Accepted" **Result**: 200: :: Status set to Accepted for policy Policy1 /sendstatus ~~~~~~~~~~~ POST ++++ Send status for policy. **URL path:** /sendstatus?policyid= **Parameters:** policyid: (*Required*) The ID of the policy to send status for. **Responses:** 200: Is a JSON with the response of the actual post request to the callback server, whatever that is. **Examples:** **Call**: :: curl -X POST "http://localhost:8085/sendstatus?policyid=Policy2" **Result**: 200 A1 Standard 2.0.0 ----------------- This section describes the available administrative functions for the A1 Standard 2.0.0 version of A1. To see the A1 functions for this version, see `A1 Standard 2.0.0 API`_. .. _A1 Standard 2.0.0 API: https://gerrit.o-ran-sc.org/r/gitweb?p=sim/a1-interface.git;a=blob;f=near-rt-ric-simulator/api/STD_2.0.0/ORAN_A1-p_V2.0.0_api.yaml /policytype ~~~~~~~~~~~ PUT +++ Create or update a policy type. **URL path:** /policytype?id={policy-type-id} **Parameters:** policy-type-id: (*Required*) The ID of the policy type. **Body:** (*Required*) A JSON object containing the schema for the type. **Responses:** 200: The policy type is ok 201: The policy type is ok **Examples:** **Call**: :: curl -X PUT "http://localhost:8085/policytype?id=STD_PolicyModelUnconstrained_0.2.0" -H "Content-Type: application/json" -d '{ "policySchema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "STD_1_0.2.0", "description": "STD 1 policy type", "type": "object", "properties": { "scope": { "type": "object", "properties": { "ueId": { "type": "string" }, "qosId": { "type": "string" } }, "additionalProperties": false, "required": [ "ueId", "qosId" ] }, "statement": { "type": "object", "properties": { "priorityLevel": { "type": "number" } }, "additionalProperties": false, "required": [ "priorityLevel" ] } } }, "statusSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "title": "STD_1_0.2.0", "description": "STD 1 policy type status", "type": "object", "properties": { "enforceStatus": { "type": "string" }, "enforceReason": { "type": "string" }, "additionalProperties": false, "required": [ "enforceStatus" ] } } }' **Result**: 200: :: Policy type STD_PolicyModelUnconstrained_0.2.0 is OK 201: :: Policy type STD_PolicyModelUnconstrained_0.2.0 is OK DELETE ++++++ Delete a policy type. **URL path:** /policytype?id={policy-type-id} **Parameters:** None. **Responses:** 204 **Examples:** **Call**: :: curl -X DELETE "http://localhost:8085/policytype?id=STD_PolicyModelUnconstrained_0.2.0" **Result**: 204 /policytypes ~~~~~~~~~~~~ GET +++ Get a list of policy types. **URL path:** /policytypes **Parameters:** None. **Responses:** 200: A list of policy types. **Examples:** **Call**: :: curl -X GET "http://localhost:8085/policytypes" **Result**: 200: :: ["STD_PolicyModelUnconstrained_0.2.0"] /{policyId}/{enforceStatus} ~~~~~~~~~~~~~~~~~~~~~~~~~~~ PUT +++ Set a status to a policy instance with an enforceStatus parameter only. **URL path:** /status?policyid={policyId}&status={status}&reason={reason} **Parameters:** None. **Responses:** 200: Status updated for policy: **Examples:** **Call**: :: curl -X PUT "http://localhost:8085/status?policyid=Policy1&status=ENFORCED" **Result**: 200: :: Status updated for policy: Policy1 /{policyId}/{enforceStatus}/{enforceReason} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /sendstatus ~~~~~~~~~~~ POST ++++ Send status for policy. **URL path:** /sendstatus?policyid= **Parameters:** policyid: (*Required*) The ID of the policy to send status for. **Responses:** 200: Is a JSON with the response of the actual post request to the callback server, whatever that is. **Examples:** **Call**: :: curl -X POST "http://localhost:8085/sendstatus?policyid=Policy2" **Result**: 200