OpenLTE — это реализация спецификаций 3GPP LTE с открытым исходным кодом.
Это клон проекта https://sourceforge.net/p/openlte.
OpenLTE не только требует огромного количества вычислительной мощности, но и очень низкой задержки из-за необходимости передавать/получать радиокадр каждые 1 мс. Если есть какая-либо задержка в обработке, система не сможет ответить вовремя и потеряет образцы. Поэтому рекомендуется отключить любые функции процессора и/или системы (в основном в BIOS), которые могут вызвать какие-либо задержки или замедлить так называемое время переключения контекста. Intel SpeedStep, глубокие и более глубокие состояния сна и т. д. должны быть отключены. Особенно при настройке с высокой пропускной способностью (10, 15 и 20 МГц) рекомендуется отключать графический интерфейс на Linux. Существует также версия ядра Linux с низкой задержкой, но на данный момент нет абсолютных доказательств того, что она действительно помогает с OpenLTE.
Для работы с радио Ettus (B200, B210) вам потребуется последняя версия драйвера UHD помимо GNURadio:
sudo apt-get install libuhd-dev libuhd003 uhd-host
Рекомендуется не использовать бинарную версию, а скомпилировать код с UHD следующим образом:
Как пользователь без прав root, выполните следующую команду:
mkdir gnuradio
cd gnurdio
wget http://www.sbrac.org/files/build-gnuradio
chmod a+x build-gnuradio
./build-gnuradio -v
Скрипт установки запросит пароль root. Вся процедура может занять до 3 часов! Он загрузит GNURadio, UHD и все необходимые зависимости.
Проверьте связь с SDR Ettus: Подключите SDR к одному из интерфейсов USB3 и запустите:
uhd_usrp_probe
Программное обеспечение загрузит код FPGA на ваше устройство и запросит его. Если вы всё сделали правильно, вы должны увидеть что-то похожее:
linux; GNU C++ version 4.8.2; Boost_105400; UHD_003.008.001-42-g8c87a524
-- Operating over USB 3.
-- Initialize CODEC control...
-- Initialize Radio control...
-- Performing register loopback test... pass
-- Performing CODEC loopback test... pass
-- Asking for clock rate 32.000000 MHz...
-- Actually got clock rate 32.000000 MHz.
-- Performing timer loopback test... pass
-- Setting master clock rate selection to 'automatic'.
_____________________________________________________
/
| Device: B-Series Device
| _____________________________________________________
| /
| | Mboard: B200
| | revision: 4
| | product: 1
| | serial: F54xxx
| | FW Version: 7.0
| | FPGA Version: 4.0
| |
| | Time sources: none, internal, external, gpsdo
| | Clock sources: internal, external, gpsdo
| | Sensors: ref_locked
| | _____________________________________________________
| | /
| | | RX DSP: 0
| | | Freq range: -16.000 to 16.000 MHz
| | _____________________________________________________
| | /
| | |
**Примечание:** В тексте запроса присутствуют фрагменты кода, которые не удалось перевести. Это связано с тем, что некоторые команды и функции являются специфическими для среды разработки и не имеют прямых аналогов в русском языке. **Установка OpenLTE**
**Зависимости:**
`sudo apt-get install libpolarssl-dev`
**Сборка и установка:**
mkdir build cd build && cmake .. make
(Необязательно):
`sudo make install`
**Запуск OpenLTE eNodeB**
**Первое окно терминала:**
Не закрывайте это окно во время работы!
`LTE_fdd_enodeb`
Вывод:
linux; GNU C++ version 4.8.2; Boost_105400; UHD_003.008.001-42-g8c87a524 *** LTE FDD ENB *** Пожалуйста, подключитесь к порту управления 30000
**Второе окно терминала:**
Это интерфейс управления eNodeB.
`telnet 127.0.0.1 30000`
Вывод:
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. *** LTE FDD ENB *** Введите help для просмотра списка команд
**Третье окно терминала (необязательно):**
Эта команда предоставит сообщения отладочных журналов.
`telnet 127.0.0.1 30001`
**Конфигурация Tx в OpenLTE:**
write band 20 write bandwidth 5 write dl_earfcn 6300 write mcc 214 write mnc 12 write n_ant 1 write rx_gain 30 write tx_gain 86
**Настройка Wireshark:**
*Правка* → *Настройки* → *Протоколы* → *DLT_USER* → *Правка…*
Нажмите «+» → *DLT = Пользователь 0* и *Протокол полезной нагрузки = mac-lte-framed*
**Программирование собственной USIM-карты**
### Предварительные требования
`sudo apt-get install python-pip`
sudo python -m pip install serial pycrypto
### Провайдеры
**sysmoUSIM-SJS1 4FF/nano SIM + USIM Card (10-pack):**
[http://shop.sysmocom.de/products/sysmousim-sjs1-4ff](http://shop.sysmocom.de/products/sysmousim-sjs1-4ff)
### Получите программу для SIM-карт
Вам нужен программатор для SIM-карт, который совместим с приложением PCSC на Linux. Чтобы иметь более или менее полный список совместимых устройств, посетите эту страницу:
[http://pcsclite.alioth.debian.org/ccid/supported.html](http://pcsclite.alioth.debian.org/ccid/supported.html)
Не забудьте, что вам нужен программатор с поддержкой APDU. Мы лично используем **SCM Microsystems Inc. SCR 3310**, вы можете найти его и многие из перечисленных выше на Ebay.
### Установите программное обеспечение (PySIM, PCSCd, Pyscard)
**Сначала установите зависимости:**
`sudo apt-get install pcscd pcsc-tools libccid libpcsclite-dev`
Подключите считыватель SIM-карт, вставьте программируемую SIM-карту и проверьте подключение, выполнив следующую команду:
`sudo pcsc_scan`
Если ваш считыватель и карта распознаны, вы увидите нечто похожее:
PC/SC device scanner V 1.4.22 (c) 2001–2011, Ludovic Rousseau ludovic.rousseau@free.fr Compiled with PC/SC lite version: 1.8.10 Using reader plug'n play mechanism Scanning present readers... 0: OMNIKEY AG CardMan 3121 01 00
Wed Dec 24 14:56:32 2014 Reader 0: OMNIKEY AG CardMan 3121 01 00 Card state: Card inserted, ATR: 3B 9F 95 80 1F C7 80 31 E0 73 FE 21 13 57 12 29
11 02 01 00 00 C2
ATR: 3B 9F 95 80 1F C7 80 31 E0 73 FE 21 13 57 12 29 11 02 01 00 00 C2
+ TS = 3B --> Direct Convention
+ T0 = 9F, Y(1): 1001, K: 15 (historical bytes)
TA(1) = 95 --> Fi=512, Di=16, 32 cycles/ETU
125000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 156250 bits/s
TD(1) = 80 --> Y(i+1) = 1000, Protocol T = 0
-----
TD(2) = 1F --> Y(i+1) = 0001, Protocol T = 15 - Global interface bytes following
-----
TA(3) = C7 --> Clock stop: no preference - Class accepted by the card: (3G) A 5V B 3V C 1.8V
+ Historical bytes: 80 31 E0 73 FE 21 13 57 12 29 11 02 01 00 00
Category indicator byte: 80 (compact TLV data object)
Tag: 3, len: 1 (card service data byte)
Card service data byte: E0
- Application selection: by full DF name
- Application selection: by partial DF name
- BER-TLV data objects available in EF.DIR
- EF.DIR and EF.ATR access services: by GET RECORD(s) command
- Card with MF
Tag: 7, len: 3 (card capabilities)
Selection methods: FE
- DF selection by full DF name
- DF selection by partial DF name
- DF selection by path
- DF selection by file identifier
- Implicit DF selection
- Short EF identifier supported
- Record number supported
Data coding byte: 21
- Behaviour of write functions: proprietary
- Value 'FF' for the first byte of BER-TLV tag fields: invalid
- Data unit in quartets: 2
Command chaining, length fields and logical channels: 13
- Logical channel number assignment: by the card
- Maximum number of logical channels: 4
Tag: 5, len: 7 (card issuer's data)
Card issuer data: 12 29 11 02 01 00 00
+ TCK = C2 (correct checksum)
**Перевод текста на русский язык:**
11 02 01 00 00 С2
ATR: 3В 9Ф 95 80 1Ф С7 80 31 Е0 73 ФЕ 21 13 57 12 29 11 02 01 00 00 С2
+ ТС = 3В —> прямая конвенция
+ Т0 = 9Ф, У(1): 1001, К: 15 (исторические байты)
ТА(1) = 95 —> Фи=512, Ди=16, 32 цикла/ЕТУ
125 000 бит/с при 4 МГц, fМакс для Фи = 5 МГц => 156 250 бит/с
ТД(1) = 80 —> У(i + 1) = 1000, протокол Т = 0
—
ТД(2) = 1Ф —> У(i + 1) = 0001, протокол Т = 15 — глобальные интерфейсные байты следуют
—
ТА(3) = С7 —> остановка часов: нет предпочтений — класс, принятый картой: (3Г) А 5 В Б 3 В В 1,8 В
+ исторические байты: 80 31 Е0 73 ФЕ 21 13 57 12 29 11 02 01 00 00
индикатор категории байт: 80 (компактный объект данных TLV)
тег: 3, длина: 1 (байт данных обслуживания карты)
байт данных обслуживания карты: Е0
- выбор приложения: по полному имени DF
- выбор приложения: по частичному имени DF
- объекты данных BER-TLV доступны в EF.DIR
- услуги доступа EF.DIR и EF.ATR: командой GET RECORD (s)
- карта с MF
тег: 7, длина: 3 (возможности карты)
методы выбора: ФЕ
- выбор DF по полному имени DF
- выбор DF по частичному имени DF
- выбор DF путём
- выбор DF по идентификатору файла
- неявный выбор DF
- поддерживается короткий идентификатор EF
- поддерживается номер записи
байт кодирования данных: 21
- поведение функций записи: проприетарное
- значение «ФФ» для первого байта полей тегов BER-TLV: недействительно
- единица данных в квартетах: 2
цепочка команд, поля длины и логические каналы: 13
- назначение номера логического канала: картой
- максимальное количество логических каналов: 4
тег: 5, длина: 7 (данные эмитента карты)
данные эмитента карты: 12 29 11 02 01 00 00
+ ТКК = С2 (правильная контрольная сумма) not giving the proper `ADM1` pin when you try to program the Sysmo-USIm S1J1 SIMs, вы, вероятно, получите перманентно повреждённую карту!
Теперь давайте установим алгоритм MILENAGE и OP.
`./sysmo-usim-tool.sjs1.py --adm1 ADM1_KEY --set-op LTE_DEFAULT_OP_CODE -T MILENAGE:MILENAGE`
OpenLTE имеет дефолтный OP код, который равен:
`OP=63bfa50ee6523365ff14c1f45f88737d`
Если вы хотите изменить это значение на своё собственное, вам нужно отредактировать `liblte/src/liblte_security.cc` и изменить значение OP (это потребует перекомпиляции OpenLTE, чтобы изменения вступили в силу):
```c
static const uint8 OP[16] = {0x63,0xBF,0xA5,0x0E,0xE6,0x52,0x33,0x65,
0xFF,0x14,0xC1,0xF4,0x5F,0x88,0x73,0x7D};
В этой ветке мы установили значение OP равным:
static const uint8 OP[16] = {0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};
OP=11111111111111111111111111111111
Ссылка: Спецификация алгоритма MILENAGE — 3GPP TS 35.206
Ссылка: Руководство по использованию USIM от Sysmo
Ранее мы создали собственные USIM карты и знаем ключ Ki и IMSI для этих карт.
Теперь нам нужно добавить их в реестр подписчиков.
Запустите LTE_fdd_enodeb
и войдите в интерфейс управления:
telnet 127.0.0.1 30000
Это команды для добавления, удаления и отображения подписчиков:
add_user imsi=<imsi> imei=<imei> k=<k> - Добавляет пользователя в HSS (<imsi> и <imei> состоят из 15 десятичных цифр, а <k> — из 32 шестнадцатеричных цифр)
del_user imsi=<imsi> - Удаляет пользователя из HSS
print_users - Отображает всех пользователей в HSS
Чтобы добавить подписчика, используйте следующую команду [k — это ключ Ki!]:
add_user imsi=901550000123456 imei=864217022123456 k=D360C2591DE1BF61A11014C33D012246
Терминал ответит «ok», если в синтаксисе не было ошибок.
Вы можете отобразить уже добавленных подписчиков с помощью:
print_users
Вы можете удалить ранее добавленного подписчика с помощью:
del_user imsi=901550000123456
Обратите внимание, что первые 3 цифры IMSI — это MCC (или код страны мобильной связи), а две цифры после MCC — это MNC (или код сети мобильной связи). В приведённом выше примере MCC равен 901, а MNC равен 55. Это не обязательно, но очень помогает мобильной станции установить MCC/MNC вашей сети LTE, как указано на запрограммированных SIM-картах. Вы можете изменить значение IMSI на этапе программирования SIM-карты, чтобы оно соответствовало спецификации тестовой сети: MCC=001
и MNC=01
.
Пожалуйста, обратите внимание, что вам потребуется настроить APN на вашем устройстве, чтобы обеспечить успешное подключение к данным. Мы добавим указания о том, как этого добиться, по мере продвижения нашей работы.
Никогда не используйте конфигурацию MCC/MNC коммерческого провайдера!
В папке Test capture
есть запись, совместимая с приложением LTE_fdd_dl_file_scan
. Чтобы использовать эту запись с приёмником octave, используйте следующие команды octave:
fid = fopen("/path/to/LTE_test_file_int8.bin", "r");
iq_vec = fread(fid, inf, "int8");
iq_split_vec = reshape(iq_vec, 2, []);
lte_fdd_dl_receive(iq_split_vec(1,:) + i*iq_split_vec(2,:));
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )