Age | Commit message (Collapse) | Author | Files | Lines |
|
Add function 'arp()' to support generating ARP header fields from
the trafgen configuration language.
Supported fields:
htype hardware type, default: 1 (Ethernet)
ptype protocol type, default: 0x0800 (IP)
op|oper operation (req|request, reply, <num>), default: 1 (request)
sha|smac sender MAC address, default: device MAC
spa|sip sender IP address, default: device IP
tha|tmac target MAC address, default: 00:00:00:00:00:00
tpa|tip target IP address, default: 0.0.0.0
Note: setting hlen and tlen is not supported, these will by set to
hlen=6 and plen=4 in any case.
Example usage:
{ arp(op=request, sip=1.1.1.1, smac=11:22:33:44:55:66, tip=42.42.42.42) }
{ arp() }
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: document keywords in commit message]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add ARP protocol header fields generation. By default htype ethernet (1)
and ptype IPv4 (0x0800) and the corresponding hlen/plen values will be
initialized and the opcode is set to ARP Request (1).
Source MAC and IP address are set to the device's addresses if not
specified.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: rephrase and extend commit message]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add helper which fills a device's ipv4 addr to the specified protocol field.
It will be used by protocols like ARP, IPv4, etc.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add function 'eth()' to support generating Ethernet header fields from the
trafgen configuration language.
Supported fields:
da|daddr destination address, default: 00:00:00:00:00:00
sa|saddr source address, default: device MAC
prot|proto protocol number, default: 0x0000
Example usage:
{ eth(prot=0x0800, da=11:22:33:44:55:66), fill(0xff, 60) }
{ eth(prot=0x0800) }
{ eth() }
It is important that proto_init is called before fields will be filled
to initialize the specified proto with header fields.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: document supported keywords in commit message]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add function to convert a string in the format xx:xx:xx:xx:xx:xx to a
MAC address byte array.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: Add len parameter and error out on too short buffers]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add trafgen_l2.c module for generating L2 related headers.
Add Ethernet header generating. By default source MAC address
is used from the specified output device.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add helper function to set device's MAC address to protocol field which may
be used by Ethernet & ARP protocol header generation functions.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add device_hw_address() function to get device MAC address.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: Add len parameter and error out on too short buffers]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
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>
|
|
Add current_packet() helper for getting current
used packet and make it public to other modules.
It will be used by proto generation logic.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Make public set_fill func to be used by proto generation code.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
The proto_ prefix is reserved for dissectors and the header contains
helper functions not exclusive to the proto_vlan dissector, so give it a
more generic name.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
This fixes the following sparse warning:
ring_rx.c:197:6: warning: symbol 'join_fanout_group' was not declared. Should it be static?
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Simplify the code in arp_print_addrs() a bit.
This was actually intended as an amend to commit f6371fb6df91
("dissectors: arp: Print hardware & protocol addresses").
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Print sender/target MAC and/or IPv4 address if htype is Ethernet and/or
ptype is IPv4, respectively.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
[tk: minor simplifications of the code]
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Using the option -F with mausezahn, to read input out of a hexfile,
results in corrupt data transmitted (first byte will always be 0).
Properly parse "payload="/p=" at the start of the file by the same
method as used in layer3.c and layer4.c
Closes #153
Reference: http://permalink.gmane.org/gmane.linux.network.netsniff-ng/600
Signed-off-by: Thomas Fleischmann <thomas.fleischmann.08@googlemail.com>
Reported-by: Thomas De Schampheleire
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Lets strtoul(...) func set pointer of unit name for ring size option,
instead of check each character by isdigit(...).
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
It is not needed to parse each character to find
unit name in the option string but just let to do it
via strtoul providing the pointer which will keep non numeric
value.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Move gap feature into rate shaper, as these features
means the same - delay the packet sending.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Simplify dump & flows refreshing via one nfct handle, which is enough.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
There is no need to have 2 separate handlers for the flow updating, so
use the one which was used for flow refreshing. Significant change is
that a new flow entry will be not added during update (i.e. on
NFCT_T_UPDATE events) if it was not found in the list. But this case
shoud never happen as there will always be an NFCT_T_NEW event before an
NFCT_T_UPDATE event.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Use 'kbit' instead of kBit in usage and manpage to actually reflect what
trafgen expects.
Fixes: 9ece0fe02096 ("trafgen: Add option to specify packets sending rate")
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Added -b,--rate option in units of:
pps/B/kB/MB/kBit/Mbit/Gbit/KiB/MiB/GiB
to specify rate at which packets will be sent.
Similarly to -t,--gap option the packets will be sent
in slow mode with 1 CPU.
Tested with ifpps.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
gzip from busybox does not understand the '--best' command line option.
Use '-9' instead which is understood by all gzip flavours (checked with
GNU, BSD and busybox).
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Reset do_reload_flows flag before dump flows. It allows to change
filter state more dynamically
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Show 'Active' filter status if 'a' was pressed.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Show family name in the filter status line.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add zsh completion for -D/--define command line option added in commit
126e0038a73b ("trafgen: Added option to pass macro/define for C
preprocessor")
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add zsh completion for -D/--define command line option added in commit
121119215276 ("bpfc: Add option to pass macro/define for C
preprocessor")
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Pass argv as char *const argv[] as execvp expects it.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add -D,--define option which allows to pass multiple
macro/defines which can be used in trafgen script
(e.g. by #ifdef ).
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add -D,--define option to pass macro/define for C preprocessor
(e.g. to use #ifdef's within bpf file). Option allows to pass
multiple -D,--define options.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
|
|
Add argv_insert function to dynamically insert string
into argv list.
Also added argv_free func to easy free dynamically allocated
argv list.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Extend cpp_exec function with args parameter to
specify additional cpp options (like -D).
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Replace 'system' call by proc_exec function from proc.c
module. It allows to easy extend cpp invoking with additional
options (like -D) in more secure way.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Add proc_exec function which executes given process with
argv list via fork + execvp.
It allows to replace 'system' call approach which is used
for invoking cpp and securely extend it with additional options
like -D.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
The sd_len member of struct ctx stores a copy of struct addrinfo member
ai_addrlen which is of type socklen_t. Also it is used in a sendto()
call which also expects a socklen_t. Adjust sd_len to be socklen_t too.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
The zsh completion of trafgen is missing a backspace after the -t/--gap
option which leads to the completion not working correctly. Fix it.
Signed-off-by: Tobias Klauser <tobias.klauser@zhinst.com>
|
|
The URL and one form name for the coverity scanner changed, adjust our
coverity target accordingly.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Ensure a stable link order independent of the configured locale in order
to make the build reproducible.
Patch from Reiner Herrmann, submitted via the Debian Bug Tracker
(#806547).
Reference: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=806547
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Remove empty lines in switch/case after break in genl_print_ctrl_attrs
to be consistent with coding style in the rest of the file.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Dump Generic netlink ops & mcast groups nested attributes.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Follow 3f2f363485d3 ("trafgen: Make sure yyin is set before close it")
and check the yyin pointer against NULL before attempting to call
fclose() with it.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
In case if cpp failed then it is possible that trafgen
may hang on closing uninitialized yyin.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
No need to duplicate the call to preprocess_packets(), just call it
directly after compile_packets()/compile_packets_str().
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
There might be a case when input file is located
in read-only directory and cpp fails when it tries to
create output file there, so use /tmp folder for that
as usually it should be writeable for any user.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|
|
Use cpp_exec func to invoke C preprocesor.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
|