ZeroMQでsrsRAN 4G UE / RANを構築

srsRAN 4Gソフトウェア スイートには、ZeroMQネットワーキング ライブラリを使用してアプリケーション間で無線サンプルを転送する仮想無線が含まれています。そこで、4G EPCの機能を確認するために、実際のデバイスの代わりに仮想eNodeBとUEを構築する簡単な手順について説明します。なお、構築に際しては、RFプラグインを無効にしてZeroMQ対応機能を仮想eNodeBとUEに静的に組み込んでいることに注意して下さい。

ZeroMQでsrsRAN 4G UE/RANを構築するには以下を参照して下さい。

- srsRAN 4G - https://docs.srsran.com/projects/4g/en/latest/

動作確認したVMの仕様は以下の通りです。

| OS | CPU (Min) | Memory (Min) | HDD (Min) |
| --- | --- | --- | --- |
| Ubuntu 22.04 | 1 | 2GB | 10GB |

ビルドには2GB以上のメモリが必要です。

## ZeroMQを含む必要なライブラリをインストール

```
apt install build-essential cmake libfftw3-dev libmbedtls-dev libboost-program-options-dev libconfig++-dev libsctp-dev libzmq3-dev
```

## Git clone srsRAN_4G

```
git clone https://github.com/srsran/srsRAN_4G.git
```

## Virtualbox VMにRFプラグインを無効にしてsrsRAN 4G UE / RANを構築

ZeroMQライブラリを仮想eNodeBおよびUEに静的にリンクさせるため、RFプラグインを無効にしてビルドします。

```
cd srsRAN_4G
mkdir build
cd build
cmake ../ -DENABLE_RF_PLUGINS=OFF
make
```

## eNodeBの設定ファイルを作成

雛型の各設定ファイルをコピーして、環境に応じて編集して下さい。

```
cd srsRAN_4G/srsenb
cp enb.conf.example ../build/srsenb/enb.conf
cp rr.conf.example ../build/srsenb/rr.conf
cp rb.conf.example ../build/srsenb/rb.conf
cp sib.conf.example ../build/srsenb/sib.conf
```

## UEの設定ファイルを作成

雛型の設定ファイルをコピーして、環境に応じて編集して下さい。

```
cd srsRAN_4G/srsue
cp ue.conf.example ../build/srsue/ue.conf
```

## NR-UEの設定ファイルを作成

UEを5G NR-UEとして使用すると、4GのeNodeBの他にZeroMQ対応のsrsRAN_Project 5G gNodeBに接続することができます。5G NR-UE構成の場合は、[ZeroMQ-based Setup](https://docs.srsran.com/projects/project/en/latest/tutorials/source/srsUE/source/index.html#zeromq-based-setup)の`UE config`を雛型のファイルとして取得します。また、このRFシミュレートされたgNodeBの構築方法については、[こちら](https://github.com/s5uishida/build_srsran_5g_zmq)を参照してください。

```
cd srsRAN_4G/build/srsue
wget <link of "UE config">
```

参考までに、2023.12.07の`ue_zmq.conf`は以下の通りです。環境に応じて編集します。

```
[rf]
freq_offset = 0
tx_gain = 50
rx_gain = 40
srate = 23.04e6
nof_antennas = 1

device_name = zmq
device_args = tx_port=tcp://127.0.0.1:2001,rx_port=tcp://127.0.0.1:2000,base_srate=23.04e6

[rat.eutra]
dl_earfcn = 2850
nof_carriers = 0

[rat.nr]
bands = 3
nof_carriers = 1
max_nof_prb = 106
nof_prb = 106

[pcap]
enable = none
mac_filename = /tmp/ue_mac.pcap
mac_nr_filename = /tmp/ue_mac_nr.pcap
nas_filename = /tmp/ue_nas.pcap

[log]
all_level = info
phy_lib_level = none
all_hex_limit = 32
filename = /tmp/ue.log
file_max_size = -1

[usim]
mode = soft
algo = milenage
opc  = 63BFA50EE6523365FF14C1F45F88737D
k    = 00112233445566778899aabbccddeeff
imsi = 001010123456780
imei = 353490069873319

[rrc]
release = 15
ue_category = 4

[nas]
apn = srsapn
apn_protocol = ipv4

[gw]
netns = ue1
ip_devname = tun_srsue
ip_netmask = 255.255.255.0

[gui]
enable = false
```

## 問題点

1. Open5GSへのUEの登録時に、5G NR-UEの設定ファイルの`[slicing]`セクションで問題が発生した場合は、[こちら](https://github.com/srsran/srsRAN_4G/pull/1214) が役に立つかも知れません。NR-UEとして`ue_zmq.conf`に`[slicing]`セクションを追加してsrsueを使用する場合、3GPP仕様に従って、`InitialUEMessage Plain NAS 5GS Message`に`NSSAI IE`を含めないようにしますが、srsueはそのようになっていません。free5GCのAMFの場合、この辺のチェックは緩いのですが、Open5GSは厳格にはじきます。そろそろマージして頂けると助かるのですが…

## 動作確認済みバージョン一覧

以下のバージョンの動作を簡単に確認しました。

| Version | Commit | Date | Issues |
| --- | --- | --- | -- |
| 23.11+ | `ec29b0c1ff79cebcbe66caa6d6b90778261c42b8` | 2024.02.01 | 1 |
| 23.11 | `eea87b1d893ae58e0b08bc381730c502024ae71f` | 2023.11.23 | 1 |
| 23.04.1 | `fa56836b14dc6ad7ce0c3484a1944ebe2cdbe63b` | 2023.06.19 | 1 |

## 4G、5Gコア連携の設定例

### 5Gの場合

- [Open5GS 5GC & srsRAN 5G with ZeroMQ UE / RAN Sample Configuration](https://github.com/s5uishida/open5gs_5gc_srsran_sample_config)
- [free5GC 5GC & srsRAN 5G with ZeroMQ UE / RAN Sample Configuration](https://github.com/s5uishida/free5gc_srsran_sample_config)

### 4Gの場合

- [Open5GS EPC & srsRAN 4G with ZeroMQ UE / RAN Sample Configuration](https://github.com/s5uishida/open5gs_epc_srsran_sample_config)

## 最後に

SRSが開発したsrsRAN_4Gにより、UE、eNodeB、軽量のEPCを備えた完全なLTEモバイルネットワークを実現することができます。ここでは、4Gコア機能を検証する際のRANならびにUEとして使用するため、ZeroMQベースのRFドライバーでeNodeBとsrsUEを接続する構成を想定し、仮想環境で組む時のsrsRAN_4Gのビルド方法について説明しました。これにより、実機のeNodeBとUEが無くても、取り敢えず、4Gコアの機能を幾らか検証することができると思います。
また、5G対応のNR-UEの機能も備えているため、srsRAN_ProjectのgNodeBと連携して、5Gコア機能の検証に使用することもできます。

最後に、元記事は[Github](https://github.com/s5uishida/build_srsran_4g_zmq_disable_rf_plugins)に書いたものです。

## 主な変更履歴

- [2024.09.12] 初版。