diff --git a/headers/private/net/net_buffer.h b/headers/private/net/net_buffer.h index d532950df6..406121a54b 100644 --- a/headers/private/net/net_buffer.h +++ b/headers/private/net/net_buffer.h @@ -82,6 +82,8 @@ struct net_buffer_module_info { struct iovec *iovecs, uint32 vecCount); uint32 (*count_iovecs)(net_buffer *buffer); + void (*swap_addresses)(net_buffer *buffer); + void (*dump)(net_buffer *buffer); }; diff --git a/src/add-ons/kernel/network/devices/loopback/loopback.cpp b/src/add-ons/kernel/network/devices/loopback/loopback.cpp index 7e1a0b0b7d..83015d4e5e 100644 --- a/src/add-ons/kernel/network/devices/loopback/loopback.cpp +++ b/src/add-ons/kernel/network/devices/loopback/loopback.cpp @@ -13,7 +13,6 @@ #include -#include #include #include #include @@ -159,7 +158,7 @@ loopback_receive_data(net_device *_device, net_buffer **_buffer) return status; // swap network addresses before delivering - std::swap(buffer->source, buffer->destination); + gBufferModule->swap_addresses(buffer); *_buffer = buffer; return B_OK; diff --git a/src/add-ons/kernel/network/protocols/icmp/icmp.cpp b/src/add-ons/kernel/network/protocols/icmp/icmp.cpp index 523b87b206..10ff9ee7cc 100644 --- a/src/add-ons/kernel/network/protocols/icmp/icmp.cpp +++ b/src/add-ons/kernel/network/protocols/icmp/icmp.cpp @@ -15,7 +15,6 @@ #include #include -#include #include #include #include @@ -263,7 +262,7 @@ icmp_receive_data(net_buffer *buffer) if (reply == NULL) return B_NO_MEMORY; - std::swap(reply->source, reply->destination); + gBufferModule->swap_addresses(reply); // There already is an ICMP header, and we'll reuse it NetBufferHeaderReader header(reply); diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 8f34655035..65ce288969 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -1321,7 +1321,7 @@ TCPEndpoint::_SendQueued(bool force, uint32 sendWindow) int TCPEndpoint::_GetMSS(const sockaddr *address) const { - return next->module->get_mtu(next, (sockaddr *)address) - sizeof(tcp_header); + return next->module->get_mtu(next, address) - sizeof(tcp_header); } diff --git a/src/add-ons/kernel/network/stack/net_buffer.cpp b/src/add-ons/kernel/network/stack/net_buffer.cpp index 7407c4dff5..407b16c3aa 100644 --- a/src/add-ons/kernel/network/stack/net_buffer.cpp +++ b/src/add-ons/kernel/network/stack/net_buffer.cpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -1174,6 +1175,13 @@ count_iovecs(net_buffer *_buffer) } +static void +swap_addresses(net_buffer *buffer) +{ + std::swap(buffer->source, buffer->destination); +} + + status_t init_net_buffers() { @@ -1257,6 +1265,8 @@ net_buffer_module_info gNetBufferModule = { get_iovecs, count_iovecs, + swap_addresses, + dump_buffer, // dump };