1. Постановка задачи

Проектируемый макет реализуется на базе персонального компьютера (Host PC) и программно - определяемого радио SDR. Как правило, аппаратное обеспечение, реализующее радиоинтерфейс, уже настроено и готово к использованию, задача заключается в настройке хост-машины, которая представляет собой соответствующий требованиям проекта персональный компьютер с установленной операционной системой на базе Linux, либо виртуальная машина с аналогичной ОС. В ходе работы было принято решение использовать USRP N210 в качестве радиоинтерфейса и ОС Xubuntu 18.04 x64 на виртуальной машине VirtualBox. Структурная схема проектируемого стенда представлена на рисунке 1.


Рисунок 3 - схема макета

Двумя основными программами являются OpenBTS-UMTS и sipauthserve. sipauthserve - сервер аутентификации, subscriber register. Каждая из этиз программ связана с соответствующей базой данных sqlite3. В базе данных, принадлежащей OpenBTS-UMTS, хранятся параметры подключения, настройки сети. В базе данных, принадлежащей sipauthserve - данные пользователей (IMSI и ключ Ki).

2. Установка ОС, сборка, настройка и запуск ПО

2.1 Установка ОС на виртуальную машину

В программе VirtualBox создать новую виртуальную машину. Для этого в главном окне программы нажать кнопку "Создать" и установить следующие параметры:

  • Имя: любое;

  • Тип: Linux;

  • Версия: Ubuntu (64-bit);

  • Объем ОЗУ: 2048 Мб;

  • Установить параметр "Создать новый виртуальный жесткий диск";

Нажать кнопку "Создать";

  • Расположение: по умолчанию;

  • Размер дискового пространства: 20 Гб;

  • Установить параметры VDI, "Динамический виртуальный жесткий диск";

Нажать кнопку "Создать".

Далее нажать правой кнопкой мыши по созданному экземпляру виртуальной машины и выбрать пункт "настроить". Затем необходимо указать файл образа устанавливаемой ОС (см. Рис. 5), сохранить настройки нажатием "ОК". После необходимо запустить виртуальную машину соответствующей кнопкой.

Далее установка ОС тривиальна, в случае возникновения проблем стоит обратиться в техническую поддержку устанавливаемого дистрибутива. После перезагрузки необходимо установить предлагаемые обновления xubuntu. По желанию можно установить дополнения гостевой ОС для работы с общими папками, изменения расширения монитора.

2.2 Установка необходимых программ, библиотек и OpenBTS-UMTS

Первым делом необходимо обновить установленные пакеты и установить систему контроля версий Git, для этого выполнить в терминале:

sudo apt-get update

sudo apt-get upgrade

sudo apt-get install git

sudo apt-get install sqlite3

Затем необходимо загрузить копии репозиториев проектов OpenBTS и OpenBTS-UMTS:

git clone https://github.com/RangeNetworks/dev.git

git clone https://github.com/KonstantinZavertkin/OpenBTS-UMTS.git


Следующий шаг - установка зависимостей. Для этого необходимо перейти в папку OpenBTS-UMTS и выполнить скрипт:

cd ./OpenBTS-UMTS/

sudo ./install_dependencies.sh


Данный скрипт скачивает и устанавливает необходимые библиотеки с помощью утилиты apt, поэтому требуются права root. Кроме того данный скрипт собирает и устанавливает компилятор asn1c. Листинг скрипта представлен в приложении 1.

Далее сборка и установка проекта:

./autogen.sh

./configure

make

sudo make install

sudo mkdir /var/log/OpenBTS-UMTS

cd /etc/OpenBTS/

sudo sqlite3 /etc/OpenBTS-UMTS/OpenBTS-UMTS.db ".read OpenBTS-UMTS.example.sql"

sudo cp ~dev/subscriberRegistry/apps/comp128 /OpenBTS/



2.3 Установка sipauthserve

Сервер sipauthserve устанавливается из репозитория dev компании Range Networks. Для установки необходим libcoredumper:

cd ./dev

./clone.sh

cd ./libcoredumper

./build.sh


# Если возникла ошибка:

cd ./coredumper-1.2.1/

./configure

make

sudo make install


cd ../../subscriberRegistry/

./autogen.sh

./configure

make

sudo make install

