Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR GENERATING PROGRAM CODE
Document Type and Number:
WIPO Patent Application WO/2017/060309
Kind Code:
A1
Abstract:
The present invention describes a method for generating program code for processing a data flow defined by plurality of bit fields comprising the steps: entering a model of the program code having a datagram part, which comprises a graphic representation of the data flow, and a processing part, wherein the entering of the datagram part comprises a generation of a graphic from a plurality of graphic elements on a display device, wherein each graphic element represents one bit field of the data flow, wherein an arrangement of the graphic elements on the display system represents an arrangement of the bit fields in the data flow, wherein an identifier, position, length, data type, and bit order is determined for each bit field, wherein the entering of the processing part comprises an entering of an expression, wherein the expression contains an operand and an operator affecting the operand, wherein the operand comprises the identifier of one of the bit fields; and converting the model into the program code, wherein the expression having the operand and the operator is converted from the processing part of the model into an instruction of the program code, wherein the instruction in the program code extracts a value of the bit field, determined by the identifier contained in the operand, from the data flow and assigns this value to a variable, or the instruction writes the value of a variable into the bit field determined by the identifier contained in the operand, wherein the variable has the data type determined for the bit field determined by the identifier or has a data type equivalent to the data type determined for the bit field determined by the identifier, and wherein the operator is converted into a command affecting the variable or into a control structure of the program code affecting the variable.

Inventors:
DR REIFENHÄUSER BERND (DE)
DR EBBES ALEXANDER (DE)
Application Number:
PCT/EP2016/073807
Publication Date:
April 13, 2017
Filing Date:
October 05, 2016
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
GIP AG (DE)
International Classes:
G06F9/44
Other References:
NEVE W D ET AL: "BFlavor: A harmonized approach to media resource adaptation, inspired by MPEG-21 BSDL and XFlavor", SIGNAL PROCESSING. IMAGE COMMUNICATION, ELSEVIER SCIENCE PUBLISHERS, AMSTERDAM, NL, vol. 21, no. 10, 1 November 2006 (2006-11-01), pages 862 - 889, XP027934263, ISSN: 0923-5965, [retrieved on 20061101]
ANONYMOUS: "VisuaLangLab - Project Kenai", 3 October 2011 (2011-10-03), XP055320713, Retrieved from the Internet [retrieved on 20161117]
Attorney, Agent or Firm:
SIEBERT, Karsten et al. (DE)
Download PDF:
Claims:
P a t e n t a n s p r ü c h e

Verfahren zum Erzeugen von Programmcode zum Verarbeiten eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms mit den Schritten

Eingeben eines Modells des Programmcodes mit einem Datagrammteil, der eine graphische Darstellung des Datenstroms umfasst, und einem Verarbeitungsteil,

wobei das Eingeben des Datagrammteils ein Erzeugen einer Grafik aus einer Mehrzahl von graphischen Elementen auf einer Anzeigeeinrichtung umfasst, wobei jedes graphische Element ein Bitfeld des Datenstroms repräsentiert, wobei eine Anordnung der graphischen Elemente auf der Anzeigeeinrichtung eine Anordnung der Bitfelder in dem Datenstrom repräsentiert,

wobei für jedes Bitfeld ein Bezeichner, eine Position, eine Länge, ein Datentyp und eine Bitreihenfolge festgelegt werden,

wobei das Eingeben des Verarbeitungsteils ein Eingeben eines Ausdrucks umfasst, wobei der Ausdruck einen Operanden und einen auf den Operanden wirkenden Operator enthält,

wobei der Operand den Bezeichner eines der Bitfelder umfasst, und

Umsetzen des Modells in den Programmcode,

wobei der Ausdruck mit dem Operanden und dem Operator aus dem Verarbeitungsteil des Modells in eine Anweisung des Programmcodes umgesetzt wird, wobei die Anweisung in dem Programmcode einen Wert des durch den in dem Operanden enthaltenen Bezeichner festgelegten Bitfelds aus dem Datenstrom extrahiert und diesen Wert einer Variablen zuweist oder

die Anweisung den Wert einer Variablen in das durch den in dem Operanden enthaltenen Bezeichner festgelegte Bitfeld schreibt,

wobei die Variable den für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp aufweist oder einen zu dem für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp äquivalenten Datentyp aufweist und

wobei der Operator in einen auf die Variable wirkenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programmcodes umgesetzt wird.

Verfahren nach Anspruch 1 , dadurch gekennzeichnet, dass das Eingeben des Modells des Programmcodes interaktiv erfolgt.

Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass das Eingeben des Bezeichners eines ausgewählten Bitfelds als Operand oder als Teil des Operanden in dem Ausdruck mit Hilfe einer Benutzerschnittstelle erfolgt, wobei ein Teil des den Operanden repräsentierenden graphischen Elements in dem Datagrammteil des Modells auf der Anzeigeeinrichtung markiert und zu dem Ausdruck bewegt wird.

Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass das Eingeben des Ausdrucks ein Auswählen eines den Operator repräsentierenden graphischen Elements aus einer Mehrzahl von vorgegebenen, Operatoren repräsentierenden graphischen Elementen umfasst, wobei das Auswählen des den Operator repräsentierenden graphischen Elements vorzugsweise mit Hilfe einer Benutzerschnittstelle erfolgt, wobei ein Teil des den Operator repräsentierenden graphischen Elements auf der Anzeigeeinrichtung markiert und zu dem Ausdruck bewegt wird.

Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass jedes ein Bitfeld repräsentierende graphische Element eine Länge auf der Anzeigeeinrichtung aufweist, wobei die Länge proportional zu der Länge des Bitfelds ist.

Verfahren nach dem vorhergehenden Anspruch, dadurch gekennzeichnet, dass die Darstellung der jeweils ein Bitfeld repräsentierenden graphischen Elemente auf einer Anzeigeeinrichtung, vorzugsweise in Oktetts und/oder Zeilen, räumlich strukturiert ist.

Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass der Programmcode in einer auf einem ausgewählten Rechner lauffähigen Maschinensprache codiert ist oder dass der Programmcode in einer höheren Programmiersprache oder einer Assemblersprache codiert ist, wobei nach dem Schritt des Umsetzens des Modells in den Programmcode in die höhere Programmiersprache oder die Assemblersprache ein weiteres Umsetzen in einen Programmcode, der in Maschinensprache codiert ist, erfolgt.

Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass das Eingeben des Datagrammteils des Modells ein Eingeben eines Ausdrucks in Form einer bedingten Anweisung oder einer Verzweigung mit einer Bedingung und einem Codeabschnitt umfasst,

wobei die Bedingung vorzugsweise den Bezeichner eines ersten durch ein graphisches Element repräsentierten Bitfelds des Datagrammteils umfasst und wobei der Codeabschnitt ein zweites durch ein graphisches Element repräsentiertes Bitfeld umfasst,

das Eingeben des Verarbeitungsteils ein Eingeben eines Ausdrucks umfasst,

wobei der Ausdruck einen Operanden und einen auf den Operanden wirkenden Operator enthält, wobei der Operand den Bezeichner des Bitfelds aus dem Codeabschnitt umfasst, und

das Umsetzen des Modells in den Programmcode

ein Umsetzen des Ausdrucks mit dem Operanden, der den Bezeichner des Bitfelds aus dem Codeabschnitt umfasst, aus dem Verarbeitungsteil des Modells in Anweisungen des Programmcodes umfasst,

wobei eine Anweisung in dem Programmcode die bedingte Anweisung oder die Verzweigung aus dem Datagrammteil verifiziert,

wobei eine Anweisung in dem Programmcode einen Wert des durch den in dem Operanden enthaltenen Bezeichner festgelegte Bitfeld aus dem Codeabschnitt extrahiert und diesen Wert einer Variablen zuweist oder

eine Anweisung den Wert einer Variablen in das durch den in dem Operanden enthaltenen Bezeichner festgelegte Bitfeld aus dem Codeabschnitt schreibt, wobei die Variable den für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp aufweist oder einen zu dem für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp äquivalenten Datentyp aufweist und

wobei der Operator des Ausdrucks mit dem Operanden, der den Bezeichner des Bitfelds aus dem Codeabschnitt umfasst, in einen auf die Variable wirkenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programmcodes umgesetzt wird.

Verfahren nach einem der vorhergehenden Ansprüche, dadurch gekennzeichnet, dass das Eingeben des Datagrammteils des Modells ein Auswählen eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms aus einer Datenbank mit einer Mehrzahl von jeweils durch eine Mehrzahl von Bitfeldern definierten Datenströmen umfasst.

Computerprogramm mit Programmcode zur Durchführung eines Verfahrens nach einem der vorhergehenden Ansprüche.

Maschinenlesbarer Datenträger mit einem darauf gespeicherten Computerprogramm nach dem vorhergehenden Anspruch.

Datenverarbeitungsvorrichtung, auf die ein Computerprogramm nach Anspruch 10 geladen ist.

Software-definiertes Element eines Datennetzwerks mit

einem -Rechner mit einem Prozessor,

einem auf den Rechner geladenen Betriebssystem zum Betreiben des Rechners, einer Datenschnittstelle über die der Rechner mit dem Datennetzwerk verbindbar ist, einem auf den Rechner geladenen Programmcode, der derart eingerichtet ist, dass er bei Ausführung auf dem Rechner einen über die Datenschnittstelle in den Rechner eingehenden, aus einer Mehrzahl von Bitfeldern bestehenden Datenstrom verarbeitet und dabei Funktionen eines Netzwerkelements ausführt,

wobei der Programmcode zumindest teilweise als Teil des Betriebssystems in einem Kernel-Modus des Prozessors verarbeitbar ist, so dass ein nicht an das Element adressierter Teil des Datenstroms durch den Programmcode verarbeitbar ist, und mit

einer Implementierungsschnittstelle und

einem mit der Implementierungsschnittstelle verbundenen Programmierwerkzeug mit dem Computerprogramm nach Anspruch 10,

wobei das Programmierwerkzeug weiterhin derart eingerichtet ist, dass in einem Betrieb des Elements der Programmcode über die Implementierungsschnittstelle auf dem Rechner deploybar ist.

14. Verfahren zum Betreiben eines Rechners mit einem Prozessor als Software-definiertes Element eines Daten netzwerks mit den Schritten

Betreiben des Rechners mit einem Betriebssystem,

Empfangen eines aus einer Mehrzahl von Bitfeldern bestehenden Datenstroms aus dem über eine Datenschnittstelle mit dem Rechner verbundenen Datennetzwerk,

Verarbeiten des Datenstroms mit einem Programmcode, der Funktionen eines Datennetzwerkelements ausführt, wobei der Programmcode zumindest teilweise als Teil des Betriebssystems im Kernel-Modus des Prozessors ausgeführt wird, so dass ein nicht an das Element adressierter Teil des Datenstroms durch den Programmcode verarbeitet wird, und Implementieren eines neuen oder eines geänderten Programmcodes auf dem Rechner mit den Schritten:

Erzeugen des Programmcodes mit dem Verfahren nach einem der Ansprüche 1 bis 9 in einem über eine Implementierungsschnittstelle des Rechners mit diesem Verbundenes Programmierwerkzeug,

Deployen des Programmcodes auf dem Rechner mit Hilfe des Programmierwerkzeugs.

Description:
Verfahren zum Erzeugen von Programmcode

Die vorliegende Erfindung betrifft ein Verfahren zum Erzeugen von Programmcode zum Verarbeiten eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms. In vielen Bereichen der Datenübertragung, bei denen es auf Leistung oder eine effiziente Ausnutzung der zur Verfügung stehenden Bandbreite ankommt, werden Datenströme verwendet, die durch eine Mehrzahl von gepackten Bitfeldern definiert sind. Mit einer solchen Spezialform binärer Protokolle lassen sich nicht nur höhere Informationsdichten erzeugen als mit text-basierten Übertragungsformen, sondern noch höhere Informationsdichten als mit der Übertragung ganzer Bytes oder Maschinenworte in binärer Form. Außer in Rechnernetzwerken mit drahtgebundener oder Funk-basierter Übertragung finden sich durch eine Mehrzahl von Bitfeldern definierte Datenströme auch auf Rechnerbussen, an Device-Controllern, Sensoren und Aktoren.

Bei der Überwachung aber auch bei der Beeinflussung des Verhaltens von Datennetzwerken ist es erforderlich, Werte, d. h. einzelne Bitfelder aus einem aus einer Mehrzahl von Bitfeldern definierten Datenstrom zu extrahieren. Dabei ist es unter anderem notwendig, die dazu verwendeten Programme auf überschaubaren Zeitskalen ändern zu können, um neuen Diensten und Gegebenheiten innerhalb eines Datennetzwerks Rechnung tragen zu können. Allerdings lassen sich Computerprogramme, die ein Bitfeld aus einem durch eine Mehrzahl von Bitfeldern definierten Datenstrom auslesen, verarbeiten und/oder schreiben, nur mit großem Aufwand erstellen. Bisher ist es dazu erforderlich, einen entsprechenden auf einem Rechner ausführbaren Programmcode zu programmieren. Dies erfolgt typischerweise in Assembler oder Assembler-wertigem C. Für die Extraktion eines Bitfelds ist eine Art von "Bit-Buchhaltung" notwendig, die aufwendig und fehleranfällig ist. Für jede Operation muss manuell ein Code erstellt bzw. angepasst werden, der Boolesche Algebra (logisches und, nicht, oder, exklusiv-oder), Bitmaskierungen (bitweise und, nicht, oder, exklusiv-oder) und die Verrechnung mit nummerischen Konstanten, die aus Spezifikationsdokumenten abgelesen wurden, enthält. Dies ist eine konzentrierte Anhäufung von Programmiertechniken, die für diese Programme zwingend notwendig sind, die aber nach den Re- geln effektiver, fehlervermeidender Software-Technik vermieden werden sollten. Der notwendige Programmcode ist daher höchst aufwendig herzustellen, instabil und fehleranfällig. Das Schreiben eines derartigen Programmcodes wird darüber hinaus noch komplexer, wenn die Codierung der Bitfelder in dem Datenstrom nicht statisch ist, sondern dynamisch. In dem Fall eine dynamischen Codierung hängt das Vorhandensein mindestens eines Bitfelds vom Inhalt eines anderen Bitfelds im gleichen Datenstrom ab.

Daher ist es Aufgabe der vorliegenden Erfindung, ein Verfahren zum Erzeugen von Programmcode zum Verarbeiten eines solchen durch eine Mehrzahl von Bitfeldern definierten Datenstroms bereitzustellen, welches eine vereinfachte Art und Weise der Programmierung mit einer deutlich verringerten Fehleranfälligkeit ermöglicht.

Zumindest eine dieser Aufgaben wird erfindungsgemäß dadurch gelöst, dass ein Verfahren zum Erzeugen von Programmcode zum Verarbeiten eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms bereitgestellt wird mit den Schritten: Eingeben eines Modells des Programmcodes mit einem Datagrammteil, der eine graphische Darstellung des Datenstroms umfasst, und einem Verarbeitungsteil, wobei das Eingeben des Datagrammteils ein Erzeugen einer Graphik aus einer Mehrzahl von graphischen Elementen auf einer Anzeigeeinrichtung umfasst, wobei jedes graphische Element ein Bitfeld des Datenstroms repräsentiert, wobei eine Anordnung der graphischen Elemente auf dem Anzeigesystem eine Anordnung der Bitfelder in dem Datenstrom repräsentiert, wobei für jedes Bitfeld ein Bezeichner, eine Position, eine Länge, ein Datentyp und eine Bitreihen- folge festgelegt wird, wobei das Eingeben des Verarbeitungsteils ein Eingeben eines Ausdrucks umfasst, wobei der Ausdruck einen Operanden und einen auf den Operanden wirkenden Operator enthält, wobei der Operand den Bezeichner eines der Bitfelder umfasst, und Umsetzen des Modells in den Programmcode, wobei der Ausdruck mit dem Operanden und dem Operator aus dem Verarbeitungsteils des Modells in eine Anweisung des Programmcodes umgesetzt wird, wobei die Anweisung in dem Programmcode einen Wert des durch den in dem Operanden enthaltenen Bezeichner festgelegten Bitfelds aus dem Datenstrom extrahiert und diesen Wert einer Variablen zuweist oder die Anweisung den Wert einer Variablen in das durch den in dem Operanden enthaltenen Bezeichner festgelegte Bitfeld schreibt, wobei die Variable den für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp aufweist oder einen zu dem für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp äquivalenten Datentyp aufweist und wobei der Operator in einen auf die Variable wirkendenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programmcodes umgesetzt wird.

Unter einem Bitfeld wird im Sinne der vorliegenden Anmeldung ein zusammenhängender Bereich eines Datenstroms in Form von aufeinanderfolgenden Bits verstanden. Das oder die ein Bitfeld bildenden Bits hängen derart zusammen, dass die Bits des Bitfelds eine Information bereitstellen. Ein zusammenhängender Bereich von Bits eines Datenstroms, der ein Bitfeld bildet, ist durch die Adresse eines seiner Bits, vorzugsweise seines Start-Bits, eine Länge in Bits und eine Bitreihenfolge eineindeutig definiert. Dabei wird unter der Bitreihenfolge die Reihenfolge der Wertigkeiten der Bits (Zweipotenzen) im Byte sowie der Bytes im Maschinenwort verstanden. Die Länge ausgedrückt in Bits wird vereinfachend in der vorliegenden Anmeldung auch als Länge des Bitfelds bezeichnet. Die Adresse des ersten Bits des Bitfelds, welche die Lage des Bitfelds innerhalb eines längeren Datenstroms zu definieren vermag, wird im Sinne der vorliegenden Anmeldung als Position des Bitfelds bezeichnet. Es versteht sich, dass dabei im Sinne der vorliegenden Anmeldung die Angabe der Adresse eines Start-Bits und eines End-Bits eines Bitfelds ebenso eine Position und eine Länge des Bitfelds definiert wie die Angabe einer Adresse eines Start-Bits oder eines End-Bits des Bitfelds sowie der Länge des Bitfelds ausgedrückt in Bits. Darüber hinaus erfordert jedes Bitfeld eine Festlegung eines Datentyps der durch ihn verkörperten Information. Ein solcher Datentyp kann beispielsweise jeder elementare Datentyp, ein Statusindikator oder Felder (Array) daraus, wie beispielsweise Zeichenketten (String) sein.

In Spezifikation eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms werden größere Bitfelder oft in Zeilen oder Abschnitten gegliedert, wobei Zeilen aus Bytes oder Oktetts zusammengesetzt sein können, die wiederum eine feste Anzahl von inhaltlich zusammengehörenden Bits enthalten. Auf diese Weise kann eine besser lesbare oder verständlichere Darstellung erreicht werden. Unter einem Programmcode wird zunächst jede Art eines Teils eines Computerprogramms in irgendeiner bestimmten Programmiersprache verstanden. Dabei ist es zweckmäßig, wenn der Programmcode in einer Ausführungsform in einer auf einem ausgewählten Rechner, dies kann beispielsweise ein herkömmlicher PC aber auch ein Rechner mit einem eingebetteten System sein, lauffähigen Maschinensprache codiert ist.

Mögliche Ausführungsformen erzeugen aus dem graphischen Modell des Programmcodes auf einem eigenen Weg direkt oder über Zwischenschritte Maschinencode, der auf üblichen CPU-Prozessoren ausgeführt werden kann. In einer Ausführungsform des erfindungsgemäßen Verfahrens erfolgt eine Umsetzung in eine auf einem ausgewählten Rechner lauffähige Maschinensprache in zwei Schritten. Zunächst wird das Modell des Programmcodes, welches nachstehend noch im Detail erläutert werden wird, in einen Programmcode, der in einer höheren Programmiersprache oder einer Assemblersprache codiert ist, umgesetzt, wobei danach ein weiteres Umsetzen aus dem Programmcode der höheren Programmiersprache oder der Assemblersprache in den Programmcode, der in Maschinensprache codiert ist, erfolgt. Höhere Programmiersprachen im Sinne der vorliegenden Erfindung umfassen insbesondere C, C++, aber auch graphische Programmiersprachen.

Dies schließt Programmiersprachen ein, für deren Ausführung eine Laufzeitumgebung wie die Java Virtual Machine für Java erforderlich ist, die ggf. direkt ausführbaren Maschinencode während der Laufzeit erzeugen und nur vorübergehend vorhalten.

Dies schließt aber auch Programmiersprachen ein, die keinen ausführbaren Code erzeugen, sondern als reine Interpreter arbeiten. Ist das Zielsystem für die Ausführung gewählt, so wird automatisch durch das oben beschriebenen Vorgehen der Ausdruck mit dem Operanden und dem Operator aus dem Verarbeitungsteil des Modells in eine Anweisung des entsprechenden Programmcodes umgesetzt, wobei die Anweisung in dem Programmcode einen Wert des durch den in dem Operanden enthaltenen Bezeichners festgelegte Bit-Bitfeld aus dem Datenstrom extrahiert und diesen Wert einer Variablen zuweist oder die Anweisung den Wert einer Variablen in das durch den in dem Operanden enthaltenen Bezeich- ner festgelegte Bitfeld schreibt, wobei die Variable den für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp aufweist oder einen zu dem für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp äquivalenten Datentyp aufweist und wobei der Operator in einen auf die Variable wirkenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programm- codes umgesetzt wird.

Zentrale Teile des erfindungsgemäßen Verfahrens sind das Modell des Programmcodes, welcher erzeugt werden soll und das Umsetzen des Modells in den eigentlichen Programmcode. Das erfindungsgemäße Verfahren wird in einer Ausführungsform mit Hilfe einer Software mit einem interaktiven, graphischen Frontend (Benutzeroberfläche) zum Eingeben und einem Backend zum Umsetzen, z. B. als Client-Server-Anwendung, Web-basierte-Anwendung oder App-basierte-An- wendung, realisiert. Das einzugebende Modell ermöglicht es dem Programmierer, den zu erstellenden und im Zugriff auf das Bitfeld komplexen Programmcode in einer übersichtlichen Weise fachlich zu beschreiben, ohne auf die Syntax der Programmiersprache, in welcher der Programmcode codiert sein soll, ach- ten zu müssen. Insbesondere aber kann die Beschreibung des Programmcodes mit Hilfe des Modells erfolgen ohne dass ein mühsames Abzählen der einzelnen Bits in einer Datenstromspezifika- tion erforderlich wäre, um das Bitfeld zu adressieren, zu extrahieren, zu verarbeiten oder zu schreiben. Diesen Teil der Programmierarbeit nimmt das erfindungsgemäße Verfahren dem Program- mierer ab.

Das Modell des Programmcodes gliedert sich in einen Datagrammteil, der graphisch eine Bitfelddefinition des Datenstroms repräsentiert, und einen Verarbeitungsteil, der eine Verarbeitung eines Bitfelds aus dem Datenstrom beschreibt.

Unter dem Datagrammteil des Modells des Programmcodes wird im Sinne der vorliegenden Anmeldung eine Graphik verstanden, die aus einer Mehrzahl von graphischen Elementen auf einer Anzeigeeinrichtung besteht. Dabei wird jedes Bitfeld des Datenstroms von einem graphischen Element auf der Anzeigeeinrichtung repräsentiert. Die Anordnung der die Bitfelder repräsentierenden graphischen Elemente auf dem Anzeigesystem wiederum repräsentiert eine Anordnung der Bitfelder in dem Datenstrom. Die Anordnung der graphischen Elemente zusammen auf dem Anzeigesystem bildet somit eine graphische Darstellung der Spezifikation des Datenstroms. Beispiele für solche Spezifikationen von durch Bitfelder definierten Datenströmen sind beispielsweise DHCP (RFC 2131 ) oder MPEG.

Für jedes Bitfeld wird ein Bezeichner, eine Position, eine Länge, ein Datentyp und eine Bitreihenfolge festgelegt. Das bedeutet, dass entsprechend für die graphischen Elemente in dem Datagrammteil des Modells eine Reihenfolge von Bezeichnern, Positionen, Längen und Zusatzinformationen zur Bitreihenfolge festgelegt werden und den graphischen Elementen jeweils ein Datentyp gemäß der Festlegung zugeordnet wird. Über den Bezeichner kann jedes graphische Element des Datagrammteils später, d. h. entweder in dem Datagrammteil selbst oder aber in dem Verarbeitungsteil, referenziert oder aufgerufen werden.

Das graphische Element, welches ein Bitfeld mit einem Bezeichner repräsentiert, kann als Operand in einem Ausdruck in dem Datagrammteil oder dem Verarbeitungsteil verwendet werden und Gegenstand einer Operation sein (d. h. ein Operator wird auf den Operanden angewandt). Der Operand besitzt dann den Wert und die Eigenschaften des ihm zugeordneten Bitfelds oder zu den Eigenschaften des Bitfelds äquivalente Eigenschaften. Insbesondere ist in einer Ausführungsform des erfindungsgemäßen Verfahrens der Datentyp des Operanden der gleicher wie der Datentyp des Bitfelds, welches dem Operanden durch den Bezeichner zugewiesen ist. In einer alternativen Ausführungsform ist der Datentyp des Operanden ein Datentyp der sich 1 : 1 auf den Datentyp des Bitfelds abbilden lässt, d.h. ein zu dem Datentyp des Bitfelds äquivalenter Datentyp. In einer Ausführungsform der Erfindung erfolgt das Eingeben des Modells, d. h. das Eingeben des Datagrammteils und/oder des Verarbeitungsteils, interaktiv. Dabei bedeutet ein interaktives Eingeben im Sinne der vorliegenden Anmeldung insbesondere, dass der Programmierer oder Anwender in einer Ausführungsform des Verfahrens eine Rückmeldung von der Programmieroberfläche er- hält, ob die Syntax für die Beschreibung des Modells eingehalten wurde oder nicht.

Insbesondere lässt sich aus der Position des ein Bitfeld repräsentierenden graphischen Elements im Datagrammteil die Adressierung des einer Operanden bildenden Bitfelds in einem Ausdruck eineindeutig bestimmen.

Das Eingeben des Datagrammteils des Modells erfolgt durch das Erzeugen einer Graphik aus einer Mehrzahl von graphischen Elementen auf einer Anzeigeeinrichtung. Dabei kann in einer Ausführungsform ein Eingeben des Datagrammteils, d. h. das Auswählen und Definieren der graphischen Elemente sowie deren Anordnen auf der Anzeigeeinrichtung, mit Hilfe einer Benutzerschnittstelle, wie z. B. einer Tastatur, einem berührungsempfindlichen Bildschirm, einer Sprach- oder Gestensteuerung der Anzeigeeinrichtung oder einem anderem Eingabegerät, erfolgen.

Ein Eingeben des Bezeichners eines ausgewählten Bitfelds als Operand oder als Teil des Operanden in einem Ausdruck entweder in dem Datagrammteil oder dem Verarbeitungsteil erfolgt in einer Ausführungsform der Erfindung mit Hilfe einer Benutzerschnittstellte, wobei ein Teil des den Operanden repräsentierenden graphischen Elements in dem Datagrammteil des Modells auf der Anzeigeeinrichtung markiert und zu dem Ausdruck bewegt wird. Das graphische Feedback auf der Ebene von Zeilen und Spalten erlaubt das graphische Abzählen von Bits zu vollständigen Zeilenbreiten und den optischen Vergleich mit Vorlagen aus einem Spezifikationsdokument.

Darüber hinaus kann es in einer Ausführungsform zweckmäßig sein, wenn das Eingeben eines Ausdrucks entweder in dem Datagrammteil oder dem Befehlsteil des Modells ein Auswählen eines einen Operator repräsentierenden graphischen Elements aus einer Mehrzahl von vorgegebenen, Operatoren repräsentierenden graphischen Elementen umfasst, wobei das Auswählen des den Operator repräsentierenden graphischen Elements vorzugsweise mit Hilfe einer Benutzerschnittstelle erfolgt, wobei ein Teil des den Operator repräsentierenden graphischen Elements auf der Anzeigeeinrichtung markiert und zu dem Ausdruck bewegt wird.

Bei einer Übertragung von durch Bitfelder definierten Datenströmen über Datennetzwerke werden häufig vielfache von Oktetts, d. h. Bytes aus 8 Bit mit der Konvention einer Bitreihenfolge, so dass das niederwertigste Bit zuerst kommt, zur Strukturierung des Datenstroms gewählt, optional in Vierergruppen, so dass 32-Bit-Blöcke entstehen. In Spezifikationen solcher Datenströme werden dann in Ausführungsformen bevorzugte "rechteckige" Layouts verwendet, in denen 32-Bit-Worte untereinander stehen, so dass dadurch eine gut lesbare räumliche Strukturierung entsteht.

Daher ist es zweckmäßig, wenn in einer Ausführungsform des erfindungsgemäßen Verfahrens die Darstellung der jeweils ein Bitfeld repräsentierenden graphischen Elemente, vorzugsweise in Ok- tetts und/oder Zeilen, räumlich strukturiert ist. Diese Strukturierung des Datagrammteils des Modells wird in einer Ausführungsform von dem Frontend einer das erfindungsgemäße Verfahren implementierenden Software bereits angeboten. Dabei kann in einer Ausführungsform der Erfindung zwischen mehreren räumlichen Strukturierungen gewählt werden, die für verschiedene Anwen- dungsbereiche optimiert sind.

In einer Ausführungsform des erfindungsgemäßen Verfahrens weist jedes ein Bitfeld repräsentierende graphische Element eine Länge auf dem Anzeigeelement auf, wobei die Länge proportional zu der Länge des Bitfelds ist. Es versteht sich, dass in einer solchen Ausführungsform alle bereits ein Bitfeld repräsentierenden graphischen Elemente im gleichen Maßstab auf der Anzeigeeinrichtung dargestellt werden, so dass unmittelbar aus der Länge des graphischen Elements auf der Anzeigeeinrichtung auf die Länge des zugeordneten Bitfelds zurückgeschlossen werden kann.

Dies erleichtert das Ausrichten und das Abzählen der Bitfelder des Datenstroms in dem Data- grammteil sowie die Probe des entstehenden Layouts gegen ein Spezifikationsdokument.

In alternativen Ausführungsformen können binär-logarithmische Darstellungen der graphischen Elemente, die jeweils ein Bitfeld repräsentieren, besser geeignet sein, um Bitfelder sehr unterschiedlicher Längen gleichzeitig darstellen und erkennen zu können.

In einer Ausführungsform der Erfindung lässt sich aus der räumlichen Strukturierung und der Position eines jeden ein Bitfeld repräsentierenden graphischen Elements in dem Datagrammteil unter der Kenntnis des Anfangs jedes solchen graphischen Elements eine eindeutige Adressierung des Bitfelds im Datenstrom berechnen.

Während in einer Ausführungsform der Datagrammteil bei einem Eingeben eines Modells eines Programmcodes unmittelbar eingegeben wird, kann in einer Ausführungsform des erfindungsgemäßen Verfahrens das Eingeben des Datagrammteils des Modells ein Auswählen eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms aus einer Datenbank mit einer Mehrzahl von je- weils durch eine Mehrzahl von Bitfeldern definierten Datenströmen erfolgen. In einer Implementierung des erfindungsgemäßen Verfahrens in einer Software wäre eine solche Ausführungsform bei- spielsweise dadurch zu realisieren, dass die Software eine solche Datenbank oder Bibliothek um- fasst und das Frontend das Auswählen eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms bzw. mit einer Definition aus der Datenbank ermöglicht. In den Verarbeitungsteil des Modells des Programmcodes wird ein Ausdruck eingegeben, vorzugsweise jedoch eine Mehrzahl von Ausdrücken, der oder die mindestens ein Bitfeld des Datenstroms aus dem Datagrammteil verarbeiten.

Im Sinne der vorliegenden Anmeldung ist ein Ausdruck eine Kombination aus Variablen, Konstan- ten, Operatoren und Rückgabewerten von Funktionen. Die Auswertung eines Ausdrucks ergibt einen Wert. Dabei umfasst ein Ausdruck mindestens einen Operanden und mindestens einen auf den Operanden wirkenden Operator. Der Operator und ein Vergleichsoperand können auch implizit sein. Der Operand umfasst den Bezeichner eines der Bitfelder und ist somit eineindeutig durch ein graphisches Element aus dem Datagrammteil repräsentiert.

Das Eingeben eines Ausdrucks in den Verarbeitungsteil erfolgt durch textuelles Eingeben oder das Erzeugen einer Graphik aus einer Mehrzahl von graphischen Elemente auf einem Anzeigesystem mit Hilfe einer Benutzerschnittstelle. Ist in einer Ausführungsform das erfindungsgemäße Verfahren als Software realisiert, so erfolgt die Eingabe des Verarbeitungsteils des Modells innerhalb des sogenannten Frontends (Benutzeroberfläche).

Ein solcher Ausdruck innerhalb des Verarbeitungsteils des graphischen Modells kann insbesondere bedeuten, dass ein Wert eines über den Bezeichner dem Operanden eineindeutig zugeordneten Bitfelds ausgelesen wird, um dann zur Weiterverarbeitung zur Verfügung zu stehen. In der alternativen Ausführungsform jedoch wird ein Wert, der durch verschiedene Ausdrücke in dem Verarbeitungsteil generiert wird durch einen Ausdruck in ein dem Operanden durch den Bezeichner eineindeutig zugeordnetes Bitfeld geschrieben.

Durch eine Mehrzahl von Bitfeldern definierte Datenströme lassen sich nach der Art und Weise ihrer Codierung in statisch und dynamisch codierte Datenströme unterteilen. Bei einem statisch codierten, durch eine Mehrzahl von Bitfeldern definierten Datenstrom steht von vorneherein durch die Definition der Bitfelder fest, wie lang der Datenstrom bzw. das durch die Bitfelder definierte Segment des Datenstroms ist. Darüber hinaus stehen bei einer statischen Codierung die Positionen und alle weiteren oben genannten Eigenschaften der statischen Bitfelder fest.

In einem dynamisch codierten durch eine Mehrzahl von Bitfeldern definierten Datenstrom kann die Länge des Datenstroms bzw. des definierten Datenstromsegments variieren. Insbesondere kann die in einem ersten Bitfeld enthaltene Information angeben, ob ein zweites Bitfeld in dem Datenstrom vorhanden ist oder nicht. Es ist unmittelbar einsichtig, dass eine solche bedingte oder dynamische Codierung effizienter ist, da sie auf bestimmte Bitfelder bei der Übertragung verzichtet, wenn diese für die Übertragung der Informationen nicht notwendig sind. Alternativ und zusätzlich können auch die anderen oben genannten Eigenschaften von Bitfelder, wie deren Länge oder der Datentyp bedingt sein, d.h. von der in einem anderen Datenfeld enthaltenen Information abhängen. Dies macht die Anforderung für den Programmierer noch schwieriger und erschwert die ohnehin schwierige Bitfeld-Programmierung zusätzlich. Daher umfasst in einer Ausführungsform der Erfindung das Eingeben des Datagrammteils des Modells ein Eingeben eines Ausdrucks in Form einer bedingten Anweisung oder einer Verzweigung mit einer Bedingung und einem Codeabschnitt, wobei die Bedingung vorzugsweise den Bezeichner eines ersten durch ein graphisches Element repräsentierten Bitfelds des Datagrammteils umfasst und wobei der Codeabschnitt ein zweites durch ein graphisches Element repräsentiertes Bitfeld umfasst, wobei weiterhin das Eingeben des Verarbeitungsteils ein Eingeben eines Ausdrucks umfasst, wobei der Ausdruck einen Operanden und einen auf den Operanden wirkenden Operator enthält, wobei der Operand den Bezeichner des Bitfelds aus dem Codeabschnitt umfasst und wobei das Umsetzen des Modells in den Programmcode ein Umsetzen des Ausdrucks mit dem Operanden, der den Bezeichner des Bitfelds aus dem Codeabschnitt umfasst, aus dem Ver- arbeitungsteil des Modells in eine Anweisung des Programmcodes umfasst, wobei eine Anweisung in dem Programmcode die bedingte Anweisung oder die Verzweigung aus dem Datagrammteil verifiziert, wobei eine Anweisung in dem Programmcode einen Wert des durch den in den Operanden enthaltenen Bezeichner festgelegte Bitfeld aus dem Codeabschnitt extrahiert und diesen Wert einer Variablen zuweist oder eine Anweisung den Wert einer Variablen in das durch den in dem Operanden enthaltenen Bezeichner festgelegte Bitfeld aus dem Codeabschnitt schreibt, wobei die Variable den für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp aufweist oder einen zu dem für das durch den Bezeichner festgelegte Bitfeld festgelegten Datentyp äquivalenten Datentyp aufweist und wobei der Operator des Ausdrucks mit dem Operanden, der den Bezeichner des Bitfelds aus dem Codeabschnitt umfasst, in einen auf die Variable wirkenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programmcodes umgesetzt wird.

Mit anderen Worten ausgedrückt wird beim Umsetzen des Modells in den Programmcode in dem Fall, dass der Ausdruck des Verarbeitungsteils einen Operanden enthält, der über den Bezeichner eineindeutig einem Bitfeld zugeordnet ist, welches einer Bedingung unterliegt (diese ist in dem Datagrammteil formuliert) eine Anweisung oder eine Mehrzahl von Anweisungen erzeugt, welche die bedingte Anweisung oder die Verzweigung aus dem Datagrammteil verifizieren. In einer Ausführungsform der Erfindung wird dabei dann, wenn festgestellt wird, dass die Bedingung nicht erfüllt ist, dem Operanden ein alternativer, beispielsweise vorab festgelegter, Wert zugeordnet. Alternativ werden auf den bedingten Operanden wirkende Anweisungen nicht ausgeführt, sondern übersprungen.

Nachdem zuvor insbesondere die Schritte des Eingehens des Modells des Programmcodes, d. h. insbesondere die Schritte des Eingehens des Datagrammteils und des Verarbeitungsteils, in Ausführungsformen davon beschrieben wurden, wird nun das Umsetzen des Modells in den Programmcode erläutert.

Bei diesem Umsetzen wird aus dem Modell, welches eine fachliche Beschreibung des zu generierenden Programmcodes bereitstellt, der Programmcode selbst erzeugt.

Dazu wird der Ausdruck mit dem Operanden und dem Operator aus dem Verarbeitungsteil des Modells in eine Anweisung bzw. eine Mehrzahl von Anweisungen des Programmcodes umgesetzt.

Eine solche Anweisung in dem Programmcode besteht in einer Ausführungsform aus drei Teilen. Der erste Teil sorgt dafür, dass der Wert für eine Menge von Bits, d. h. ein Bitfeld aus dem Datenstrom, das durch den Bezeichner des Operanden benannt ist, aus dem Datenstrom extrahiert wird. Der zweite Teil dient dazu, den Wert des Bitfelds einer Variablen zuzuweisen, wobei die Variable von dem Datentyp ist, der für das durch den Operator spezifizierte Bitfeld in dem Datagrammteil festgelegt ist. In dem dritten Teil wird der Operator aus dem Ausdruck des Modells in einen auf die Variable wirkenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programmcodes umgesetzt.

Die Datentypen des Modells werden dabei immer automatisch auf passende, d.h. entweder identische oder äquivalente, Datentypen, Maschinenworte, Prozessor-Register o.ä. abgebildet. Dies betrifft i.A. Ganzzahlen unterschiedlicher Breite mit und ohne Vorzeichen sowie anderen native Datentypen.

Auf diese Weise bewirkt das Umsetzen von dem Modell in den Programmcode eine eineindeutige Abbildung zwischen dem zumindest teilweise graphischen Modell des Programmcodes und dem Programmcode selbst. Dabei wird die Programmiersprache des generierten Programmcodes sowie die Zielplattform, d. h. der Rechner, auf dem der Programmcode ablaufen soll, gewählt. In dem Programmcode ist eine Anweisung eine in der Syntax der Programmiersprache formulierte einzelne Vorschrift oder eine Reihe von Vorschriften, die im Rahmen der Abarbeitung des Programmcodes auszuführen sind. Somit kann ein Ausdruck im Operanden und dem Operator aus dem Modell zu einer Mehrzahl von Anweisungen bzw. Ausdrücken in dem Programmcode führen, dies in Abhängigkeit von der gewählten Programmiersprache und Optimierungskriterien für die Zielplattform. Für jeden gewählten Programmcode gibt es eine solche Abbildung, d. h. Umsetzung, von dem Modell in den Programm- code.

Insoweit die vorstehend beschriebenen Ausführungsformen des erfindungsgemäßen Verfahrens zumindest teilweise realisiert werden können, wobei eine Software gesteuerte Verarbeitungsvor- richtung verwendet wird, ist es offensichtlich, dass ein Computerprogramm, das eine solche Softwaresteuerung bereitstellt und ein Speichermedium, auf welchem solch ein Computerprogramm gespeichert ist, als Aspekte der Erfindung in Betracht zu ziehen sind.

Weiterhin betrifft die vorliegende Erfindung ein Software-definiertes Element eines Datennetzwerks mit einem Rechner mit einem Prozessor, einem auf den Rechner geladenen Betriebssystem zum Betreiben des Rechners, einer Datenschnittstelle über die der Rechner mit dem Datennetzwerk verbindbar ist, einem auf den Rechner geladenen Programmcode, der derart eingerichtet ist, dass er bei Ausführung auf dem Rechner einen über die Datenschnittstelle in den Rechner eingehenden, aus einer Mehrzahl von Bitfeldern bestehenden Datenstrom verarbeitet und dabei Funktionen eines Datennetzwerkelements ausführt, wobei der Programmcode zumindest teilweise als Teil des Betriebssystems im Kernel-Modus des Prozessors verarbeitbar ist, so dass ein nicht an das Element adressierter Teil des Datenstroms durch den Programmcode verarbeitbar ist, und mit einer Implementierungsschnittstelle und einem mit der Implementierungsschnittstelle verbundenen Programmierwerkzeug mit einem Computerprogramm, das ein Verfahren implementiert, so wie es zuvor in dieser Anmeldung für verschiedene Ausführungsformen beschrieben wurde, wobei das Programmierwerkzeug weiterhin derart eingerichtet ist, dass in einem Betrieb des Elements der Programmcode über die Implementierungsschnittstelle auf dem Rechner deploybar ist.

