Ver fuente en GitHub |
OpenWeave incluye un conjunto de herramientas de línea de comandos para configurar, administrar y probar implementaciones de OpenWeave.
Construye herramientas de tejido
La weave-tools
objetivo construye un archivo tar de seleccionar las herramientas de línea de comandos de la armadura para la distribución. Incluye las siguientes herramientas:
Herramienta | Descripción | Acumulación autónomo ubicación |
---|---|---|
gen-qr-code | Genera un código QR | /src/tools/misc |
mock-device | Simulador de dispositivo de tejido genérico | /src/test-apps |
weave | Genere y administre certificados de Weave | /src/tools/weave |
weave-device-descriptor | Codificar y decodificar cadenas de descriptores de dispositivos Weave para emparejar códigos QR | /src/test-apps |
weave-device-mgr | Gestionar el proceso de emparejamiento del dispositivo | /src/device-manager/python |
weave-heartbeat | Enviar y recibir Heartbeat mensajes perfil | /src/test-apps |
weave-key-export | Enviar solicitudes de exportación de claves | /src/test-apps |
weave-ping | Enviar y recibir Echo mensajes perfil | /src/test-apps |
Para construir el objetivo:
- Instalar todos los prerrequisitos de construcción .
- Configurar OpenWeave sin apoyo BlueZ:
cd <path-to-openweave-core>
./configure --without-bluez
- Make the
weave-tools
target:make weave-tools
- 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
Uso gen-qr-code
para generar un código QR para los propósitos de emparejamiento de dispositivos. La entrada de la herramienta debe residir en un archivo local. Por ejemplo, para generar un código QR que envía al usuario https://www.google.com :
- Crear un archivo con la cadena para el código QR:
echo "https://www.google.com" >> ~/ow_qrcode
- Generate a 64x64 QR code of that string:
./gen-qr-code -v 1 -s 64 < ~/ow_qrcode
- 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 theweave-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
Luego inicie el dispositivo simulado 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
Usar la --help
bandera para ver todas las opciones de configuración disponibles.
descriptor-dispositivo-tejido
Los weave-device-descriptor
codifica o descodifica una herramienta cadena de descriptor de dispositivo. Estas cadenas contienen información de identificación de un dispositivo que está codificada en su código QR de emparejamiento Weave. Usar la --help
, marca con las encode
o decode
opciones para obtener más información.
./weave-device-descriptor encode --help
./weave-device-descriptor decode --help
codificar
Por ejemplo, para codificar una cadena de descriptor de dispositivo con la siguiente información de identificación, utilice los indicadores y valores adecuados:
Campo | Bandera | Valor |
---|---|---|
ID de proveedor | -V | 1 |
ID del Producto | -p | 1 |
Número de revisión del producto | -r | 2 |
Número de serie | -s | 18B4300000000004 |
Fecha de fabricación | -m | 2018/05/02 |
Dirección MAC 802.15.4 (hilo, BLE) | -8 | 000D6F000DA80466 |
Código de emparejamiento | -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$
Utilice esta cadena de salida con el gen-qr-code
herramienta para generar el código QR.
descodificar
Usar la decode
opción para decodificar un elemento de una cadena de descriptor de dispositivo. El elemento a decodificar tiene la siguiente sintaxis:
1 + <device-descriptor-element> + $
Por ejemplo, para decodificar el W:5CF370800E77
elemento descriptor dispositivo:
./weave-device-descriptor decode 1W:5CF370800E77$
Primary WiFi MAC: 5C:F3:70:80:0E:77
latido del corazón
Uso weave-heartbeat
para enviar y recibir Heartbeat mensajes perfil entre dos nodos de la armadura. Heartbeat proporciona un medio para indicar la actividad de un nodo a los otros nodos de la red o para comprobar si un nodo permanece conectado a la estructura.
Un Heartbeat exitoso requiere que un nodo actúe como servidor (escuchando y respondiendo al Heartbeat) y un nodo para actuar como cliente (enviando el Heartbeat).
Prueba de la weave-heartbeat
herramienta mediante la interfaz de bucle de retorno para imitar dos nodos:
- Añadir las direcciones IPv6 que se utilizarán para cada nodo del latido del corazón a la
lo
(loopback) Interfaz:sudo ifconfig lo add fd00:0:1:1::1/64
sudo ifconfig lo add fd00:0:1:1::2/64
Start the Heartbeat server on the
fd00:0:1:1::1
address and assign it anode-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: 170418Open a second terminal window and start the Heartbeat client on the
fd00:0:1:1::2
IPv6 address with anode-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 UDPAfter 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
Latido del corazón con un dispositivo simulado
weave-heartbeat
instancia un mock-device
para el servidor y el cliente. La misma funcionalidad Heartbeat se puede demostrar mediante el uso de mock-device
en lugar de la primera weave-heartbeat
servidor Heartbeat:
./mock-device -a fd00:0:1:1::1
tejido-ping
El uso weave-ping
para enviar y recibir Echo mensajes perfil entre dos nodos de la armadura. Una carga útil de Echo consta de datos arbitrarios proporcionados por el nodo solicitante y se espera que se repita textualmente en la respuesta. Echo proporciona un medio para probar la conectividad y la latencia de la red.
Un eco exitoso requiere que un nodo actúe como servidor (escuchando y respondiendo a la solicitud de eco) y un nodo para actuar como cliente (enviando la solicitud de eco).
Prueba de la weave-ping
herramienta mediante la interfaz de bucle de retorno para imitar dos nodos:
- Añadir las direcciones IPv6 que se utilizarán para cada nodo Echo a la
lo
(loopback) Interfaz:sudo ifconfig lo add fd00:0:1:1::1/64
sudo ifconfig lo add fd00:0:1:1::2/64
Start the Echo server on the
fd00:0:1:1::1
address, assigning it anode-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...Open a second terminal window and start the Echo client on the
fd00:0:1:1::2
IPv6 address with anode-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)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
Eco con un dispositivo simulado
weave-ping
instancia un mock-device
para el servidor y el cliente. La misma funcionalidad Echo se puede demostrar mediante el uso de mock-device
en lugar de la primera weave-ping
servidor Echo:
./mock-device -a fd00:0:1:1::1