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.

Reply via email to