CWMP-Client mit TR-069-Protokoll
Der Kunde
Ein bekannter Hersteller von Haushalts- und Profigeräten.
Die Herausforderung
Der Kunde beauftragte uns mit mehreren Softwareentwicklungen, wie der Implementierung einer Client-Anwendung für das CWMP-Protokoll (TR-069-Spezifikation) und der Entwicklung eines Anwendungsmanagers für das Linux-Betriebssystem auf einem Board mit dem Broadcom 7255-Chip.
Darüber hinaus umfasste der Arbeitsumfang eine Anwendung für eine Anwendung zum Softwaredownload, einen Updater für die Firmware-Implementierung des Boards sowie Unterstützung für Youtube und die Verimatrix-Zertifizierung.
Die Lösung
1. Konzeptentwicklung
Es sollte eine plattformübergreifende Anwendung entwickelt werden, die eine einfache Integration von Drittanbieter-Bibliotheken ermöglicht und eine hohe Skalierbarkeit erlaubt. Die Korrektheit des Codes sollte mit Unit-Tests sichergestellt werden.
2. Softwareentwicklung
Die Software wurde unter Verwendung der Programmiersprache C++ (Standard C++14) mit dem Programmierwerkzeug CMake entwickelt. CMake vereinfacht die plattformübergreifende Erstellung ohne Anpassung an einen bestimmten Compiler und bietet Funktionen zum Herunterladen und Installieren von Bibliotheken von Drittanbietern.
Die Kompilierung des Quellcodes für ein Board wurde mit dem C/C++-Compiler von Broadcom durchgeführt. Die PC-Version der Software wurde auf Host-Maschinen mit GCC/Clang kompiliert.
Die Software enthielt eine lange Liste von integrierten Bibliotheken von Drittanbietern, einschließlich boost, spdlog, jsoncpp, jsonrpc, xml2, xtreexml, sqlite3, soci-sqlite.
Der vollständige Satz von Unit-Tests, basierend auf dem Google C++ Testing Framework, wurde in separaten Modulen für jede Anwendung entwickelt.
In den folgenden Abschnitten werden die Hauptkomponenten unserer Softwarelösung näher beschrieben:
1. CWMP-Client zur Implementierung des TR-069-Protokolls für Linux
Der TR-069-Client ist für die Kommunikation mit einem Webserver über das CWMP-Protokoll zuständig, das die Datenübertragung und die Ausführung von Dienstbefehlen umfasst.
Die Client-Anwendung unterstützt den Aufbau einer Remote-Server-Sitzung, die Implementierung des Ereignismechanismus und die Arbeit mit Parameterwerten, Attributen, Objekten und Methoden zur Dienstausführung.
Wir haben die Anwendung mit XML-Konfigurationsdateien konfiguriert. Zum Parsen der XML-Inhalte wurden die Bibliotheken XML2 und xtreexml verwendet.
Für die Speicherung der Konfigurationsinformationen wurde das XML-Format gewählt, da es eine Vereinheitlichung mit der Verarbeitung von Anfragen über das CWMP-Protokoll ermöglicht. Für den Datenaustausch mit dem Server wurde ebenfalls ein XML-Format verwendet. XML-C-Parser und -Toolkit sind sehr mächtige und portable Werkzeuge, während xtreexml ein C++-Wrapper für die beliebte XML-Parser-Bibliothek XML2 ist.
Für die Datenspeicherung wurde die relationale Datenbank SQLite gewählt und die Bibliotheken sqlite3 und soci-sqlite verwendet. Die Datenbank besteht aus vier Tabellen für Ereignisse, Modelle, Objekte und Parameter, die alle über Fremdschlüssel miteinander verbunden sind.
Mit Ausnahme des CWMP-Protokolls für den Austausch von Serverdaten unterstützt die Anwendung die Verbindung zur Middleware über Unix-Sockets unter Verwendung des JSON-RPC-Protokolls. Die Datenübertragung erfolgt über JSON-Nachrichten, um Remote-Prozeduraufrufe zu ermöglichen.
Die Verwaltung von Datum und Uhrzeit wird durch die Bibliothek date library unterstützt. Eine C++-Bibliothek fügt einige neue Datentypen für Zeitdauer und Zeitpunkte hinzu. Sie implementiert auch einen vollständigen Parser der IANA-Zeitzonendatenbank und bietet zusätzliche Datentypen, Zeitintervalle und Zeitzonenunterstützung.
Das mehrstufige funktionale Logging-System wird mit spdlog, einer sehr schnellen, Header-only/kompilierten C++-Logging-Bibliothek, implementiert. Die mehrstufige Protokollierung wird durch die Anpassung der Protokollnachrichten an die erforderliche Ablaufverfolgungsebene aufrechterhalten.
Das Softwarediagramm des TR-069-Clients ist unten abgebildet.
Softwarediagramm des TR-069-Clients
2. Anwendungsmanager für GNU/Linux
Der Anwendungsmanager ermöglicht die vollständige Kontrolle über die Aktivitäten anderer Anwendungen: Start, Stopp, Fokuswechsel und Verbindung zur Middleware.
Die Konfiguration der Anwendung erfolgt über JSON-Konfigurationsdateien, wobei die Bibliothek jsoncpp zum Parsen verwendet wird.
Je nach Konfigurationsdatei verwaltet der Anwendungsmanager Cobalt, Netflix, einen TR-069-Client, eine Middleware-Anwendung und andere Anwendungen. Die Anwendung verbindet sich mit der Middleware über einen Unix-Socket und das JSON-RPC-Protokoll, wofür die Bibliotheken jsoncpp und jsonrpc zum Einsatz kommen.
Die Bibliothek spdlog verwaltet ein Ereignisprotokoll. Der Detaillierungsgrad der Protokollierung kann in der Konfigurationsdatei geändert werden.
Das Diagramm der Anwendungsmanager-Software ist unten abgebildet.
Software-Diagramm des Anwendungsmanagers
3. Software-Downloader für GNU/Linux-Updates der Set-Top-Box
Der Hauptzweck der entwickelten Software bestand darin, die Set-Top-Box von der aktuellen Version der Firmware auf eine neuere, von unserem Kunden bereitgestellte Version zu aktualisieren. Das Update sollte dabei sicher, geschützt und ausfallsicher erfolgen.
Die Anwendung unterstützt das Herunterladen eines aktualisierten Abbilds von einem entfernten Server. Unsere Software verwendet cURL, ein kostenloses und einfach zu bedienendes Kommandozeilenprogramm zur Dateiübertragung, und kann das aktualisierte Image über verschiedene Protokolle (File, FTP, HTTP, HTTPS) abrufen. Das HTTPS-Protokoll unterstützt Basis- und Digest-Authentifizierung.
Die Anwendung kann das Image auf verschiedene Speichertypen schreiben, wie z. B. RAW NOR/NAND-Flash und UBI/UBIFS. Die Set-Top-Box verfügt über zwei Kopien der Hauptpartitionen, so dass sie im Falle eines fehlgeschlagenen Bootvorgangs von der vorherigen Partition starten kann.
Die Anwendung bietet Unterstützung für Archivdateien. Ermöglicht wurde dies durch miniz, eine verlustfreie, leistungsstarke Datenkompressionsbibliothek, die die Spezifikationsnormen für komprimierte Datenformate zlib (RFC 1950) und Deflate (RFC 1951) implementiert. Mit der Bibliothek spdlog wurde eine einfache und funktionale Protokollierung implementiert.
4. Integration eines DIAL-Servers
DIAL ist ein von Netflix und YouTube gemeinsam entwickeltes Protokoll zum Auffinden und Starten von Anwendungen in einem Subnetz, in der Regel einem Heimnetzwerk. DIAL ermöglicht es Tablet-Computern und Mobiltelefonen (sogenannten “Second Screen”-Geräten), Inhalte an “First Screen”-Geräte wie Fernseher, Blu-ray-Player und Set-Top-Boxen zu senden.
Als Referenz haben wir den DIAL-Server von Netflix implementiert, um mit der YouTube-Anwendung über IPC zu interagieren und die Befehle des DIAL-Clients (Mobiltelefon und Tablet) auszuführen.
5. Systemhärtung
Unter Systemhärtung versteht man eine Reihe von Werkzeugen, Techniken und bewährten Maßnahmen zur Verringerung von Schwachstellen in Anwendungen, Systemen und Firmware.
Wir haben die folgenden Härtungsmaßnahmen ergriffen, um die Sicherheit des Systems zu erhöhen:
- Deaktivierung aller Debug- und potentiell unsicheren Kernel-Optionen
- Entfernen aller unbenutzten oder potenziell gefährlichen Dienstprogramme aus der Firmware und Schließen aller unbenutzten Ports
- Zugriff auf Dateien und Verzeichnisse mit möglichst strengen Zugriffsrechten
- Ausführung aller Anwendungen durch Nutzer ohne Root-Rechte haben (soweit möglich)
Der wirtschaftliche Nutzen
Unser Kunde hat eine Client-Anwendung erhalten, die das CWMP-Protokoll (TR-069) und einen Anwendungsmanager für das Linux-Betriebssystem auf dem Board mit dem Broadcom 7255-Chip implementiert. Darüber hinaus haben unsere Ingenieure eine Anwendung zum Herunterladen und Aktualisieren der Firmware des Boards entwickelt, die Youtube und die Verimatrix-Zertifizierung unterstützt.
Durch die Lösung dieser Herausforderungen konnte das Ingenieurteam unseres Kunden sein neues Massenprodukt für den Elektronikmarkt verbessern.