blob: 06a937bda79c6963f3bcfbfab80567b4d8702436 [file] [log] [blame]
Scott Baker00df5a82021-08-13 16:01:57 -07001.. vim: syntax=rst
2
3Aether ROC Control API
4======================
5
Sean Condon257687f2021-08-23 11:13:20 +01006Access
7------
8The ROC API specification can be accessed from the running ROC cluster at the API URL.
9
10e.g. on a local system (if the GUI has been port-forwarded on port 8183)
11*http://localhost:8183/aether-roc-api/*
12
SeanCondon909d55b2022-04-25 17:59:46 +010013For Aether-In-A-Box deployment the API can be found at *http://<hostname>:31194/aether-roc-api/*
14
Sean Condon257687f2021-08-23 11:13:20 +010015On 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 Baker6bd3d192022-03-03 14:50:38 -080020 ``curl -H "Accept: application/yaml" http://localhost:8183/aether-roc-api/aether-2.0.0-openapi3.yaml``
Sean Condon257687f2021-08-23 11:13:20 +010021 This YAML format can be imported in to various different tools e.g. |postman_link|
22
Scott Baker00df5a82021-08-13 16:01:57 -070023Background
24----------
25
26The Aether ROC control API is available via REST or via gNMI. It is expected that most external
27consumers of the API will use REST.
28
29The 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
36Endpoints are named based on the type of object. Some examples:
37
SeanCondon909d55b2022-04-25 17:59:46 +010038* `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 Baker00df5a82021-08-13 16:01:57 -070043
44This document is a high-level description of the objects that can be interacted with. For a
Sean Condon257687f2021-08-23 11:13:20 +010045low-level description, see the specification (:ref:`developer/roc-api:Access` section above).
Scott Baker00df5a82021-08-13 16:01:57 -070046
SeanCondon909d55b2022-04-25 17:59:46 +010047Enterprises
48------------
49The API is segmented by `enterprise`, as the Aether ROC is a multi Tenant system. Each of the URLs shown
50above has an example enterprise built in to the path. If a valid enterprise is not given, the results will
51be empty.
52
Scott Baker00df5a82021-08-13 16:01:57 -070053Identifying and Referencing Objects
54-----------------------------------
55
SeanCondon909d55b2022-04-25 17:59:46 +010056Every object contains an `id` - for example, a site has a `site-id` and an slice has a
Scott Baker6bd3d192022-03-03 14:50:38 -080057`slice-id`. The models are generally nested, for example `slice` is a member of `site`, which in
SeanCondon909d55b2022-04-25 17:59:46 +010058turn belongs to an `enterprise`.
Scott Baker00df5a82021-08-13 16:01:57 -070059
SeanCondon909d55b2022-04-25 17:59:46 +010060In addition to an `id`, most identifiable objects also include a `display-name` and a `description`.
61The `display-name` may be changed at any time by the user without affecting behavior. In contrast,
62the `id` is immutable, and the only way to change an `id` is to delete the object and make a new one.
Zack Williams90578fa2021-11-04 11:57:23 -070063
Scott Baker6bd3d192022-03-03 14:50:38 -080064Some objects contain references to other objects. References
Scott Baker00df5a82021-08-13 16:01:57 -070065are constructed using the `id` field of the referenced object. It is an error to attempt to create
66a reference to an object that does not exist. Deleting an object while there are open references
67to it from other objects is also an error.
68
69Common Model Fields
70-------------------
71
72Several fields are common to all models in Aether:
73
SeanCondon909d55b2022-04-25 17:59:46 +010074* `<objectname>-id`. The identifier for objects.
Scott Baker00df5a82021-08-13 16:01:57 -070075* `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
SeanCondon909d55b2022-04-25 17:59:46 +010078As these fields are common to all objects, they will be omitted from the per-object descriptions below.
Scott Baker00df5a82021-08-13 16:01:57 -070079
80Key Aether Objects
81------------------
82
SeanCondon909d55b2022-04-25 17:59:46 +010083The following is a list of Aether models elements (objects), generally organized in a top-down manner.
Scott Baker00df5a82021-08-13 16:01:57 -070084
85Site
86~~~~
87
SeanCondon909d55b2022-04-25 17:59:46 +010088A site is a point of presence for an `Enterprise` and may be either physical or logical (i.e. a single
89geographic location could in theory contain several logical sites). Site contains the following fields:
Scott Baker00df5a82021-08-13 16:01:57 -070090
Scott Baker00df5a82021-08-13 16:01:57 -070091* `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 Williams90578fa2021-11-04 11:57:23 -0700101* `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
SeanCondon909d55b2022-04-25 17:59:46 +0100112The 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
122Device
123~~~~~~
124
125A device represents a UE (User Equipment) registered on the Aether system. The devices are then referenced
126by 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 Baker00df5a82021-08-13 16:01:57 -0700133Device-Group
134~~~~~~~~~~~~
135
136`Device-Group` allows multiple devices to be logically grouped together. `Device-Group` contains
137the following fields:
138
Scott Baker6bd3d192022-03-03 14:50:38 -0800139* `devices`. A list of Devices. Each device has an `enable` field which can be used to
140 enable or disable the device.
Scott Baker00df5a82021-08-13 16:01:57 -0700141* `ip-domain`. Reference to an `IP-Domain` object that describes the IP and DNS settings for UEs
142 within this group.
Scott Baker6bd3d192022-03-03 14:50:38 -0800143* `mbr`. Per-device maximum bitrate in bits per second that the application will be limited to:
Scott Baker00df5a82021-08-13 16:01:57 -0700144
Scott Baker6bd3d192022-03-03 14:50:38 -0800145 * `uplink` the `mbr` from device to slice
146 * `downlink` the `mbr` from slice to device
Zack Williams90578fa2021-11-04 11:57:23 -0700147
Scott Baker6bd3d192022-03-03 14:50:38 -0800148* `traffic-class`. The traffic class to be used for devices in this group.
Zack Williams90578fa2021-11-04 11:57:23 -0700149
SeanCondon909d55b2022-04-25 17:59:46 +0100150SIM Card
151~~~~~~~~
152The Sim Card is used to represent a subscriber in the Aether system. When provisioned correctly there is
153a 1:1 relationship between SIM Card and Device, with the identifier of the SIM Card being defined in the
154Device
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
159Small 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 Baker6bd3d192022-03-03 14:50:38 -0800169Slice
170~~~~~
Zack Williams90578fa2021-11-04 11:57:23 -0700171
Scott Baker6bd3d192022-03-03 14:50:38 -0800172`Slice` connects a `Device-Group` to an `Application`. `Slice` has the
Scott Baker00df5a82021-08-13 16:01:57 -0700173following fields:
174
Scott Baker6bd3d192022-03-03 14:50:38 -0800175* `device-group`. A list of `Device-Group` objects that can participate in this `Slice`. Each
Scott Baker00df5a82021-08-13 16:01:57 -0700176 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 Williams90578fa2021-11-04 11:57:23 -0700178* `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 Baker6bd3d192022-03-03 14:50:38 -0800182 `Slice`. Each entry in the list contains both a reference to the `Application` as well as an
Zack Williams90578fa2021-11-04 11:57:23 -0700183 `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 Baker00df5a82021-08-13 16:01:57 -0700186* `upf`. Reference to the User Plane Function (`UPF`) that should be used to process packets
Scott Baker6bd3d192022-03-03 14:50:38 -0800187 for this `Slice`. It's permitted for multiple `Slice` to share a single `UPF`.
Zack Williams90578fa2021-11-04 11:57:23 -0700188* `SST`, `SD`. Slice identifiers. These are assigned by Aether Operations.
Scott Baker6bd3d192022-03-03 14:50:38 -0800189* `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 Baker00df5a82021-08-13 16:01:57 -0700192
SeanCondon909d55b2022-04-25 17:59:46 +0100193
Scott Baker00df5a82021-08-13 16:01:57 -0700194Application
195~~~~~~~~~~~
196
SeanCondon909d55b2022-04-25 17:59:46 +0100197`Application` specifies an application and the endpoints for the application. Applications are be shared
198across Sites for an enterprise, and so are defined at the top level of the model. Applications are
Scott Baker00df5a82021-08-13 16:01:57 -0700199the termination point for traffic from the UPF. Contains the following fields:
200
Zack Williams90578fa2021-11-04 11:57:23 -0700201* `address`. The DNS name or IP address of the endpoint.
202* `endpoint`. A list of endpoints. Each has the following fields:
Scott Baker00df5a82021-08-13 16:01:57 -0700203
Zack Williams90578fa2021-11-04 11:57:23 -0700204 * `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 Baker00df5a82021-08-13 16:01:57 -0700216Supporting Aether Objects
217-------------------------
218
Scott Baker00df5a82021-08-13 16:01:57 -0700219
220IP-Domain
221~~~~~~~~~
222
SeanCondon909d55b2022-04-25 17:59:46 +0100223`IP-Domain` (beneath Site) specifies IP and DNS settings and has the following fields:
Scott Baker00df5a82021-08-13 16:01:57 -0700224
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
233Template
234~~~~~~~~
235
236`Template` contains connectivity settings that are pre-configured by Aether Operations.
SeanCondon909d55b2022-04-25 17:59:46 +0100237Templates are used to initialize `Slice` objects, and are shared across Sites for an enterprise.
238`Template` has the following fields:
Scott Baker00df5a82021-08-13 16:01:57 -0700239
Zack Williams90578fa2021-11-04 11:57:23 -0700240* `default-behavior`. May be set to either `ALLOW-ALL`, `DENY-ALL`, or `ALLOW-PUBLIC`. This is
Scott Baker6bd3d192022-03-03 14:50:38 -0800241 the rule to use if no other rule in the Slice's application filter matches. `ALLOW-PUBLIC` is
Zack Williams90578fa2021-11-04 11:57:23 -0700242 a special alias that denies all private networks and then allows everything else.
Scott Baker00df5a82021-08-13 16:01:57 -0700243* `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 Williams90578fa2021-11-04 11:57:23 -0700246* `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 Baker00df5a82021-08-13 16:01:57 -0700249
250Traffic-Class
251~~~~~~~~~~~~~
252
SeanCondon909d55b2022-04-25 17:59:46 +0100253Specifies the class of traffic, and is shared across Sites in an enterprise. Contains the following:
Scott Baker00df5a82021-08-13 16:01:57 -0700254
Zack Williams90578fa2021-11-04 11:57:23 -0700255* `arp`. Allocation and Retention Priority.
Scott Baker00df5a82021-08-13 16:01:57 -0700256* `qci`. QoS class identifier.
257* `pelr`. Packet error loss rate.
258* `pdb`. Packet delay budget.
259
260UPF
261~~~
262
SeanCondon909d55b2022-04-25 17:59:46 +0100263Specifies the UPF that should forward packets. The UPF is part of the Site object, and also can only be
264used by one Slice at a time. It has the following fields:
Scott Baker00df5a82021-08-13 16:01:57 -0700265
266* `address`. Hostname or IP address of UPF.
267* `port`. Port number of UPF.
268* `enterprise`. Enterprise that owns this UPF.
Zack Williams90578fa2021-11-04 11:57:23 -0700269* `site`. The Site that this UPF is located at.
270* `config-endpoint` URL for configuring the UPF
Sean Condon257687f2021-08-23 11:13:20 +0100271
272.. |postman_link| raw:: html
273
274 <a href="http://postman.com" target="_blank">Postman</a>