In einem Software-definierten Datennetzwerk im Sinne der vorliegenden Anmeldung, welches auch mit den Begriffen Software Defined Networking (SDN) oder Network Function Virtualization (NFV) beschrieben wird, werden ganz allgemein einzelne Funktionen oder die Gesamtheit aller Funktionen klassischer Netzwerkelemente wie Router, Switches, Firewalls, Network Address Translatoren, Intrusion Detection/Prevention Systems oder Radio Network Controller, vollständig oder ergänzend durch Software auf einem allgemein verwendbaren Rechnern erbracht. Der Begirff des Software-deffinierten Datennetzwerks ist dabei nicht auf spezielle Gremien- oder Herstellergetriebene Normen wie das OpenFlow der Open Networking Foundation, das FD.io von Cisco oder andere bezogen oder auf diese beschränkt. Ein Software-definiertes Element eines solchen Datennetzwerks wird nachfolgend auch als Software-definiertes Netzwerkelement bezeichnet, Von dem erfindungsgemäßen Software-definierten Netzwerkelement sollen, soweit sinnvoll und machbar, ein Teil oder alle Funktionen eines Datennetzwerks erbracht werden. Dies beinhaltet in einer Ausführungsform sowohl Funktionen der sog. Control Plane wie auch der Data Plane. Übli- cherweise werden alle Funktionen des eigentlichen Paket-Versendens an den nächsten Knoten des Netzwerkes als Data Plane oder Forwarding Plane bezeichnet; die Pakete gehen„durch" das Netzwerkelement. Die Control Plane implementiert die Signalisierung, die Steuerung, die Wegfin- dung und alle weiteren Funktionen die durch Pakete definiert werden, die„an" das Netzwerkelement gerichtet sind. Aber diese Unterscheidung und ihre Feinheiten werden hier nur derart beach- tet, dass das erfindungsgemäße Software-definierte Netzwerkelement in einer Ausführungsform die Gesamtheit aller Aufgaben der Control Plane und der Data Plane, die durch Paketaustausch vermittelt werden, umsetzt. Darüber hinaus übernimmt das Software-definierte Netzwerkelement in einer Ausführungsform auch die schlecht aufteilbaren Funktionen wie Traffic Shaping, Quality of Service oder Policy Enforcement.

Wenn in einem solchen softwaredefinierten Datennetzwerk gemäß der vorliegenden Erfinung Aufgaben von einem Rechner erbracht werden, so handelt es sich dabei immer um einen Rechner, der nicht für diesen Zweck der Steuerung eines Datennetzwerkelements konstruiert und gebaut wurde, d.h. insbesondere nicht um den Rechner einer Netzwerk-Hardwarelements wie Router, Switches, Firewalls, Network Address Translatoren, Intrusion Detection/Prevention Systems oder Radio Network Controller. Ein derartiger Rechner wird im Sinne der vorliegenden Anmeldung auch als Standard-Rechner mit einem Standard-Prozessor, welcher von einem Standard- Bertiebssystem betrieben wird, bezeichnet. Beispiele für einen soochen Standard-Rechner sind ein Server, ein Personalcomputer (PC) oder ein Industrie-PC. Beispiele für ein solches Standard- Bertiebssystem sind Unix, Linux, OpenBSD, FreeBSD, Windows und VxWorks.

Es versteht sich, dass ein solcher Rechner, insbesondere ein Standard-Rechner, in einer Ausführungform weitere Komponenten, insbesondere Standard-Komponenten, wie Festplatten, Schnittstellen(-karten) etc., aufweist.

Für die Realisierung des Software-definierten Netzwerkelements auf einem Rechner muss der Programmcode zumindest teilweise als Teil des Betriebssystems im Kernel-Modus des Prozessors verarbeitbar ist. Dies ist erforderlich, da der Programmcode zur Wahnehmung der Aufgaben einees Netzwelements einen Teil des Datenstroms verarbeitet, der nicht an das verarbeitende Netzwerkelement adressiert ist. Im Benutzer-Modus ist typpischerweise aber nur eine Verarbeitung von Datenströmen möglich, die auch an den Rechner adressiert sind. In einer Ausführungsform wird in dem Programmierwerkzeug aus dem Modell mit allen seinen Merkmalen ein Programmcode oder Quellcode einer geeigneten Programmiersprache erzeugt, typischerweise in C, C++ oder Assembler. Je nach Anforderungen des Zielsystems kann in einer Ausführungsform dieser Programmcode in mindestens zwei Gruppen oder Abschnitte aufgeteilt sein: Die eine Gruppe ist so strukturiert und mit API-Aufrufen versehen, dass sie nach Art eines Gerätetreibers oder Kernel-Moduls in den Betriebssystem-Kern integriert oder bei ihm registriert werden kann, so dass sie auf Ebene des Betriebssystems im Kernel-Space des Betriebssystems und Kernel-Modus des Prozessors ausge- führt werden kann. Dies ist erforderlich, damit das Software-definierte Element des Datennetzwerks alle Pakete, auch solche die nur„durch" das Element hindurchlaufen und nicht direkt an dieses gerichtet sind, aus dem Datenstrom lesen, ggf. modifizieren und weiter schicken kann; sowie auf die Layer 1 , 2 und 3 des Protokoll Stacks zugreifen kann. Die andere Gruppe ist so strukturiert und mit API-Aufrufen versehen, dass sie nach Art eines Anwendungsprogramm es ohne die Privilegien des Kernel-Modes des Prozessors im User-Space mit seinen nützlichen Funktionen und Merkmalen lauffähig ist. Im Betrieb bewirkt der Programmcode zudem für ein Datenpaket, das von dem Abschnitt des Programmcodes ausgelesen wurde, der im Kernel-Modus des Prozessors ausführbar ist, eine Übergabe des Datenpakets an den Abschnitt des Programmcodes, der im User- Space lauffähig ist, und ggf. eine Übergabe des Datenpakets nach seiner Verarbeitung zurück an den Abschnitt des Programmcodes, im Kernel-Modus des Prozessors ausführbar ist, zum Zurückschreiben in den Datenstrom.

Für beide Gruppen sind typischerweise und Zielsystem-abhängig unterschiedliche Code-Restriktionen, API-Aufrufe, Compiler- und Linker-Optionen erforderlich. Außerdem müssen sie in unter- schiedlichen Teilen des Dateisystems hinterlegt und mit Privilegien und Rechten versehen werden. Für die erste Gruppe, d.h. den Code auf Kernel-Ebene, gelten die Regeln eines Gerätetreibers oder einer Kernel-Erweiterung.

Die Implementierungsschnittselle ermöglich eine unmittelbare Verbindung zwischen einem Computer oder Rechner, auf welchem ein Progammierwerkzeug abläuft, das über ein Computerprogramm das Verfahren zum Erzeugen von Programmcode realisiert, wie es zuvor in dieser Anmeldung in einer Vielzahl von Ausführungsformen davon beschrieben wurde. Das Zusammenwirken von Programmierwerkzeug und dem Software-definierten Netzwerkelement ermöglicht eine für einen Benutzer einfache Neuprogrammierung oder Änderung des Netzwerkele- ments.

Dabei kann das Programmierwerkzeug in einer Ausführungsform entweder einen Abschnitt des Programmcodes, der im User-Space lauffähig ist, oder einen Abschnitt des Programmcodes, der nach Art eines Gerätetreibers oder eines Kernel-Moduls in den Betriebssystem-Kernel integriert ist, oder beide programmieren oder ändern.

Um eine derartige Neuprogrammierung oder Änderung des Programmcodes des Netzwerkele- ments zu ermöglichen, ist das Programmierwerkzeug ferner derart eingerichtet, dass es den Programmcode über die Implementierungsschnittstelle auf dem Rechner deployed. Dabei wird der Programmcode auf das Netzwerkelement verteilt und auf diesem installiert.

Es versteht sich, dass die vorliegende Erfindung ebenso auch ein Verfahren zum Betreiben eines Rechners mit einem Prozessor als Software-definiertes Element eines Datennetzwerks betrifft mit den Schritten: Betreiben des Rechners mit einem Betriebssystem, Empfangen eines aus einer Mehrzahl von Bitfeldern bestehenden Datenstroms aus dem über eine Datenschnittstelle mit dem Rechner verbundenen Datennetzwerk, Verarbeiten des Datenstroms mit einem Programmcode, der Funktionen eines Datennetzwerkelements auf der Control Plane und der Data Plane des Da- tennetzwerks ausführt, wobei der Programmcode zumindest teilweise als Teil des Betriebssystems im Kernel-Modus des Prozessors ausgeführt wird, so dass ein nicht an das Element adressierter Teil des Datenstroms durch den Programmcode verarbeitet wird, und Implementieren eines neuen oder eines geänderten Programmcodes auf dem Rechner mit den Schritten: Erzeugen des Programmcodes mit dem erfindungsgemäßen Verfahren so wie es zuvor in dieser Anmeldung in Ausführungsformen davon beschrieben wurde in einem mit dem Rechner verbundene Programmierwerkzeug und Deployen des Programmcodes auf dem Rechner mit Hilfe des Programmierwerkzeugs.

Weitere Vorteile, Merkmale und Anwendungsmöglichkeiten der vorliegenden Erfindung werden anhand der folgenden Beschreibung einer Ausführungsform und der dazugehörigen Figuren deutlich.

Figur 1 zeigt beispielhaft eine Definition einer DHCP-Nachricht als einen durch eine Mehrzahl von Bitfeldern definierten Datenstrom als SCIl-Art.

Figur 2 zeigt beispielhaft eine Definition des IP-Header des Internetprotokolls als einen durch eine Mehrzahl von Bitfeldern definierten Datenstrom als ASCII-Art.

Figur 3 zeigt das Flags-Bitfeld aus Figur 2, das wiederum drei Bitfelder bildet.

Figur 4 zeigt eine Definition eines MPEG-Header als einen durch eine Mehrzahl von Bit-

Bitfeldern definierten Datenstrom. Figur 5 zeigt einen C-Code zum Ausmaskieren der drei Bits des Frame-Types aus Figur 4.

Figur 6 zeigt die Benutzeroberfläche einer Software, welche eine Ausführungsform des erfindungsgemäßen Verfahrens implementiert.

Figur 7 zeigt den Aufbau und die Reihenfolge der Bitfelder einer DHCP-Nachricht als

ASCII-Art.

Figur 8 zeigt den Aufbau und die Reihenfolge der Bitfelder der DHCP-Nachricht aus Figur

7 als Datagrammteil eines graphischen Modells eines Programmcodes gemäß einer Ausführungsform der vorliegenden Erfindung.

Figur 9 zeigt den Aufbau und die Reihenfolge der Bitfelder eines VLAN-Headers als eine

Mehrzahl von Datagrammteilen und eine Mehrzahl von Verarbeitungsteilen eines graphischen Modells eines Programmcodes gemäß einer Ausführungsform der vorliegenden Erfindung.

Figur 10 zeigt einen Abschnitt einer Spezifikation eines MPEG-Datenstroms. Figur 1 1 zeigt einen Datagrammteil einer Modellierung eines Programmcodes, der einen Zugriff auf ein Bitfeld aus der MPEG-Spezifikation aus Figur 10 ermöglicht.

In den Figuren sind gleiche Elemente mit gleichen Bezugszeichen bezeichnet. Um die vorliegende Erfindung in Ausführungsformen davon im Detail zu beschreiben, werden nachstehend abwechselnd das DHCP-Protokoll und das MPEG-Protokoll als Beispiele für jeweils durch eine Mehrzahl von Bitfeldern definierte Datenströme herangezogen.

