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

Wiles, Keith keith.wiles at intel.com
Tue Apr 18 08:31:34 CEST 2017


> 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.

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