git.ucc.asn.au
/
tpg
/
acess2.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
9143c18
)
IPStack - Heaps of network fixes
author
John Hodge
<
[email protected]
>
Sun, 23 Jan 2011 15:08:11 +0000
(23:08 +0800)
committer
John Hodge
<
[email protected]
>
Sun, 23 Jan 2011 15:08:11 +0000
(23:08 +0800)
- Also reduced verbosity
Modules/IPStack/arp.c
patch
|
blob
|
history
Modules/IPStack/icmp.c
patch
|
blob
|
history
Modules/IPStack/ipv4.c
patch
|
blob
|
history
Modules/IPStack/link.c
patch
|
blob
|
history
Modules/IPStack/tcp.c
patch
|
blob
|
history
diff --git
a/Modules/IPStack/arp.c
b/Modules/IPStack/arp.c
index
35532f6
..
8238263
100644
(file)
--- a/
Modules/IPStack/arp.c
+++ b/
Modules/IPStack/arp.c
@@
-272,33
+272,25
@@
void ARP_int_GetPacket(tAdapter *Adapter, tMacAddr From, int Length, void *Buffe
}
#endif
}
#endif
- Log_Debug("ARP", "Request ID %i", ntohs(req4->Request));
-
switch( ntohs(req4->Request) )
{
case 1: // You want my IP?
switch( ntohs(req4->Request) )
{
case 1: // You want my IP?
- Log_Debug("ARP", "ARP Request Address class %i", req4->SWSize);
// Check what type of IP it is
switch( req4->SWSize )
{
case 4:
// Check what type of IP it is
switch( req4->SWSize )
{
case 4:
- Log_Debug("ARP", "From MAC %02x:%02x:%02x:%02x:%02x:%02x",
- req4->SourceMac.B[0], req4->SourceMac.B[1],
- req4->SourceMac.B[2], req4->SourceMac.B[3],
- req4->SourceMac.B[4], req4->SourceMac.B[5]);
- //Log_Debug("ARP", "to MAC %02x:%02x:%02x:%02x:%02x:%02x",
- // req4->DestMac.B[0], req4->DestMac.B[1],
- // req4->DestMac.B[2], req4->DestMac.B[3],
- // req4->DestMac.B[4], req4->DestMac.B[5]);
Log_Debug("ARP", "ARP Request IPv4 Address %i.%i.%i.%i from %i.%i.%i.%i",
req4->DestIP.B[0], req4->DestIP.B[1], req4->DestIP.B[2],
req4->DestIP.B[3],
req4->SourceIP.B[0], req4->SourceIP.B[1],
req4->SourceIP.B[2], req4->SourceIP.B[3]);
Log_Debug("ARP", "ARP Request IPv4 Address %i.%i.%i.%i from %i.%i.%i.%i",
req4->DestIP.B[0], req4->DestIP.B[1], req4->DestIP.B[2],
req4->DestIP.B[3],
req4->SourceIP.B[0], req4->SourceIP.B[1],
req4->SourceIP.B[2], req4->SourceIP.B[3]);
+ Log_Debug("ARP", " from MAC %02x:%02x:%02x:%02x:%02x:%02x",
+ req4->SourceMac.B[0], req4->SourceMac.B[1],
+ req4->SourceMac.B[2], req4->SourceMac.B[3],
+ req4->SourceMac.B[4], req4->SourceMac.B[5]);
iface = IPv4_GetInterface(Adapter, req4->DestIP, 0);
if( iface )
{
iface = IPv4_GetInterface(Adapter, req4->DestIP, 0);
if( iface )
{
- Log_Debug("ARP", "Caching sender's IP Address");
ARP_UpdateCache4(req4->SourceIP, req4->SourceMac);
req4->DestIP = req4->SourceIP;
ARP_UpdateCache4(req4->SourceIP, req4->SourceMac);
req4->DestIP = req4->SourceIP;
diff --git
a/Modules/IPStack/icmp.c
b/Modules/IPStack/icmp.c
index
9f67175
..
de3a9db
100644
(file)
--- a/
Modules/IPStack/icmp.c
+++ b/
Modules/IPStack/icmp.c
@@
-37,23
+37,22
@@
void ICMP_GetPacket(tInterface *Interface, void *Address, int Length, void *Buff
{
tICMPHeader *hdr = Buffer;
{
tICMPHeader *hdr = Buffer;
- Log("[ICMP ] Length = %i", Length);
- Log("[ICMP ] hdr->Type = %i", hdr->Type);
- Log("[ICMP ] hdr->Code = %i", hdr->Code);
- Log("[ICMP ] hdr->Checksum = 0x%x", ntohs(hdr->Checksum));
- Log("[ICMP ] hdr->ID = 0x%x", ntohs(hdr->ID));
- Log("[ICMP ] hdr->Sequence = 0x%x", ntohs(hdr->Sequence));
+ //Log_Debug("ICMPv4", "Length = %i", Length);
+ Log_Debug("ICMPv4", "hdr->Type, hdr->Code = %i, %i", hdr->Type, hdr->Code);
+ //Log_Debug("ICMPv4", "hdr->Checksum = 0x%x", ntohs(hdr->Checksum));
+ Log_Debug("ICMPv4", "hdr->ID = 0x%x", ntohs(hdr->ID));
+ Log_Debug("ICMPv4", "hdr->Sequence = 0x%x", ntohs(hdr->Sequence));
switch(hdr->Type)
{
// -- 0: Echo Reply
case ICMP_ECHOREPLY:
if(hdr->Code != 0) {
switch(hdr->Type)
{
// -- 0: Echo Reply
case ICMP_ECHOREPLY:
if(hdr->Code != 0) {
-
Warning("[ICMP ]
Code == %i for ICMP Echo Reply, should be 0", hdr->Code);
+
Log_Warning("ICMPv4", "
Code == %i for ICMP Echo Reply, should be 0", hdr->Code);
return ;
}
if(hdr->ID != (Uint16)~hdr->Sequence) {
return ;
}
if(hdr->ID != (Uint16)~hdr->Sequence) {
-
Warning("[ICMP ]
ID and Sequence values do not match");
+
Log_Warning("ICMPv4", "
ID and Sequence values do not match");
//return ;
}
gICMP_PingSlots[hdr->ID].bArrived = 1;
//return ;
}
gICMP_PingSlots[hdr->ID].bArrived = 1;
@@
-64,10
+63,10
@@
void ICMP_GetPacket(tInterface *Interface, void *Address, int Length, void *Buff
switch(hdr->Code)
{
case 3: // Port Unreachable
switch(hdr->Code)
{
case 3: // Port Unreachable
- Log
("[ICMP ]
Destination Unreachable (Port Unreachable)");
+ Log
_Debug("ICMPv4", "
Destination Unreachable (Port Unreachable)");
break;
default:
break;
default:
- Log
("[ICMP ]
Destination Unreachable (Code %i)", hdr->Code);
+ Log
_Debug("ICMPv4", "
Destination Unreachable (Code %i)", hdr->Code);
break;
}
// IPv4_Unreachable( Interface, hdr->Code, htons(hdr->Length)-sizeof(tICMPHeader), hdr->Data );
break;
}
// IPv4_Unreachable( Interface, hdr->Code, htons(hdr->Length)-sizeof(tICMPHeader), hdr->Data );
@@
-76,14
+75,14
@@
void ICMP_GetPacket(tInterface *Interface, void *Address, int Length, void *Buff
// -- 8: Echo Request
case ICMP_ECHOREQ:
if(hdr->Code != 0) {
// -- 8: Echo Request
case ICMP_ECHOREQ:
if(hdr->Code != 0) {
-
Warning("[ICMP ]
Code == %i for ICMP Echo Request, should be 0", hdr->Code);
+
Log_Warning("ICMPv4", "
Code == %i for ICMP Echo Request, should be 0", hdr->Code);
return ;
}
return ;
}
-
Log("[ICMP ]
Replying");
+
//Log_Debug("ICMPv4", "
Replying");
hdr->Type = ICMP_ECHOREPLY;
hdr->Checksum = 0;
hdr->Checksum = htons( IPv4_Checksum(hdr, Length) );
hdr->Type = ICMP_ECHOREPLY;
hdr->Checksum = 0;
hdr->Checksum = htons( IPv4_Checksum(hdr, Length) );
-
Log("[ICMP ]
Checksum = 0x%04x", hdr->Checksum);
+
//Log_Debug("ICMPv4", "
Checksum = 0x%04x", hdr->Checksum);
IPv4_SendPacket(Interface, *(tIPv4*)Address, 1, ntohs(hdr->Sequence), Length, hdr);
break;
default:
IPv4_SendPacket(Interface, *(tIPv4*)Address, 1, ntohs(hdr->Sequence), Length, hdr);
break;
default:
diff --git
a/Modules/IPStack/ipv4.c
b/Modules/IPStack/ipv4.c
index
ad6c891
..
3c67c03
100644
(file)
--- a/
Modules/IPStack/ipv4.c
+++ b/
Modules/IPStack/ipv4.c
@@
-102,7
+102,7
@@
int IPv4_SendPacket(tInterface *Iface, tIPv4 Address, int Protocol, int ID, int
hdr->HeaderChecksum = 0; // Will be set later
hdr->Source = *(tIPv4*)Iface->Address;
hdr->Destination = Address;
hdr->HeaderChecksum = 0; // Will be set later
hdr->Source = *(tIPv4*)Iface->Address;
hdr->Destination = Address;
- hdr->HeaderChecksum =
IPv4_Checksum(hdr, sizeof(tIPv4Header
));
+ hdr->HeaderChecksum =
htons(IPv4_Checksum(hdr, sizeof(tIPv4Header)
));
Log_Log("IPv4", "Sending packet to %i.%i.%i.%i",
Address.B[0], Address.B[1], Address.B[2], Address.B[3]);
Log_Log("IPv4", "Sending packet to %i.%i.%i.%i",
Address.B[0], Address.B[1], Address.B[2], Address.B[3]);
@@
-149,9
+149,9
@@
void IPv4_int_GetPacket(tAdapter *Adapter, tMacAddr From, int Length, void *Buff
// Check Header checksum
{
Uint16 hdrVal, compVal;
// Check Header checksum
{
Uint16 hdrVal, compVal;
- hdrVal =
hdr->HeaderChecksum
;
+ hdrVal =
ntohs(hdr->HeaderChecksum)
;
hdr->HeaderChecksum = 0;
hdr->HeaderChecksum = 0;
- compVal = IPv4_Checksum(hdr, hdr->HeaderLength);
+ compVal = IPv4_Checksum(hdr, hdr->HeaderLength
* 4
);
if(hdrVal != compVal) {
Log_Log("IPv4", "Header checksum fails (%04x != %04x)", hdrVal, compVal);
return ;
if(hdrVal != compVal) {
Log_Log("IPv4", "Header checksum fails (%04x != %04x)", hdrVal, compVal);
return ;
@@
-208,7
+208,7
@@
void IPv4_int_GetPacket(tAdapter *Adapter, tMacAddr From, int Length, void *Buff
// Routing
if(!iface)
{
// Routing
if(!iface)
{
- Log_Debug("IPv4", "Route the packet");
+
//
Log_Debug("IPv4", "Route the packet");
// TODO: Parse Routing tables and determine where to send it
// TODO: Parse Routing tables and determine where to send it
@@
-241,6
+241,7
@@
tInterface *IPv4_GetInterface(tAdapter *Adapter, tIPv4 Address, int Broadcast)
{
if( iface->Adapter != Adapter ) continue;
if( iface->Type != 4 ) continue;
{
if( iface->Adapter != Adapter ) continue;
if( iface->Type != 4 ) continue;
+ //Log_Debug("IPv4", "%x == %x?\n", addr, ntohl(((tIPv4*)iface->Address)->L));
if( IP4_EQU(Address, *(tIPv4*)iface->Address) )
return iface;
if( IP4_EQU(Address, *(tIPv4*)iface->Address) )
return iface;
@@
-282,7
+283,7
@@
Uint32 IPv4_Netmask(int FixedBits)
*/
Uint16 IPv4_Checksum(const void *Buf, int Size)
{
*/
Uint16 IPv4_Checksum(const void *Buf, int Size)
{
- Uint
16
sum = 0;
+ Uint
32
sum = 0;
const Uint16 *arr = Buf;
int i;
const Uint16 *arr = Buf;
int i;
@@
-290,11
+291,14
@@
Uint16 IPv4_Checksum(const void *Buf, int Size)
for(i = 0; i < Size; i++ )
{
Uint16 val = ntohs(arr[i]);
for(i = 0; i < Size; i++ )
{
Uint16 val = ntohs(arr[i]);
- if((int)sum + val > 0xFFFF)
- sum ++; // Simulate 1's complement
sum += val;
}
sum += val;
}
- return ~sum ;
+
+ // Apply one's complement
+ while (sum >> 16)
+ sum = (sum & 0xFFFF) + (sum >> 16);
+
+ return ~sum;
}
/**
}
/**
diff --git
a/Modules/IPStack/link.c
b/Modules/IPStack/link.c
index
88d92db
..
4be9d80
100644
(file)
--- a/
Modules/IPStack/link.c
+++ b/
Modules/IPStack/link.c
@@
-37,12
+37,10
@@
void Link_RegisterType(Uint16 Type, tPacketCallback Callback)
int i;
void *tmp;
int i;
void *tmp;
- Type = htons(Type); // Set to network order
-
for( i = giRegisteredTypes; i -- ; )
{
if(gaRegisteredTypes[i].Type == Type) {
for( i = giRegisteredTypes; i -- ; )
{
if(gaRegisteredTypes[i].Type == Type) {
- Log_Warning("N
ET
", "Attempt to register 0x%x twice", Type);
+ Log_Warning("N
et Link
", "Attempt to register 0x%x twice", Type);
return ;
}
// Ooh! Free slot!
return ;
}
// Ooh! Free slot!
@@
-54,7
+52,7
@@
void Link_RegisterType(Uint16 Type, tPacketCallback Callback)
giRegisteredTypeSpace += 5;
tmp = realloc(gaRegisteredTypes, giRegisteredTypeSpace*sizeof(*gaRegisteredTypes));
if(!tmp) {
giRegisteredTypeSpace += 5;
tmp = realloc(gaRegisteredTypes, giRegisteredTypeSpace*sizeof(*gaRegisteredTypes));
if(!tmp) {
- Log_Warning("N
ET
",
+ Log_Warning("N
et Link
",
"Out of heap space! (Attempted to allocate %i)",
giRegisteredTypeSpace*sizeof(*gaRegisteredTypes)
);
"Out of heap space! (Attempted to allocate %i)",
giRegisteredTypeSpace*sizeof(*gaRegisteredTypes)
);
@@
-79,7
+77,7
@@
void Link_SendPacket(tAdapter *Adapter, Uint16 Type, tMacAddr To, int Length, vo
Uint8 buf[bufSize]; // dynamic stack arrays ftw!
tEthernetHeader *hdr = (void*)buf;
Uint8 buf[bufSize]; // dynamic stack arrays ftw!
tEthernetHeader *hdr = (void*)buf;
- Log_Log("N
ET
", "Sending %i bytes to %02x:%02x:%02x:%02x:%02x:%02x (Type 0x%x)",
+ Log_Log("N
et Link
", "Sending %i bytes to %02x:%02x:%02x:%02x:%02x:%02x (Type 0x%x)",
Length, To.B[0], To.B[1], To.B[2], To.B[3], To.B[4], To.B[5], Type);
hdr->Dest = To;
Length, To.B[0], To.B[1], To.B[2], To.B[3], To.B[4], To.B[5], Type);
hdr->Dest = To;
@@
-108,7
+106,7
@@
void Link_WatchDevice(tAdapter *Adapter)
}
if(tid > 0) {
}
if(tid > 0) {
- Log_Log("N
ET
", "Watching '%s' using tid %i", Adapter->Device, tid);
+ Log_Log("N
et Link
", "Watching '%s' using tid %i", Adapter->Device, tid);
return ;
}
return ;
}
@@
-116,7
+114,7
@@
void Link_WatchDevice(tAdapter *Adapter)
Link_InitCRC();
Threads_SetName(Adapter->Device);
Link_InitCRC();
Threads_SetName(Adapter->Device);
- Log_Log("N
ET
", "Thread %i watching '%s'", Threads_GetTID(), Adapter->Device);
+ Log_Log("N
et Link
", "Thread %i watching '%s'", Threads_GetTID(), Adapter->Device);
// Child Thread
while(Adapter->DeviceFD != -1)
// Child Thread
while(Adapter->DeviceFD != -1)
@@
-127,7
+125,7
@@
void Link_WatchDevice(tAdapter *Adapter)
Uint32 checksum;
// Wait for a packet (Read on a network device is blocking)
Uint32 checksum;
// Wait for a packet (Read on a network device is blocking)
- Log_Debug("NET", "Waiting on adapter FD#0x%x", Adapter->DeviceFD);
+
//
Log_Debug("NET", "Waiting on adapter FD#0x%x", Adapter->DeviceFD);
ret = VFS_Read(Adapter->DeviceFD, MAX_PACKET_SIZE, buf);
if(ret == -1) break;
ret = VFS_Read(Adapter->DeviceFD, MAX_PACKET_SIZE, buf);
if(ret == -1) break;
@@
-136,25
+134,26
@@
void Link_WatchDevice(tAdapter *Adapter)
continue;
}
continue;
}
- Log_Log("NET", "Packet from %02x:%02x:%02x:%02x:%02x:%02x",
+ Log_Log("Net Link",
+ "Packet from %02x:%02x:%02x:%02x:%02x:%02x"
+ " to %02x:%02x:%02x:%02x:%02x:%02x",
hdr->Src.B[0], hdr->Src.B[1], hdr->Src.B[2],
hdr->Src.B[0], hdr->Src.B[1], hdr->Src.B[2],
- hdr->Src.B[3], hdr->Src.B[4], hdr->Src.B[5]
- );
- Log_Log("NET", "to %02x:%02x:%02x:%02x:%02x:%02x",
+ hdr->Src.B[3], hdr->Src.B[4], hdr->Src.B[5],
hdr->Dest.B[0], hdr->Dest.B[1], hdr->Dest.B[2],
hdr->Dest.B[3], hdr->Dest.B[4], hdr->Dest.B[5]
);
checksum = *(Uint32*)&hdr->Data[ret-sizeof(tEthernetHeader)-4];
hdr->Dest.B[0], hdr->Dest.B[1], hdr->Dest.B[2],
hdr->Dest.B[3], hdr->Dest.B[4], hdr->Dest.B[5]
);
checksum = *(Uint32*)&hdr->Data[ret-sizeof(tEthernetHeader)-4];
- Log_Log("NET", "Checksum 0x%08x", checksum);
+ //Log_Log("NET", "Checksum 0x%08x", checksum);
+ // TODO: Check checksum
// Check if there is a registered callback for this packet type
for( i = giRegisteredTypes; i--; )
{
// Check if there is a registered callback for this packet type
for( i = giRegisteredTypes; i--; )
{
- if(gaRegisteredTypes[i].Type ==
hdr->Type)
break;
+ if(gaRegisteredTypes[i].Type ==
ntohs(hdr->Type))
break;
}
// No? Ignore it
if( i == -1 ) {
}
// No? Ignore it
if( i == -1 ) {
- Log_Log("N
ET
", "Unregistered type 0x%x", ntohs(hdr->Type));
+ Log_Log("N
et Link
", "Unregistered type 0x%x", ntohs(hdr->Type));
continue;
}
continue;
}
diff --git
a/Modules/IPStack/tcp.c
b/Modules/IPStack/tcp.c
index
e42e940
..
18150a3
100644
(file)
--- a/
Modules/IPStack/tcp.c
+++ b/
Modules/IPStack/tcp.c
@@
-84,7
+84,7
@@
void TCP_SendPacket( tTCPConnection *Conn, size_t Length, tTCPHeader *Data )
buf[2] = (htons(Length)<<16) | (6<<8) | 0;
Data->Checksum = 0;
memcpy( &buf[3], Data, Length );
buf[2] = (htons(Length)<<16) | (6<<8) | 0;
Data->Checksum = 0;
memcpy( &buf[3], Data, Length );
- Data->Checksum =
IPv4_Checksum( buf, buflen
);
+ Data->Checksum =
htons( IPv4_Checksum( buf, buflen )
);
free(buf);
IPv4_SendPacket(Conn->Interface, Conn->RemoteIP.v4, IP4PROT_TCP, 0, Length, Data);
break;
free(buf);
IPv4_SendPacket(Conn->Interface, Conn->RemoteIP.v4, IP4PROT_TCP, 0, Length, Data);
break;
UCC
git Repository :: git.ucc.asn.au