From: Paul Emmerich <emmericp@net.in.tum.de>
To: James Bensley <jwbensley@gmail.com>
Cc: "Wiles, Keith" <keith.wiles@intel.com>,
"users@dpdk.org" <users@dpdk.org>
Subject: Re: [dpdk-users] PktGen Ethertype
Date: Tue, 9 May 2017 16:13:30 +0200 [thread overview]
Message-ID: <E184B7C6-5466-4CED-BEA7-E1E97C89FBCB@net.in.tum.de> (raw)
In-Reply-To: <B59FD1B0-D2D4-49EA-9C21-D3B2E0A47EFE@intel.com>
Hi,
I usually don't hijack threads about pktgen with an ad for my packet generator. But I'll make an exception here (sorry) since that kind of weird packet modification requirements was one of the main reasons for me to build my own packet generator:
https://github.com/emmericp/MoonGen
MoonGen runs Lua code for each single packet that is sent out (instead of just configuring some existing logic in C), so modifying any field is easy.
Also, all fields in commonly used protocol stacks are exposed via sensible names and all these messy offsets are calculated automatically.
You can have a look at one of the example scripts to see packet modifications in action:
https://github.com/emmericp/MoonGen/blob/master/examples/l3-load-latency.lua
Basically, you can add
pkt.eth.type = <ethertype> (network byte order)
or
pkt.eth:setType(<ethertype>) (automatic byte order swap)
In the main loop at line 92 where it currently modifies the IP addresses.
This is still fast because we dynamically build and compile the necessary structs for the protocol stack.
You can also receive packets to find out which ethertypes are dropped (if any), an example of packet reception can be found in this example:
https://github.com/emmericp/MoonGen/blob/master/examples/quality-of-service-test.lua#L108
By default, we use the NIC's hardware counters for rx/tx stats (another important difference from pktgen which receives and drops packets by default).
Paul
> Wiles, Keith <keith.wiles@intel.com>:
>
>>
>> On May 9, 2017, at 3:55 AM, James Bensley <jwbensley@gmail.com> wrote:
>>
>> Hi All,
>>
>> I hope this is a suitable place to ask, if not please point me at
>> somewhere more appropriate.
>>
>> I've been reading through the Pktgen docs
>> (http://pktgen.readthedocs.io/en/latest/commands.html for example) and
>> I'm trying to find out if I can set the EtherType field in the layer 2
>> headers to any value I like. I can't seem to find anything on this.
>>
>> I want to use some Lua scripts to generate traffic with every possible
>> EtherType (from 0x0000 to 0xFFFF) and send that through a switch and
>> test that all frames were received on the other side. Is there a
>> function like pktgen.set_eth_type() so I can wrap it in loop?
>>
>> // Build an entire frame then just loop over the ethertype for each frame:
>>
>> build_entire_frame_with_payload();
>>
>> for (i = 0; i <= 0xFFFF; i++) {
>>
>> pktgen.set_eth_type(i);
>> send_frame();
>> }
>
> Yes this would be nice, but at this point pktgen is not able to do this type of feature.
> This would be a nice feature for scripting, I have not had time to add that support :-(
>
> The range command can allow you to adjust the type field and then send those in a burst. The problem is pktgen was designed to send packets at a high rate if needed and that means setting up the packets before hand. The number of packets being able to be setup before hand is 8192. The random command can adjust the ether type randomly for each packet with a performance hit. Maybe one of these would help. Also I am more then willing to take patches :-)
>
>>
>> Cheers,
>> James.
>
> Regards,
> Keith
--
Chair of Network Architectures and Services
Department of Informatics
TU München
Boltzmannstr. 3
85748 Garching bei München, Germany
next prev parent reply other threads:[~2017-05-09 14:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-09 8:55 James Bensley
2017-05-09 13:56 ` Wiles, Keith
2017-05-09 14:13 ` Paul Emmerich [this message]
2017-05-10 9:12 ` James Bensley
2017-05-10 9:09 ` James Bensley
2017-05-10 13:53 ` Wiles, Keith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E184B7C6-5466-4CED-BEA7-E1E97C89FBCB@net.in.tum.de \
--to=emmericp@net.in.tum.de \
--cc=jwbensley@gmail.com \
--cc=keith.wiles@intel.com \
--cc=users@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).