sudo mkdir -p /var/lib/asterisk/sqlite3dir

cd /etc/OpenBTS/

sudo sqlite3 -init subscriberRegistry.example.sql /etc/OpenBTS/sipauthserve.db ".quit"



3. Проблемы, возникшие при сборке и их решение

ОС Ubuntu является активно развивающейся операционной системой, для которой регулярно выходят обновления. В ней используются различные сторонние программы и библиотеки, размещаемые в официальных репозиториях, которые также развиваются. К сожалению, иногда случаются ситуации, когда в очередном обновлении название некоторого пакета меняется, и в таком случае при сборке некоторого проекта по официальной инструкции, в случае, если данный проект более не поддерживается разработчиками, оказывается весьма затруднительной. В данном случае приходится либо искать этот же пакет с измененным именем, либо подключать в /etc/apt/sources.list репозитории старых версий ОС, либо искать исходные коды пакета для установки вручную.

Другого рода ошибки при установке возникают из-за использования в коде устаревших конструкций языка, которые в новых версиях компилятора языка C++ не поддерживаются. К счастью, компилятор сообщает об возникающих ошибках с указанием файла и номера строки.

Кроме того возникла проблема при сборке проекта утилитой make – по не известным причинам make distclean удаляет файлы, которые еще должны были использоваться. Из-за этого также не собиралась программа, make удалял файл, а потом завершался с ошибкой, из-за того, что нужного файла нет. Данная проблема решилась путем удаления команд для удаления файлов.

4. Обзор параметров базы данных OpenBTS-UMTS

В процессе установки формируется файл базы данных OpenBTS-UMTS.example.sql, в котором хранятся настройки программы. Рассмотрим некоторые из них. База данных — SQLite3. Имеется возможность задавать следующие параметры:

Control.LUR.AttachDetach: 1=enabled, 0=disabled — используется для включения/выключения.

Control.LUR.FailedRegistration.Message = «Your handset is not provisioned for this network» - Данное сообщение отправляется пользовательскому оборудованию, если ему запрещен доступ к данной сети.

Control.LUR.FailedRegistration.ShortCode = 1000 - Код ошибки.

Control.LUR.NormalRegistration.Message = «» - Сообщение, посылаемое в случае успешного подключения (по умолчанию — пустое значение).

Control.LUR.NormalRegistration.ShortCode = 0000 — Код сообщения успешного подключения.

Control.LUR.OpenRegistration , ,0,0, Регулярное вы ражение. Всем номерам IMSI, соответствующим шаблону, будет доступна регистрация в сети.

Control.LUR.OpenRegistration.Message = «Welcome to the test network. Your IMSI is» - Приветствие сети.

Control.LUR.SendTMSIs = 0 - 1=enabled, 0=disabled - Отправлять новые назначения TMSI на пользоватеские терминалы, которые разрешено прикреплять.

Control.Reporting.TMSITable = /var/run/OpenBTS-UMTS-TMSITable.db - путь до файла базы данных TMSITable.

Control.Reporting.TransactionTable ,/var/run/OpenBTS-UMTS-TransactionTable.db ,1,0, путь до файла базы данных транзакций.

GGSN.Firewall.Enable = 1 - 0=нет файервола; 1=блокировать попытки доступа со стороны MS к OpenBTS-UMTS или другимMS; 2= блокировать все приватный IP адреса.

GGSN.IP.MaxPacketSize ,1520 ,1,0, Максимальный размер IP пакета. Должен быть кратным 1520.

GGSN.IP.ReuseTimeout = 180 — Как долго IP зарезервирован после окончания сессии.

GGSN.Logfile.Name = «» - Если указано, трафик логгируется в файл, например, в ggsn.log.

GGSN.MS.IP.Base ,192.168.99.1 ,1,0, Базовый IP назначенный MS. Static.

GGSN.MS.IP.MaxCount = 254 - Число IP адресов для использования MS.

GGSN.MS.IP.Route , ,1,0, Адрес для передачи данных клиентам от OpenBTS-UMTS. По умолчанию, OpenBTS-UMTS получает это значение из GGSN.MS.IP.Base накладывая 24-х битную маску. Для переопределения, укажите адрес в форме xxx.xxx.xxx.xxx/yy. Он должен охватывать IP адреса всех MS.

