[dpdk-dev] Unable to send ping requests using pktgen-dpdk

Safiyat Reza reza.safiyat at acm.org
Fri Apr 21 19:52:36 CEST 2017


On 18 April 2017 at 12:01, Wiles, Keith <keith.wiles at intel.com> wrote:

>
> > On Apr 17, 2017, at 11:35 AM, Safiyat Reza <reza.safiyat at acm.org> wrote:
> >
> > On 17 April 2017 at 21:25, Wiles, Keith <keith.wiles at intel.com> wrote:
> > Comments below:
> >
> > > On Apr 17, 2017, at 8:07 AM, Safiyat Reza <reza.safiyat at acm.org>
> wrote:
> > >
> > > Hi,
> > >
> > > I am trying to ping a remote machine (within the same network) via
> port 0
> > > using the command
> > >
> > > Pktgen> ping4 0
>
> The range packets and single mode packets use different buffers. The ping4
> command uses its own buffers based on the single mode configuration. The
> single mode config is when all of the other modes are disable or the
> default configuration. The information to config the single mode packets is
> the ‘page main or page 0’ screen. The ping4 will construct a packets based
> on single mode config only. The ping4 will only send a single packet and
> you would have to call ping4 multiple times to send more then one.


I was unaware that the ping command uses its own buffer. I was expecting my
configuration via the range command to work for ping too. Thanks for this
information! Worked for me.

