BLE L2CAP генерация кадров и декодирование

В этом примере показано, как сгенерировать и декодировать системы координат Bluetooth ® Low Energy L2CAP с помощью библиотеки Communications Toolbox™ для протокола Bluetooth ®.

Фон

Спецификация ядра Bluetooth [1] включает версию Low Energy (LE) для низкоскоростных беспроводных персональных сетей, которая упоминается как Bluetooth Low Energy (BLE) или Bluetooth Smart. Стек BLE состоит из: Generic Attribute Profile (GATT), ATT, SMP, L2CAP, канального уровня и физического уровня. BLE был добавлен к стандарту для устройств с низким энергопотреблением, генерирующих небольшие объемы данных, таких как оповещения об уведомлениях, используемые в таких приложениях, как автоматизация дома, здравоохранение, фитнес и Интернет вещей (IoT).

Слой L2CAP в BLE соответствует более высокому подслою, то есть логическому управлению ссылкой (LLC) слоя ссылки передачи данных в образце модели OSI. Это L2CAP выше PHY и канального слоя BLE. Спецификация BLE оптимизировала и упростила L2CAP по сравнению с классическим Bluetooth.

L2CAP в BLE отвечает за: (i) установление логического соединения (ii) мультиплексирование протокола (iii) сегментацию и повторную сборку (iv) управление потоком по 'динамическому' L2CAP каналу.

L2CAP слоя добавляет L2CAP основной заголовок к полезной нагрузке более высокого уровня и передает Данные Protocol Ссылки Unit (PDU) к Слою под ним.

L2CAP системы координат

L2CAP системы координат состоят из двух подкатегорий: Системы координат данных и системы координат сигнализации. В этих двух категориях систем координат существуют различные типы систем координат. Системы координат данных снова подразделяются на B-кадр (основная информационная система координат) и LE-кадр (информационную систему координат с низкой энергией). Каждый тип системы координат имеет свой формат.

Идентификатор канала (CID) является локальным именем, представляющим конечную точку логического канала на устройстве. Для протоколов, таких как ATT и SMP, эти каналы фиксируются Bluetooth Special Interest Group (SIG). Для профилей конкретного приложения, таких как Межсетевые протоколы Support Profile (IPSP) и профиль передачи объектов (OTP), эти каналы динамически распределяются.

Системы координат сигнализации используются с фиксированным логическим каналом, называемым сигнальным каналом ('0005'), и используются для логического установления соединения между одноранговыми устройствами с помощью механизма управления потоком, основанного на кредитовании LE. Эти системы координат сигнализации также используются для обновления параметров соединения (Slave latency, Connection timeout, Minimum интервал и Maximum интервал), когда процедура запроса параметров соединения не поддерживается на уровне ссылок.

Системы координат данных (B-кадры и LE-кадры) несут полезную нагрузку верхнего уровня как 'Information Payload' в его формате системы координат. B-кадры используются для передачи фиксированных каналов (ATT и SMP с фиксированными логическими каналами '0004' и '0006' соответственно) полезной нагрузки. LE-кадры используются для переноса полезной нагрузки через динамически созданные логические каналы для профилей конкретного приложения, таких как IPSP и OTP.

Этот пример иллюстрирует генерацию и декодирование следующих систем координат. Список других поддерживаемых систем координат сигнализации см. в CommandType свойство bleL2CAPFrameConfig объект.

1. Кредит управления потоком: Эта система координат сигнализации отправляется, чтобы создать и сконфигурировать L2CAP логический канал между двумя устройствами.

2. B-кадры по фиксированным каналам (ATT, SMP и т.д.): Эта система координат используется для переноса полезной нагрузки фиксированных каналов в основном режиме L2CAP.

3. LE-кадры по динамическим каналам (такие профили, как IPSP, OTP и т.д.): Эта система координат используется для переноса полезной нагрузки динамических каналов в режиме управления потоком на основе кредитования LE.

Проверка на установку пакета поддержки

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'
% support package is installed or not.
commSupportPackageCheck('BLUETOOTH');

L2CAP систем координат Генерации

Можно использовать bleL2CAPFrame функция для генерации L2CAP системы координат. Эта функция принимает объект строения bleL2CAPFrameConfig. Этот объект конфигурирует поля, необходимые для генерации L2CAP системы координат.

Генерация системы координат сигнализации

Чтобы сгенерировать систему координат сигнализации, создайте bleL2CAPFrameConfig объект с ChannelIdentifier установлено на '0005'.

cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0005');

Сконфигурируйте поля:

% Command type
cfgL2CAP.CommandType = 'Flow control credit';
% Source channel identifier
cfgL2CAP.SourceChannelIdentifier = '0041';
% LE credits
cfgL2CAP.Credits = 25
cfgL2CAP = 

  bleL2CAPFrameConfig with properties:

          ChannelIdentifier: '0005'
                CommandType: 'Flow control credit'
           SignalIdentifier: '01'
    SourceChannelIdentifier: '0041'
                    Credits: 25

Сгенерируйте команду 'Flow control credit'.

sigFrame = bleL2CAPFrame(cfgL2CAP);

Генерация B-кадра

Чтобы сгенерировать B-кадр (несущий ATT PDU), создайте bleL2CAPFrameConfig объект с ChannelIdentifier установлено на '0004' (идентификатор канала ATT).

cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0004')
cfgL2CAP = 

  bleL2CAPFrameConfig with properties:

    ChannelIdentifier: '0004'

B-кадр используется для передачи полезной нагрузки с верхнего уровня ATT. 5-байтовый блок ATT PDU используется в качестве полезной нагрузки в этом примере.

payload = ['04';'01';'00';'FF';'FF'];

Сгенерируйте L2CAP B-кадр с помощью полезной нагрузки и строения.

bFrame = bleL2CAPFrame(cfgL2CAP, payload);

Генерация LE-кадров

Чтобы сгенерировать LE-кадр, создайте bleL2CAPFrameConfig объект с ChannelIdentifier установлено на '0035'.

cfgL2CAP = bleL2CAPFrameConfig('ChannelIdentifier', '0035')
cfgL2CAP = 

  bleL2CAPFrameConfig with properties:

    ChannelIdentifier: '0035'

LE-кадр используется для передачи полезной нагрузки динамических каналов. В этом примере используется 2-байтовая полезная нагрузка.

payload = ['01';'02'];

Сгенерируйте L2CAP LE-кадр с помощью полезной нагрузки и строения.

leFrame = bleL2CAPFrame(cfgL2CAP, payload);

Декодирование L2CAP систем координат

Можно использовать bleL2CAPFrameDecode функция для декодирования L2CAP системы координат. Эта функция выводит следующую информацию:

  1. status: Перечисление типов blePacketDecodeStatus, что указывает, было ли L2CAP декодирование успешным.

  2. cfgL2CAP: Объект строения L2CAP системы координат типа bleL2CAPFrameConfig, который содержит декодированные свойства L2CAP.

Эта функция принимает в качестве входного сигнала L2CAP систему координат BLE.

Декодирование системы координат сигнализации

[sigFrameDecodeStatus, cfgL2CAP] = bleL2CAPFrameDecode(sigFrame);

% Observe the outputs

% Decoding is successful
if strcmp(sigFrameDecodeStatus, 'Success')
    fprintf('L2CAP decoding status is: %s\n\n', sigFrameDecodeStatus);
    fprintf('Received L2CAP signaling frame configuration is:\n');
    cfgL2CAP
% Decoding failed
else
    fprintf('L2CAP decoding status is: %s\n', sigFrameDecodeStatus);
end
L2CAP decoding status is: Success

Received L2CAP signaling frame configuration is:

cfgL2CAP = 

  bleL2CAPFrameConfig with properties:

          ChannelIdentifier: '0005'
                CommandType: 'Flow control credit'
           SignalIdentifier: '01'
    SourceChannelIdentifier: '0041'
                    Credits: 25

Декодирование B-кадра

[bFrameDecodeStatus, cfgL2CAP, payload] = bleL2CAPFrameDecode(bFrame);

% Observe the outputs

% Decoding is successful
if strcmp(bFrameDecodeStatus, 'Success')
    fprintf('L2CAP decoding status is: %s\n\n', bFrameDecodeStatus);
    fprintf('Received L2CAP B-frame configuration is:\n');
    cfgL2CAP
    fprintf('Payload carried by L2CAP B-frame is:\n');
    payload
% Decoding failed
else
    fprintf('L2CAP decoding status is: %s\n', bFrameDecodeStatus);
end
L2CAP decoding status is: Success

Received L2CAP B-frame configuration is:

cfgL2CAP = 

  bleL2CAPFrameConfig with properties:

    ChannelIdentifier: '0004'

Payload carried by L2CAP B-frame is:

payload =

  5x2 char array

    '04'
    '01'
    '00'
    'FF'
    'FF'

Декодирование LE-кадра

[leFrameDecodeStatus, cfgL2CAP, payload] = bleL2CAPFrameDecode(leFrame);

% Observe the outputs

