Google is committed to advancing racial equity for Black communities. See how.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Инструменты OpenWeave

jinja-placeholder-0 /index.md "> Посмотреть источник на GitHub

OpenWeave включает в себя набор инструментов командной строки для настройки, управления и тестирования развертываний OpenWeave.

Инструменты для плетения

Цель weave-tools создает архив tar с выбранными инструментами командной строки Weave для распространения. Включает в себя следующие инструменты:

Инструмент Описание Автономное расположение
gen-qr-code Создать QR-код /src/tools/misc
mock-device Универсальный симулятор Weave устройства /src/test-apps
weave Генерация и управление сертификатами Weave /src/tools/weave
weave-device-descriptor Кодирование и декодирование строк дескриптора устройства Weave для сопряжения QR-кодов /src/test-apps
weave-device-mgr Управление процессом сопряжения устройств /src/device-manager/python
weave-heartbeat Отправлять и получать Heartbeat сообщения профиля /src/test-apps
weave-key-export Отправить ключевые запросы на экспорт /src/test-apps
weave-ping Отправлять и получать сообщения профиля Echo /src/test-apps

Чтобы построить цель:

  1. Установите все необходимые условия для сборки .
  2. Настройте OpenWeave без поддержки BlueZ:
     cd <path-to-openweave-core>
    ./configure --without-bluez 
  3. Сделайте цель weave-tools :
     make weave-tools 
  4. Проверьте корневой openweave-core наличие архива tar:
     ls weave*
        weave-tools-x86_64-unknown-linux-gnu-4.0d.tar.gz

ген-ор-код

Для инструмента gen-qr-code требуется модуль Python qrcode . Используйте pip для установки:

 pip install --user qrcode

Используйте gen-qr-code для генерации QR-кода в целях сопряжения устройств. Входные данные для инструмента должны находиться в локальном файле. Например, чтобы создать QR-код, который отправляет пользователя на https://www.google.com :

  1. Создайте файл со строкой для QR-кода:
     echo "https://www.google.com" >> ~/ow_qrcode 
  2. Сгенерируйте 64x64 QR-код этой строки:
     ./gen-qr-code -v 1 -s 64 < ~/ow_qrcode 
  3. Чтобы сохранить QR-код в виде изображения, укажите выходной файл:
     ./gen-qr-code -v 1 -s 64 < ~/ow_qrcode > ~/ow_qrcode.png
    Use the weave-device-descriptor tool to generate the device descriptor string
    for use in a Weave device's pairing QR code.

макет устройства

Инструмент mock-device имитирует общий узел Weave. Другие инструменты и сценарии тестирования используют этот инструмент для инкапсуляции функциональности Weave. Создание пробных устройств на отдельных узлах Happy для проверки функциональности Weave в моделируемой топологии.

Например, чтобы запустить прослушивающее устройство Weave, прослушивающее IPv6-адрес fd00:0:1:1::1 , сначала добавьте этот IPv6-адрес в интерфейс lo (loopback):

 sudo ifconfig lo add fd00:0:1:1::1/64

Затем запустите макет устройства Weave:

 ./mock-device -a fd00:0:1:1::1
WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::1]:11095
WEAVE:ML: Listening on IPv6 TCP endpoint
WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
WEAVE:IN: IPV6_PKTINFO: 92
WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::1]:11095 (lo)
WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
WEAVE:ML: Listening on IPv6 multicast receive endpoint
WEAVE:EM: Cannot listen for BLE connections, null BleLayer
Weave Node Configuration:
  Fabric Id: 1
  Subnet Number: 1
  Node Id: 1
WEAVE:SD: init()
Weave Node Configuration:
  Fabric Id: 1
  Subnet Number: 1
  Node Id: 1
  Listening Addresses:
      fd00:0:1:1::1 (ipv6)
  Pairing Server: fd00:0:1:1::1
Mock Time Sync is disabled and not initialized
Mock System Time Offset initialized to: 3.213773 sec
Listening for requests...
Weave Node ready to service events; PID: 256904; PPID: 251571

Используйте флаг --help для просмотра всех доступных параметров конфигурации.

переплетения-устройства-дескриптор

Инструмент weave-device-descriptor кодирует или декодирует строку дескриптора устройства. Эти строки содержат идентификационную информацию для устройства, которое закодировано в его QR-код сопряжения переплетения. Используйте флаг --help с параметрами encode или decode для получения дополнительной информации.

 ./weave-device-descriptor encode --help
./weave-device-descriptor decode --help

шифровать

Например, чтобы кодировать строку дескриптора устройства со следующей идентифицирующей информацией, используйте соответствующие флаги и значения:

