From f9a86ebeab0c95f0b7e0e501a832e4c91fb04026 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 26 Jun 2025 21:41:24 -0400 Subject: [PATCH] network: Add net_error_data parameter to error_received. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same structure as used for error_reply, to contain information (like path MTU or redirect gateway) from the original error packet, so that upper layers don't have to re-parse it. Nothing uses or passes it around at present, but it will be used in the next commits. Change-Id: I38a3dec5506bdcb77a7850294082db7be74dd80f Reviewed-on: https://review.haiku-os.org/c/haiku/+/9399 Reviewed-by: waddlesplash Tested-by: Commit checker robot Reviewed-by: Jérôme Duval --- headers/private/net/net_protocol.h | 2 +- .../kernel/bluetooth/btCoreData/ConnectionInterface.cpp | 2 +- src/add-ons/kernel/network/protocols/icmp/icmp.cpp | 4 ++-- src/add-ons/kernel/network/protocols/icmp6/icmp6.cpp | 2 +- src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp | 4 ++-- src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp | 2 +- src/add-ons/kernel/network/protocols/l2cap/l2cap.cpp | 2 +- src/add-ons/kernel/network/protocols/tcp/tcp.cpp | 2 +- src/add-ons/kernel/network/protocols/udp/udp.cpp | 2 +- src/add-ons/kernel/network/protocols/unix/unix.cpp | 2 +- src/add-ons/kernel/network/stack/link.cpp | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/headers/private/net/net_protocol.h b/headers/private/net/net_protocol.h index 73633e225d..08448364a8 100644 --- a/headers/private/net/net_protocol.h +++ b/headers/private/net/net_protocol.h @@ -105,7 +105,7 @@ struct net_protocol_module_info { status_t (*receive_data)(net_buffer* data); status_t (*deliver_data)(net_protocol* self, net_buffer* data); - status_t (*error_received)(net_error error, net_buffer* data); + status_t (*error_received)(net_error error, net_error_data* errorData, net_buffer* data); status_t (*error_reply)(net_protocol* self, net_buffer* cause, net_error error, net_error_data* errorData); diff --git a/src/add-ons/kernel/bluetooth/btCoreData/ConnectionInterface.cpp b/src/add-ons/kernel/bluetooth/btCoreData/ConnectionInterface.cpp index 8c8dff29ee..425ba23a00 100644 --- a/src/add-ons/kernel/bluetooth/btCoreData/ConnectionInterface.cpp +++ b/src/add-ons/kernel/bluetooth/btCoreData/ConnectionInterface.cpp @@ -50,7 +50,7 @@ HciConnection::~HciConnection() if (L2cap != NULL) { net_buffer* error = gBufferModule->create(128); error->interface_address = &interface_address; - if (L2cap->error_received(B_NET_ERROR_UNREACH_HOST, error) != B_OK) { + if (L2cap->error_received(B_NET_ERROR_UNREACH_HOST, NULL, error) != B_OK) { error->interface_address = NULL; gBufferModule->free(error); } diff --git a/src/add-ons/kernel/network/protocols/icmp/icmp.cpp b/src/add-ons/kernel/network/protocols/icmp/icmp.cpp index 5561743da9..28647182e1 100644 --- a/src/add-ons/kernel/network/protocols/icmp/icmp.cpp +++ b/src/add-ons/kernel/network/protocols/icmp/icmp.cpp @@ -554,7 +554,7 @@ icmp_receive_data(net_buffer* buffer) net_error error = icmp_to_net_error(header.type, header.code); if (error != 0) { bufferHeader.Remove(); - return domain->module->error_received(error, buffer); + return domain->module->error_received(error, NULL, buffer); } break; } @@ -579,7 +579,7 @@ icmp_receive_data(net_buffer* buffer) status_t -icmp_error_received(net_error code, net_buffer* data) +icmp_error_received(net_error code, net_error_data* errorData, net_buffer* data) { return B_ERROR; } diff --git a/src/add-ons/kernel/network/protocols/icmp6/icmp6.cpp b/src/add-ons/kernel/network/protocols/icmp6/icmp6.cpp index e2583b3ead..def182d54b 100644 --- a/src/add-ons/kernel/network/protocols/icmp6/icmp6.cpp +++ b/src/add-ons/kernel/network/protocols/icmp6/icmp6.cpp @@ -299,7 +299,7 @@ icmp6_deliver_data(net_protocol *protocol, net_buffer *buffer) status_t -icmp6_error_received(net_error code, net_buffer* data) +icmp6_error_received(net_error code, net_error_data* errorData, net_buffer* data) { return B_ERROR; } diff --git a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp index db0dd53f20..c1520b8540 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp +++ b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp @@ -1878,7 +1878,7 @@ ipv4_deliver_data(net_protocol* _protocol, net_buffer* buffer) status_t -ipv4_error_received(net_error error, net_buffer* buffer) +ipv4_error_received(net_error error, net_error_data* errorData, net_buffer* buffer) { TRACE(" ipv4_error_received(error %d, buffer %p [%" B_PRIu32 " bytes])", (int)error, buffer, buffer->size); @@ -1929,7 +1929,7 @@ ipv4_error_received(net_error error, net_buffer* buffer) return B_ERROR; // propagate error - return protocol->error_received(error, buffer); + return protocol->error_received(error, errorData, buffer); } diff --git a/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp b/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp index 2a205d5281..80717be05f 100644 --- a/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp +++ b/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp @@ -1572,7 +1572,7 @@ ipv6_deliver_data(net_protocol* _protocol, net_buffer* buffer) status_t -ipv6_error_received(net_error error, net_buffer* data) +ipv6_error_received(net_error error, net_error_data* errorData, net_buffer* data) { return B_ERROR; } diff --git a/src/add-ons/kernel/network/protocols/l2cap/l2cap.cpp b/src/add-ons/kernel/network/protocols/l2cap/l2cap.cpp index 5c7882aa82..e3cd6f6735 100644 --- a/src/add-ons/kernel/network/protocols/l2cap/l2cap.cpp +++ b/src/add-ons/kernel/network/protocols/l2cap/l2cap.cpp @@ -296,7 +296,7 @@ l2cap_receive_data(net_buffer* buffer) status_t -l2cap_error_received(net_error error, net_buffer* data) +l2cap_error_received(net_error error, net_error_data* errorData, net_buffer* data) { CALLED(); diff --git a/src/add-ons/kernel/network/protocols/tcp/tcp.cpp b/src/add-ons/kernel/network/protocols/tcp/tcp.cpp index 1353f4bed0..454bed983e 100644 --- a/src/add-ons/kernel/network/protocols/tcp/tcp.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/tcp.cpp @@ -757,7 +757,7 @@ tcp_receive_data(net_buffer* buffer) status_t -tcp_error_received(net_error error, net_buffer* data) +tcp_error_received(net_error error, net_error_data* errorData, net_buffer* data) { return B_ERROR; } diff --git a/src/add-ons/kernel/network/protocols/udp/udp.cpp b/src/add-ons/kernel/network/protocols/udp/udp.cpp index cec0378553..c91c0cf2c8 100644 --- a/src/add-ons/kernel/network/protocols/udp/udp.cpp +++ b/src/add-ons/kernel/network/protocols/udp/udp.cpp @@ -1371,7 +1371,7 @@ udp_deliver_data(net_protocol *protocol, net_buffer *buffer) status_t -udp_error_received(net_error error, net_buffer* buffer) +udp_error_received(net_error error, net_error_data* errorData, net_buffer* buffer) { status_t notifyError = B_OK; diff --git a/src/add-ons/kernel/network/protocols/unix/unix.cpp b/src/add-ons/kernel/network/protocols/unix/unix.cpp index eaae6668df..bc635cc32a 100644 --- a/src/add-ons/kernel/network/protocols/unix/unix.cpp +++ b/src/add-ons/kernel/network/protocols/unix/unix.cpp @@ -275,7 +275,7 @@ unix_deliver_data(net_protocol *_protocol, net_buffer *buffer) status_t -unix_error_received(net_error error, net_buffer *data) +unix_error_received(net_error error, net_error_data* errorData, net_buffer *data) { return B_ERROR; } diff --git a/src/add-ons/kernel/network/stack/link.cpp b/src/add-ons/kernel/network/stack/link.cpp index 26c9dea3b3..13c57a852b 100644 --- a/src/add-ons/kernel/network/stack/link.cpp +++ b/src/add-ons/kernel/network/stack/link.cpp @@ -629,7 +629,7 @@ link_receive_data(net_buffer* buffer) static status_t -link_error_received(net_error error, net_buffer* data) +link_error_received(net_error error, net_error_data* errorData, net_buffer* data) { // We don't do any error processing return B_ERROR;