Kernel: Cleanup {set,get}sockopt debug prints
This commit is contained in:
parent
304ace1172
commit
8edd63d115
|
|
@ -64,6 +64,7 @@ namespace Kernel
|
||||||
virtual BAN::ErrorOr<size_t> sendmsg_impl(const msghdr& message, int flags) override;
|
virtual BAN::ErrorOr<size_t> sendmsg_impl(const msghdr& message, int flags) override;
|
||||||
virtual BAN::ErrorOr<void> getpeername_impl(sockaddr*, socklen_t*) override;
|
virtual BAN::ErrorOr<void> getpeername_impl(sockaddr*, socklen_t*) override;
|
||||||
virtual BAN::ErrorOr<void> getsockopt_impl(int, int, void*, socklen_t*) override;
|
virtual BAN::ErrorOr<void> getsockopt_impl(int, int, void*, socklen_t*) override;
|
||||||
|
virtual BAN::ErrorOr<void> setsockopt_impl(int, int, const void*, socklen_t) override;
|
||||||
|
|
||||||
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
||||||
|
|
||||||
|
|
@ -168,6 +169,10 @@ namespace Kernel
|
||||||
|
|
||||||
Thread* m_thread { nullptr };
|
Thread* m_thread { nullptr };
|
||||||
|
|
||||||
|
// TODO: actually support these
|
||||||
|
bool m_keep_alive { false };
|
||||||
|
bool m_no_delay { false };
|
||||||
|
|
||||||
uint64_t m_time_wait_start_ms { 0 };
|
uint64_t m_time_wait_start_ms { 0 };
|
||||||
|
|
||||||
ThreadBlocker m_thread_blocker;
|
ThreadBlocker m_thread_blocker;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ namespace Kernel
|
||||||
virtual BAN::ErrorOr<size_t> sendmsg_impl(const msghdr& message, int flags) override;
|
virtual BAN::ErrorOr<size_t> sendmsg_impl(const msghdr& message, int flags) override;
|
||||||
virtual BAN::ErrorOr<void> getpeername_impl(sockaddr*, socklen_t*) override { return BAN::Error::from_errno(ENOTCONN); }
|
virtual BAN::ErrorOr<void> getpeername_impl(sockaddr*, socklen_t*) override { return BAN::Error::from_errno(ENOTCONN); }
|
||||||
virtual BAN::ErrorOr<void> getsockopt_impl(int, int, void*, socklen_t*) override;
|
virtual BAN::ErrorOr<void> getsockopt_impl(int, int, void*, socklen_t*) override;
|
||||||
|
virtual BAN::ErrorOr<void> setsockopt_impl(int, int, const void*, socklen_t) override;
|
||||||
|
|
||||||
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
virtual BAN::ErrorOr<long> ioctl_impl(int, void*) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
#include <sys/epoll.h>
|
#include <sys/epoll.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
|
@ -298,23 +299,44 @@ namespace Kernel
|
||||||
|
|
||||||
BAN::ErrorOr<void> TCPSocket::getsockopt_impl(int level, int option, void* value, socklen_t* value_len)
|
BAN::ErrorOr<void> TCPSocket::getsockopt_impl(int level, int option, void* value, socklen_t* value_len)
|
||||||
{
|
{
|
||||||
if (level != SOL_SOCKET)
|
|
||||||
return BAN::Error::from_errno(EINVAL);
|
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
switch (option)
|
|
||||||
|
switch (level)
|
||||||
{
|
{
|
||||||
case SO_ERROR:
|
case SOL_SOCKET:
|
||||||
result = 0;
|
switch (option)
|
||||||
|
{
|
||||||
|
case SO_KEEPALIVE:
|
||||||
|
result = m_keep_alive;
|
||||||
|
break;
|
||||||
|
case SO_ERROR:
|
||||||
|
result = 0;
|
||||||
|
break;
|
||||||
|
case SO_SNDBUF:
|
||||||
|
result = m_send_window.scaled_size();
|
||||||
|
break;
|
||||||
|
case SO_RCVBUF:
|
||||||
|
result = m_recv_window.buffer->size();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dwarnln("getsockopt(SOL_SOCKET, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SO_SNDBUF:
|
case IPPROTO_TCP:
|
||||||
result = m_send_window.scaled_size();
|
switch (option)
|
||||||
break;
|
{
|
||||||
case SO_RCVBUF:
|
case TCP_NODELAY:
|
||||||
result = m_recv_window.buffer->size();
|
result = m_no_delay;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dwarnln("getsockopt(IPPROTO_TCP, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return BAN::Error::from_errno(ENOTSUP);
|
dwarnln("getsockopt({}, {})", level, option);
|
||||||
|
return BAN::Error::from_errno(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t len = BAN::Math::min<size_t>(sizeof(result), *value_len);
|
const size_t len = BAN::Math::min<size_t>(sizeof(result), *value_len);
|
||||||
|
|
@ -324,6 +346,44 @@ namespace Kernel
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BAN::ErrorOr<void> TCPSocket::setsockopt_impl(int level, int option, const void* value, socklen_t value_len)
|
||||||
|
{
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case SOL_SOCKET:
|
||||||
|
switch (option)
|
||||||
|
{
|
||||||
|
case SO_KEEPALIVE:
|
||||||
|
if (value_len != sizeof(int))
|
||||||
|
return BAN::Error::from_errno(EINVAL);
|
||||||
|
m_keep_alive = *static_cast<const int*>(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dwarnln("setsockopt(SOL_SOCKET, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IPPROTO_TCP:
|
||||||
|
switch (option)
|
||||||
|
{
|
||||||
|
case TCP_NODELAY:
|
||||||
|
if (value_len != sizeof(int))
|
||||||
|
return BAN::Error::from_errno(EINVAL);
|
||||||
|
m_no_delay = *static_cast<const int*>(value);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dwarnln("setsockopt(IPPROTO_TCP, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dwarnln("setsockopt({}, {})", level, option);
|
||||||
|
return BAN::Error::from_errno(EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<long> TCPSocket::ioctl_impl(int request, void* argument)
|
BAN::ErrorOr<long> TCPSocket::ioctl_impl(int request, void* argument)
|
||||||
{
|
{
|
||||||
switch (request)
|
switch (request)
|
||||||
|
|
|
||||||
|
|
@ -212,23 +212,33 @@ namespace Kernel
|
||||||
|
|
||||||
BAN::ErrorOr<void> UDPSocket::getsockopt_impl(int level, int option, void* value, socklen_t* value_len)
|
BAN::ErrorOr<void> UDPSocket::getsockopt_impl(int level, int option, void* value, socklen_t* value_len)
|
||||||
{
|
{
|
||||||
if (level != SOL_SOCKET)
|
|
||||||
return BAN::Error::from_errno(EINVAL);
|
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
switch (option)
|
|
||||||
|
switch (level)
|
||||||
{
|
{
|
||||||
case SO_ERROR:
|
case SOL_SOCKET:
|
||||||
result = 0;
|
switch (option)
|
||||||
break;
|
{
|
||||||
case SO_SNDBUF:
|
case SO_ERROR:
|
||||||
result = m_packet_buffer->size();
|
result = 0;
|
||||||
break;
|
break;
|
||||||
case SO_RCVBUF:
|
case SO_SNDBUF:
|
||||||
result = m_packet_buffer->size();
|
result = m_packet_buffer->size();
|
||||||
|
break;
|
||||||
|
case SO_RCVBUF:
|
||||||
|
result = m_packet_buffer->size();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dwarnln("getsockopt(SOLSOCKET, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
case IPPROTO_UDP:
|
||||||
|
dwarnln("getsockopt(IPPROTO_UDP, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
default:
|
default:
|
||||||
return BAN::Error::from_errno(ENOTSUP);
|
dwarnln("getsockopt({}, {})", level, option);
|
||||||
|
return BAN::Error::from_errno(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
const size_t len = BAN::Math::min<size_t>(sizeof(result), *value_len);
|
const size_t len = BAN::Math::min<size_t>(sizeof(result), *value_len);
|
||||||
|
|
@ -238,6 +248,27 @@ namespace Kernel
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BAN::ErrorOr<void> UDPSocket::setsockopt_impl(int level, int option, const void* value, socklen_t value_len)
|
||||||
|
{
|
||||||
|
(void)value;
|
||||||
|
(void)value_len;
|
||||||
|
|
||||||
|
switch (level)
|
||||||
|
{
|
||||||
|
case SOL_SOCKET:
|
||||||
|
dwarnln("setsockopt(SOL_SOCKET, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
case IPPROTO_UDP:
|
||||||
|
dwarnln("setsockopt(IPPROTO_UDP, {})", option);
|
||||||
|
return BAN::Error::from_errno(ENOPROTOOPT);
|
||||||
|
default:
|
||||||
|
dwarnln("setsockopt({}, {})", level, option);
|
||||||
|
return BAN::Error::from_errno(EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<long> UDPSocket::ioctl_impl(int request, void* argument)
|
BAN::ErrorOr<long> UDPSocket::ioctl_impl(int request, void* argument)
|
||||||
{
|
{
|
||||||
switch (request)
|
switch (request)
|
||||||
|
|
|
||||||
|
|
@ -707,7 +707,10 @@ namespace Kernel
|
||||||
BAN::ErrorOr<void> UnixDomainSocket::getsockopt_impl(int level, int option, void* value, socklen_t* value_len)
|
BAN::ErrorOr<void> UnixDomainSocket::getsockopt_impl(int level, int option, void* value, socklen_t* value_len)
|
||||||
{
|
{
|
||||||
if (level != SOL_SOCKET)
|
if (level != SOL_SOCKET)
|
||||||
|
{
|
||||||
|
dwarnln("getsockopt({}, {})", level, option);
|
||||||
return BAN::Error::from_errno(EINVAL);
|
return BAN::Error::from_errno(EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
switch (option)
|
switch (option)
|
||||||
|
|
@ -736,7 +739,10 @@ namespace Kernel
|
||||||
BAN::ErrorOr<void> UnixDomainSocket::setsockopt_impl(int level, int option, const void* value, socklen_t value_len)
|
BAN::ErrorOr<void> UnixDomainSocket::setsockopt_impl(int level, int option, const void* value, socklen_t value_len)
|
||||||
{
|
{
|
||||||
if (level != SOL_SOCKET)
|
if (level != SOL_SOCKET)
|
||||||
|
{
|
||||||
|
dwarnln("setsockopt({}, {})", level, option);
|
||||||
return BAN::Error::from_errno(EINVAL);
|
return BAN::Error::from_errno(EINVAL);
|
||||||
|
}
|
||||||
|
|
||||||
switch (option)
|
switch (option)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue