Commit f2849868 authored by frtabu's avatar frtabu Committed by Robert Schmidt

web server enhancement and doc link fix

parent fe613541
The oai web server is an optional monitoring and debugging tool. Purpose is to give access to oai softmodems functionalities via a web interface. In this first release interface to the telnet server commands and to the softscope are delivered. The oai web server is an optional monitoring and debugging tool. Purpose is to give access to oai softmodems functionalities via a web interface. In this release interface to the telnet server commands and to the softscope are delivered.
* [Using the web server](webserverusage.md) * [Using the web server](websrvuse.md)
* [enhancing the webserver](webserverdevcmd.md) * [enhancing the webserver](websrvdev.md)
* [web server architecture ](webserverarch.md) * [web server architecture ](websrvarch.md)
[oai Wikis home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home) [oai Wikis home](https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/home)
# web server interface principles # web server interface principles
The web server interface is implemented in two parts: a back-end, included in the softmodem process and a front-end which is a browser application. The web server interface is implemented in two parts: a back-end, included in the softmodem process and a front-end which is a browser application.
The oai web server back-end is implemented in a shared library to be loaded by the [oai shared library loader](loader) when `--websrv` option is specified on the command line. `libwebsrv.so ` code is common to all oai softmodem executables, the current release has been tested with the nr UE and the gNB. The oai web server back-end is implemented in a shared library to be loaded by the [oai shared library loader](../../DOC/loader.md) when `--websrv` option is specified on the command line. `libwebsrv.so` code is common to all oai softmodem executables,
the current release has been tested with the nr UE and the gNB.
The front-end is an [angular](https://angular.io/docs) application. After being built and installed it is delivered to browsers by the back-end at connection time. The front-end is an [angular](https://angular.io/docs) application. After being built and installed it is delivered to browsers by the back-end at connection time.
Front-end and back-end communicate via http request - http response transactions, including `json` body. these `json` interfaces are defined in the [frontend/src/app/api/XXXX.api.ts](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/websrv/src/frontend/src/app/api/) files. Back-end decapsulates the http requests it receives, looking for the `json`body to determine the requested information or command. Then the back-end builds a http response, with a `json`body encapsulating the requested information or the requested command result. Front-end and back-end communicate via http request - http response transactions, including `json` body. these `json` interfaces are defined in the [frontend/src/app/api/XXXX.api.ts](../frontend/src/app/api/) files.
Back-end uses a callback machanism to map received http requests to dedicated functions. Typically a callback function decapsulates the http requests it receives, looking for the `json`body to determine the requested information or command. Then the back-end builds a
http response, with a `json`body encapsulating the requested information or the requested command result.
When unsolicited communication, from back-end to front-end is necessary, a [websocket](https://www.rfc-editor.org/rfc/rfc6455) link is opened. This is the case for the softscope interface. When unsolicited communication, from back-end to front-end is necessary, a [websocket](https://www.rfc-editor.org/rfc/rfc6455) link is opened. This is the case for the softscope interface.
# web server interface source files # web server interface source files
web server source files are located in [common/utils/websrv](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/websrv) web server source files are located in [common/utils/websrv](..)
1. back-end files are directly located in the `websrv` repository 1. back-end files are directly located in the `websrv` repository
1. The [frontend/src](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/websrv/src/frontend) sub-directory contains the angular front-end source tree. 1. The [frontend/src](../frontend/src) sub-directory contains the angular front-end source tree.
1. [common/utils/websrv/helpfiles](https://gitlab.eurecom.fr/oai/openairinterface5g/tree/develop/common/utils/websrv/helpfiles) contains files delivered to the front-end to respond to help requests. 1. [common/utils/websrv/helpfiles](../helpfiles) contains files delivered to the front-end to respond to help requests.
[oai web server interface home](websrv.md) [oai web server interface home](websrv.md)
\ No newline at end of file
# enhancing the web server
###### development platform
Backend devlopment is classical C programming, using [libulfius](https://github.com/babelouest/ulfius/blob/master/API.md) for the web server implementation
and [libjansson](https://jansson.readthedocs.io/en/latest/) for formatting and accessing the JSON http bodies which are used by the angular frontend to exchange data with the server.
The backend processes the http requests coming from the frontend using the ulfius callback mechanism. backend can also send unsollicited data to the frontend using a websocket
Frontend has been developped using the [angular framework](https://angular.io/) which implies TypeScript and HTML programming with the specificity of the node.js libraries and
angular extensions.
Debugging the frontend side may be more difficult than the backend, some tools may help:
- Some IDE such as [vscode]( https://code.visualstudio.com/) are "angular aware" and can ease debugging your modifications .
- Setting UTIL log level to informational in the backend and websrv debug flag to 2 ( `--log_config.util_log_level info --websrv.debug 2` ) will trigger backend traces which may help, including the dump of JSON type http content
- Browser devloper tools such as console may also help
There is a dedicated CMakeLists.txt, located in the websrv directory, to build both backend and frontend. Including the websrv option when configuring cmake ( `./build_oai --build-lib websrv` ) is required to be able to include the web server targets in the oai build scripts (either Makefile or ninja).
`libwebsrv.so` shared library is the backend binary. It is possibly dynamically loaded at runtime, which then triggers the execution of the
`websrv_autoinit` function that initializes the http server. Re-building the backend can be done using either `make websrv` or `ninja websrv` and it also re-builds the frontend .
The frontend run-time is made of a set of files generated from the TypeScript, HTML, CSS sources via the npm utility. It also includes some directly edited files such as the helpfiles. Frontend run-time is installed in the `websrv` sub-directory of the build path
(usually `<oai repository>/cmake_targets/ran_build/build`) Re-building frontend can be done via the websrvfront target: `make websrvfront` or `ninja websrvfront`.
###### backend source files
They are all located in the websrv repository
| source file |description |
|---|---|
| websrv.c | main backend file, starts the http server and contains functions for telnet server interface ( softmodem commands tab) |
| websrv.h | the only web server include file, contains utils prototypes, constants definitions, message definitions. Note that it must be kept consistent with frontend, unfortunatly we have not found a way to have common include files between C and javascript |
| websrv_utils.c | utility functions common to all backend sources: dump http request and JSON content. format string response from a file, a C string, a buffer asynchronously loaded. format help from help file |
| websrv_websockets.c | contains functions for the softscope interface (scope tab): initialize, close websocket, dispatch incoming messages, send a websocket message to frontend |
| websrv_scope.c | softscope specific functions: callbacks to process softope frontend request and function to send, receive and process softscope websocket messages |
| websrv_noforms.c websrv_noforms.h | stub functions to help using a common softscope interface for xforms softscope and the webserver softscope, could be removed when improving softscope architecture (don't use interface specific function in nr_physcope.c) |
###### main frontend source files
Frontend directory tree comes from the angular framework. The root of this tree is `websrv/frontend/`. Main sub directories or files are:
- `src/app/api` contains TypeScript files with functions to send http requests to the backend. These functions are used from components sources.
- `src/app/components/<component name>` contains the code (TypeScript, HTML and possibly CSS or XCSS) for a web page, for example the softscope, or popup page used to ask a question or return transaction status.
- `src/app/components/controls` contains TypeScript code used for managing some form fields used in the `softmodem commands` tab.
- `src/app/components/services` contain TypeScript code for utilities such as managing the websocket interface with the backend or downloading a file.
- `src/app/app-routing-module.ts` defines mapping between urls as entered by user and components
- `src/app/app.component.ts` `src/app/app.component.html` define the first page displayed to user
- `src/environments` contains environment.<build type>.ts file wich defines the `environment` variable depending on the build type. The delivered build scripts are using the `prod` version which has been written to make frontend and backend to interact properly in a production platform. Other build type is to be used in debug environment where frontend is not downloaded from the backend.
- `src/commondefs.ts`: constant definitions common to several TypeScript sources
[oai web serverinterface home](websrv.md)
back-end and front-end are both built when the build of the `websrv` optional library is requested. When cmake configuration has been completed, with websrv enabled,font-end and back-end can be built separatly, using respectively `make frontend` or `make websrv` from the build repository. ## building the webserver
When all dependencies are met, you can build the web server interface components using the build_oai script with the `--build-lib all` option . As the web interface is an optional component, if it's dependencies are not found it won't stop the build. Web interface components (back-end or front-end) which cannot be built are just skipped. If you specifically ask for the webserver build ( `--build-lib websrv`) the build will fail if dependencies check failed.
###### build example when missing dependencies back-end (the http server) and front-end (the html and javascript code for the browsers) are both built when the build of the `websrv` optional library is requested.
You can include the web server interface components in your build using the build_oai script with the `--build-lib "telnetsrv websrv"` option.
The related cmake cache entry in `ran_build/build/CMakeCache.txt` for building the web server
is `ENABLE_WEBSRV:BOOL=ON`
When cmake configuration has been completed, with websrv enabled and all dependencies met,font-end and back-end
can be built separately, using respectively `make websrvfront` or `make websrv` from the build repository (replace make by ninja if you
build using ninja).
###### build example when back-end dependency is not installed
```
./build_oai --gNB --nrUE -w USRP --build-lib "telnetsrv websrv nrscope"
Will compile gNB
Will compile NR UE
Enabling build of optional shared library telnetsrv
Enabling build of optional shared library websrv
Enabling build of optional shared library nrscope
OPENAIR_DIR = /usr/local/oai/develop_unmodified/openairinterface5g
Running "cmake -DOAI_USRP=ON -DENABLE_TELNETSRV=ON -DENABLE_WEBSRV=ON -DENABLE_NRSCOPE=ON ../../.."
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Ccache not found. Consider installing it for faster compilation. Command: sudo apt/dnf install ccache
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
-- Check if /opt/asn1c/bin/asn1c supports -gen-APER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-UPER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-JER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-BER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-OER
-- CMAKE_BUILD_TYPE is RelWithDebInfo
-- CPUARCH x86_64
-- AVX512 intrinsics are OFF
-- AVX2 intrinsics are ON
-- Found Git: /usr/bin/git (found version "2.34.1")
-- Checking for module 'libconfig'
-- Found libconfig, version 1.5
-- Checking for module 'openssl'
-- Found openssl, version 3.0.2
-- Checking for module 'blas'
-- Found blas, version 3.10.3
-- Checking for module 'lapacke'
-- Found lapacke, version 3.10.0
-- Checking for module 'cblas'
-- No package 'cblas' found
-- Add enb specific telnet functions in libtelnetsrv_enb.so
-- No specific telnet functions for gnb
-- No specific telnet functions for 4Gue
-- Add 5Gue specific telnet functions in libtelnetsrv_5Gue.so
-- Add CI specific telnet functions in libtelnetsrv_ci.so
CMake Error at common/utils/websrv/CMakeLists.txt:31 (find_library):
Could not find ULFIUS using the following names: libulfius.so
-- Configuring incomplete, errors occurred!
See also "/usr/local/oai/develop_unmodified/openairinterface5g/cmake_targets/ran_build/build/CMakeFiles/CMakeOutput.log".
build have failed
```
You can fix this first dependency problem, the backend dependency, by installing the libulfius library:
On ubuntu: `sudo apt-get install libulfius-dev`, for fedora: `dnf install libulfius`. Some distribution don't have
libulfius package, instruction to install it can be found [here](https://github.com/babelouest/ulfius/blob/master/INSTALL.md)
###### build example when front-end dependency is not installed
``` ```
./build_oai --build-lib all ./build_oai --build-lib "websrv telnetsrv nrscope"
Enabling build of all optional shared libraries (telnetsrv enbscope uescope nrscope websrv websrvfront)
RF HW set to None
OPENAIR_DIR = /usr/local/oai/websrv3/openairinterface5g
FreeDiameter prefix not found, install freeDiameter if EPC, HSS ./build_oai --gNB --nrUE -w USRP --build-lib "telnetsrv websrv nrscope"
running cmake -DENABLE_WEBSRV=ON -DENABLE_TELNETSRV=ON ../../.. Will compile gNB
NETTLE VERSION_INSTALLED = 3.5.1 Will compile NR UE
NETTLE_VERSION_MAJOR = 3 Enabling build of optional shared library telnetsrv
NETTLE_VERSION_MINOR = 5 Enabling build of optional shared library websrv
cuda include /usr/include Enabling build of optional shared library nrscope
cuda library OPENAIR_DIR = /usr/local/oai/develop_unmodified/openairinterface5g
Running "cmake -DOAI_USRP=ON -DENABLE_TELNETSRV=ON -DENABLE_WEBSRV=ON -DENABLE_NRSCOPE=ON ../../.."
-- Ccache not found. Consider installing it for faster compilation. Command: sudo apt/dnf install ccache
-- Check if /opt/asn1c/bin/asn1c supports -gen-APER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-UPER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-JER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-BER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-OER
-- CMAKE_BUILD_TYPE is RelWithDebInfo -- CMAKE_BUILD_TYPE is RelWithDebInfo
-- CPUARCH x86_64 -- CPUARCH x86_64
-- AVX512 intrinsics are OFF -- AVX512 intrinsics are OFF
-- AVX2 intrinsics are ON -- AVX2 intrinsics are ON
-- No T1 Offload support detected -- Checking for module 'cblas'
gcc -Wall -I. -I.. -I../itti -I../../../openair2/COMMON -Itracer -o _check_vcd check_vcd.c tracer/database.c tracer/utils.c -lm -pthread -- No package 'cblas' found
./_check_vcd || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false)
rm -f ./_check_vcd
-- Add enb specific telnet functions in libtelnetsrv_enb.so -- Add enb specific telnet functions in libtelnetsrv_enb.so
-- No specific telnet functions for gnb -- No specific telnet functions for gnb
-- No specific telnet functions for 4Gue -- No specific telnet functions for 4Gue
-- Add 5Gue specific telnet functions in libtelnetsrv_5Gue.so -- Add 5Gue specific telnet functions in libtelnetsrv_5Gue.so
CMake Error at common/utils/websrv/CMakeLists.txt:3 (message): -- Add CI specific telnet functions in libtelnetsrv_ci.so
ulfius library (https://github.com/babelouest/ulfius) not found, install -- found libulfius for websrv
libulfius-dev (ubuntu) if you need to build websrv back-end -- found libjansson for websrv
CMake Error at common/utils/websrv/CMakeLists.txt:45 (find_program):
Could not find NPM using the following names: npm
-- Configuring incomplete, errors occurred! -- Configuring incomplete, errors occurred!
See also "/usr/local/oai/websrv3/openairinterface5g/cmake_targets/ran_build/build/CMakeFiles/CMakeOutput.log". See also "/usr/local/oai/develop_unmodified/openairinterface5g/cmake_targets/ran_build/build/CMakeFiles/CMakeOutput.log".
See also "/usr/local/oai/websrv3/openairinterface5g/cmake_targets/ran_build/build/CMakeFiles/CMakeError.log".
build have failed build have failed
``` ```
Currently the web server frontend can run with nodejs 18, you can check the version (if any) installed on your system entering the `node -v` command.
###### build example (build-lib all) when dependencies are met To prevent difficult situations with nodejs or npm versions it is better to specifically install the required nodejs version (after removing existing versions of npm and nodejs), as explained
``` [here](https://www.stewright.me/2023/04/install-nodejs-18-on-ubuntu-22-04/) for ubuntu. Similar instructions can be found for other distributions.
./build_oai --build-lib all It is also possible to make several nodejs versions co-habiting on your system, this is beyond this doc.
Enabling build of all optional shared libraries (telnetsrv enbscope uescope nrscope websrv websrvfront)
RF HW set to None
OPENAIR_DIR = /usr/local/oai/websrv3/openairinterface5g ###### example: installing nodejs 18 on ubuntu
FreeDiameter prefix not found, install freeDiameter if EPC, HSS ```
running cmake -DENABLE_WEBSRV=ON -DENABLE_TELNETSRV=ON ../../..
NETTLE VERSION_INSTALLED = 3.5.1 curl -s https://deb.nodesource.com/setup_18.x | sudo bash
NETTLE_VERSION_MAJOR = 3
NETTLE_VERSION_MINOR = 5 ## Installing the NodeSource Node.js 18.x repo...
cuda include /usr/include
cuda library
## Populating apt-get cache...
+ apt-get update
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Hit:2 http://us.archive.ubuntu.com/ubuntu jammy InRelease
Get:3 http://security.ubuntu.com/ubuntu jammy-security/main i386 Packages [305 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [678 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:6 http://security.ubuntu.com/ubuntu jammy-security/main amd64 DEP-11 Metadata [42.8 kB]
Get:7 http://security.ubuntu.com/ubuntu jammy-security/main amd64 c-n-f Metadata [11.2 kB]
Get:8 http://security.ubuntu.com/ubuntu jammy-security/universe i386 Packages [553 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu jammy-backports InRelease [109 kB]
Get:10 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [770 kB]
Get:11 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 DEP-11 Metadata [39.8 kB]
Get:12 http://us.archive.ubuntu.com/ubuntu jammy-updates/main i386 Packages [471 kB]
Get:13 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [892 kB]
Get:14 http://us.archive.ubuntu.com/ubuntu jammy-updates/main Translation-en [214 kB]
Get:15 http://us.archive.ubuntu.com/ubuntu jammy-updates/main amd64 DEP-11 Metadata [100 kB]
Get:16 http://us.archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [714 kB]
Get:17 http://us.archive.ubuntu.com/ubuntu jammy-updates/restricted Translation-en [114 kB]
Get:18 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [968 kB]
Get:19 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe i386 Packages [648 kB]
Get:20 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe Translation-en [211 kB]
Get:21 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 DEP-11 Metadata [288 kB]
Get:22 http://us.archive.ubuntu.com/ubuntu jammy-updates/multiverse amd64 DEP-11 Metadata [940 B]
Get:23 http://us.archive.ubuntu.com/ubuntu jammy-backports/main amd64 DEP-11 Metadata [4,924 B]
Get:24 http://us.archive.ubuntu.com/ubuntu jammy-backports/universe amd64 DEP-11 Metadata [15.6 kB]
Fetched 7,379 kB in 4s (2,095 kB/s)
Reading package lists... Done
## Confirming "jammy" is supported...
+ curl -sLf -o /dev/null 'https://deb.nodesource.com/node_18.x/dists/jammy/Release'
## Adding the NodeSource signing key to your keyring...
+ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor | tee /usr/share/keyrings/nodesource.gpg >/dev/null
## Creating apt sources list file for the NodeSource Node.js 18.x repo...
+ echo 'deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x jammy main' > /etc/apt/sources.list.d/nodesource.list
+ echo 'deb-src [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x jammy main' >> /etc/apt/sources.list.d/nodesource.list
## Running `apt-get update` for you...
+ apt-get update
Hit:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
Get:2 https://deb.nodesource.com/node_18.x jammy InRelease [4,563 B]
Get:3 https://deb.nodesource.com/node_18.x jammy/main amd64 Packages [776 B]
Hit:4 http://us.archive.ubuntu.com/ubuntu jammy InRelease
Hit:5 http://us.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:6 http://us.archive.ubuntu.com/ubuntu jammy-backports InRelease
Fetched 5,339 B in 1s (7,666 B/s)
Reading package lists... Done
## Run `sudo apt-get install -y nodejs` to install Node.js 18.x and npm
## You may also need development tools to build native addons:
sudo apt-get install gcc g++ make
## To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
sudo apt install nodejs -y
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
diodon libdiodon0 libxdo3 xdotool
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
nodejs
0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.
Need to get 28.9 MB of archives.
After this operation, 188 MB of additional disk space will be used.
Get:1 https://deb.nodesource.com/node_18.x jammy/main amd64 nodejs amd64 18.17.1-deb-1nodesource1 [28.9 MB]
Fetched 28.9 MB in 3s (11.3 MB/s)
Selecting previously unselected package nodejs.
(Reading database ... 399541 files and directories currently installed.)
Preparing to unpack .../nodejs_18.17.1-deb-1nodesource1_amd64.deb ...
Unpacking nodejs (18.17.1-deb-1nodesource1) ...
Setting up nodejs (18.17.1-deb-1nodesource1) ...
Processing triggers for man-db (2.10.2-1) ...
```
###### build example when dependencies are met
``` bash
./build_oai --ninja -c -C --gNB --nrUE -w USRP --build-lib "telnetsrv websrv nrscope"
Will compile gNB
Will compile NR UE
Enabling build of optional shared library telnetsrv
Enabling build of optional shared library websrv
Enabling build of optional shared library nrscope
OPENAIR_DIR = /usr/local/oai/develop_unmodified/openairinterface5g
Erased all previously producted files
Running "cmake -GNinja -DOAI_USRP=ON -DENABLE_TELNETSRV=ON -DENABLE_WEBSRV=ON -DENABLE_NRSCOPE=ON ../../.."
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Ccache not found. Consider installing it for faster compilation. Command: sudo apt/dnf install ccache
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.2")
-- Check if /opt/asn1c/bin/asn1c supports -gen-APER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-UPER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-JER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-BER
-- Check if /opt/asn1c/bin/asn1c supports -no-gen-OER
-- CMAKE_BUILD_TYPE is RelWithDebInfo -- CMAKE_BUILD_TYPE is RelWithDebInfo
-- CPUARCH x86_64 -- CPUARCH x86_64
-- AVX512 intrinsics are OFF -- AVX512 intrinsics are OFF
-- AVX2 intrinsics are ON -- AVX2 intrinsics are ON
-- No T1 Offload support detected -- Found Git: /usr/bin/git (found version "2.34.1")
gcc -Wall -I. -I.. -I../itti -I../../../openair2/COMMON -Itracer -o _check_vcd check_vcd.c tracer/database.c tracer/utils.c -lm -pthread -- Checking for module 'libconfig'
./_check_vcd || (rm -f ./_check_vcd ./T_IDs.h ./T_messages.txt.h && false) -- Found libconfig, version 1.5
rm -f ./_check_vcd -- Checking for module 'openssl'
-- Found openssl, version 3.0.2
-- Checking for module 'blas'
-- Found blas, version 3.10.3
-- Checking for module 'lapacke'
-- Found lapacke, version 3.10.0
-- Checking for module 'cblas'
-- No package 'cblas' found
-- Add enb specific telnet functions in libtelnetsrv_enb.so -- Add enb specific telnet functions in libtelnetsrv_enb.so
-- No specific telnet functions for gnb -- No specific telnet functions for gnb
-- No specific telnet functions for 4Gue -- No specific telnet functions for 4Gue
-- Add 5Gue specific telnet functions in libtelnetsrv_5Gue.so -- Add 5Gue specific telnet functions in libtelnetsrv_5Gue.so
-- Add CI specific telnet functions in libtelnetsrv_ci.so
-- found libulfius for websrv -- found libulfius for websrv
-- found libjansson for websrv -- found libjansson for websrv
-- found npm for websrv -- found npm for websrv
-- Configuring webserver backend -- Configuring webserver backend
-- Configuring webserver frontend -- Configuring webserver frontend
-- No Doxygen documentation requested -- No Doxygen documentation requested
-- libforms library, required for scopes, found at /usr/lib/libforms.so
-- Found UHD: /usr/lib/x86_64-linux-gnu/libuhd.so
-- Configuring done -- Configuring done
-- Generating done -- Generating done
-- Build files have been written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/ran_build/build -- Build files have been written to: /usr/local/oai/develop_unmodified/openairinterface5g/cmake_targets/ran_build/build
Log file for compilation is being written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/log/telnetsrv.txt cd /usr/local/oai/develop_unmodified/openairinterface5g/cmake_targets/ran_build/build
telnetsrv compiled Running "cmake --build . --target nr-softmodem nr-cuup nr-uesoftmodem oai_usrpdevif telnetsrv websrv nrscope params_libconfig coding rfsimulator dfts -- -j8"
Log file for compilation is being written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/log/enbscope.txt Log file for compilation is being written to: /usr/local/oai/develop_unmodified/openairinterface5g/cmake_targets/log/all.txt
enbscope compiled nr-softmodem nr-cuup nr-uesoftmodem oai_usrpdevif telnetsrv websrv nrscope params_libconfig coding rfsimulator dfts compiled
Log file for compilation is being written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/log/uescope.txt BUILD SHOULD BE SUCCESSFUL
uescope compiled
Log file for compilation is being written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/log/nrscope.txt
nrscope compiled
Log file for compilation is being written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/log/websrv.txt
websrv compiled
Log file for compilation is being written to: /usr/local/oai/websrv3/openairinterface5g/cmake_targets/log/websrvfront.txt
websrvfront compiled
BUILD SHOULD BE SUCCESSFUL
```
# building and installing the front-end after cmake has been configured
Before building the front-end you need to install the npm node.js installer, otherwise the make target won't exist: ```
`apt-get install npm` for ubuntu or `dnf install npm`for fedora ###### building and installing the front-end after cmake has been successfully configured
then configure cmake to be able to build and install the frontend without using the build_oai script:
``` bash ```
cd \<oai repository\>/openairinterface5g/cmake_targets/ran_build/build cd \<oai repository\>/openairinterface5g/cmake_targets/ran_build/build
make websrvfront make websrvfront
up to date, audited 1099 packages in 3s up to date, audited 1099 packages in 3s
...@@ -135,29 +332,21 @@ Built target websrvfront ...@@ -135,29 +332,21 @@ Built target websrvfront
``` ```
###### building and installing the back-end after cmake has been successfully configured
# Building and installing the web server back-end after cmake has been configured
The back-end has two dependencies:
1. the [ulfius library](https://github.com/babelouest/ulfius) and the corresponding include files which are provided by the ubuntu libulfius-dev package: `sudo apt-get install -y libulfius-dev`
2. the [jansson](https://github.com/akheron/jansson-debian) library and the corresponding include files which are provided by the ubuntu libjansson-dev package: `sudo apt-get install -y libjansson-dev`
Dependencies can also be installed on fedora distribution, the jansson package is `jansson-devel`, ulfius has to be installed as explained [here](https://github.com/babelouest/ulfius/blob/master/INSTALL.md#pre-compiled-packages).
The websrv targets won't be available till cmake has been successfully configured with the websrv option enabled
```bash ```bash
cd \<oai repository\>/openairinterface5g cd <oai repository>/openairinterface5g
source oaienv source oaienv
cd cmake_targets cd cmake_targets
./build_oai --build-lib websrv ./build_oai --build-lib websrv
``` ```
or, without the help of the `build_oai` script: or, without the help of the `build_oai` script:
```bash ```bash
cd \<oai repository\>/openairinterface5g/cmake_targets/ran_build/build cd \<oai repository\>/openairinterface5g/cmake_targets/ran_build/build
make websrv make websrv
``` ```
This will create the `libwebsrv.so` file in the `targets/bin` and `cmake_targets/ran_build/build` sub directories of the oai repository. This will create the `libwebsrv.so` file in the `targets/bin` and `cmake_targets/ran_build/build` sub directories of the oai repository.
When starting the softmodem, you must specify the **_\-\-websrv_** option to load and start the web server. The web server is loaded via the [oai shared library loader](loader). When starting the softmodem, you must specify the **_\-\-websrv_** option to load and start the web server. The web server is loaded via the [oai shared library loader](loader).
...@@ -166,7 +355,7 @@ When starting the softmodem, you must specify the **_\-\-websrv_** option to loa ...@@ -166,7 +355,7 @@ When starting the softmodem, you must specify the **_\-\-websrv_** option to loa
## web server parameters ## web server parameters
The web server back-end is using the [oai configuration module](Config/Rtusage). web server parameters must be specified in the websrv section. The web server back-end is using the [oai configuration module](Config/Rtusage). web server parameters must be specified in the websrv section.
| name | type | default | description | | name | type | default | description |
|:---:|:---:|:---:|:----| |:---:|:---:|:---:|:----|
...@@ -180,7 +369,7 @@ The web server back-end is using the [oai configuration module](Config/Rtusage). ...@@ -180,7 +369,7 @@ The web server back-end is using the [oai configuration module](Config/Rtusage).
## running the back-end ## running the back-end
To trigger the back-end use the `--websrv` option, possibly modifying the parameters as explained in the previous chapter. The two following commands allow starting the oai gNB and the oai 5G UE on the same computer, starting the telnet server and the web interface on both executables. To trigger the back-end use the `--websrv` option, possibly modifying the parameters as explained in the previous chapter. The two following commands allow starting the oai gNB and the oai 5G UE on the same computer, starting the telnet server and the web interface on both executables.
`./nr-softmodem -O /usr/local/oai/conf/gnb.band78.sa.fr1.106PRB.usrpb210.conf --rfsim --rfsimulator.serveraddr server --telnetsrv --telnetsrv.listenstdin --websrv --rfsimulator.options chanmod` `./nr-softmodem -O /usr/local/oai/conf/gnb.band78.sa.fr1.106PRB.usrpb210.conf --rfsim --rfsimulator.serveraddr server --telnetsrv --telnetsrv.listenstdin --websrv --rfsimulator.options chanmod`
.`/nr-uesoftmodem -O /usr/local/oai/conf/nrue_sim.conf --sa --numerology 1 -r 106 -C 3649440000 --rfsim --rfsimulator.serveraddr 127.0.0.1 --websrv --telnetsrv --websrv.listenport 8092 --telnetsrv.listenport 8091` .`/nr-uesoftmodem -O /usr/local/oai/conf/nrue_sim.conf --sa --numerology 1 -r 106 -C 3649440000 --rfsim --rfsimulator.serveraddr 127.0.0.1 --websrv --telnetsrv --websrv.listenport 8092 --telnetsrv.listenport 8091`
...@@ -191,18 +380,20 @@ To trigger the back-end use the `--websrv` option, possibly modifying the parame ...@@ -191,18 +380,20 @@ To trigger the back-end use the `--websrv` option, possibly modifying the parame
Assuming that the previous commands run successfully and that you also run your browser on the same host, you should be able to connect to the gNB and UE web interface using respectively the following url's: Assuming that the previous commands run successfully and that you also run your browser on the same host, you should be able to connect to the gNB and UE web interface using respectively the following url's:
http://127.0.0.1:8090/websrv/index.html http://127.0.0.1:8090/websrv/index.html
http://127.0.0.1:8092/websrv/index.html http://127.0.0.1:8092/websrv/index.html
The interface should be intuitive enough, keeping in mind the following restrictions: The interface should be intuitive enough, keeping in mind the following restrictions:
- The command tab is not available if the telnet server is not enabled - The command tab is not available if the telnet server is not enabled
- The softscope tab is not available if the xforms scope is started `(-d` option) - The softscope tab is not available if the xforms scope is started (`-d` option)
- Only one connection is supported to a back-end, especially for the scope interface - Only one connection is supported to a back-end, especially for the scope interface
Some front-end objects, which usage are less intuitive provide a tooltip to help interface usage. Some front-end objects, which usage are less intuitive provide a tooltip to help interface usage.
## some webserver screenshots ## some webserver screenshots
![main page](/usr/local/oai/websrv3/openairinterface5g/common/utils/websrv/DOC/main.png "main page") - [main page](main.png)
![Configuring logs](/usr/local/oai/websrv3/openairinterface5g/common/utils/websrv/DOC/logscfg.png "Configuring logs") - [Configuring logs](logscfg.png)
![scope interface](/usr/local/oai/websrv3/openairinterface5g/common/utils/websrv/DOC/scope.png "scope interface") - [scope interface](scope.png)
[oai web serverinterface home](websrv.md) [oai web serverinterface home](websrv.md)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment