Chris,
I think it's a bug of Ping command. The reply message may come before or after
the Transmit function return, so the caller should be ready to handle the reply
message before calling Transmit function. You can move the InsertTailList to
the front of Transmit and have a try.
Best Regards
Siyuan
From: Chris Cuthbert [mailto:nd6...@hotmail.com]
Sent: Wednesday, August 20, 2014 5:02 AM
To: Fu, Siyuan; Edk2 Devel
Subject: RE: [edk2] Missing Ping Reply
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...@intel.com<mailto:siyuan...@intel.com>
To: nd6...@hotmail.com<mailto:nd6...@hotmail.com>;
edk2-devel@lists.sourceforge.net<mailto:edk2-devel@lists.sourceforge.net>
Subject: RE: [edk2] Missing Ping Reply
Date: Tue, 19 Aug 2014 04:10:51 +0000
Hi, Chris
I still can't reproduce this issue on my side, what's the EDKII and shell
revision you are using? Can you reproduce it on other NIC, like NT32?
Best Regards,
Siyuan
From: Chris Cuthbert [mailto:nd6...@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...@intel.com<mailto:siyuan...@intel.com>
To: nd6...@hotmail.com<mailto:nd6...@hotmail.com>;
edk2-devel@lists.sourceforge.net<mailto: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 doesn't use DPC so the
Rx event's 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:nd6...@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...@intel.com<mailto:siyuan...@intel.com>
To: edk2-devel@lists.sourceforge.net<mailto:edk2-devel@lists.sourceforge.net>;
nd6...@hotmail.com<mailto:nd6...@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)? Ping's 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:nd6...@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
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel