Wakaama (ehemals LIBLWM2M) ist eine Implementierung des leichten M2M -Protokolls der Open Mobile Alliance (LWM2M).
Entwickler Mailingliste: https://dev.eclipse.org/mailman/Listinfo/wakaama-dev
Die einzige offizielle Veröffentlichung von Wakaama, Version 1.0, ist von verschiedenen Sicherheitsproblemen (CVE-2019-9004, CVE-2021-41040) betroffen.
Bitte verwenden Sie das neueste Commit in der Hauptzweig. Release 1.0 wird nicht mehr unterstützt.
Diese Arbeit ist im Rahmen der Eclipse Public Lizenz v2.0 und der Eclipse-Vertriebslizenz v1.0 doppelt lizenziert.
SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
git clone https://github.com/eclipse-wakaama/wakaama.git
Wenn Sie an Wakaama selbst arbeiten oder die Beispiel -Client -Anwendung ausführen möchten, müssen Submodules untersucht werden:
git clone --recurse-submodules https://github.com/eclipse-wakaama/wakaama.git
Wakaama ist eine hochkonfigurierbare Bibliothek. Es ist mit CMake gebaut. Schauen Sie sich Beispiele/Server/cmakelists.txt an, um ein Beispiel dafür zu erhalten, wie es einbezieht.
Die verschiedenen Einstellungen können mit CMake -Cache -Variablen konfiguriert werden (z. B. cmake -DLOG_LEVEL=INFO ).
Wakaama unterstützt mehrere Modi. Mindestens ein Modus muss mit CMake -Cache -Variablen definiert werden.
Wakaama unterstützt zusätzliche kundenbezogene Optionen. Diese sind nur verfügbar, wenn der Client -Modus aktiviert ist.
Bitte beachten Sie: LWM2M Version 1.0 wird nur von Clients unterstützt, während Server rückwärtskompatibel sind.
Die folgenden Datenformate sind für Wakaama konfigurierbar:
Die Protokollierungsinfrastruktur kann mit CMake -Cache -Variablen konfiguriert werden (z. B. cmake -DWAKAAMA_LOG_LEVEL=INFO ).
Wenn NONE ausgewählt wird, muss der Benutzer von Wakaama eine benutzerdefinierte Transportschicht implementieren. Weitere Informationen finden Sie in den verfügbaren Implementierungen.
Wenn NONE ausgewählt wird, muss der Benutzer von Wakaama eine benutzerdefinierte Abstraktionsschicht implementieren. Weitere Informationen finden Sie in der verfügbaren POSIX -Implementierung.
Wakaama bietet eine einfache CLI -Bibliothek. Es kann aktiviert werden mit:
In Ubuntu 24.04, in CI verwendet, können die Abhängigkeiten als solche installiert werden:
apt install build-essential clang-format clang-format-18 clang-tools-18 cmake cppcheck gcovr git libcunit1-dev ninja-build python3-pippip3 install -r tools/requirements-compliance.txtFür macOS können die Entwicklungsabhängigkeiten als solche installiert werden:
brew install automake clang-format cmake cppcheck cunit gcc gitlint gnu-getopt make ninja
Der neue C-Code muss mit Klangformat formatiert werden.
Der Stil basiert auf dem LLVM -Stil, aber mit 4 anstelle von 2 Leerzeichen und 120 anstelle von 80 Zeichen pro Zeile.
Um zu überprüfen, ob Ihr Code mit dem erwarteten Stil übereinstimmt, sind die folgenden Befehle hilfreich:
git clang-format-18 --diff : Zeigen Sie, was geändert werden muss, um dem erwarteten Codestil zu entsprechengit clang-format-18 : Wenden Sie alle erforderlichen Änderungen direkt angit clang-format-18 --commit main : CODE CODE-STIEL für alle Änderungen seit dem Haupt Wenn der bestehende Code neu formatiert wird, muss dies in einem separaten Komitee erfolgen. Seine Commit-ID muss der Datei hinzugefügt werden .git-blame-ignore-revs
Der gesamte CMake-Code muss mit CMake-Format formatiert werden.
Um zu überprüfen, ob Ihr Code mit dem erwarteten Stil übereinstimmt, sind die folgenden Befehle hilfreich:
tools/ci/run_ci.sh --run-cmake-format : Testen Sie alle CMake-Dateien, drucken Straftatencmake-format --in-place <unformatted-file> : wenden Sie alle benötigten Änderungen direkt auf Um nicht benötigte Last auf der Github -Infrastruktur zu vermeiden, sollten Sie vor dem Schieben die Ausführung tools/ci/run_ci.sh --all in Betracht ziehen.
cd wakaama
tools/ci/run_ci.sh --run-build
pytest -v tests/integration
Es gibt einige Beispielanwendungen, mit denen Server-, Client- und Bootstrap -Funktionen von Wakaama testen können. Die folgenden Rezepte gehen davon aus, dass Sie sich auf einer Unix -ähnlichen Plattform befinden und CMake haben und installiert werden.
cmake -S examples/server -B build-servercmake --build build-server./build-server/lwm2mserver [Options]Der LWM2MServer hört auf UDP -Port 5683. Es verfügt über eine grundlegende Befehlszeilenschnittstelle. Geben Sie 'Hilfe' für eine Liste unterstützter Befehle ein.
Optionen sind:
Usage: lwm2mserver [OPTION]
Launch a LwM2M server on localhost.
Options:
-4 Use IPv4 connection. Default: IPv6 connection
-l PORT Set the local UDP port of the Server. Default: 5683
-S BYTES CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024
cmake -S examples/client/udp -B build-client-udpcmake --build build-client-udp./build-client-udp/lwm2mclient [Options]Neben LWM2MClient gibt es auch Beispiele mit aktiviertem DTLS und mit aktiviertem RAW -Block1 -Transfer.
Das LWM2MClient zeigt neun LWM2M -Objekte:
Sicherheitsobjekt (ID: 0)
Serverobjekt (ID: 1)
Zugriffskontrollobjekt (ID: 2) als Skelett
Geräteobjekt (ID: 3), das hartcodierte Werte aus dem Beispiel LWM2M-Client des Anhangs E der technischen LWM2M-Spezifikation enthält.
Konnektivitätsüberwachungsobjekt (ID: 4) als Skelett
Firmware -Update -Objekt (ID: 5) als Skelett.
Standortobjekt (ID: 6) als Skelett.
Konnektivitätsstatistikobjekt (ID: 7) als Skelett.
Testobjekt (ID: 31024) mit der folgenden Beschreibung:
Multiple
Object | ID | Instances | Mandatory |
Test | 31024 | Yes | No |
Resources:
Supported Multiple
Name | ID | Operations | Instances | Mandatory | Type | Range |
test | 1 | R/W | No | Yes | Integer | 0-255 |
exec | 2 | E | No | Yes | | |
dec | 3 | R/W | No | Yes | Float | |
Der LWM2MClient öffnet den UDP -Port 56830 und versucht, sich unter 127.0.0.1:5683 an einem LWM2M -Server zu registrieren. Es verfügt über eine grundlegende Befehlszeilenschnittstelle. Geben Sie 'Hilfe' für eine Liste unterstützter Befehle ein.
Optionen sind:
Usage: lwm2mclient [OPTION]
Launch a LwM2M client.
Options:
-n NAME Set the endpoint name of the Client. Default: testlwm2mclient
-l PORT Set the local UDP port of the Client. Default: 56830
-h HOST Set the hostname of the LwM2M Server to connect to. Default: localhost
-p PORT Set the port of the LwM2M Server to connect to. Default: 5683
-4 Use IPv4 connection. Default: IPv6 connection
-t TIME Set the lifetime of the Client. Default: 300
-b Bootstrap requested.
-c Change battery level over time.
-S BYTES CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024
Zusätzliche Werte für den lwm2mclient_tinydtls binären:
-i Set the device management or bootstrap server PSK identity. If not set use none secure mode
-s Set the device management or bootstrap server Pre-Shared-Key. If not set use none secure mode
So starten Sie eine Bootstrap -Sitzung: ./lwm2mclient -b
cmake -S examples/lightclient -B build-lightclientcmake --build build-lightclient./build-lightclient/lightclient [Options]Der Lightclient ist viel einfacher als der LWM2MClient und verfügt nur über vier LWM2M -Objekte:
Der Lightclient verfügt über keine Befehlszeilenschnittstelle.
Optionen sind:
Usage: lwm2mclient [OPTION]
Launch a LwM2M client.
Options:
-n NAME Set the endpoint name of the Client. Default: testlightclient
-l PORT Set the local UDP port of the Client. Default: 56830
-4 Use IPv4 connection. Default: IPv6 connection
-S BYTES CoAP block size. Options: 16, 32, 64, 128, 256, 512, 1024. Default: 1024
cmake -S examples/bootstrap_server -B build-bootstrapcmake --build build-bootstrap./build-bootstrap/bootstrap_server [Options]Weitere Informationen finden Sie unter Beispiele/Bootstrap_Server/Readme.