Age | Commit message (Collapse) | Author | Files | Lines |
|
fix: honor dns server port number on macos
See merge request slirp/libslirp!153
|
|
Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
|
|
If the socket is completely shut down just before we get our FIN ack-ed, the
socket state has SS_NOFDREF instead of SS_FCANTRCVMORE.
If the socket sees write() shut down (and we thus switch to FIN_WAIT_1), and
we get our FIN acked before seeing read() shut down, when we eventually see
that we need to start the linger2 timer.
This way, it's only if we still have a live Internet socket that we stay in
the TCPS_FIN_WAIT_2 state without a timer, and we let the host decide the
linger2 timer.
Fixes #86
(hopefully)
|
|
BSD & Linux do this to avoid non-cooperative peers, as TCP protocols usually
don't stay idle for long after one peer shuts down its side. We could
otherwise be waiting for FIN from the guest indefinitely without keepalive.
Suggested-by: Fabian Merki
|
|
rather than TCPTV_KEEP_IDLE: until it's established, we should be more
demanding.
|
|
When receiving input, we should wait for 2h before trying to probe
again for keepalive. We do not need to wake again until that.
|
|
specification. Explicit checks for INVALID_SOCKET and SOCKET_ERROR are made.
|
|
When getting an IPv4 DNS server address, if libresolv returns
IPv4
IPv6
IPv4
IPv6
(or just IPv4 and IPv6)
we would still have found == 1 on the second iteration and thus take the
IPv6 even if it's not the proper af. We can as well just completely ignore
the non-matching af entries.
Fixes #85
|
|
|
|
for Windows versions earlier than Windows 7.
|
|
|
|
if TARGET_WINVER is defined.
|
|
- sbcopy(): Make the code a little clearer to follow, with comments.
- Type consistency
- Eliminate type slices (size_t -> int)
- Use ssize_t when doing pointer arithmetic.
- Eliminate signed/unsigned comparisons.
- Add range checking assertions.
|
|
Fixes #82
|
|
Prefer g_strerror() to strerror()
See merge request slirp/libslirp!146
|
|
Use g_strerror() for better cross platform compatibility: glib handles
the Windows "deprecation" (i.e., use strerror_s instead of strerror),
fewer warnings at compile time.
|
|
Clang masquerading as gcc on macOS (i.e., "gcc") borks on typeof(), but
happily accepts __typeof__().
N.B., __typeof__ has been accepted by GCC and Clang for a long time, and
recently MS decided to support it as well.
|
|
|
|
Update cksum() to use more recent NetBSD-based checksum implementation.
The updated implementation includes both a 64-bit and 32-bit (the
default) implementations. The 64-bit implementation has a longer stride
length, which may be beneficial to overall performance.
Update the return types for cksum() and ip6_cksum() to uint16_t, which
is what the checksum algorithm computes.
|
|
|
|
|
|
|
|
void functions don't return values.
|
|
as they were before 72f85005a230 ("socket abstraction: slirp_os_socket"):
that broke the ABI. Better introduce SlirpAddPollCbSocket,
{,un}register_poll_socket that people can use instead, and wrappers for
the old API, for a smooth API/ABI upgrade.
|
|
Fixes 72f85005a230 ("socket abstraction: slirp_os_socket")
|
|
Use a typedef to abstract socket identifiers because Windows just has to
be different (SOCKET type.) Moreover, SOCKET on Win64 is 64-bits and
generates copious type slicing warnings.
Other related changes:
- Explicitly cast curtime's assignment to unsigned int to tamp down on
type slicing warning.
- Ensure that errno.h is always included. Important for Windows, which
would otherwise #define errno as WSAGetLastError(); errno.h #define-s
errno as a function, i.e., "*errno()".
- Export slirp_inet_aton() utility function for Win32/64.
- tcpx_listen()
- WSASetLastError() unnecessary.
- Use have_valid_socket() to check socket in error cleanup code
(vs. "s >= 0").
|
|
Bug fix: tcpx_listen() needs to invoke the socket's register_poll_fd()
callback so that platforms can add the socket to their collection of
sockets-of-interest (primarily Windows, also platforms that use select()
and not poll()).
Same for udpx_listen(). Register the created socket!
For Windows, host forwarding "now works gooder!"
The socket is eventually unregistered via the two use cases in which
tcpx_listen() is used:
- slirp_add_hostfwd, slirp_add_hostxfwd: The corresponding "remove"
functions (slirp_remove_hostfwd, slirp_remove_hostxfwd) invoke
unregister_poll_fd().
- TCP emulation (tcp_emu() in tcp_subr.c): All calls to tcp_listen() set
the SS_FACCEPTONCE flag, making the accept() a one-shot event. By
carefully examining tcp_subr.c, lines 523-531, one sees that
tcp_connect() unregisters the one-shot accept().
QED.
|
|
Signed-off-by: Arusekk <arek_koz@o2.pl>
|
|
When the macro is defined it will help to link with libslirp statically.
Otherwise, dllimport attribute is added with function symbols and linker
errors are shown as following for static linking.
undefined reference to `__imp_slirp_input'
undefined reference to `__imp_slirp_cleanup'
undefined reference to `__imp_slirp_remove_hostfwd'
etc.
|
|
Otherwise e.g. mold complains that it doesn't find all these slirp_*
symbols.
Fixes #77
|
|
|
|
|
|
|
|
Since we increase m->m_len by header_size, we mustn't add header_size
again when copying.
n->m_len also needs to be subtracted header_size, since we advance
n->m_data by header_size.
This only had effect for ipv6 trafic with debug builds
|
|
Fixes #34
|
|
382bff02f21b ("Fix possible infinite loops and use-after-free") rewrote
the loop to make it cleaner that we go through items, but was always
detaching the first elements, which happens to be right, but less
clear than detaching the element being processed.
Fixes #32
Reported-by: Peter Maydell
|
|
To avoid leak reports.
|
|
Spotted thanks to ASAN & fuzzing.
|
|
We don't know in advance what the trace will have received as sequence
number, so when fuzzing tcp, just align on what the trace says
|
|
Spotted thanks to ASAN & fuzzing.
|
|
In case of socket error, we are not consuming the package. So duplicate
it after socket operations, once we are sure that we will consume the
packet.
|
|
For reassembly, tcpiphdr2qlink needs an additional struct qlink before the
tcpiphdr
|
|
As coverity reports, we are not supposed to do anything with a freed
pointer, not even assigning it to m. So break the loop before doing so.
|
|
Making the code unnecessarily complicated.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
When several packets are queued for emission for the same socket session, we
need to clean them all.
Spotted thanks to ASAN & fuzzing.
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
|
The macro just makes things more difficult to debug, inline it.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
It's not being used.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
Fixes #70
|
|
Fixes #72
|
|
|