trafgen: proto: Split static protocol definition out of struct proto_hdr
commitee3f53306b1ceb5235ac587c2e0a605c13922d78
authorTobias Klauser <tklauser@distanz.ch>
Fri, 12 Aug 2016 07:46:59 +0000 (12 09:46 +0200)
committerTobias Klauser <tklauser@distanz.ch>
Fri, 12 Aug 2016 07:46:59 +0000 (12 09:46 +0200)
tree091b354a9a5722498b56b22fc7572415803d84be
parent355bbe1b1e7fe1b0ab07fe2de8cb6e64418d51e0
trafgen: proto: Split static protocol definition out of struct proto_hdr

Currently struct proto_hdr is used twofold:

  1) Statically define protocol behavior, i.e. all the *_hdr definitions in
     trafgen_l{2,3,4}.c which map a protocol id/layer to a set of callback
     functions.

  2) For each packet created at parse time the struct is memcpy()'ed
     (including all the static information from 1) and then used to store
     dynamic information at parse/run time.

Thus, struct proto_hdr members such as the proto id, layer and the
pointers callback functions get copied for each created packet (in
addition to the other fields which get changed during parsing). Also,
static/dynamic information get mixed and we e.g. can't make the protocol
definitions const to ensure they'll not get changed by mistake.

Rather than copying the struct proto_hdr for every packet, clearly
separate the two purposes defined above by splitting struct proto_hdr
into two structs:

  1) struct proto_ops for the static (const) protocol behavior definition

  2) struct proto_hdr (reduced) for dynamic information

struct proto_hdr keeps a pointer to the corresponding proto_ops instance
and uses it to execute the corresponding callbacks.

Reference: https://groups.google.com/forum/#!msg/netsniff-ng/20RvwJdh50Y/eMkbmKSaBgAJ
Acked-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
trafgen_l2.c
trafgen_l3.c
trafgen_l4.c
trafgen_parser.y
trafgen_proto.c
trafgen_proto.h