* ICMP now removes its header before passing the error on to the upper levels.

* Therefore, IPv4 no longer needs to mess with that (incorrectly, anyway).
* Removed unused include, turned off ICMP debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37650 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2010-07-21 14:54:24 +00:00
parent 82a115e8bc
commit fcea1b1665
2 changed files with 6 additions and 14 deletions

View File

@ -27,12 +27,10 @@
#include <net_stack.h>
#include <NetBufferUtilities.h>
//#include <util/list.h>
#include "ipv4.h"
#define TRACE_ICMP
//#define TRACE_ICMP
#ifdef TRACE_ICMP
# define TRACE(x...) dprintf(x)
#else
@ -70,11 +68,6 @@ typedef NetBufferField<uint16, offsetof(icmp_header, checksum)>
ICMPChecksumField;
#define ICMP_TYPE_ECHO_REPLY 0
#define ICMP_TYPE_UNREACH 3
#define ICMP_TYPE_REDIRECT 5
#define ICMP_TYPE_ECHO_REQUEST 8
// type unreach codes
#define ICMP_CODE_UNREACH_NEED_FRAGMENT 4
// this is used for path MTU discovery
@ -365,6 +358,7 @@ icmp_receive_data(net_buffer* buffer)
if (error > 0) {
// Deliver the error to the domain protocol which will
// propagate the error to the upper protocols
bufferHeader.Remove();
return domain->module->error_received(error, buffer);
}
break;

View File

@ -733,7 +733,7 @@ raw_receive_data(net_buffer* buffer)
// and lists for RAW and non-RAW sockets.
return deliver_multicast(&gIPv4Module, buffer, true);
}
RawSocketList::Iterator iterator = sRawSockets.GetIterator();
size_t count = 0;
@ -1679,16 +1679,14 @@ ipv4_deliver_data(net_protocol* _protocol, net_buffer* buffer)
status_t
ipv4_error_received(uint32 code, net_buffer* data)
ipv4_error_received(uint32 code, net_buffer* buffer)
{
// Extracts the IP header in the ICMP message
NetBufferFieldReader<ipv4_header, 8> header(data);
net_protocol_module_info* protocol = receiving_protocol(header->protocol);
net_protocol_module_info* protocol = receiving_protocol(buffer->protocol);
if (protocol == NULL)
return B_ERROR;
// propagate error
return protocol->error_received(code, data);
return protocol->error_received(code, buffer);
}