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

jinja-placeholder-0 /index.md "> 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

Cel 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 profili 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. Niech weave-tools tkackie będą celem:
     make weave-tools 
  4. Sprawdź katalog główny openweave-core poszukiwaniu archiwum tar:
     ls weave*
        weave-tools-x86_64-unknown-linux-gnu-4.0d.tar.gz

kod-gen-qr

Narzędzie gen-qr-code wymaga modułu qrcode języku Python. Użyj pip aby go zainstalować:

 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 kodu QR:
     echo "https://www.google.com" >> ~/ow_qrcode 
  2. Wygeneruj kod QR 64x64 tego ciągu:
     ./gen-qr-code -v 1 -s 64 < ~/ow_qrcode 
  3. Aby zapisać kod QR jako obraz, określ plik wyjściowy:
     ./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.

urządzenie symulacyjne

Narzędzie do symulowania mock-device symuluje ogólny węzeł Weave. Inne narzędzia i skrypty przypadków testowych używają tego narzędzia do hermetyzacji funkcjonalności Weave. Utwórz wystąpienie pozorowanych urządzeń na poszczególnych węzłach Happy, aby przetestować funkcjonalność Weave w symulowanej topologii.

Na przykład, aby uruchomić urządzenie Weave, które nasłuchuje na adresie IPv6 fd00:0:1:1::1 , najpierw dodaj ten adres IPv6 do interfejsu lo (pętla zwrotna):

 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. Heartbeat umożliwia wskazanie aktywności jednego węzła innym węzłom w sieci lub sprawdzenie, czy węzeł pozostaje połączony z siecią szkieletową.

Pomyślne pulsowanie wymaga, aby jeden węzeł działał jako serwer (nasłuchiwanie pulsu i odpowiadanie na nie) i 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 Heartbeat, 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. Uruchom serwer Heartbeat pod fd00:0:1:1::1 i przypisz mu node-id fd00:0:1:1::1 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. Otwórz drugie okno terminala i uruchom klienta Heartbeat na adresie IPv6 fd00:0:1:1::2 z node-id fd00:0:1:1::2 2 i adresem IPv6 pierwszego węzła jako miejscem docelowym dla pulsu:

     ./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. Po pomyślnym nawiązaniu połączenia węzeł 2 wysyła sygnały pulsu do węzła 1, a węzeł 1 rejestruje sygnały pulsu odebrane z węzła 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ć, używając 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 Echo 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 Echo 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. Uruchom serwer Echo na fd00:0:1:1::1 , przypisując mu node-id fd00:0:1:1::1 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. Otwórz drugie okno terminala i uruchom klienta Echo na adresie IPv6 fd00:0:1:1::2 z node-id 2 i adresem IPv6 pierwszego węzła jako miejscem docelowym dla żądania echa:

     ./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. Po pomyślnym połączeniu węzeł 1 rejestruje żądania echa z węzła 2, a węzeł 2 rejestruje odpowiedzi echa z węzła 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