поле Флаг Стоимость
ID поставщика -V 1
Код товара -p 1
Номер редакции продукта -r 2
Серийный номер -s 18B4300000000004
Дата производства -m 2018/05/02
802.15.4 MAC-адрес (поток, BLE) -8 000D6F000DA80466
Код сопряжения -P AB713H
 ./weave-device-descriptor encode -V 1 -p 1 -r 2 -s 18B4300000000004 -m 2018/05/02 \
                                   -8 000D6F000DA80466 -w 5CF370800E77 -P AB713H
1V:1$P:1$R:2$D:180502$S:18B4300000000004$L:000D6F000DA80466$W:5CF370800E77$C:AB713H$

Используйте эту выходную строку с инструментом gen-qr-code для генерации QR-кода.

раскодировать

Используйте опцию decode для декодирования элемента строки дескриптора устройства. Элемент для декодирования имеет следующий синтаксис:

1 + <device-descriptor-element> + $

Например, чтобы декодировать элемент дескриптора устройства W:5CF370800E77 :

 ./weave-device-descriptor decode 1W:5CF370800E77$
Primary WiFi MAC: 5C:F3:70:80:0E:77

переплетения-сердцебиение

Используйте weave-heartbeat для отправки и получения сообщений профиля Heartbeat между двумя узлами Weave. Сердцебиение предоставляет средство, чтобы указать живучесть одного узла другим узлам в сети или проверить, остается ли узел подключенным к матрице.

Успешное сердцебиение требует, чтобы один узел действовал как сервер (прослушивал и отвечал на сердцебиение), а один узел действовал как клиент (отправлял сердцебиение).

Протестируйте инструмент weave-heartbeat , используя петлевой интерфейс для имитации двух узлов:

  1. Добавьте адреса IPv6, которые будут использоваться для каждого узла Heartbeat, в интерфейс lo (loopback):
     sudo ifconfig lo add fd00:0:1:1::1/64
    sudo ifconfig lo add fd00:0:1:1::2/64 
  2. Запустите сервер Heartbeat по fd00:0:1:1::1 и присвойте ему node-id 1:

     ./weave-heartbeat --node-addr fd00:0:1:1::1 --node-id 1 --listen
        WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::1]:11095
        WEAVE:ML: Listening on IPv6 TCP endpoint
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::1]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 1
          Listening Addresses:
              fd00:0:1:1::1 (ipv6)
        Listening for Heartbeats...
        Weave Node ready to service events; PID: 170883; PPID: 170418

  3. Откройте второе окно терминала и запустите клиент Heartbeat на IPv6-адресе fd00:0:1:1::2 с node-id 2 и IPv6-адресом первого узла в качестве места назначения для Heartbeat:

     ./weave-heartbeat --node-addr fd00:0:1:1::2 --node-id 2 --dest-addr fd00:0:1:1::1 1
        WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::2]:11095
        WEAVE:ML: Listening on IPv6 TCP endpoint
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::2]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        WEAVE:EM: Binding 0 : Allocated
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 2
          Listening Addresses:
              fd00:0:1:1::2 (ipv6)
        Sending Heartbeats via UDP to node 1 (fd00:0:1:1::1) every 1000 ms
        Weave Node ready to service events; PID: 170932; PPID: 170608
        WEAVE:EM: Binding 0 : Configuring
        WEAVE:EM: Binding 0 : Preparing
        WEAVE:EM: Binding 0 : Ready, peer 1 ([fd00:0:1:1::1]:11095) via UDP

  4. После успешного подключения узел 2 отправляет пульс на узел 1, а узел 1 регистрирует пульс, полученный от узла 2:

     Node 1
    <code></code>
    WEAVE:EM: Msg rcvd 00000013:1 1 0000000000000002 0000 C993 0 MsgId:1380A259
    WEAVE:EM: ec id: 1, AppState: 0xb8e89790
    Heartbeat from node 2 (fd00:0:1:1::2): state=1, err=No Error
    ### Node 2
    <code></code>
    WEAVE:EM: ec id: 1, AppState: 0x0
    WEAVE:EM: Msg sent 00000013:1 1 0000000000000001 0000 C993 0 MsgId:1380A259
    Heartbeat sent to node 1: state=1
     

Сердцебиение с макетом устройства

weave-heartbeat создает mock-device как для сервера, так и для клиента. Те же функциональные возможности Heartbeat могут быть продемонстрированы с помощью mock-device вместо первого сервера Heartbeat с weave-heartbeat :

 ./mock-device -a fd00:0:1:1::1

переплетения-пинг

Используйте weave-ping для отправки и получения сообщений профиля Echo между двумя узлами Weave. Полезная нагрузка Echo состоит из произвольных данных, предоставленных запрашивающим узлом, и ожидается, что они будут дословно отражены в ответе. Echo предоставляет средства для проверки сетевого подключения и задержки.

