I've developed some preliminary version of the driver. The code is derived from Null PMD, but required a lot of rework.
It uses following devargs to generate packets: 1) edit=offset:size:[rnd|value] Edit a field within an mbuf packet data with given offset and size. Mark it as 'rnd' or assign it a hex value, for example: 'edit=8:16:rnd' tags field with offset 8 bytes and with size of 16 bytes random-generated, 'edit=14:4:0xdeadbeef' assigns a specified sequence of bytes to the field (network byte order). 2) tmpl=name Use a template with name. Instead of editing data manually, specify a hard-coded template and then edit only intended fields. Implemented icmp4, tcp4, but needs to be expanded. 3) size=len Specify a size of packet. May not be less than size of template (checked on devinit). I ran testpmd (start/stop), then l2fwd, looks like it works, but I'd be happy to hear about additional tests I need to run to ensure the PMD conformance. With 64 bytes packet and one 8-byte random field it's about 6-7 Mpps now. I use rte_rand()/lrand48() as a source of random bytes, it impacts a performance, but I haven't come up with anything else. On 15.06.2016 16:07, Bruce Richardson wrote: > On Wed, Jun 15, 2016 at 04:03:59PM +0600, Yerden Zhumabekov wrote: >> >> Right, but development of various features regarding L3/L4 etc requires more >> subtle approach, like live packets, different protocol versions, fields >> manipulation. In this case some packet mangling/randomizing capabilities >> would be quite useful. Something similar to what is done in Pktgen, but more >> lightweight approach, in a same app. >> >> I've almost made my mind :) so the next question: is there any guide on PMD >> dev? I'm looking through rte_ether.h right now, but some doc would be very >> nice. > Unfortunately not. My suggestion is to take one of the simple vdev's e.g. > ring, > pcap, null, and work off a copy of it. > > /Bruce