Google is committed to advancing racial equity for Black communities. See how.

OpenWeave-Tools

Quelle auf GitHub anzeigen

OpenWeave enthält eine Reihe von Befehlszeilentools zum Konfigurieren, Verwalten und Testen von OpenWeave-Bereitstellungen.

Webwerkzeuge bauen

Die weave-tools Ziel baut ein tar - Archiv von ausgewählten Weave Kommandozeilen - Tools für die Verteilung. Es enthält die folgenden Werkzeuge:

Werkzeug Beschreibung Standalone Build Standort
gen-qr-code QR-Code generieren /src/tools/misc
mock-device Generic Weave-Gerätesimulator /src/test-apps
weave Weave-Zertifikate generieren und verwalten /src/tools/weave
weave-device-descriptor Codieren und Decodieren von Weave-Gerätedeskriptor-Strings zum Koppeln von QR-Codes /src/test-apps
weave-device-mgr Verwalten des Gerätekopplungsvorgangs /src/device-manager/python
weave-heartbeat Senden und Empfangen von Herzschlag Nachrichten Profil /src/test-apps
weave-key-export Senden Sie Schlüsselexportanfragen /src/test-apps
weave-ping Senden und Empfangen von Echo Profil Nachrichten /src/test-apps

So erstellen Sie das Ziel:

  1. Installieren Sie alle Build Voraussetzungen .
  2. Konfigurieren OpenWeave ohne BlueZ Unterstützung:
    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

Verwendung gen-qr-code einen QR - Code für die Gerätepaarung Zwecke zu erzeugen. Die Eingabe für das Werkzeug muss sich in einer lokalen Datei befinden. Zum Beispiel einen QR - Code zu generieren , die den Benutzer sendet https://www.google.com :

  1. Erstellen Sie eine Datei mit der Zeichenfolge für den QR - Code:
    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

Starten Sie dann das Weave-Mock-Gerät:

./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

Verwenden Sie die --help Flagge alle verfügbaren Konfigurationsoptionen anzuzeigen.

Weave-Device-Deskriptor

Die weave-device-descriptor Tool verschlüsselt oder decodiert ein Gerätedeskriptor String. Diese Zeichenfolgen enthalten Identifizierungsinformationen für ein Gerät, die in seinem Weave-Pairing-QR-Code kodiert sind. Verwenden Sie die --help Flagge mit den encode oder decode Optionen für weitere Informationen.

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

kodieren

Um beispielsweise eine Gerätebeschreibungszeichenfolge mit den folgenden Identifizierungsinformationen zu codieren, verwenden Sie die entsprechenden Flags und Werte:

Feld Flagge Wert
Hersteller-ID -V 1
Produkt ID -p 1
Produkt-Revisionsnummer -r 2
Ordnungsnummer -s 18B4300000000004
Herstellungsdatum -m 2018/05/02
802.15.4 MAC-Adresse (Thread, BLE) -8 000D6F000DA80466
Pairing-Code -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$

Verwenden Sie diese Ausgabe - String mit dem gen-qr-code - Tool den QR - Code zu generieren.

dekodieren

Verwenden , um die decode Option ein Element einer Gerätedeskriptor Zeichenfolge zu dekodieren. Das zu decodierende Element hat die folgende Syntax:

1 + <device-descriptor-element> + $

Um beispielsweise zu dekodieren , die W:5CF370800E77 Gerätedeskriptor Element:

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

weben-herzschlag

Verwenden weave-heartbeat zu senden und empfangen Herzschlag Profil Nachrichten zwischen zwei Knoten Weave. Heartbeat bietet eine Möglichkeit, den anderen Knoten im Netzwerk die Lebendigkeit eines Knotens anzuzeigen oder zu überprüfen, ob ein Knoten mit der Fabric verbunden bleibt.

Ein erfolgreicher Heartbeat erfordert, dass ein Knoten als Server fungiert (auf den Heartbeat wartet und darauf reagiert) und ein Knoten als Client (der den Heartbeat sendet).

Testen Sie die weave-heartbeat - Tool die Loopback - Schnittstelle zu imitieren zwei Knoten mit:

  1. Fügen Sie die IPv6 - Adressen für jeden Herzschlag - Knoten zu dem zu verwendenden lo (Loopback) Schnittstelle:
    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
    

Herzschlag mit einem simulierten Gerät

weave-heartbeat instanziiert ein mock-device sowohl für Server und Client. Die gleiche Heartbeat - Funktionalität kann mit Hilfe demonstriert wird mock-device an Stelle des ersten weave-heartbeat - Herzschlag - Servers:

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

weben-ping

Verwenden weave-ping zu senden und empfangen Echo Profil Nachrichten zwischen zwei Knoten Weave. Eine Echo-Nutzlast besteht aus willkürlichen Daten, die vom anfordernden Knoten bereitgestellt werden, und es wird erwartet, dass sie in der Antwort wörtlich zurückgesendet werden. Echo bietet ein Mittel zum Testen der Netzwerkkonnektivität und -latenz.

Ein erfolgreiches Echo erfordert, dass ein Knoten als Server fungiert (auf die Echo-Anfrage lauscht und darauf reagiert) und ein Knoten als Client (der die Echo-Anfrage sendet).

Testen Sie die weave-ping - Tool die Loopback - Schnittstelle zu imitieren zwei Knoten mit:

  1. Fügen Sie die IPv6 - Adressen für jedes Echo Knoten zu dem zu verwendenden lo (Loopback) Schnittstelle:
    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 mit einem simulierten Gerät

weave-ping instanziiert ein mock-device sowohl für Server und Client. Die gleiche Echo - Funktionalität kann durch Verwendung demonstriert wird mock-device an Stelle des ersten weave-ping Echo - Servers:

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