GGSN.ShellScript = “” - Сценарий оболочки, вызываемый при подключении устройств MS или создании IP-соединений. По умолчанию эта функция отключена. Чтобы включить, укажите абсолютный путь к скрипту, который вы хотите выполнить, например. /usr/bin/ms-attach.sh

GGSN.TunName ,sgsntun ,1,0, Устройство туннелирования для GGSN.

SIP.Local.IP = 127.0.0.1 - IP-адрес устройства OpenBTS-UMTS, как видно из его прокси. Если все они локальные, это может быть localhost.

SIP.Local.Port = 5062 - IP порт, который OpenBTS-UMTS использует для SIP интерфейса.

SIP.Proxy.Registration = 127.0.0.1:5064 ,0,0, Имя хоста или IP-адрес и порт прокси-сервера, который будет использоваться для регистрации и аутентификации. Обычно это должен быть интерфейс SIP-интерфейса для subscriber registry, а не Asterisk.

SIP.Proxy.SMS = 127.0.0.1:5063 - Имя хоста или IP-адрес и порт прокси-сервера, который будет использоваться для обмена текстовыми сообщениями. Это, например, smqueue.

SubscriberRegistry.A3A8 = /OpenBTS/comp128 Путь к программе, которая реализует алгоритм A3/A8.

SubscriberRegistry.Port = 5064 — Порт, используемый для SIP сервера аутентификации.

SubscriberRegistry.UpstreamServer , ,0,0, URL-адрес интерфейса HTTP-сервера подписчика на восходящем сервере. По умолчанию эта функция отключена. Чтобы включить, укажите URL-адрес сервера, например: http://localhost/cgi/subreg.cgi. Для выключения выполните "unconfig SubscriberRegistry.UpstreamServer".

SubscriberRegistry.db = /var/lib/asterisk/sqlite3dir/sqlite3.db - Расположение базы данных sqlite3, содержащей реестр подписчиков.

TRX.IP = 127.0.0.1 - IP-адресс приемопередатчика

TRX.Port = 5700 - IP-порт приемопередатчика

TRX.RadioFrequencyOffset = 128 - Точная настройка для основных частот приемопередатчика. Примерно 170 Гц / шаг. Устанавливается на заводе. Не настраивайте без правильной калибровки.

TRX.TxAttenOffset - Специфическая для конкретного оборудования регулировка усиления для передатчика, соответствующая усилителю мощности, выраженная как ослабление в дБ. Устанавливается на заводе. Не настраивайте без правильной калибровки. Static.

UMTS.AICH.AICH-PowerOffset = -10 - Смещение мощности AICH в дБ.

UMTS.Best.Effort.BytesPerSec = 60000 — целевая физическая скорость в байтах / с для каналов DCH, фактическая скорость передачи данных составляет примерно одну треть от этого.

UMTS.CellSelect.MaxAlloweddUL-TX-Power = 33 - Максимально допустимая мощность передачи UE в дБм.

UMTS.Downlink.ScramblingCode = 469 - скремблирующий код. Одинаков для всех каналов нисходящей линии связи.

UMTS.Identity.CI = 10 — ID ячейки, 16 бит. Должен быть уникальным.

UMTS.Identity.LAC = 132 - Location area code — код локальной зоны, 16 бит, значения 0xFFxx зарезервированы.

UMTS.Identity.MCC = 001 — Мобильный код страны; Определ в ITU-T E.212. 001 для тестируемых сетей.

UMTS.Identity.MNC = 01 - Код мобильной сети,2 или 3цифры. Назначается национальным регулятором. 01 для тестируемых сетей.

UMTS.Identity.URAI = 100 - UTRAN Идентификатор области регистрации, 16 бит.

UMTS.PCPICHUsageForChannelEst ,1 ,0,0, 1=enabled, 0=disabled — флаг для указания того, что UE должен использовать PCPICH для оценки канала.

UMTS.PICH.PICH-PowerOffset = -10 - Смещение мощности PICH в дБ.

UMTS.PRACH.SF 32 - Фактор распространения PRACH. Корректные значения: 32, 64, 128 and 256.

UMTS.PRACH.ScramblingCode = 0 - код скремблирования для пакетов PRACH.

UMTS.PRACH.Signature = 13 - Последовательность, используемая для доступа PRACH.