The range packets will allow a set of packets to be sent on a given port.
> The sequence mode which is yet another set of buffers allow you to
> construct a set of packets for a port. These are enabled with the seqCnt
> set to non-zero value and use the ‘page seq’ or lua code to construct the
> frames. It would be good to load the lua script and then verify with the
> page seq        command. The ‘port N’ command will should you the port for
> range and sequence packets.
>
> So the ping4 only works with the single mode configuration and not any
> others. Not sure other then PCAP file you are going to get the results you
> want, unless you are only needing to determine the route and ARP entries
> are filled with the ping command. The prime command just sent out a short
> burst of packets in an attempt to get the ARP entries filled before sending
> huge amount of traffic.
>
> > >
> > > But the packet that is received on the remote machine is not a ping
> packet.
> > > Upon investigation using dpdkcap (https://github.com/dpdkcap/dpdkcap)
> and
> > > tcpdump, the packet
> > >
> > > dpdkcap output:
> > >    reading from file output_01.pcap, link-type EN10MB (Ethernet)
> > >    12:50:34.870498 IP 50.0.50.14.4660 > 50.0.50.13.22136: tcp 6
> > >        0x0000:  4500 002e 1636 0000 0406 d879 3200 320e
> E....6.....y2.2.
> > >        0x0010:  3200 320d 1234 5678 1234 5678 1234 5690
> 2.2..4Vx.4Vx.4V.
> > >        0x0020:  5010 2000 6c72 0000 7778 797a 3031       P...lr..wxyz01
> > >
> > > tcpdump output:
> > >    tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture
> size
> > > 65535 bytes
> > >        12:53:49.828091 IP (tos 0x0, ttl 4, id 5794, offset 0, flags
> > > [none], proto TCP (6), length 46)
> > >        50-0-50-14.dsl.dynamic.fusionbroadband.com.4660 >
> > > 50-0-50-13.dsl.dynamic.fusionbroadband.com.22136: Flags [.], cksum
> 0x6c72
> > > (correct), seq 305419896:305419902, ack 305419920, win 8192, length 6
> > >
> > >
> > > The output after turning screen on is:
> > >    - Ports 0-0 of 1   <Main Page>  Copyright (c) <2010-2016>, Intel
> > > Corporation
> > >      Flags:Port      :   -E----R--------:0
> > >    Link State        :       <UP-10000-FD>     ----TotalRate----
> > >    Pkts/s Max/Rx     :                 2/0                   2/0
> > >           Max/Tx     :                 1/0                   1/0
> > >    MBits/s Rx/Tx     :                 0/0                   0/0
> > >    Broadcast         :                   0
> > >    Multicast         :                  15
> > >      64 Bytes        :                   0
> > >      65-127          :                   0
> > >      128-255         :                   0
> > >      256-511         :                   3
> > >      512-1023        :                   0
> > >      1024-1518       :                   0
> > >    Runts/Jumbos      :                12/0
> > >    Errors Rx/Tx      :                 0/0
> > >    Total Rx Pkts     :                  15
> > >          Tx Pkts     :                   2
> > >          Rx MBs      :                   0
> > >          Tx MBs      :                   0
> > >    ARP/ICMP Pkts     :                12/0
> > >                  :
> > >    Pattern Type      :             abcd...
> > >    Tx Count/% Rate   :      Forever / 255%
> > >    PktSize/Tx Burst  :           64 /   10
> > >    Src/Dest Port     :         4660 /22136
> > >    Pkt Type:VLAN ID  :     IPv4 / TCP:0001
> > >    Dst  IP Address   :          50.0.50.13
> > >    Src  IP Address   :       50.0.50.14/24
> > >    Dst MAC Address   :   fa:16:3e:e3:81:68
> > >    Src MAC Address   :   fa:16:3e:62:5e:3c
> > >    VendID/PCI Addr   :   1af4:1000/00:04.0
> > >
> > >    -- Pktgen Ver: 3.1.2 (DPDK 16.07.2)  Powered by Intel® DPDK
> > > -------------------
> > >
> > > On the sender side (using pktgen-dpdk) apart from setting the usual
> source
> > > and destination ip addresses and mac addresses, I am setting
> > >
> > >    pktgen.icmp_echo("all", "on”);
> >
> > This command only enables processing incoming ICMP echo packets. This is
> the ‘E’ flags value above.
> > I understand it is to enable the replies to ping requests. Added it here
> just for information, in case it affects the outgoing ping requests.
> >
> > >    pktgen.send_arp("all", "g”);
> >
> > This one only sends a single ARP packet.
> > Yes. I added this piece of information just in case it affects the
> outgoing ping requests.
> >
> > If you are trying to send multiple ping or ICMP echo request packets
> then you need to construct a packet in the sequence page ‘page seq’. What
> is being sent is the single mode packets you see on the first page.
> >
> > It also looks like you have Range packets enabled, did you configure the
> range packets via ‘page range’?
> >
> > Yes, I have configured the range feature, using a lua script. Below is
> the relevant code snippet for the same.
> >
> >     function setup()
> >         pktgen.set("all", "count", 0);
> >         pktgen.set("all", "pps", tonumber(pps));    -- custom change to
> pktgen-dpdk source to support setting pps directly.
> >         pktgen.set("all", "size", tonumber(packetSize));
> >         pktgen.set("all", "burst", tonumber(burst));
> >         pktgen.set("all", "sport", 0x1234);
> >         pktgen.set("all", "dport", 0x5678);
> >         pktgen.set("all", "prime", 1);
> >         pktgen.set("all", "seqCnt", 0);
> >
> >         pktgen.range.vlan_id("all", "start", tonumber(vlanid));
> >         pktgen.range.vlan_id("all", "inc", 0);
> >         pktgen.range.vlan_id("all", "min", 1);
> >         pktgen.range.vlan_id("all", "max", 4094);
> >
> >         pktgen.range.pkt_size("all", "start", tonumber(packetSize));
> >         pktgen.range.pkt_size("all", "inc", 0);
> >         pktgen.range.pkt_size("all", "min", 64);
> >         pktgen.range.pkt_size("all", "max", 1518);
> >
> >         pktgen.set_mac("all", dstmac);
> >
> >         pktgen.set_ipaddr("all", "dst", dstip);
> >         pktgen.range.dst_ip("all", "start", dstipStart);
> >         pktgen.range.dst_ip("all", "inc", dstipInc);
> >         pktgen.range.dst_ip("all", "min", dstipMin);
> >         pktgen.range.dst_ip("all", "max", dstipMax);
> >
> >         pktgen.range.dst_port("all", "start", dstportStart);
> >         pktgen.range.dst_port("all", "inc", dstportInc);
> >         pktgen.range.dst_port("all", "min", dstportMin);
> >         pktgen.range.dst_port("all", "max", dstportMax);
> >
> >         pktgen.set_ipaddr("all", "src", srcip.."/24");
> >         pktgen.range.src_ip("all", "start", srcipStart);
> >         pktgen.range.src_ip("all", "inc", srcipInc);
> >         pktgen.range.src_ip("all", "min", srcipMin);
> >         pktgen.range.src_ip("all", "max", srcipMax);
> >
> >         pktgen.range.src_port("all", "start", srcportStart);
> >         pktgen.range.src_port("all", "inc", srcportInc);
> >         pktgen.range.src_port("all", "min", srcportMin);
> >         pktgen.range.src_port("all", "max", srcportMax);
> >
> >         pktgen.range.dst_mac("all", "start", dstmac);
> >         pktgen.range.dst_mac("all", "inc", dstmacInc);
> >         pktgen.range.dst_mac("all", "min", dstmac);
> >         pktgen.range.dst_mac("all", "max", dstmac);
> >
> >         pktgen.send_arp("all", "g");
> >         pktgen.icmp_echo("all", "on");
> >         pktgen.set_range("all", "on");
> >     end
> >
> > From your reply, I still couldn't gather completely about how to
> correctly send the ICMP echo request. I may need to send multiple requests
> but right now I am trying to send one request only.
> >
> > >
> > > via a lua script file. The burst size is 10.
> > >
> > > I am trying this on VMs with 'Virtio network device' as the NIC and
> using
> > > igb_uio driver.
> > >
> > > I have no idea why I am unable to send ping packets. Can anyone guide
> me as
> > > to what I am doing wrong, or why this issue might be coming?
> > >
> > > Thanks!
> > >
> > > Regards,
> > >
> > > *S*afiyat *R*eza
> > > Google+ <https://plus.google.com/110916808580428369956/posts> | GitHub
> > > <https://github.com/safiyat/> | LinkedIn
> > > <https://in.linkedin.com/in/safiyat-reza-74329765>
> >
> > Regards,
> > Keith
>
> Regards,
> Keith
>
>


More information about the dev mailing list