% Decoding is successful
if strcmp(leFrameDecodeStatus, 'Success')
    fprintf('L2CAP decoding status is: %s\n\n', leFrameDecodeStatus);
    fprintf('Received L2CAP LE-frame configuration is:\n');
    cfgL2CAP
    fprintf('Payload carried by L2CAP LE-frame is:\n');
    payload
% Decoding failed
else
    fprintf('L2CAP decoding status is: %s\n', leFrameDecodeStatus);
end
L2CAP decoding status is: Success

Received L2CAP LE-frame configuration is:

cfgL2CAP = 

  bleL2CAPFrameConfig with properties:

    ChannelIdentifier: '0035'

Payload carried by L2CAP LE-frame is:

payload =

  2x2 char array

    '01'
    '02'

Экспорт в файл PCAP

Этот пример использует blePCAPWriter объект для экспорта сгенерированных PDU в файл с расширением.pcap или расширением.pcapng. Чтобы проанализировать и визуализировать этот файл, используйте анализатор пакетов третьей части, такой как Wireshark.

Формат PCAP ожидает, что L2CAP система координат будет заключен в пакет канального слоя, а также ожидает, что сгенерированный пакет будет подготовлен с адресом доступа. Функция помощника helperBLEPrependAccessAddress подготавливает адрес доступа к сгенерированному пакету. Следующие команды генерируют файл PCAP для систем координат L2CAP, сгенерированных в этом примере.

% Create a cell array of L2CAP frames
l2capFrames = {sigFrame, bFrame, leFrame};
llPackets = cell(1, numel(l2capFrames));
for i = 1:numel(llPackets)
    % Add Link Layer header to the generated L2CAP frame
    cfgLLData = bleLLDataChannelPDUConfig('LLID', 'Data (start fragment/complete)');
    llDataPDU = bleLLDataChannelPDU(cfgLLData, l2capFrames{i});
    % Prepend access address. A 4-byte access address is used in this example
    llPackets{i} = helperBLEPrependAccessAddress(llDataPDU, '01234567');
end

Экспорт в файл PCAP

Создайте объект типа blePCAPWriter и укажите имя файла захвата пакетов.

% Create the BLE PCAP Writer file object
pcapObj = blePCAPWriter("FileName", "BLEL2CAPFrames");

Используйте write функция для записи всех блоков PDU BLE LL в файл PCAP. Постоянная timestamp задает время захвата PDU. В этом примере время захвата одинаково для всех PDU.

timestamp = 124800; % timestamp (in microseconds)

% Write all the LL PDUs to the PCAP file
for idx = 1:numel(llPackets)
    write(pcapObj, llPackets{idx}, timestamp, "PacketFormat", "bits");
end

% Clear the object
clear pcapObj;

Визуализация сгенерированных систем координат L2CAP

Можно открыть файл PCAP, содержащий сгенерированные системы координат L2CAP, в анализаторе пакетов. Системы координат L2CAP, декодированные анализатором пакетов, соответствуют совместимым со стандартом системам координат L2CAP, сгенерированным библиотекой Communications Toolbox™ для протокола Bluetooth. Захваченный анализ систем координат L2CAP показан ниже.

  • Сигнализация системы координат (кредит управления потоком)

  • B-кадр (несущий ATT PDU)

  • LE-кадр (несущий динамическую полезную нагрузку канала)

Заключение

Этот пример продемонстрировал генерацию и декодирование L2CAP систем координат, указанных в стандарте Bluetooth [1]. Можно использовать анализатор пакетов, чтобы просмотреть сгенерированные системы координат L2CAP.

Приложение

В примере используются следующие функции:

  • bleL2CAPFrameConfig: Создайте объект строения для L2CAP системы координат BLE

  • bleL2CAPFrame: BLE L2CAP генерация системы координат

  • bleL2CAPFrameDecode: BLE L2CAP система координат

  • blePCAPWriter: Создайте BLE PCAP или PCAPNG файл средства записи объект

В примере используется этот вспомогательный модуль:

Избранная библиография

  1. Веб-сайт Bluetooth ® Technology. Bluetooth Technology Website | Официальный сайт Bluetooth Technology. Доступ к 8 июля 2020 года. https://www.bluetooth.com/.

  2. «Разработка/LibpcapFileFormat - Wireshark Wiki». Доступ к 8 июля 2020 года. https://wiki.wireshark.org/Development/LibpcapFileFormat.

  3. Группа, The Tcpdump. «Общий репозиторий Tcpdump/Libpcap». Доступ к 8 июля 2020 года. https://www.tcpdump.org.

Похожие темы