trafgen: Add basic protocol generation logic
commite476a36e65cd8508c6473a19e497fb04487e2214
authorVadim Kochan <vadim4j@gmail.com>
Tue, 26 Jan 2016 20:24:59 +0000 (26 22:24 +0200)
committerTobias Klauser <tklauser@distanz.ch>
Thu, 28 Jan 2016 15:04:39 +0000 (28 16:04 +0100)
treefda95e71b99c875684d84e103ee5e510e1a5016f
parentbc412cb595d8a06ae47ffc90602a25ecbde81e0d
trafgen: Add basic protocol generation logic

Add new trafgen_proto.c module with basic protocol header fields
generation logic. This will allow to support protocol specific keywords
in the trafgen configuration language.

Each protocol must implement struct proto_hdr and register it to the
global proto list.

Protocol headers consist of a set of fields, and each field must be
described via struct proto_field by specifying unique id, length and
offset (relative to the header start). Fields smaller than 8 bits can be
described via left shift & mask.

The following callbacks are invoked to perform special actions to build
the header during parsing:

    1) header_init - required fields must be added to the packet and
        initialized with default values.

    2) header_finish - it is invoked when header is specified, all user
        specified fields are set.

    3) packet_finish - callback is invoked from upper to lower header
to calculate fields depending on upper layers such as total
length or checksum.

The protocol generation API provides convenience protocol field
setters/getters to to be used in the parser while crafting the packet.

Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: wordsmithing on commit message, minor variable type changes]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
trafgen.c
trafgen/Makefile
trafgen_proto.c [new file with mode: 0644]
trafgen_proto.h [new file with mode: 0644]