Re: [edk2] Missing Ping Reply

Subject: Re: [edk2] Missing Ping Reply

From: Chris Cuthbert <nd6969@hotmail.com>

To: "Fu, Siyuan" <siyuan.fu@intel.com>, Edk2 Devel <edk2-devel@lists.sourceforge.net>

Date: 2014-08-20 05:01:51

Hi Siyuan,

The reason that the reply is missing is because when the reply is received and "Ping6OnEchoReplyReceived" is called, it kicks out in the call to "Ping6MatchEchoReply". The reason that reply does not match because there is no entry in the TxList when reply is received.
In the function "PingSendEchoRequest", the ICMP message is sent out first before the entry is inserted into TxList. The reply comes back before the call comes back from "Transmit" function of the IPV4 protocol.
Is this because the call to transmit is too long ?
Is IPV4 protocol transmit call doing some house keeping within that call ?

Thanx,
Narinder Dhillon


From: siyuan.fu@intel.com
To: nd6969@hotmail.com; edk2-devel@lists.sourceforge.net
Subject: RE: [edk2] Missing Ping Reply
Date: Tue, 19 Aug 2014 04:10:51 +0000

Hi, Chris

 

I still cant reproduce this issue on my side, whats the EDKII and shell revision you are using? Can you reproduce it on other NIC, like NT32?

 

Best Regards,

Siyuan

 

From: Chris Cuthbert [mailto:nd6969@hotmail.com]
Sent: Tuesday, August 19, 2014 10:22 AM
To: Fu, Siyuan; Edk2 Devel
Subject: RE: [edk2] Missing Ping Reply

 

Looks okay.

 

Ip4InstanceDeliverPacket: Before SignalEvent Token->Status 0x0

Ip4InstanceDeliverPacket: Before SignalEvent Token->Packet.RxData->HeaderLength 0x14

Ip4InstanceDeliverPacket: Before SignalEvent Token->Packet.RxData->DataLength 0x10

 

 


From: siyuan.fu@intel.com
To: nd6969@hotmail.com; edk2-devel@lists.sourceforge.net
Subject: RE: [edk2] Missing Ping Reply
Date: Tue, 19 Aug 2014 01:20:55 +0000

Hi, Chris

 

DispatchDpc returns NOT_FOUND is correct. Ping command doesnt use DPC so the Rx events callback function will be invoked immediately after SingalEvent(). Did you check the Token->Status and Token->Packet.RxData in Ip4InstanceDeliverPacket() before SingalEvent?

 

Best Regards,

Siyuan

 

From: Chris Cuthbert [mailto:nd6969@hotmail.com]
Sent: Tuesday, August 19, 2014 1:18 AM
To: Fu, Siyuan; Edk2 Devel
Subject: RE: [edk2] Missing Ping Reply

 

Hi Siyuan,

Here is the log again. Looks like NOT_FOUND is being returned by DispatchDpc.
Thanx.


Shell> ping -n 1 172.25.17.100
Ping StartsAPing 172.25.17.100 16 data bytes
NicVfTransmit                                                     (ARP request)
NicVfGetPacket                                                   (ARP reply)
NicVfTransmit                                                      (Ping request)
NicVfGetPacket                                                    (Ping reply)
Ip4AccpetFrame EFI_IP_PROTO_ICMP
Ip4IcmpHandle ICMP_QUERY_MESSAGE
Ip4ProcessIcmpQuery Ip4Demultiplex
Ip4Demultiplex Ip4InterfaceEnquePacket
Ip4Demultiplex Ip4InterfaceEnquePacket
Ip4Demultiplex Ip4InterfaceDeliverPacket
Ip4InstanceDeliverPacket: Before SignalEvent
Ip4InstanceDeliverPacket: After SignalEvent 0x0
Ip4Demultiplex Ip4InterfaceDeliverPacket
Ip4AccpetFrame: Before DispatchDpc
Ip4AccpetFrame: After DispatchDpc 0x800000000000000E

1 packets transmitted, 0 received, 100% packet loss, time 0ms


From: siyuan.fu@intel.com
To: edk2-devel@lists.sourceforge.net; nd6969@hotmail.com
Subject: RE: [edk2] Missing Ping Reply
Date: Mon, 18 Aug 2014 06:14:08 +0000

Hi, Chris

 

Could you please help to check the return status of the gBS->SignalEvent and DispatchDpc (see attached patch file)?  Pings call back function should be invoked when IP4 driver calling SignalEvent or DispatchDpc (mostly after SingalEvent if you execute the ping command in EFI shell).

 

Best Regards,

Siyuan

 

From: Chris Cuthbert [mailto:nd6969@hotmail.com]
Sent: Sunday, August 17, 2014 11:14 AM
To: Edk2 Devel
Subject: [edk2] Missing Ping Reply

 

Hi All,

 

I am implementing a UEFI driver for a network controller and I am producing Simple Network Protocol(SNP). To test this, I am using the 'ping' shell command. The problem is that I never get the first ping reply. I have debugged this all the way up the IPv4 stack and I can see that reply packet is being passed up but the first packet never reaches the 'ping' command. Logs below. From the ping source code it looks like it is creating an event to get a call back on reply packet and as part of the call back, it registers for event again if more replies are expected. But the first reply never kicks the call back function.

Any suggestions ?

Thanx.

 

Shell> ping -n 1 172.25.17.100

Ping StartsAPing 172.25.17.100 16 data bytes

NicVfTransmit                                                          (ARP request)

NicVfGetPacket                                                        (ARP reply)

NicVfTransmit                                                          (Ping packet)

NicVfGetPacket                                                        (Ping reply)

Ip4AccpetFrame EFI_IP_PROTO_ICMP                    (ICMP recognized)

Ip4IcmpHandle ICMP_QUERY_MESSAGE

Ip4ProcessIcmpQuery Ip4Demultiplex                    (Ip4Demultiplex function call)

Ip4Demultiplex Ip4InterfaceEnquePacket

Ip4Demultiplex Ip4InterfaceEnquePacket

Ip4Demultiplex Ip4InterfaceDeliverPacket

Ip4Demultiplex Ip4InterfaceDeliverPacket

 

1 packets transmitted, 0 received, 100% packet loss, time 0ms