UMTS.PRACH.Subchannel = 1 - Подканал PRACH.

UMTS.RLC.TransmissionBufferSize = 1000000 - Размер буфера в байтах для уровня передачи RLC.

UMTS.Radio.ARFCNs = 1 - Число используемых ARFCN. Набор ARFCN будет C0, C0 + 2, C0 + 4 и т.д.

UMTS.Radio.Band = 900 - Рабочий диапазон UMTS. Допустимые значения: 850, 900, 1700, 1800, 1900 и 2100. Для большинства моделей Range это значение определяется аппаратным обеспечением и не должно изменяться.

UMTS.Radio.C0 = 3050 - UARFCN. Диапазон действительных значений зависит от выбранной рабочей полосы.

UMTS.Radio.PowerManager.MaxAttenDB = 10 - Максимальный уровень ослабления передатчика в дБ по полной шкале на выходе D / A. Это устанавливает минимальный уровень выходной мощности в контуре управления выходной мощностью.

UMTS.Radio.PowerManager.MinAttenDB = 0 - Минимальный уровень ослабления передатчика, в дБ по полной шкале на выходе D / A. Это устанавливает максимальный уровень выходной мощности в контуре управления выходной мощностью.

UMTS.Radio.PowerManager.NumSamples = 10 - Количество сэмплов, усредненных контуром управления выходной мощностью.

UMTS.Radio.PowerManager.Period = 6000 - Контрольный цикл управляющего контура управления генератором, в миллисекундах.

UMTS.Radio.PowerManager.SamplePeriod ,2000 Период выборки для контура управления выходной мощностью в миллисекундах.

UMTS.Radio.PowerManager.TargetT3122 = 5000 - Целевое значение для T3122, таймер задержки произвольного доступа, для контура управления мощностью.

UMTS.Radio.RxGain ,57 ,1,0, Настройка усиления приемника в дБ. Идеальное значение определяется аппаратным обеспечением. Этот параметр базы данных является статическим, но коэффициент усиления приемника может быть изменен в реальном времени с помощью команды в CLI rxgain.

UMTS.SCCPCH.SF = 64 - Фактор распространения SCCPCH. Допустимые значения: 4, 8, 16, 32, 64, 128 и 256.

UMTS.SCCPCH.SpreadingCode = 2 - Код распространения для пакетов SCCPCH.

UMTS.SRNC_ID = 0 - RNC ID.

UMTS.Timer.T3212 = 30 - Таймер регистрации T3212 период в минутах. Установите значение 0, чтобы отключить периодическую регистрацию. Должно быть меньше регистрационного периода SIP.

UMTS.Timers.Inactivity.Delete = 300 - В секундах период бездействия до UE в режиме ожидания очищается от активного списка.

UMTS.Timers.Inactivity.Release ,180 ,0,0, В секундах, период бездействия UE в режиме CELL_PCH, потом освобождается. Не используется.

UMTS.Uplink.ScramblingCode = 543 - Базовый индекс для кодов скремблирования DCH, присвоенных UE. Допустимые значения: от 0 до 2 ^ 31.

UMTS.UseTurboCodes = 1 - 1=включено, 0=выключено — включение турбокодов.


 Заключение

В ходе выполнения данного курсового проекта была подготовлена виртуальная машина с ОС Xubuntu 18.04, собран и настроен проект OpenBTS-UMTS. Были исправлены ошибки в исходном коде, которые не позволяли собрать проект в том состоянии, в котором он находится в официальном репозитории. Кроме того был написан скрипт, скачивающий необходимые пакеты и библиотеки, что ускорило процесс настройки. Результаты выложены на сервис хостинга кода Github. В связи с затратой отведенного под выполнение курсового проекта времени на поиск и исправление ошибок в исходном коде, препятствовавших сборке проекта, стенд не был протестирован с подключенным SDR USRP N210.

Адрес официального проекта:

https://github.com/RangeNetworks/OpenBTS-UMTS/

Адрес ответвления с исправлениями ошибок:

https://github.com/KonstantinZavertkin/OpenBTS-UMTS/

Сравнение исходного кода с официального проекта и представленного в ходе работы исправленного варианта:

https://github.com/RangeNetworks/OpenBTS-UMTS/compare/master...KonstantinZavertkin:master/