Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 1 | .. vim: syntax=rst |
| 2 | |
| 3 | Aether-in-a-Box on Hardware Radios (4G) |
| 4 | ======================================= |
| 5 | |
| 6 | This document describes how to set up an Aether-in-a-Box (AiaB) with |
| 7 | a Sercomm eNodeB and connect real devices (e.g., 4G phones). This |
| 8 | setup is suitable for laboratory experiments and proof-of-concept deployments. |
| 9 | To create this setup you will need the following equipment: |
| 10 | |
| 11 | * Server for running AiaB (SD-CORE / UPF / ROC) |
| 12 | |
| 13 | * Haswell CPU family or newer |
| 14 | * At least 4 CPUs and 12GB RAM |
| 15 | * Internet connection |
| 16 | |
| 17 | * Sercomm CBRS LTE small cell eNodeB |
| 18 | |
| 19 | * Firmware version 3918 or newer. For instructions on how to update the firmware see `here <https://docs.aetherproject.org/master/edge_deployment/enb_installation.html#upgrade-firmware>`_. |
| 20 | |
| 21 | * SIM card writer and blank SIM cards |
| 22 | |
| 23 | We assume that the server and the eNodeB are connected to the same |
| 24 | LAN, and the LAN also provides external Internet connectivity. |
| 25 | |
| 26 | Preparation |
| 27 | ----------- |
| 28 | |
| 29 | Create SIM cards by following the instructions for your SIM card writer. |
| 30 | Of course you are free to use any values for IMSI, etc. that you choose, |
| 31 | but these are the values that will work with the rest of the configuration |
| 32 | in this document: |
| 33 | |
| 34 | * IMSI: each one is unique, matching pattern ``315010*********`` (15 digits) |
| 35 | * OPc: ``69d5c2eb2e2e624750541d3bbc692ba5`` |
| 36 | * Transport Key: ``000102030405060708090a0b0c0d0e0f`` |
| 37 | |
| 38 | If you choose different values for your SIM cards, you will need to |
| 39 | modify subsequent configuration steps appropriately. |
| 40 | |
| 41 | Insert the SIM cards in devices that you wish to be able to connect to the Aether network. |
| 42 | |
| 43 | Server setup |
| 44 | ------------ |
| 45 | |
| 46 | The server will run Aether-in-a-Box. The eNodeB will connect to the server over the local network. |
| 47 | Perform these steps to prepare the server for the AiaB install: |
| 48 | |
| 49 | * Connect the server to the local network |
| 50 | * Perform a clean install of Ubuntu 18.04 on the server |
| 51 | * Set up password-less sudo for the user that will install Aether-in-a-Box |
| 52 | |
| 53 | After the steps above have been completed, install Aether-in-a-Box as follows:: |
| 54 | |
| 55 | sudo apt install git make |
| 56 | git clone "https://gerrit.opencord.org/aether-in-a-box" |
| 57 | cd aether-in-a-box |
| 58 | |
| 59 | Next, modify the file *sd-core-4g-values.yaml*. Under ``subscribers``, |
| 60 | add an IMSI range for the SIM cards you created, with the Transport Key |
| 61 | and OPc values you used earlier. For example, the following will add |
| 62 | IMSIs between 315010999912301 and 315010999912303:: |
| 63 | |
| 64 | subscribers: |
| 65 | - ueId-start: 315010999912301 |
| 66 | ueId-end: 315010999912303 |
| 67 | plmnId: 315010 |
| 68 | opc: 69d5c2eb2e2e624750541d3bbc692ba5 |
| 69 | key: 000102030405060708090a0b0c0d0e0f |
| 70 | sequenceNumber: 135 |
| 71 | |
| 72 | Determine which is the interface that has L3 connectivity to the |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 73 | eNodeB -- this will be ``DATA_IFACE`` in the configuration later. If |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 74 | the eNodeB will also be connected to the local network, then this is just the |
| 75 | server’s primary interface. If the eNodeB will be connected via an |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 76 | isolated L2/L3 network segment, then ``DATA_IFACE`` refers to the server |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 77 | interface on that network. Remember this interface for later. |
| 78 | |
| 79 | Option 1: Configure Aether with ROC |
| 80 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 81 | |
| 82 | The Aether ROC provides a GUI and API for dynamically configuring |
| 83 | Aether. If you don’t wish to use the ROC to configure AiaB, you |
| 84 | can skip to the next section. |
| 85 | |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 86 | Install AiaB as follows (specifying ``DATA_IFACE`` from above):: |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 87 | |
| 88 | ENABLE_OAISIM=false DATA_IFACE=<iface> CHARTS=latest make roc-4g-models 4g-core |
| 89 | |
| 90 | Next, use the ROC to add information about your SIM cards. |
| 91 | The ROC GUI is available at `http://<server-ip>:31194`. |
| 92 | |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 93 | Choose ``Configuration > Site`` from the drop-down at top right and edit |
| 94 | the ``AiaB site``. Change the following values and click ``Update``: |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 95 | |
| 96 | * MCC: 315 |
| 97 | * MNC: 010 |
| 98 | |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 99 | Choose ``Sim Cards`` from the drop-down at top right. Edit the |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 100 | existing entries to reflect the SIM cards you are adding to devices |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 101 | by replacing their IMSI values. Click ``Update`` after each edit. |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 102 | If you want to connect more than two devices, consult the `ROC |
| 103 | documentation <https://docs.aetherproject.org/master/operations/subscriber.html#configure-connectivity-service-for-a-new-device>`_. |
| 104 | |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 105 | Finally, click the Basket icon at top right and click the ``Commit`` button. |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 106 | |
| 107 | Now jump to the `Verifying the AiaB installation`_ section. |
| 108 | |
| 109 | Option 2: Configure Aether without ROC |
| 110 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 111 | |
| 112 | It is possible to configure Aether without the ROC, |
| 113 | using static YAML files and the SimApp service. If you have already |
| 114 | installed the ROC, you should skip this section. |
| 115 | |
| 116 | Edit *sd-core-4g-values.yaml*. Change ``mcc`` and ``mnc`` as follows:: |
| 117 | |
| 118 | plmn: |
| 119 | mcc: "315" |
| 120 | mnc: "010" |
| 121 | |
| 122 | Also add the IMSIs of your devices under ``imsis``, for example:: |
| 123 | |
| 124 | device-groups: |
| 125 | - name: "4g-oaisim-user" |
| 126 | imsis: |
| 127 | - "315010999912301" |
| 128 | - "315010999912302" |
| 129 | - "315010999912303" |
| 130 | |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 131 | Install AiaB as follows (specifying ``DATA_IFACE`` from above):: |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 132 | |
| 133 | ENABLE_OAISIM=false DATA_IFACE=<iface> CHARTS=latest make 4g-core |
| 134 | |
| 135 | Verifying the AiaB installation |
| 136 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 137 | |
| 138 | Installing AiaB will take about 20 minutes with a fast Internet |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 139 | connection. If you see any errors / timeouts, try running the ``make`` |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 140 | command again. The build will finish with a message: |
| 141 | “Your MME IP address is… ” This is just the IP address assigned to |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 142 | the ``DATA_IFACE``. Remember this for the eNodeB setup. |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 143 | |
| 144 | When the install is complete, check that the 4G SD-CORE is running |
| 145 | as follows:: |
| 146 | |
| 147 | $ kubectl -n omec get pod |
| 148 | NAME READY STATUS RESTARTS AGE |
| 149 | cassandra-0 1/1 Running 0 7m27s |
| 150 | config4g-0 1/1 Running 0 7m27s |
| 151 | hss-0 1/1 Running 0 7m27s |
| 152 | mme-0 4/4 Running 0 7m27s |
| 153 | pcrf-0 1/1 Running 0 7m27s |
| 154 | simapp-65dc44b9d-stx6q 1/1 Running 0 7m27s |
| 155 | spgwc-0 2/2 Running 0 7m27s |
| 156 | upf-0 5/5 Running 0 7m27s |
| 157 | |
| 158 | You should see all pods in Running status. |
| 159 | |
| 160 | If you have installed the ROC, check that all its pods are running |
| 161 | as follows:: |
| 162 | |
| 163 | $ kubectl -n aether-roc get pod |
| 164 | NAME READY STATUS RESTARTS AGE |
| 165 | aether-roc-api-78cc548bb9-7vjs2 1/1 Running 0 4m16s |
| 166 | aether-roc-gui-v2-6d674fd446-tttb5 1/1 Running 0 4m16s |
| 167 | aether-roc-umbrella-grafana-74f8489c8f-s9p45 2/2 Running 0 4m16s |
| 168 | aether-roc-websocket-855d64549b-44fnc 1/1 Running 0 4m16s |
| 169 | onos-cli-5d448ff6c4-stq5t 1/1 Running 0 4m16s |
| 170 | onos-config-7f4df96b88-vtp5s 6/6 Running 0 4m16s |
| 171 | onos-consensus-store-0 1/1 Running 0 4m15s |
| 172 | onos-topo-585c7c8976-6jq7b 3/3 Running 0 4m16s |
| 173 | sdcore-adapter-v2-5646d455b9-2d6zl 1/1 Running 0 4m15s |
| 174 | |
| 175 | You should see all pods in Running status. |
| 176 | |
| 177 | Sercomm eNodeB setup |
| 178 | -------------------- |
| 179 | |
| 180 | The instructions in this section describe a basic configuration of |
| 181 | the eNodeB. For a more comprehensive guide to |
| 182 | eNodeB configuration see `eNB Installation <https://docs.aetherproject.org/master/edge_deployment/enb_installation.html>`_. |
| 183 | |
| 184 | The Sercomm eNodeB has two Ethernet ports: WAN and LAN. We will use |
| 185 | the LAN port for configuration of the eNodeB and the WAN port for |
| 186 | normal operation. Connect the eNodeB WAN port to the local network. |
| 187 | |
| 188 | Connect the eNodeB LAN port to a free Ethernet port on a Linux machine |
| 189 | (say, a laptop) that will be used for the initial configuration of |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 190 | the eNodeB. On that machine run ``dhclient`` on the interface corresponding |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 191 | to the Ethernet port, for example:: |
| 192 | |
| 193 | sudo dhclient eth1 |
| 194 | |
| 195 | The interface should receive an IP address from the Sercomm eNodeB on |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 196 | the 11.11.11.0/24 subnet. Check this using ``ifconfig``:: |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 197 | |
| 198 | $ ifconfig eth1 |
| 199 | eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 |
| 200 | inet 11.11.11.100 netmask 255.255.255.0 broadcast 11.11.11.255 |
| 201 | inet6 fe80::2e0:4cff:fe68:2f76 prefixlen 64 scopeid 0x20<link> |
| 202 | ether 00:e0:4c:68:2f:76 txqueuelen 1000 (Ethernet) |
| 203 | RX packets 264652 bytes 216094312 (216.0 MB) |
| 204 | RX errors 0 dropped 0 overruns 0 frame 0 |
| 205 | TX packets 183978 bytes 36528580 (36.5 MB) |
| 206 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
| 207 | |
| 208 | The eNodeB IP address should be 11.11.11.188 on that link. Verify |
| 209 | this using ping:: |
| 210 | |
| 211 | $ ping 11.11.11.188 |
| 212 | |
| 213 | To access the Sercomm eNodeB admin page, you can run a Web browser on |
| 214 | the laptop and direct it to `https://11.11.11.188`. Login to the admin |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 215 | interface as user: ``sc_femto`` and password: ``scHt3pp``. |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 216 | |
| 217 | Click the ``NetWork set`` menu at the top. In the first section |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 218 | ``IP Address``, set *Connect type: DHCP* (assuming this is supported on |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 219 | your local network, otherwise set up a static IP address). |
| 220 | Click the blue ``Save`` button at the bottom. |
| 221 | |
| 222 | Next, click the ``Manage`` menu at the top and then click the |
| 223 | ``LTE Basic Setting`` tab. Change these parameters and click ``Save``: |
| 224 | |
| 225 | * Carrier Number: 2 |
| 226 | * Carrier Aggregation: Unset |
| 227 | * BandWidth: 20 |
| 228 | * FrequencyBand: 48,48 |
| 229 | * EARFCN: 55440,55640 |
| 230 | * CellIdentity: 2,1 |
| 231 | * PCI: 100,101 |
| 232 | * TxPower: 20 |
| 233 | * Tunnel Type: IPv4 |
| 234 | * MME IP Address: <MME IP address from AiaB installation> |
| 235 | * PLMNID: 315010 |
| 236 | * TAC: 1 |
| 237 | * Sync Source: FREE_RUNNING |
| 238 | * Enable CWMP: Unset |
| 239 | |
| 240 | Click the ``SAS Configuration`` tab. In the ``Location Configuration`` |
| 241 | section, enter these values and click “Save”: |
| 242 | |
| 243 | * Location: Indoor |
| 244 | * Location Source: Manual |
| 245 | * Latitude: 0 |
| 246 | * Longitude: 0 |
| 247 | * Elevation: -18000 |
| 248 | |
| 249 | Next we need to add a static route to the UPF address, 192.168.252.3, |
| 250 | on the eNodeB. Click on ``TR098`` menu and then click on ``IP`` tab. |
| 251 | Scroll down to ``Device.Routing.Router.`` section. Click ``View List``. |
| 252 | Add this info on the blank line: |
| 253 | |
| 254 | * Enable: Set |
| 255 | * StaticRoute: Set |
| 256 | * DestIPAddress: 192.168.252.0 |
| 257 | * DestSubnetMask: 255.255.255.0 |
| 258 | * GatewayIPAddress: <Use MME IP address from AiaB installation> |
| 259 | * Interface: Device.IP.Interface.1. |
| 260 | |
Andy Bavier | 5a32da0 | 2022-04-01 13:46:54 -0400 | [diff] [blame] | 261 | Then click the ``Add`` button at the far right. |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 262 | |
| 263 | Finally click the ``FAPService`` menu and then go to the ``FAPControl`` |
| 264 | tab. Check the box next to ``AdminState`` in the first section and |
| 265 | click ``Save``. |
| 266 | |
| 267 | After these changes are made, reboot the eNodeB by clicking the red |
| 268 | ``power button`` square at top right and selecting ``Reboot``. When the |
| 269 | eNodeB comes back up, it should have an IP address on the network |
| 270 | (via the WAN port), and the admin page should now be available on |
| 271 | `https://<endoeb-ip>`. |
| 272 | |
| 273 | Test connectivity from the eNodeB to the MME and the UPF running on |
| 274 | the server as follows. Login to the eNodeB admin interface, click |
| 275 | the “Manage” menu at the top, and click the ``IP Diagnose`` tab. Under |
| 276 | ``Ping and Traceroute``, select ``ping``, and then type the following IP |
| 277 | addresses into the box to the right and click ``Run``: |
| 278 | |
| 279 | * <MME IP address from AiaB installation> |
| 280 | * 192.168.251.1 |
| 281 | * 192.168.252.3 |
| 282 | |
| 283 | If all of these are working, then you are ready to try to connect |
| 284 | devices to the network. |
| 285 | |
| 286 | Connecting Devices |
| 287 | ------------------ |
| 288 | |
Andy Bavier | 6f431e4 | 2022-04-01 13:52:22 -0400 | [diff] [blame^] | 289 | Documenting how to configure different types of devices to work |
| 290 | with Aether is work-in-progress. |
Andy Bavier | f3e24b6 | 2022-03-30 19:53:01 -0400 | [diff] [blame] | 291 | |
| 292 | Reinstalling AiaB |
| 293 | ----------------- |
| 294 | |
| 295 | A current limitation of AiaB is that if the host machine reboots, |
| 296 | AiaB needs to be reinstalled. We plan to fix this in the future so |
| 297 | that the AiaB configuration will persist across reboots. In the |
| 298 | meantime, to reinstall AiaB on a machine where it was previously |
| 299 | installed, run `make clean` and then start at the `Server setup`_ |
| 300 | section above. |