Успешное эхо требует, чтобы один узел действовал как сервер (слушал и отвечал на запрос эха), а один узел действовал как клиент (отправлял эхо-запрос).

Протестируйте инструмент weave-ping , используя петлевой интерфейс для имитации двух узлов:

  1. Добавьте адреса IPv6, которые будут использоваться для каждого узла Echo, в интерфейс lo (loopback):
     sudo ifconfig lo add fd00:0:1:1::1/64
    sudo ifconfig lo add fd00:0:1:1::2/64 
  2. Запустите сервер Echo по fd00:0:1:1::1 , назначив ему node-id 1:

     ./weave-ping --node-addr fd00:0:1:1::1 --node-id 1 --listen
        WEAVE:ML: Binding IPv6 TCP listen endpoint to [fd00:0:1:1::1]:11095
        WEAVE:ML: Listening on IPv6 TCP endpoint
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::1]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        WEAVE:SD: init()
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 1
          Listening Addresses:
              fd00:0:1:1::1 (ipv6)
        Listening for Echo requests...
        Iteration 0
        Weave Node ready to service events; PID: 120927; PPID: 113768
        WEAVE:ECH: Listening...

  3. Откройте второе окно терминала и запустите клиент Echo на IPv6-адресе fd00:0:1:1::2 с node-id 2 и IPv6-адресом первого узла в качестве места назначения для эхо-запроса:

     ./weave-ping --node-addr fd00:0:1:1::2 --node-id 2 --dest-addr fd00:0:1:1::1 1
        WEAVE:ML: Binding general purpose IPv4 UDP endpoint to [::]:11095
        WEAVE:IN: IPV6_PKTINFO: 92
        WEAVE:ML: Binding general purpose IPv6 UDP endpoint to [fd00:0:1:1::2]:11095 (lo)
        WEAVE:ML: Listening on general purpose IPv6 UDP endpoint
        WEAVE:ML: Binding IPv6 multicast receive endpoint to [ff02::1]:11095 (lo)
        WEAVE:ML: Listening on IPv6 multicast receive endpoint
        WEAVE:EM: Cannot listen for BLE connections, null BleLayer
        WEAVE:SD: init()
        Weave Node Configuration:
          Fabric Id: 1
          Subnet Number: 1
          Node Id: 2
          Listening Addresses:
              fd00:0:1:1::2 (ipv6)
        Sending Echo requests to node 1 at fd00:0:1:1::1
        Iteration 0
        Weave Node ready to service events; PID: 121125; PPID: 121017
        WEAVE:ML: Con start 9A00 0000000000000001 0001
        WEAVE:ML: Con DNS complete 9A00 0
        WEAVE:ML: TCP con start 9A00 fd00:0:1:1::1 11095
        WEAVE:ML: TCP con complete 9A00 0
        WEAVE:ML: Con complete 9A00
        Connection established to node 1 (fd00:0:1:1::1)

  4. После успешного подключения узел 1 регистрирует эхо-запросы от узла 2, а узел 2 регистрирует эхо-ответы от узла 1:

     Node 1
    <code></code>
    WEAVE:ML: Con rcvd AA00 fd00:0:1:1::2 41675
    Connection received from node 2 (fd00:0:1:1::2)
    WEAVE:EM: Msg rcvd 00000001:1 15 0000000000000002 AA00 B8A5 0 MsgId:00000000
    WEAVE:EM: ec id: 1, AppState: 0xfce0ca80
    Echo Request from node 2 (fd00:0:1:1::2): len=15 ... sending response.
    WEAVE:EM: Msg sent 00000001:2 15 0000000000000002 AA00 B8A5 0 MsgId:00000000
    WEAVE:EM: Msg rcvd 00000001:1 15 0000000000000002 AA00 B8A6 0 MsgId:00000001
    ### Node 2
    <code></code>
    WEAVE:EM: ec id: 1, AppState: 0xd239baa0
    WEAVE:EM: Msg sent 00000001:1 15 0000000000000001 9A00 B8A5 0 MsgId:00000000
    WEAVE:EM: Msg rcvd 00000001:2 15 0000000000000001 9A00 B8A5 0 MsgId:00000000
    Echo Response from node 1 (fd00:0:1:1::1): 1/1(100.00%) len=15 time=0.228ms
     

Эхо с макетом устройства

weave-ping создает mock-device как для сервера, так и для клиента. Же функциональность Эхо может быть продемонстрирована с помощью mock-device вместо первого weave-ping Echo сервер:

 ./mock-device -a fd00:0:1:1::1