Figur 1 zeigt die Codierung der einzelnen Bits in einer Nachricht gemäß dem DHCP-Protokoll zur Übertragung über ein Datennetzwerk. Das Protokoll ist gemäß der Spezifikation RFC2131 eineindeutig definiert. Die DHCP-Nachricht besteht aus mehreren Zeilen aus jeweils 32 Bit, welche teilweise in 4 Oktetts, die wiederum aus 8 Bits bestehen, unterteilt sind.

Es gibt allerdings auch Beispiele, in denen die Bitfelder des Datenstroms keine Byte- oder Oktett- Grenzen einhalten. Ein Beispiel dafür ist der IP-Header des Internet-Protokolls, spezifiziert in RFC791. Der in Figur 2 gezeigte IP-Header weist Oktetts wie die„Time to Live", aber auch halbe Oktetts, Nibbles aus 4 Bits wie die„Internet Header Length" (IHL), sowie Bitfelder aus 3 Bits, wie das„F/ags"-Feld auf. Das„F/ags"-Feld wiederum wird von drei einzelnen Bits gebildet, welche jedes für sich ein Bitfeld im Sinne der vorliegenden Anmeldung bilden. Das„F/ags"-Feld ist in Figur 3 gezeigt. Der in Spezifikationen von Datenströmen zur Datenübertragung über Datennetzwerke gebräuchliche Begriff Oktett statt Bytes weist auf ein weiteres Problem hin: Die Bitreihenfolge ist nicht per se eindeutig, sondern muss erst definiert werden. Dies betrifft die Reihenfolge oder Schreibweise der einzelnen Bits im Byte oder Maschinenwort. In Least Significant Bit First (LSBF) oder LSB-0- Schreibweise wird das niederwertigste Bit links notiert, dann kommen weiter rechts höherwertige. In Most Significant Bit First (MSBF) oder MSB-O-Schreibweise kommt das höchstwertige Bit zuerst (links notiert). Dann kommen weiter links niederwertigere Bits. In der deutschsprachigen Wikipedia findet sich unter dem Schlagwort "Bit-Reihenfolge" eine detaillierte Beschreibung dieses Sachverhalts. Auch wenn die Begrifflichkeiten nicht eindeutig verwendet werden, muss in jeder Spezifikation, d. h. auch in dem Modell des Programmcodes gemäß der vorliegenden Erfindung eine Defi- nition der Bitreihenfolge jedes Bitfelds festgelegt werden, damit die richtigen Bits adressiert werden können.

Ein entsprechendes Definitionsproblem gibt es auch bei der Reihenfolge der Bytes im Maschinenwort. Wegen Unterschieden in der internen Arbeitsweise früherer Mikroprozessoren, haben sich verschiedene Ansätze für die Gruppierung von Bytes zu größeren Maschinenworten herausgebildet. Die gängigsten nennen sich Big-Endian und Little-Endian. Konsequenterweise muss man ebenso wie bei der Bitreihenfolge bei der Bytereihenfolge in einer Bitfeld-Spezifikation eindeutig definieren, welche Elemente des Datenstroms wie adressiert werden. Der vorliegenden Erfindung liegt der Wunsch zugrunde, auf einen durch eine Mehrzahl von Bitfeldern definierten Datenstrom, so wie er zuvor anhand der Beispiele aus Figuren 1 bis 3 beschrieben wurde, in einem Programmcode problemlos und fehlerfrei zugreifen zu können.

Die Notwendigkeit hierfür ergibt sich in Datennetzwerken insbesondere aufgrund folgender Über- legungen.

Bei der Überwachung von Datennetzwerken möchte man Werte aus dem Datenstrom extrahieren oder filtern und auf Basis dieser Daten auf einem Rechner Analysen und Berechnungen durchführen, die auf einem einzelnen Element des Datennetzwerks, beispielsweise einem Router oder Switch, so nicht möglich sind. Um diese Aufgabe zu lösen ist es eine Notwendigkeit, ein Filter in Form eines Programmcodes zu programmieren, der aus dem ausgeleiteten oder kopierten Datenstrom die relevanten Datenteile extrahiert. Neben der Durchführung von Analysen zum Überwachen eines Datennetzwerks stellt sich auch die Aufgabe, in Abhängigkeit von bestimmten Protokollinhalten ein gewünschtes Verhalten des Datennetzwerks hervorzurufen. Beispielsweise kann es notwendig sein, um die Bandbreite bestimmter Protokolle oder Teilnehmer zu gewährleisten, eine Priorisierung, d. h. ein Policy Enforce- ment, des Datenstroms in Abhängigkeit von seinem Inhalt durchzuführen.

Darüber hinaus ist es denkbar, dass der Inhalt von Datenpaketen spezieller verändert oder erweitert wird. So könnte beispielsweise in Abhängigkeit von der dynamischen Situation des Datennetzwerks, insbesondere bei Bandbreiten-Engpässen oder Konkurrenzsituationen (Congestion und Contention), sowie des Protokollinhalts die Priorisierung erwünschter Pakete erhöht oder verringert werden oder geeignete Pakete sogar gezielt verworfen werden.

Ferner gibt es auch die Notwendigkeit, bestimmte Funktionen von einzelnen Elementen des Datennetzwerks, z.B. Routern, auf herkömmlichen, standardisierten Rechnern, beispielsweise einem PC, umzusetzen oder diese Funktionen von Netzwerkelementen durch externe Rechner zu erweitern. Diese Funktion wird auch als„Software Defined Networking" und„Network Function Virtuali- zation" bezeichnet. Dafür muss in die IP- und Ethernet-Header sowie gegebenenfalls auch in Teile der Payload geschaut werden. Dazu müssen die entsprechenden Bitfelder aber aus dem Datenstrom, in dem sie enthalten sind, extrahiert, transformiert und für die Verarbeitung vorbereitet werden. Umgekehrt kann es erforderlich sein, die überarbeiteten Inhalte wieder in die entsprechenden Bitfelder des Datenstroms des Netzwerks zu schreiben.

Ferner stellt sich im Rahmen des sogenannten Internet of Things sowie der Industrie 4.0 die Aufgabe, neue Protokolle oder Schnittstellen zu bestehenden und neuen Protokollen von Sensoren und Aktoren zu erstellen. Diese Protokolle werden aufgrund der hohen Anforderungen an Kosten- und Energieeffizienz an dem maschinenseitigen Ende der Datenübertragung immer wieder mit gepackten, durch eine Mehrzahl von Bitfeldern definierten Datenströmen realisiert werden. An dem IT-seitigen Ende dieser Datenübertragung werden diese Datenströme aber mit Standard-Rechnern verknüpft werden müssen, sodass es erforderlich ist, einen Programmcode zu generieren, welcher auf die einzelnen Bitfelder des Datenstroms zugreifen kann.

Als Beispiel für die Notwendigkeit, auf ein oder mehrere Bitfelder eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms zugreifen zu müssen, wird nachstehend zunächst das Beispiel des Videostandards MPEG betrachtet. Um gegebenenfalls einzelne Pakete eines MPEG-codierten Datenstroms priorisieren zu können, gilt es beispielsweise herauszufinden, ob es sich bei den durch den Datenstrom übertragenen Daten um einen sogenannten I-Frame handelt oder nicht. Figur 4 zeigt den Aufbau eines Datenstroms eines MPEG-Headers aus einer Mehrzahl von Bitfeldern. In der MPEG-Spezifikation werden Programm-(PS) und Transport-Streams (TS) beschrieben, in denen wiederum sogenannte Packetized Elementary Streams (PES) enthalten sind. Die PES wiederrum enthalten die eigentlichen MPEG-Pakete. Für die Identifikation eines Frame-Types können alle äußeren Streams inklusive des PES ignoriert werden.

Der Header des eigentlichen MPEG-Pakets beginnt wie in Figur 4 gezeigt mit einem Start-Code aus 4 Bytes, gefolgt von weiteren 4 Bytes eines Picture-Headers. In den drei Bits 5 bis 3 von Byte 5 ist der Frame-Type codiert. Von den acht möglichen Werten der drei Bits dürfen nach der Spezi- fikation die vier Werte 1 bis 4, so wie sie in Figur 4 gezeigt sind, angenommen werden. Die Werte 0 und 5 bis 7 sind ungültig. Sollen Frames vom I-Type identifiziert werden, so gilt es herauszufinden, ob diese drei Bits die Wertigkeit 001 zeigen.

In neueren Spezifikationen von MPEG und H.264 gibt es statt Frames eine neue Typologie nach Slices. Die Nomenklatur ändert aber nicht das Wesen des Codierungsverfahrens.

In einem Programmcode in einer höheren Programmiersprache, d.h. einem Computerprogramm im herkömmlichen Sinne, gibt es mehrere indirekte aber keinen direkten Weg, um die Bits 5 bis 7 des 33-Bit-Worts des Datenstroms mit den Werten der Frame-Typen zu unterscheiden.

Figur 5 zeigt einen einfachen Programmcode in der C-Programmiersprache, welcher den Type des Frames ausliest. Über eine einzelne Byte-Variable ft wird auf das fünfte Byte des Bytestreams „bitstream" zurückgegriffen. Die interessanten Daten beginnen erst mit Bit 3, daher wird ft um drei Bits nach links„geshiftet" bzw. bitweise verschoben (ohne Überlauf rotiert). Potentielle weitere stö- rende Bits werden mit einem bitweisen AND ausmaskiert. Die Variable ft enthält dann die Werte 1 für I-Frame bis 4 für D-Frame und kann weiter verwendet werden. Zu diesem Code gibt es viele mehr oder weniger äquivalente Varianten.

Die Operationen Shiften und Maskieren sind typisch für den Umgang mit Bit-gepackten Datenstruk- turen, d.h. Bitfeldern. Sie sind die Folge des Problems, das häufig Daten mit minimalem Platzverbrauch gespeichert und übertragen werden sollen, übliche Programmiersprachen aber diskrete Operanden für ihre Operationen erfordern. So müssen die gepackten Einzel-Bits aus dem Datenstrom erst wieder ausgepackt und auf einzelne Variablen umkopiert werden, mit denen die in Programmiersprachen angebotenen Operatoren rechnen können.

