Google is committed to advancing racial equity for Black communities. See how.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Narzędzia OpenWeave

Wyświetl źródło na GitHub

OpenWeave zawiera zestaw narzędzi wiersza poleceń do konfigurowania, zarządzania i testowania wdrożeń OpenWeave.

Buduj narzędzia splotu

Element docelowy weave-tools buduje archiwum tar zawierające wybrane narzędzia wiersza poleceń Weave do dystrybucji. Zawiera następujące narzędzia:

Narzędzie Opis Samodzielna lokalizacja kompilacji
gen-qr-code Wygeneruj kod QR /src/tools/misc
mock-device Symulator urządzenia Generic Weave /src/test-apps
weave Generuj i zarządzaj certyfikatami Weave /src/tools/weave
weave-device-descriptor Kodowanie i dekodowanie ciągów deskryptorów urządzenia Weave do parowania kodów QR /src/test-apps
weave-device-mgr Zarządzaj procesem parowania urządzeń /src/device-manager/python
weave-heartbeat Wysyłaj i odbieraj wiadomości z profilu Heartbeat /src/test-apps
weave-key-export Wyślij kluczowe żądania eksportu /src/test-apps
weave-ping Wysyłaj i odbieraj wiadomości z profilu Echo /src/test-apps

Aby zbudować cel:

  1. Zainstaluj wszystkie wymagania wstępne dotyczące kompilacji .
  2. Skonfiguruj OpenWeave bez obsługi BlueZ:
    cd <path-to-openweave-core>
    ./configure --without-bluez
  3. Make the weave-tools target:
    make weave-tools
  4. Check the root openweave-core directory for the tar archive:
    ls weave*
        weave-tools-x86_64-unknown-linux-gnu-4.0d.tar.gz

gen-qr-code

The gen-qr-code tool requires the Python qrcode module. Use pip to install it:

pip install --user qrcode

Użyj gen-qr-code aby wygenerować kod QR na potrzeby parowania urządzeń. Dane wejściowe narzędzia muszą znajdować się w pliku lokalnym. Na przykład, aby wygenerować kod QR, który odsyła użytkownika do https://www.google.com :

  1. Utwórz plik z ciągiem dla kodu QR:
    echo "https://www.google.com" >> ~/ow_qrcode
  2. Generate a 64x64 QR code of that string:
    ./gen-qr-code -v 1 -s 64 < ~/ow_qrcode
  3. To save the QR code as an image, specify an output file:
    ./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

The mock-device tool simulates a generic Weave node. Other tools and test case scripts use this tool to encapsulate Weave functionality. Instantiate mock devices on individual Happy nodes to test Weave functionality in a simulated topology.

For example, to start a Weave mock device listening on an IPv6 address of fd00:0:1:1::1, first add that IPv6 address to the lo (loopback) interface:

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

Następnie uruchom próbne urządzenie 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

Użyj flagi --help aby wyświetlić wszystkie dostępne opcje konfiguracji.

weave-device-descriptor

Narzędzie weave-device-descriptor koduje lub dekoduje ciąg deskryptora urządzenia. Te ciągi zawierają informacje identyfikujące urządzenie, które jest zakodowane w jego kodzie QR parowania Weave. Aby uzyskać więcej informacji, użyj flagi --help z opcjami encode lub decode .

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

kodować

Na przykład, aby zakodować ciąg deskryptora urządzenia z następującymi informacjami identyfikującymi, użyj odpowiednich flag i wartości:

Pole Flaga Wartość
Identyfikator sprzedawcy -V 1
ID produktu -p 1
Numer wersji produktu -r 2
Numer seryjny -s 18B4300000000004
Data produkcji -m 2018/05/02
Adres MAC 802.15.4 (wątek, BLE) -8 000D6F000DA80466
Kod parowania -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$

Użyj tego ciągu wyjściowego z narzędziem gen-qr-code , aby wygenerować kod QR.

rozszyfrować

Użyj opcji decode , aby zdekodować element ciągu deskryptora urządzenia. Element do zdekodowania ma następującą składnię:

1 + <device-descriptor-element> + $

Na przykład, aby zdekodować element deskryptora urządzenia W:5CF370800E77 :

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

splot-bicie serca

Użyj weave-heartbeat aby wysyłać i odbierać wiadomości z profili Heartbeat między dwoma węzłami Weave. Bicie pulsu umożliwia wskazanie aktywności jednego węzła innym węzłom w sieci lub sprawdzenie, czy węzeł pozostaje podłączony do sieci szkieletowej.

Pomyślne pulsowanie wymaga, aby jeden węzeł działał jako serwer (nasłuchiwanie pulsu i odpowiadanie na nie) oraz jeden węzeł jako klient (wysyłanie pulsu).

Przetestuj narzędzie weave-heartbeat za pomocą interfejsu pętli zwrotnej, aby naśladować dwa węzły:

  1. Dodaj adresy IPv6, które mają być używane dla każdego węzła pulsu do interfejsu lo (pętli zwrotnej):
    sudo ifconfig lo add fd00:0:1:1::1/64
    sudo ifconfig lo add fd00:0:1:1::2/64
  2. Start the Heartbeat server on the fd00:0:1:1::1 address and assign it a node-id of 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. Open a second terminal window and start the Heartbeat client on the fd00:0:1:1::2 IPv6 address with a node-id of 2 and the first node's IPv6 address as the destination for the 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: Binding0: 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: Binding0: Configuring
        WEAVE:EM: Binding0: Preparing
        WEAVE:EM: Binding0: Ready, peer 1 ([fd00:0:1:1::1]:11095) via UDP

  4. After a successful connection, node 2 sends Heartbeats to node 1, and node 1 logs Heartbeats received from node 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
    

Bicie serca z fałszywym urządzeniem

weave-heartbeat tworzy instancję urządzenia mock-device zarówno dla serwera, jak i klienta. Tę samą funkcjonalność Heartbeat można zademonstrować za pomocą mock-device zamiast pierwszego serwera Heartbeat weave-heartbeat :

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

splot-ping

Użyj weave-ping aby wysyłać i odbierać komunikaty profilu Echo między dwoma węzłami Weave. Ładunek echa składa się z dowolnych danych dostarczonych przez żądający węzeł i oczekuje się, że zostanie powtórzony dosłownie w odpowiedzi. Echo zapewnia środki do testowania łączności sieciowej i opóźnień.

Pomyślne echo wymaga, aby jeden węzeł działał jako serwer (nasłuchiwanie żądania echa i odpowiadanie na nie) i jeden węzeł jako klient (wysyłanie żądania echa).

Przetestuj narzędzie weave-ping za pomocą interfejsu sprzężenia zwrotnego, aby naśladować dwa węzły:

  1. Dodaj adresy IPv6, które mają być używane dla każdego węzła echa, do interfejsu lo (pętli zwrotnej):
    sudo ifconfig lo add fd00:0:1:1::1/64
    sudo ifconfig lo add fd00:0:1:1::2/64
  2. Start the Echo server on the fd00:0:1:1::1 address, assigning it a node-id of 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. Open a second terminal window and start the Echo client on the fd00:0:1:1::2 IPv6 address with a node-id of 2 and the first node's IPv6 address as the destination for the Echo request:

    ./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. After a successful connection, node 1 logs Echo Requests from node 2, and node 2 logs Echo Responses from node 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
    

Echo z fałszywym urządzeniem

weave-ping tworzy instancję urządzenia mock-device zarówno dla serwera, jak i klienta. Tę samą funkcjonalność Echo można zademonstrować, używając mock-device zamiast pierwszego serwera Echo weave-ping :

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