Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 1 | .. vim: syntax=rst |
| 2 | |
| 3 | Aether ROC Control API |
| 4 | ====================== |
| 5 | |
Sean Condon | 257687f | 2021-08-23 11:13:20 +0100 | [diff] [blame] | 6 | Access |
| 7 | ------ |
| 8 | The ROC API specification can be accessed from the running ROC cluster at the API URL. |
| 9 | |
| 10 | e.g. on a local system (if the GUI has been port-forwarded on port 8183) |
| 11 | *http://localhost:8183/aether-roc-api/* |
| 12 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 13 | For Aether-In-A-Box deployment the API can be found at *http://<hostname>:31194/aether-roc-api/* |
| 14 | |
Sean Condon | 257687f | 2021-08-23 11:13:20 +0100 | [diff] [blame] | 15 | On the Production system it would be *https://roc.aetherproject.org/aether-roc-api/* |
| 16 | |
| 17 | .. note:: Opening this in a browser will display a HTML view of the API (powered by *ReDoc*). |
| 18 | |
| 19 | To access the raw YAML format use |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 20 | ``curl -H "Accept: application/yaml" http://localhost:8183/aether-roc-api/aether-2.0.0-openapi3.yaml`` |
Sean Condon | 257687f | 2021-08-23 11:13:20 +0100 | [diff] [blame] | 21 | This YAML format can be imported in to various different tools e.g. |postman_link| |
| 22 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 23 | Background |
| 24 | ---------- |
| 25 | |
| 26 | The Aether ROC control API is available via REST or via gNMI. It is expected that most external |
| 27 | consumers of the API will use REST. |
| 28 | |
| 29 | The REST API supports the typical GET, POST, PATCH, DELETE operations: |
| 30 | |
| 31 | * GET. Retrieve an object. |
| 32 | * POST. Create an object. |
| 33 | * PUT, PATCH. Modify an existing object. |
| 34 | * DELETE. Delete an object. |
| 35 | |
| 36 | Endpoints are named based on the type of object. Some examples: |
| 37 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 38 | * `GET http://roc/targets`. Get a list of enterprises. |
| 39 | * `GET http://roc/aether/v2.1.0/starbucks/application`. Get the list of applications in the Starbucks enterprise. |
| 40 | * `GET http://roc/aether/v2.1.0/starbucks/site`. Get the list of sites in the Starbucks enterprise. |
| 41 | * `GET http://roc/aether/v2.1.0/starbucks/site/starbucks-seattle`. Get details of the 'seattle' site in the Starbucks enterprise. |
| 42 | * `POST http://roc/aether/v2.1.0/starbucks/site/newsite`. Create a new (or update existing) site in the Starbucks enterprise. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 43 | |
| 44 | This document is a high-level description of the objects that can be interacted with. For a |
Sean Condon | 257687f | 2021-08-23 11:13:20 +0100 | [diff] [blame] | 45 | low-level description, see the specification (:ref:`developer/roc-api:Access` section above). |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 46 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 47 | Enterprises |
| 48 | ------------ |
| 49 | The API is segmented by `enterprise`, as the Aether ROC is a multi Tenant system. Each of the URLs shown |
| 50 | above has an example enterprise built in to the path. If a valid enterprise is not given, the results will |
| 51 | be empty. |
| 52 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 53 | Identifying and Referencing Objects |
| 54 | ----------------------------------- |
| 55 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 56 | Every object contains an `id` - for example, a site has a `site-id` and an slice has a |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 57 | `slice-id`. The models are generally nested, for example `slice` is a member of `site`, which in |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 58 | turn belongs to an `enterprise`. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 59 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 60 | In addition to an `id`, most identifiable objects also include a `display-name` and a `description`. |
| 61 | The `display-name` may be changed at any time by the user without affecting behavior. In contrast, |
| 62 | the `id` is immutable, and the only way to change an `id` is to delete the object and make a new one. |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 63 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 64 | Some objects contain references to other objects. References |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 65 | are constructed using the `id` field of the referenced object. It is an error to attempt to create |
| 66 | a reference to an object that does not exist. Deleting an object while there are open references |
| 67 | to it from other objects is also an error. |
| 68 | |
| 69 | Common Model Fields |
| 70 | ------------------- |
| 71 | |
| 72 | Several fields are common to all models in Aether: |
| 73 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 74 | * `<objectname>-id`. The identifier for objects. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 75 | * `description`. A human-readable description, used to store additional context about the object. |
| 76 | * `display-name`. A human-readable name that is shown in the GUI. |
| 77 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 78 | As these fields are common to all objects, they will be omitted from the per-object descriptions below. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 79 | |
| 80 | Key Aether Objects |
| 81 | ------------------ |
| 82 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 83 | The following is a list of Aether models elements (objects), generally organized in a top-down manner. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 84 | |
| 85 | Site |
| 86 | ~~~~ |
| 87 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 88 | A site is a point of presence for an `Enterprise` and may be either physical or logical (i.e. a single |
| 89 | geographic location could in theory contain several logical sites). Site contains the following fields: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 90 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 91 | * `imsi-definition`. A description of how IMSIs are constructed for this site. Contains the following |
| 92 | sub-fields: |
| 93 | |
| 94 | * `mcc`. Mobile country code. |
| 95 | * `mnc`. Mobile network code. |
| 96 | * `enterprise`. A numeric enterprise id. |
| 97 | * `format`. A mask that allows the above three fields to be embedded into an IMSI. For example |
| 98 | `CCCNNNEEESSSSSS` will construct IMSIs using a 3-digit MCC, 3-digit MNC, 3-digit ENT, and a |
| 99 | 6-digit subscriber. |
| 100 | |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 101 | * `monitoring` Configuration of how the monitoring framework of the site can be connected: |
| 102 | |
| 103 | * `edge-cluster-prometheus-url` the URL of the site's Edge cluster Prometheus service |
| 104 | * `edge-monitoring-prometheus-url` the URL of the site's Edge monitoring Prometheus service |
| 105 | * `edge-device` a list of monitoring devices that verify end-to-end connectivity |
| 106 | |
| 107 | * `edge-device-id` the identifier of the edge monitoring device. Serves the same purpose as other `id` fields. |
| 108 | * `display-name` the user-friendly name for the edge device. It is recommended that the short hostname |
| 109 | be used for the `display-name` as a convention. |
| 110 | * `description` an optional description |
| 111 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 112 | The site also contains sub objects like: |
| 113 | |
| 114 | * Devices |
| 115 | * Device Group |
| 116 | * IP Domain |
| 117 | * Sim Card |
| 118 | * Small Cell |
| 119 | * Slice |
| 120 | * UPF |
| 121 | |
| 122 | Device |
| 123 | ~~~~~~ |
| 124 | |
| 125 | A device represents a UE (User Equipment) registered on the Aether system. The devices are then referenced |
| 126 | by the `device-group` object. |
| 127 | |
| 128 | * imei - the International Mobile Equipment Identifier of the device |
| 129 | * sim-card - a reference to the `sim-card` object |
| 130 | * state - a set of attributes that report the state of the device - includes `ip-address`, |
| 131 | `connected` and `last-connected` |
| 132 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 133 | Device-Group |
| 134 | ~~~~~~~~~~~~ |
| 135 | |
| 136 | `Device-Group` allows multiple devices to be logically grouped together. `Device-Group` contains |
| 137 | the following fields: |
| 138 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 139 | * `devices`. A list of Devices. Each device has an `enable` field which can be used to |
| 140 | enable or disable the device. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 141 | * `ip-domain`. Reference to an `IP-Domain` object that describes the IP and DNS settings for UEs |
| 142 | within this group. |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 143 | * `mbr`. Per-device maximum bitrate in bits per second that the application will be limited to: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 144 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 145 | * `uplink` the `mbr` from device to slice |
| 146 | * `downlink` the `mbr` from slice to device |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 147 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 148 | * `traffic-class`. The traffic class to be used for devices in this group. |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 149 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 150 | SIM Card |
| 151 | ~~~~~~~~ |
| 152 | The Sim Card is used to represent a subscriber in the Aether system. When provisioned correctly there is |
| 153 | a 1:1 relationship between SIM Card and Device, with the identifier of the SIM Card being defined in the |
| 154 | Device |
| 155 | |
| 156 | * `iccid` - the Integrated Circuit Card Identifier - which should be unique to any SIM Card |
| 157 | * `imsi` - the International Mobile Subscriber Identifier - the identifier of the Subscriber in Aether |
| 158 | |
| 159 | Small Cell |
| 160 | ~~~~~~~~~~ |
| 161 | |
| 162 | `Small cell` is list of 5G gNodeB or Access Point or Radios. Each small cell has the following: |
| 163 | |
| 164 | * `small-cell-id`. Identifier for the small cell. Serves the same purpose as other `id` fields. |
| 165 | * `address`. Hostname of the small cell. |
| 166 | * `tac`. Type Allocation Code. |
| 167 | * `enable`. If set to `true`, the small cell is enabled. Otherwise, it is disabled. |
| 168 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 169 | Slice |
| 170 | ~~~~~ |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 171 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 172 | `Slice` connects a `Device-Group` to an `Application`. `Slice` has the |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 173 | following fields: |
| 174 | |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 175 | * `device-group`. A list of `Device-Group` objects that can participate in this `Slice`. Each |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 176 | entry in the list contains both the reference to the `Device-Group` as well as an `enable` |
| 177 | field which may be used to temporarily remove access to the group. |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 178 | * `default-behavior`. May be set to either `ALLOW-ALL`, `DENY-ALL`, or `ALLOW-PUBLIC`. This is |
| 179 | the rule to use if no other rule in the filter matches. `ALLOW-PUBLIC` is a special alias |
| 180 | that denies all private networks and then allows everything else. |
| 181 | * `filter`. A list of `Application` objects that are either allowed or denied for this |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 182 | `Slice`. Each entry in the list contains both a reference to the `Application` as well as an |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 183 | `allow` field which can be set to `true` to allow the application or `false` to deny it. It |
| 184 | also has a `priority` field which can be used to order the applications when considering the |
| 185 | enforcing of their `allow` or `deny` conditions. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 186 | * `upf`. Reference to the User Plane Function (`UPF`) that should be used to process packets |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 187 | for this `Slice`. It's permitted for multiple `Slice` to share a single `UPF`. |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 188 | * `SST`, `SD`. Slice identifiers. These are assigned by Aether Operations. |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 189 | * `mbr.uplink`, `mbr.downlink`. Slice-total Uplink and downlink maximum bit rates in bps. |
| 190 | * `mbr.uplink-burst-size`, `mbr.downlink-burst-size`. Maximum burst sizes in bytes for |
| 191 | the maximum bit rates. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 192 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 193 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 194 | Application |
| 195 | ~~~~~~~~~~~ |
| 196 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 197 | `Application` specifies an application and the endpoints for the application. Applications are be shared |
| 198 | across Sites for an enterprise, and so are defined at the top level of the model. Applications are |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 199 | the termination point for traffic from the UPF. Contains the following fields: |
| 200 | |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 201 | * `address`. The DNS name or IP address of the endpoint. |
| 202 | * `endpoint`. A list of endpoints. Each has the following fields: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 203 | |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 204 | * `name`. Name of the endpoint. Used as a key. |
| 205 | * `port-start`. Starting port number. |
| 206 | * `port-end`. Ending port number. |
| 207 | * `protocol`. `TCP|UDP`, specifies the protocol for the endpoint. |
| 208 | * `mbr`. The maximum bitrate in bits per second that UEs sending traffic to the application endpoint |
| 209 | will be limited to: |
| 210 | |
| 211 | * `uplink` the `mbr` from device to application |
| 212 | * `downlink` the `mbr` from application to device |
| 213 | |
| 214 | * `traffic-class`. Traffic class to be used when UEs send traffic to this Application endpoint. |
| 215 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 216 | Supporting Aether Objects |
| 217 | ------------------------- |
| 218 | |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 219 | |
| 220 | IP-Domain |
| 221 | ~~~~~~~~~ |
| 222 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 223 | `IP-Domain` (beneath Site) specifies IP and DNS settings and has the following fields: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 224 | |
| 225 | * `dnn`. Data network name for 5G, or APN for 4G. |
| 226 | * `dns-primary`, `dns-secondary`. IP addresses for DNS servers. |
| 227 | * `subnet`. Subnet to allocate to UEs. |
| 228 | * `admin-status`. Tells whether these ip-domain settings should be used, or whether they |
| 229 | should be drained from UEs. |
| 230 | * `mtu`. Ethernet maximum transmission unit. |
| 231 | * `enterprise`. `Enterprise that owns this `IP-Domain`. |
| 232 | |
| 233 | Template |
| 234 | ~~~~~~~~ |
| 235 | |
| 236 | `Template` contains connectivity settings that are pre-configured by Aether Operations. |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 237 | Templates are used to initialize `Slice` objects, and are shared across Sites for an enterprise. |
| 238 | `Template` has the following fields: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 239 | |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 240 | * `default-behavior`. May be set to either `ALLOW-ALL`, `DENY-ALL`, or `ALLOW-PUBLIC`. This is |
Scott Baker | 6bd3d19 | 2022-03-03 14:50:38 -0800 | [diff] [blame] | 241 | the rule to use if no other rule in the Slice's application filter matches. `ALLOW-PUBLIC` is |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 242 | a special alias that denies all private networks and then allows everything else. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 243 | * `sst`, `sd`. Slice identifiers. |
| 244 | * `uplink`, `downlink`. Guaranteed uplink and downlink bandwidth. |
| 245 | * `traffic-class`. Link to a `Traffic-Class` object that describes the type of traffic. |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 246 | * `slice.mbr.uplink`, `slice.mbr.downlink`. Slice-total Uplink and downlink maximum bit rates in bps. |
| 247 | * `slice.mbr.uplink-burst-size`, `slice.mbr.downlink-burst-size`. Maximum burst sizes in bytes for |
| 248 | the maximum bit rates. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 249 | |
| 250 | Traffic-Class |
| 251 | ~~~~~~~~~~~~~ |
| 252 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 253 | Specifies the class of traffic, and is shared across Sites in an enterprise. Contains the following: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 254 | |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 255 | * `arp`. Allocation and Retention Priority. |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 256 | * `qci`. QoS class identifier. |
| 257 | * `pelr`. Packet error loss rate. |
| 258 | * `pdb`. Packet delay budget. |
| 259 | |
| 260 | UPF |
| 261 | ~~~ |
| 262 | |
SeanCondon | 909d55b | 2022-04-25 17:59:46 +0100 | [diff] [blame^] | 263 | Specifies the UPF that should forward packets. The UPF is part of the Site object, and also can only be |
| 264 | used by one Slice at a time. It has the following fields: |
Scott Baker | 00df5a8 | 2021-08-13 16:01:57 -0700 | [diff] [blame] | 265 | |
| 266 | * `address`. Hostname or IP address of UPF. |
| 267 | * `port`. Port number of UPF. |
| 268 | * `enterprise`. Enterprise that owns this UPF. |
Zack Williams | 90578fa | 2021-11-04 11:57:23 -0700 | [diff] [blame] | 269 | * `site`. The Site that this UPF is located at. |
| 270 | * `config-endpoint` URL for configuring the UPF |
Sean Condon | 257687f | 2021-08-23 11:13:20 +0100 | [diff] [blame] | 271 | |
| 272 | .. |postman_link| raw:: html |
| 273 | |
| 274 | <a href="http://postman.com" target="_blank">Postman</a> |