On Mon, Jun 29, 2015 at 03:58:51AM +0300, Vadim Kochan wrote: > Hi, > > This is the 1-st "try" version of how I see the protocol generation API for > the > trafgen util as mz replacement (at least for better performance). > > I am sending this just because to get your feedback about conceptual idea, > and as soon as I got some basic working version I decided to share the > code just to get know if I am moving in the right direction. > > Added high-level command line protocol packet building intreface, > which allows to specify protocol parameters to build the header and > payload. > > Each protocol is represented by proto_gen struct which is responsible > only for providing field info (size, data) by name to trafgen's > low level packet generation layer. > > All packet generation routine is performed by the generic code in > trafgen.c which parses the command line, obtains proto name, param=value > list and calls the specific protocol handler to get protocol field info > by name, so the TX routine remains the same. > > The command line syntax looks like: > > trafgen/trafgen --dev lo eth da = AA:BB:CC:DD:EE:FF sa=11:22:33:44:55:66, > arp op=rep tip=192.168.1.1 -n 1 > > so the first is proto name and after there are param value pairs which > are separated by space, in case if there are multiple protocols > specified - their should be separated by "," after last param value of > the previous protocol. > > I think the picture will be more clear after adding IP protocol with checksum > handling. > > Vadim Kochan (10): > trafgen: Move ctx struct to separated header > str: Add converting cmdline args vector to str > trafgen: Export packet manipulation funcs for proto gen > trafgen: Add helper to get current packet > str: Add converting hex string to bytes > net_utils: Add net_utils module for net helper funcs > dev: Add func to get device's hw address > trafgen: Add basic protocol generation API > layer2_gen: Add Ethernet L2 layer proto generation > layer2_gen: Add ARP L2 layer protocol generation > > dev.c | 23 +++++ > dev.h | 1 + > layer2_gen.c | 310 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > net_utils.c | 41 ++++++++ > net_utils.h | 7 ++ > netsniff-ng.c | 18 +--- > proto_gen.c | 160 ++++++++++++++++++++++++++++ > proto_gen.h | 68 ++++++++++++ > str.c | 87 ++++++++++++++++ > str.h | 2 + > trafgen.c | 254 +++++++++++++++++++++++++++++++++++++++++---- > trafgen.h | 21 ++++ > trafgen/Makefile | 3 + > trafgen_conf.h | 7 ++ > trafgen_parser.y | 13 ++- > 15 files changed, 975 insertions(+), 40 deletions(-) > create mode 100644 layer2_gen.c > create mode 100644 net_utils.c > create mode 100644 net_utils.h > create mode 100644 proto_gen.c > create mode 100644 proto_gen.h > create mode 100644 trafgen.h > > -- > 2.4.2 >
Sorry for a such mess with this ... few things which I still do not like in these changes are: 1) Seems ctx is not needed to move to separated hedaer to use it in 'struct proto_gen' but add needed fields (char *device) in 'struct proto_gen' & initialize them after proto lookup in trafgen.c 2) Using 'value' field in 'struct proto_field' seems useless and instead may be just using 'uint8_t *ptr' should be enough. Regards, -- You received this message because you are subscribed to the Google Groups "netsniff-ng" group. To unsubscribe from this group and stop receiving emails from it, send an email to netsniff-ng+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.