git.ucc.asn.au
/
tpg
/
acess2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git]
/
KernelLand
/
Modules
/
IPStack
/
icmp.c
diff --git
a/KernelLand/Modules/IPStack/icmp.c
b/KernelLand/Modules/IPStack/icmp.c
index
80974ef
..
f34d790
100644
(file)
--- a/
KernelLand/Modules/IPStack/icmp.c
+++ b/
KernelLand/Modules/IPStack/icmp.c
@@
-26,7
+26,7
@@
struct {
*/
void ICMP_Initialise()
{
*/
void ICMP_Initialise()
{
- IPv4_RegisterCallback(IP4PROT_ICMP, ICMP_GetPacket);
+ IPv4_RegisterCallback(IP4PROT_ICMP, ICMP_GetPacket
, NULL
);
}
/**
}
/**
@@
-64,12
+64,15
@@
void ICMP_GetPacket(tInterface *Interface, void *Address, int Length, void *Buff
{
case 3: // Port Unreachable
Log_Debug("ICMPv4", "Destination Unreachable (Port Unreachable)");
{
case 3: // Port Unreachable
Log_Debug("ICMPv4", "Destination Unreachable (Port Unreachable)");
+ IPv4_HandleError( Interface, IPERR_PORT_UNREACHABLE,
+ htons(Length)-sizeof(tICMPHeader), hdr->Data );
break;
default:
Log_Debug("ICMPv4", "Destination Unreachable (Code %i)", hdr->Code);
break;
default:
Log_Debug("ICMPv4", "Destination Unreachable (Code %i)", hdr->Code);
+ IPv4_HandleError( Interface, IPERR_MISC,
+ htons(Length)-sizeof(tICMPHeader), hdr->Data );
break;
}
break;
}
-// IPv4_Unreachable( Interface, hdr->Code, htons(hdr->Length)-sizeof(tICMPHeader), hdr->Data );
break;
// -- 8: Echo Request
break;
// -- 8: Echo Request
@@
-87,7
+90,6
@@
void ICMP_GetPacket(tInterface *Interface, void *Address, int Length, void *Buff
tIPStackBuffer *buffer = IPStack_Buffer_CreateBuffer(1 + IPV4_BUFFERS);
IPStack_Buffer_AppendSubBuffer(buffer, Length, 0, hdr, NULL, NULL);
IPv4_SendPacket(Interface, *(tIPv4*)Address, 1, ntohs(hdr->Sequence), buffer);
tIPStackBuffer *buffer = IPStack_Buffer_CreateBuffer(1 + IPV4_BUFFERS);
IPStack_Buffer_AppendSubBuffer(buffer, Length, 0, hdr, NULL, NULL);
IPv4_SendPacket(Interface, *(tIPv4*)Address, 1, ntohs(hdr->Sequence), buffer);
- IPStack_Buffer_DestroyBuffer(buffer);
break;
default:
break;
break;
default:
break;
@@
-128,12
+130,11
@@
int ICMP_Ping(tInterface *Interface, tIPv4 Addr)
tIPStackBuffer *buffer = IPStack_Buffer_CreateBuffer(1 + IPV4_BUFFERS);
IPStack_Buffer_AppendSubBuffer(buffer, sizeof(buf), 0, buf, NULL, NULL);
IPv4_SendPacket(Interface, Addr, 1, i, buffer);
tIPStackBuffer *buffer = IPStack_Buffer_CreateBuffer(1 + IPV4_BUFFERS);
IPStack_Buffer_AppendSubBuffer(buffer, sizeof(buf), 0, buf, NULL, NULL);
IPv4_SendPacket(Interface, Addr, 1, i, buffer);
- IPStack_Buffer_DestroyBuffer(buffer);
end = ts + Interface->TimeoutDelay;
while( !gICMP_PingSlots[i].bArrived && now() < end) Threads_Yield();
end = ts + Interface->TimeoutDelay;
while( !gICMP_PingSlots[i].bArrived && now() < end) Threads_Yield();
- if(
now() >= end
)
+ if(
!gICMP_PingSlots[i].bArrived
)
return -1;
return (int)( now() - ts );
return -1;
return (int)( now() - ts );
UCC
git Repository :: git.ucc.asn.au