Der in Figur 5 gezeigte Code in C sieht noch sehr einfach aus, da er mit Byte-Variablen formuliert ist. Auf modernen CPUs werden Byte-Werte jedoch nur ineffizient verarbeitet. Versionen mit 32- oder 64-Bitigen nativen Maschinenworten werden deutlich komplizierter, da Aspekte wie Alignment oder Byte Ordering relevant werden. Für die zu lösende Aufgabe, d.h. das Extrahieren der Werte eines einzelnen Bitfelds aus dem Datenstrom entsteht sehr schnell viel Programmcode, der darüber hinaus sehr instabil gegenüber einfachen Flüchtigkeitsfehlern bei der Programmierung ist. Um die Programmierung von Programmcode, welcher auf die Werte einzelner Bitfelder eines durch eine Mehrzahl von Bitfeldern definierten Datenstroms zugreift, zu erleichtern, wird eine Software bereitgestellt, die das Verfahren gemäß der vorliegenden Erfindung implementiert. Diese wird nachstehend anhand von Beispielen erläutert. Figur 6 zeigt das Frontend, d.h. die Benutzeroberfläche, eines solchen das Verfahren gemäß der vorliegenden Erfindung implementierenden Software. Die Bildschirmanzeige des Frontends ist in drei Teile unterteilt. In der Mitte findet sich der Eingabeteil 1 mit dem Datagrammteil und dem Verarbeitungsteil des Modells des Programmcodes. Links findet sich ein Rahmen 2, in dem ein Programmierer bereits zuvor erzeugte grafische Elemente der Bitfelder aus dem Datagrammteil vorfindet. Neben der Zuweisung des Datentyps können in diesem linken Teil zu Bitfeldern auch Kommentare zur Dokumentation hinzugefügt werden.

Rechts des Eingabeteils 1 findet sich ein Rahmen 3, welcher auch als Palette bezeichnet wird, in dem auswählbare grafische Elemente verschiedener Längen dem Programmierer angeboten werden. Diese grafischen Elemente werden im Folgenden Blöcke genannt. So finden sich dort z.B. 1 Bit-Blöcke oder 8 Bit-Blöcke sowie Vielfache davon. In der dargestellten Ausführungsform sind die geometrischen Abmessungen der grafischen Elemente, die dann die einzelnen Bitfelder des Datenstroms repräsentieren, proportional zur Länge des Bitfelds in Bit dargestellt.

In der Palette 3 finden sich neben den Vorlagen für die grafischen Elemente zum Eingeben des Datagrammteils auch Operatoren zum Auswählen für den Datagrammteil oder den Verarbeitungsteil. Die Operatoren können durch Anklicken mit der Maus markiert und dann in den Verarbeitungsteil 5 gezogen werden. Das zu dem Operanden mit dem Bezeichner "Frame_Type" gehörende Bitfeld wird repräsentiert durch das in Figur 6 markierte zweite grafische Element in der zweiten Zeile des Datagrammteils.

In der gezeigten Ausführungsform weisen alle grafischen Elemente, die jeweils ein Bitfeld repräsentieren, den gleichen Maßstab auf. Daher erkennt man auf Anhieb bei einem Blick auf den Ein- gabeteil 1 des Bildschirms welche Längenverhältnisse die einzelnen Bitfelder zueinander haben. Die grafischen Elemente der Palette können durch Anklicken mit der Maus, die hier beispielhaft als Benutzerschnittstelle erwähnt wird, an eine gewünschte Stelle in dem Eingabeteil 1 , insbesondere in dem Datagrammteil des Modells, gezogen und dort positioniert werden. Der Eingabeteil 1 besteht aus einem Datagrammteil 4 und einem Verarbeitungsteil 5. In dem gezeigten Beispiel aus Figur 6 umfasst der Datagrammteil 4 die Zeilen 1 und 2, der Verarbeitungsteil lediglich die Zeile 3.

Im Sinne der vorliegenden Anmeldung bildet die einzige Zeile 3 des Verarbeitungsteils 5 einen Ausdruck, wobei„if" der Operator des Ausdrucks ist, der auf den Operanden„Frame_Type" wirkt. Der Operand selbst wiederum enthält den Bezeichner„Frame_Type" des gleichnamigen Bitfelds, welches in dem Datagrammteil 4 definiert ist. In einer Ausführungsform der Software kann der Operand dadurch ausgewählt werden, dass das entsprechende Bitfeld„Frame_Type" in dem Datagrammteil 4 markiert und auf die Position des Operanden in dem Verarbeitungsteil 5 gezogen und dort losgelassen wird (drag & drop).

Aus der räumlichen Strukturierung und der Positionierung eines jeden Bitfelds B(F) eines fachli- chen Bezeichners F, welches einen Operanden im Befehlsteil bildet, lässt sich unter der Kenntnis des Anfangs eine eindeutige Adressierung des Bitfelds B(F) im Datenstrom berechnen.

Dies wird jetzt etwas allgemeiner betrachtet. Sei D ein fachlicher Bezeichner für ein Bitfeld B(D) und ND die Anzahl der erforderlichen Bits für B(D). Im Modell ist jedes Bit B in dem Bitfeld durch seine Adresse A(B) definiert. Gemäß dem Beispiel aus Figur 9 würde dann A(B) in einem segmentierten Adressierungsschema folgendermaßen lauten, A(B) = {Zeile n, Oktett x, Bit z}. Somit wird jedes Bit und jede Gruppe von Bits eineindeutig dargestellt. Mit jeder Adresse A(B) eines Bits wird eineindeutig eine klickbare grafische Position zugeordnet. Damit kann jede Position A(B) eines Bits im Bitfeld durch grafische Selektion, d.h. durch Anklicken auf der Benutzeroberfläche, ausgewählt werden. Die Zuordnung eines fachlichen Bezeichners zu einem Bitfeld erfolgt durch Anklicken einer Position in der grafischen Darstellung des Bitfelds im Datagrammteil 4. Der Bezeichner wird dann durch die Menge von Bits mit den Adressen A(B) bis A(B)+ND eineindeutig in grafischem Modell repräsentiert, so wie dies beispielhaft in Figur 9 dargestellt ist. Aus dieser Adressierung A(B) lässt sich mithilfe des Startbits eineindeutig die Position des adressierten Bits im Datenstrom berechnen. Zum Beispiel ergibt sich für A(B) = {Zeile n, Oktett x, Bit, z} die Position im Datenstrom für den Fall, dass das Start-Bit die Position 0 hat, als

Position = Zeilenlänge * (n-7) * +Oktettlänge * (x-7J+z. Da das zusammengesetzte Bitfeld eineindeutig durch die Anordnung der grafischen Elemente im Datagrammteil 4 des Modells abgebildet ist, repräsentiert diese Anordnung somit die Anordnung der Bitfelder im Datenstrom. Im Folgenden wird nun das Eingeben des Datagrammteils eines Modells eines Programmcodes wiederum anhand des Beispiels einer DHCP-Nachricht erläutert. Figur 7 zeigt dabei den Aufbau einer DHCP-Nachricht als ASCII-Art. Das entsprechende Datagramm des grafischen Modells des Programmcodes ist in Figur 8 gezeigt.

Gewählt wurde eine räumliche Strukturierung in Oktetts und Zeilen. In dem graphischen Frontend ist horizontal eine Strukturierung in 4 Oktetts mit jeweils 8 Bit und vertikal eine Strukturierung in Zeilen vorgesehen. Jedes Bitfeld wird als Quader dargestellt. Als erstes wird die Bitreihenfolge festgelegt. Diese beginnt links mit 0 und erhöht sich nach rechts jeweils um 1 , wenn das niederwertigste Bit zuerst (LSBF) kommt; und sie beginnt mit dem höchsten Wert, z.B. bei 31 und reduziert sich in Einerschritten auf 0, falls das höchstwertige Bit zuerst (MSBF) kommt. Danach wird für den Datagrammteil eine räumliche Strukturierung horizontal in Oktetts und vertikal in Zeilen vorgegeben. Alternativ kann diese räumliche Struktur auch implizit durch das inkrementelle Vorgehen entstehen, das im Folgenden beschrieben ist.

Um ein DHCP-Layout bzw. -Modell zu erzeugen, das graphisch der Spezifikation ähnelt, wird das Bitfeld für DHCP in Teilbitfelder von jeweils einer Zeile unterteilt. Die Zeilenelemente werden untereinander angeordnet und beginnen immer mit der Adresse 1. Nun wird die erste Zeile in 4 Ok- tetts mit der Adressierung 0 bis 3 unterteilt. Jedes Oktett wiederum bestehend aus 8 Bits mit der Adressierung 0 bis 8.

Durch Auswählen aus der Palette wird in der ersten Zeile ein graphisches Element der Länge von 8 Bit angeordnet, sodass dieses das Bitfeld für das erste Oktett darstellt. Diesem wird der Bezeich- ner„op" zugeordnet, indem man diesen Block anklickt und„op" hineinschreibt. Die Position lautet 1. Zeile, 0. Oktett, Position 0, Länge 8. Für diesen Block wird der Datentyp unsigned integer (uint) gewählt.

Für den Bezeichner„x/cf wird ein grafisches Element der Länge 32 ausgewählt und in die 2. Zeile gezogen. Falls das Layout vorab gewählt wurde, so ist dadurch die Zeile gefüllt; falls sich das Layout implizit ergibt, so schließt man die Zeile ab, z.B. mit der Eingabe von Return oder Enter.

Für das Eingeben des vollständigen DHCP-Datagramms wird entsprechend der Spezifikation aus Figur 7 vorgegangen.

Manche Spezifikationen beschreiben ihre Längen in Bytes (wie in dem Beispiel DHCP), typischerweise dann, wenn nur ganze Bytes verwendet werden. Andere (wie in dem Beispiel des IP-Hea- ders) beschreiben ihre Längen in Bits, vorzugsweise dann, wenn auch mal nur einzelne Bits oder nicht ganzzahlige Vielfache von 8 als Länge von Bitfeldern verwendet werden. Das graphische Frontend muss die Verwendung von bitweiser Zählung unterstützen, um allgemein eingesetzt werden zu können. Optional kann auch die Verwendung von Bytes ermöglicht werden. Aber die Bedeutung der Zahl (Bits oder Bytes als„Einheiten" (eigentlich nur Multiplikatoren)) ist in dem Modell immer eineindeutig definiert.

Bei einem grafischen Element für ein Bitfeld handelt es sich im Falle einer bitweisen Zählung um Quader mit einer Länge, die sich aus der Standardlänge für 1 Bit multipliziert mit der Länge (in der Regel Anzahl der Bits) des zugehörigen Bitfelds ergibt und einer Höhe, die dynamisch bestimmt wird. Die Bestimmung der Höhe erfolgt z.B. dadurch, dass die maximal notwendige Höhe zur Darstellung der Bezeichner in der entsprechenden Zeile für alle Elemente dieser Zeile als Quaderhöhe gewählt wird.

Die graphischen Elemente werden gemäß dieser räumlichen Strukturierung so angeordnet, dass dann, wenn man diese von rechts nach links und von oben nach unten liest, diese die Anordnung der Bitfelder in dem Datenstrom repräsentieren. Wird eine andere Bitreihenfolge als die aufsteigende von rechts nach links gewählt, so ergibt sich eine entsprechende Anordnung.

In einem Modell eines Programmcodes, welches in das Frontend der Software eingegeben wird, können grundsätzlich auch mehrere Datagrammteile und mehrere Verarbeitungsteile vorkommen.

In dem in Figur 9 gezeigten, in die Benutzeroberfläche eingegebenen Modell eines Programmcodes finden sich in dem Datagrammteil auch Ausdrücke, d.h. Zeilen für die erforderlichen Kontrollstrukturen, um die Bedingungen der Codierung und Abhängigkeiten auszudrücken.

Während zuvor Beispiele für eine statische Codierung der Bitfelder in einem Datenstrom beschrieben wurden, gibt es auch die Möglichkeit, die Bitfelder bedingt zu codieren. Ein solches Beispiel wird nun erläutert. Eine solche bedingte Repräsentierung oder Codierung wird beispielsweise bei einem VLAN-Hea- der verwendet: In einem unbedingten LAN-Paket kommt nach einer Präambel und zwei MAC-Ad- ressen ein Bitfeld "Ethertype/Size". Erst nachdem dieses Bitfeld gelesen wurde, kann anhand seines Werts entschieden werden, ob es nicht doch schon Teil des nur optional vorhandenen VLAN- Headers ist. Haben die entsprechenden zwei Byte den hexadezimalen Wert 0x8100, dann handelt es sich um einen VLAN-Header und es folgen die zugehörigen Daten, das sind: ein Prioritätscode PCP, ein Paket-Verwerfungsindikator DEI und eine VLAN-ID. Anschließend folgt ein neues Ether- type/Size-Bitfeld von zwei Byte. Daran anschließend folgt die unbedingte Nutzlast des Ethernet- Pakets. Abstrakt wird eine solche bedingte Bitfeld-Struktur in dem Datagrammteil wie folgt definiert: Sei X ein erster fachlicher Bezeichner, definiert über seine Startadresse /AfXJ, seine Endadresse A(X)+Nx und seine Bit- und Byte- Reihenfolge. Sei Yein zweiter Bezeichner, der dann und nur dann in dem Datenstrom an den Adressen A(Y) ö/S /A YJ+A/ydefiniert ist, wenn eine auf definierte Bedingung C(X) erfüllt ist. Die relative Adressierung Κγχ=Α(Υ)-Α(Χ) von /gegenüber X kann positiv oder negativ sein, je nachdem ob ΥΊη dem Datenstrom nach oder vorXauftritt. Die absolute Adresse A(Y) oder relative Adresse Κγχ von / gegenüber X kann sich als reines Hintergrundwissen aus einem Spezifikationsdokument oder aus einem dritten Datentyp Z als Κγχ=Ζ bestimmen, der an einer dritten, typischerweise dann festen Adresse A(Z) liegt.

Für ein ungleich komplizierteres Beispiel betrachtet man gemäß Figur 10 wieder die MPEG-Spezifikation. In den Spezifikationen zu MPEG steht teilweise sogar C-ähnlicher Code, um verschachtelte Bedingungen mittels gängiger Kontrollstrukturen formulieren zu können: Figur 10 zeigt Ab- schnitt 7.3.1 der Spezifikation„NAL Unit Syntax".

Figur 1 1 zeigt einen Datagrammteil einer Modellierung der MPEG-Spezifikation aus Figur und einem Verarbeitungsteil eines Modells eines Programmcodes. Dort sieht man z. B., dass für das vierte Bit PCR in dem ersten Oktett der fünften Zeile das Bitfeld PCR definiert ist. In Zeile 6 steht, dass die Bedingung PCR==\ gelten muss, damit dann in der siebten Zeile die 33 Bit das Bitfelds „program_clock_ref_base" , weitere unbenannte 6 Bit und die 9 Bit des Bitfelds „pro- gram_clock_ref_exf stehen. Somit ist X= PCR, A(X)=4. Zeile, 1 . Oktett, Start 4. Bit, Länge 1 Bit. C(X) ist erfüllt, falls PRC gleich 1 ist, also C(X)= (PRC==1). Dann steht Y= program_ref_base an der Adresse A(Y)= 7. Zeile, Start 1. Oktett, 1. Bit mit der Länge von 33 Bits.

Nachstehend wird nun die Umsetzung des zuvor dargestellten Modells des Programmcodes mit einer bedingten Codierung der Bitfelder in dem Datenstrom in den eigentlichen Programmcode beschrieben. Als erstes muss der Wert für einen Operanden mit dem Bezeichner F aus dem Datenstrom extrahiert werden und als Wert für eine Variable F' des Programmcodes als entsprechendes Maschinenwort dargestellt werden. Jedem, durch den in dem Operanden enthaltenen Bezeichner F, festgelegten Bitfeld B(F) der Länge Λ/Fwird dann eineindeutig durch eine Transformationsabbildung T auf ein prozessortypisches Bitfeld P, typischerweise ein Maschinenwort oder eine Variable des Programmcodes, abgebildet; P=T(B(F)).

Diese Abbildung T erfolgt für den Datentyp F durch die Anweisungen: Initialisieren eines zum Datentyp des Modells passenden Maschinenworts oder einer Variablen P des Programmcodes mit wert-neutralen Elementen, typischerweise vom Integer- Wert 0 (alle Bits vom Wert 0).

Ausschneiden des Bitfelds A(B(F)) bis A(B(F))+NF : Bit-Maskierung unter der Verwendung von Bit-weisem UND, ODER, NICHT oder Exklusiv-ODER.

Zuweisung des Bitfelds zur Variablen P.

Ausrichten der Variablen P mit dem ausgeschnittenen Bitfeld, so dass die niederwertigsten Bits von ehemals B(F) in den niederwertigsten Bits von P stehen: Anweisung Bit-Shifting. Dies beinhaltet ggf. ein Umsortieren der Bits in dem Byte und der Bytes in dem Wort von P um das erforderliche Bit- und Byte-Ordering für die Zielplattform zu erreichen.

Nun steht der ehemals in dem Bitfeld B(F) dicht gepackte Wert in einer eigenen Variablen und kann durch Prozessor-nahe Operatoren verarbeitet werden.

Zuweisen der entsprechenden Befehle und Kontrollstrukturen des Programmcodes zu den Operatoren zur Verarbeitung der Variablen. Dies erfolgt, indem für die Modell-Elemente auf Basis von Programmcode-Vorlagen, Produktionsgrammatiken oder an-deren Mechanismen des Compilerbaus für die Extrahierung, die Transformationen und Zuweisungen der entsprechende Code erzeugt oder zusammengesetzt wird. Neue Datenelemente können in den Befehlselementen beliebig eingeführt werden, um Zwischenrechnungen oder Prüfungen ausführen zu können.

- Nach Ausführen der Operatoren entsteht i.A. ein neuer Wert, dieser wird einer in den Befehlselementen erzeugten oder einem der Bitfelder zugewiesen.

Mit Hilfe des beschriebenen Verfahrens können auch Daten in den Bitstrom geschrieben werden. Dazu wird in dem graphischen Model ein graphisches Element, das mit einem Bezeichner gekenn- zeichnet ist und ein Bitfeld repräsentiert, ausgewählt. Dieses kann auch ein bedingtes, d.h. optionales Bitfeld sein. Dieses erhält dann einen eigenen Bezeichner. In dieses Bitfeld können dann mittels des Befehlsteils bzw. des aus diesem erzeugten Programmcodes Werte zurückgeschrieben werden. Dies wird nun beispielhaft beschrieben, in diesem Beispiel soll in einem strukturiert verkabelten Ethernet-Netzwerk ein mobiles Gerät, z. B. ein Notebook, immer mit demselben VLAN verbunden werden, unabhängig davon, über welche Ethernet-Dose das Notebook mit dem Netzwerk verbunden ist. Für das Beispiel wird nun wieder der Datagrammteil für den VLAN-Header aus Figur 10 betrachtet.

Das Notebook wird über seine MAC-Adresse identifiziert. Wenn das Notebook mit dem LAN Daten austauscht, wird das Bitfeld„Source_MAC" ausgelesen und diese Information mit der hinterlegten Adresse des Notebooks verglichen. Stimmen die ausgelesene Adresse und die hinterlegte Adresse überein, so wird der Header des Ethernet-Pakets um das durch„Ethertype_Size" bedingte optionale VLAN-Tag erweitert und in das 12-bittige Bitfeld„WD" die entsprechende gewünschte VLAN- ID eingetragen. Ist das Zielsystem für die Ausführung gewählt, so wird automatisch durch das oben beschriebenen Vorgehen, der Ausdruck mit dem Operanden und dem Operator aus dem Verarbeitungsteil des Modells in eine Anweisung in dem entsprechenden Programmcode umgesetzt, sodass die Anweisung den Wert einer Variablen in das durch den in dem Operanden enthaltenen Bezeichner festgelegte Bitfeld schreibt, wobei die Variable von dem für das Bitfeld festgelegten Datentyp ist, und wobei der Operator in einen auf die Variable wirkenden Befehl oder eine auf die Variable wirkende Kontrollstruktur des Programmcodes umgesetzt wird.

Für Zwecke der ursprünglichen Offenbarung wird darauf hingewiesen, dass sämtliche Merkmale, wie sie sich aus der vorliegenden Beschreibung, den Zeichnungen und den Ansprüchen für einen Fachmann erschließen, auch wenn sie konkret nur in dem Zusammenhang mit bestimmten weiteren Merkmalen beschrieben wurden, sowohl einzeln als auch in beliebigen Zusammenstellungen mit anderen der hier offenbarten Merkmale oder Merkmalsgruppen kombinierbar sind, soweit dies nicht ausdrücklich ausgeschlossen wurde oder technische Gegebenheiten derartige Kombinationen unmöglich oder sinnlos machen. Auf die umfassende, explizite Darstellung sämtlicher denk- barer Merkmalskombinationen wird hier nur der Kürze und der Lesbarkeit der Beschreibung wegen verzichtet.

Während die Erfindung in dem Detail in den Zeichnungen und der vorangehenden Beschreibung dargestellt und beschrieben wurde, erfolgt diese Darstellung und Beschreibung lediglich beispiel- haft und ist nicht als Beschränkung des Schutzbereichs gedacht, so wie er durch die Ansprüche definiert wird. Die Erfindung ist nicht auf die offenbarten Ausführungsformen beschränkt.

Abwandlungen der offenbarten Ausführungsformen sind für den Fachmann aus den Zeichnungen, der Beschreibung und den beigefügten Ansprüchen offensichtlich. In den Ansprüchen schließt das Wort "aufweisen" nicht andere Elemente oder Schritte aus, und der unbestimmte Artikel "eine" oder "ein" schließt eine Mehrzahl nicht aus. Die bloße Tatsache, dass bestimmte Merkmale in unterschiedlichen Ansprüchen beansprucht sind, schließt ihre Kombination nicht aus. Bezugszeichen in den Ansprüchen sind nicht als Beschränkung des Schutzbereichs gedacht. Bezugszeichenliste

Eingabeteil

Kommentare und Dokumentation

Palette

Datagrammteil

Verarbeitungsteil