..
   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
   SPDX-License-Identifier: Apache-2.0

Configuration using REST Interface
==================================

You can decide to use any other tool to generate REST messages towards SD-Core to configure
subscribers, device groups and network slice


Subscriber Configuration
""""""""""""""""""""""""

Below example configures subscriber `208014567891209` in the SD-Core. You can any
number of subscribers using these APIs. SD-Core takes care of configuring Network
Function responsible for authentication with the below details.

.. code-block::

  - Post:
    URL: `http://<config-service-name-or-ip>:<port>/api/subscriber/<imsi-xxx>`
    Ex: `http://<config-service-name-or-ip>:<port>/api/subscriber/<imsi-208014567891209>`

    Request Body:

        {
            "UeId":"208014567891209",
            "plmnId":"20801",
            "opc":"d4416644f6154936193433dd20a0ace0",
            "key":"465b5ce8b199b49faa5f0a2ee238a6bc",
            "sequenceNumber":"96"
        }

  - Delete:
    URL: `http://<config-service-name-or-ip>:<port>/api/subscriber/<imsi-xxx>`
    Ex: `http://<config-service-name-or-ip>:<port>/api/subscriber/<imsi-208014567891209>`

Device Group Configuration
""""""""""""""""""""""""""
Below example groups multiple IMSIs under one IP domain. IP domain is close
match with APN in 4G & dnn in case of 5G. Along with UE IP pool, there is
also configuration of QoS for the users in this group.

.. code-block::

  - Post:
    URL: `http://<config-service-name-or-ip>:<port>/device-group/<group-name>`
    Ex: `http://config5g:8080/device-group/iot-camera`

    Request Body:
    {
        "imsis":
        [
            "123456789123456"
            "123456789123457"
            "123456789123458"
        ],
        "site-info": "menlo",
        "ip-domain-name": "pool1",
        "ip-domain-expanded":
        {
            "dnn": "internet",
            "ue-ip-pool": "10.91.0.0/16",
            "dns-primary": "8.8.8.8",
            "dns-secondary": "8.8.4.4",
            "mtu": 1460,
            "ue-dnn-qos":
            {
                "dnn-mbr-uplink": 4000000,
                "dnn-mbr-downlink": 20000000,
                "bitrate-unit": "Mbps",
                "traffic-class":
                {
                    "qci": 9,
                    "arp": 1,
                    "pdb": 2,
                    "pelr": 1,
                    "name": "platinum"
                }
            }
        }
    }

  - Delete
    URL: `http://<config-service-name-or-ip>:<port>/device-group/<group-name>`
    Ex: `http://config5g:8080/device-group/iot-camera`


.. note::
    REST API can use PUT Method to modify/replace the device group configuration.
    IMSIs can be added, removed through PUT Method.

.. note::
   If UPF is used to allocate UE address allocation then even if you have specified UE
   address pool in the slice config, you still need to add the address pool
   configuration in the UPF deployment.


Network Slice Configuration
"""""""""""""""""""""""""""
Below example creates Network Slice with set of eNBs, UPF and device groups.

.. code-block::

  - Post:
    URL: `http://<config-service-name-or-ip>:<port>/network-slice/<slice-name>`
    Ex: `http://config5g:8080/network-slice/slice1`


    Request Body:
    {
        "slice-id":
        {
            "sst": "1",
            "sd": "010203"
        },
        "qos":
        {
            "uplink": 4000000,
            "downlink": 20000000,
            "bitrate-unit": "Mbps",
            "traffic-class":
            {
                "qci": 9,
                "arp": 1,
                "pdb": 2,
                "pelr": 1,
                "name": "platinum"
            }
        },
        "site-device-group":
        [
            "iot-camera"
        ],
        "site-info":
        {
            "site-name": "menlo",
            "plmn":
            {
                "mcc": "315",
                "mnc": "010"
            },
            "gNodeBs":
            [
                {
                "name": "menlo-gnb1",
                "tac": 1
                }
            ],
            "upf":
            {
            "upf-name": "upf.menlo.aetherproject.org",
            "upf-port": 8805
            }
        },
    }

  - Delete
    URL: `http://<config-service-name-or-ip>:<port>/network-slice/<slice-name>`
    Ex: `http://config5g:8080/network-slice/slice1`

.. note::
   Slice needs to have single UPF. Multiple UPFs can not be added in single Slice. One or more access
   nodes can be added in slice. For now SD-Core does not do any validation of access nodes connecting
   to MME/AMF, but TAC & PLMN validation is done in Core Network.

Network Slice + Application filtering Configuration
"""""""""""""""""""""""""""""""""""""""""""""""""""
Below example creates Network Slice with set of eNBs, UPF and device groups.
Note that this slice only allows traffic to single application hosted at
address 10.91.1.3
.. code-block::

  - Post:
    URL: `http://<config-service-name-or-ip>:<port>/network-slice/<slice-name>`
    Ex: `http://config5g:8080/network-slice/slice1`


    Request Body:
    {
        "slice-id":
        {
            "sst": "1",
            "sd": "010203"
        },
        "qos":
        {
            "uplink": 4000000,
            "downlink": 20000000,
            "bitrate-unit": "Mbps",
            "traffic-class":
            {
                "qci": 9,
                "arp": 1,
                "pdb": 2,
                "pelr": 1,
                "name": "platinum"
            }
        },
        "site-device-group":
        [
            "iot-camera"
        ],
        "site-info":
        {
            "site-name": "menlo",
            "plmn":
            {
                "mcc": "315",
                "mnc": "010"
            },
            "gNodeBs":
            [
                {
                "name": "menlo-gnb1",
                "tac": 1
                }
            ],
            "upf":
            {
            "upf-name": "upf.menlo.aetherproject.org",
            "upf-port": 8805
            }
        },
        "application-filtering-rules":
          [
             {
                "rule-name": rule-1,
                "priority": 5,
                "action" : permit,
                "endpoint": "10.91.1.3",
                "traffic-class":
                {
                  "name": “platinum”,
                  "qci": 9,
                  "arp": 125,
                  "pdb": 300,
                  "pelr": 6
                }
            }
          ]
    }

  - Delete
    URL: `http://<config-service-name-or-ip>:<port>/network-slice/<slice-name>`
    Ex: `http://config5g:8080/network-slice/slice1`


.. note::
    ROC uses REST APIs to configure SD-Core. ROC provides nice web portal to manage network slices and devices.
    `Refer Aether document <https://docs.aetherproject.org/>`_.
