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 <[email protected]>:
> 
>> 
>> On May 9, 2017, at 3:55 AM, James Bensley <[email protected]> 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 



Reply via email to