445 Commits

Author SHA1 Message Date
Dirk Ziegelmeier
3efc43531b Fix bug #55536: lwIP 2.1.2: netconn_delete() called twice from lwip_accept()
netconn is deleted in free_socket() call
2019-01-28 14:13:52 +01:00
Axel Lin
292bd85db6 sockets: Trivial comment fixes
lwip_getsockopt_internal/lwip_setsockopt_internal were renamed to
lwip_getsockopt_impl/lwip_setsockopt_impl. Update the comment accordingly.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2018-11-09 17:14:20 +08:00
Axel Lin
7bcf0d3334 sockets: Fix missing err_to_errno conversion for ERR_VAL in lwip_recvmsg
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2018-11-08 22:43:51 +08:00
Joan Lledó
284659156d Remove assertion about the end of pollfd array
See bug #54933.

Signed-off-by: Simon Goldschmidt <goldsimon@gmx.de>
2018-11-01 21:56:58 +01:00
Joan Lledó
c683427bfd alloc_socket(): Check for LWIP_SOCKET_POLL when setting select-related variables 2018-10-08 08:51:55 +02:00
Dirk Ziegelmeier
eeb2218b3d Revert "Test / RFC: Reformat a few files using clang-format"
This reverts commit 8b4a8159a898795ef0fc9226dae1ce66531ad487.

We do not want to do this shortly before a release. Reformatting (buggy reformatting) may introduce new bugs.
2018-07-18 08:34:01 +02:00
Dirk Ziegelmeier
8b4a8159a8 Test / RFC: Reformat a few files using clang-format
Does it compile? Does it look good (enough)?
2018-07-17 21:15:48 +02:00
Axel Lin
29364d2a50 sockets: Make socket_ipv4/ipv6_multicast_memberships array static
They are only referenced in sockets.c, thus make them static.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
2018-07-12 21:34:01 +08:00
goldsimon
d320b27a5f fix compiling sockets.c for SYS_LIGHTWEIGHT_PROT==0 2018-04-19 08:23:10 +02:00
goldsimon
41fea4ad7d sockets: change closing: netconn is freed when socket is closed, not before
This is necessary to implement fullduplex sockets that are closed asynchronously:
the netconn in the socket must not be freed before all threads have given up
using it.

We now call the first part of 'netconn_delete()' (moved to 'netconn_prepare_delete()')
from lwip_close() and only actually end up calling 'netconn_free()' from
'free_socket()', which might be called later if LWIP_NETCONN_FULLDUPLEX is enabled.

Signed-off-by: goldsimon <goldsimon@gmx.de>
2018-04-18 20:55:49 +02:00
goldsimon
1090e9cdec LWIP_NETCONN_FULLDUPLEX: prevent taking recursive sys arch lock
Calling SYS_ARCH_PROTECT() could happen twice in 'free_socket()' if
that free was executed delayed (e.g. in 'done_socket_locked()').

Signed-off-by: goldsimon <goldsimon@gmx.de>
2018-04-18 20:55:49 +02:00
goldsimon
e20e9bc3d4 Try to fix issues reported by coverity 2018-02-13 12:09:18 +01:00
Joel Cunningham
030ffdee82 sockets: remove ERR_CLSD case after data receive
With the changes introduced in b1b62751105d608d57249462d6ac5acbb809dd54
it's no longer possible to get ERR_CLSD from netconn_recv_tcp_pbuf_flags
after we've received data because of the NETCONN_NOFIN flag, so remove
handling for this case. Further the NETCONN_EVT_RCVPLUS stays active in
netconn_recv_data_tcp when the NETCONN_NOFIN flag is used
2018-02-05 13:50:16 -06:00
goldsimon
b1b6275110 socket/netconn recv: FIN should only be reported once
FIN should only be reported once (as '0' for sockets, as 'ERR_CLSD' for
netconns). Before this change, ERR_CLSD was returned forever...

This is the 2nd try. First try (commit ebcae98ae65c26a0c210c802540bf027d07fe2f1)
was buggy in that it could drop the FIN if it was read together with data
(reverted in commit ebcae98ae65c26a0c210c802540bf027d07fe2f1).

This version fixes this by adding an apiflag and a netconn flag to keep
track of this.
2018-02-04 20:16:53 +01:00
goldsimon
ce79811bce sockets: add hooks to implement additional socket options
LWIP_HOOK_SOCKETS_SETSOCKOPT() and LWIP_HOOK_SOCKETS_GETSOCKOPT()
are introduced to implement additional socket options. The hooks
are always called first and report back if they handled the option
or not.

Signed-off-by: goldsimon <goldsimon@gmx.de>
2018-02-01 09:19:15 +01:00
goldsimon
93f9c56c32 fix bug #52976: lwip_ioctl() FIONREAD crash 2018-01-27 14:45:17 +01:00
Joel Cunningham
f3c289d966 sockets: add core lock assert to select_check_waiters
Assert the requirement that the core is locked in select_check_waiters
2018-01-16 18:52:45 -06:00
Axel Lin
913a7e0638 sockets: Simplify #if !LWIP_TCPIP_CORE_LOCKING guard in select_check_waiters
Signed-off-by: Axel Lin <axel.lin@ingics.com>
2018-01-03 06:35:02 +01:00
goldsimon
b07a481f66 Fix bug #52686 (pointer 'to' checked for NULL in lwip_sendto() may be dereferenced)
Signed-off-by: goldsimon <goldsimon@gmx.de>
2017-12-18 20:09:44 +01:00
Axel Lin
32788f2c74 sockets.c: use udp_is_flag_set() instead of udp_flags()
Signed-off-by: goldsimon <goldsimon@gmx.de>
2017-11-23 22:12:41 +01:00
goldsimon
2aed2fc215 sockets: prevent nested SYS_ARCH_PROTECT() for LWIP_NETCONN_FULLDUPLEX==1 2017-11-19 14:37:29 +01:00
goldsimon
f5c37c8cbb Fix broken MSG_PEEK on TCP sockets (post-2.0.3 bug)
MSG_PEEK on TCP sockets was broken since commit b71d4477eab7c19c34e57e5c9a1f8add63de7879
from 06.03.2017: recv hung in an endless loop and tcp_recved() was called for peeked data
(which would result in a too large window advertised).

Aded TCP MSG_PEEK to socket unit tests
2017-11-18 13:34:20 +01:00
Dirk Ziegelmeier
b0344518e8 sockets.c: Don't rely on #defines in socket.h to be in sync with ip.h
Map SO_* to SOF_* #defines
2017-11-17 09:41:26 +01:00
Joel Cunningham
b18e6a8734 sockets: fix missing break regression in event_callback
During the refactoring in c5db278746daedcc6566822992f3f33ce3801470, the
previous gotos were removed, but the lack of break statements in
NETCONN_EVNT_RCVMINUS and NETCONN_EVT_SENDMINUS was overlooked, leading
to incorrect fall through behavior
2017-10-23 09:05:57 -05:00
Joel Cunningham
22dacc38c0 Revert "Fix two bad "fall-through" code"
This reverts commit a7f2ef4aec3cec5add28f35e9543f043732382e5.

The fall through is actually a regression
2017-10-23 08:59:43 -05:00
Dirk Ziegelmeier
a7f2ef4aec Fix two bad "fall-through" code 2017-10-22 21:26:57 +02:00
Dirk Ziegelmeier
33ce04019d Move API description text from rawapi.txt to doxygen docs 2017-10-20 18:44:58 +02:00
Nate Karstens
1960937df3 Enable support for MSG_DONTWAIT in lwip_recvmsg()
Enables support for MSG_DONTWAIT in lwip_recvmsg(). Support already
exists in lwip_recv_tcp() and lwip_recvfrom_udp_raw(); these are both
accessible from lwip_recvfrom(), which already supports MSG_DONTWAIT.

Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
Signed-off-by: Joel Cunningham <joel.cunningham@me.com>
2017-10-19 13:55:25 -05:00
goldsimon
cf07fddf96 lwip_poll_dec_sockets_used: remove unused SYS_ARCH_DECL_PROTECT(lev); 2017-10-19 06:52:33 +02:00
Joel Cunningham
8d04f3d622 docs: correct LWIP_IPV6_MLD reference on #endif comment 2017-10-18 11:48:00 -05:00
Our Air Quality
4d21d8da23 Allow LWIP_SOCKET_OFFSET with an external FD_SET
Signed-off-by: goldsimon <goldsimon@gmx.de>
2017-10-16 17:07:17 +02:00
Joel Cunningham
0882e0ba89 sockets: poll clean ups
This makes the following poll cleanups:

 1) Add LWIP_ERROR in lwip_poll to check for invalid fds/nfds combinations.
    This fixes a possible a NULL fds dereference in lwip_poll_scan()
 2) Use has_ copies of the socket events in lwip_poll_should_wake() rather
    passing the sock pointer and accessing socket after leaving the critical
    section
2017-10-16 08:06:31 -05:00
goldsimon
68d75a58df sockets: adapt poll to LWIP_MPU_COMPATIBLE; make LWIP_SOCKET_POLL and LWIP_SOCKET_SELECT independent options 2017-09-21 22:18:55 +02:00
Kalle Olavi Niemitalo
1152fd02c0 New sockets function: lwip_poll
Signed-off-by: goldsimon <goldsimon@gmx.de>
2017-09-21 21:50:36 +02:00
goldsimon
333f1bf2bd Fix compiling with LWIP_SOCKET_SELECT==0 2017-09-21 21:49:31 +02:00
Kalle Olavi Niemitalo
983eb8ebb4 Move select_cb list handling to functions (prepare for adding "poll")
Signed-off-by: goldsimon <goldsimon@gmx.de>
2017-09-21 21:10:08 +02:00
Dirk Ziegelmeier
438cfd3f14 Reformat sockets.c using astylerc 2017-09-17 17:50:24 +02:00
Joel Cunningham
5c0054d8ee Remove double free on select_cb (bug #51990)
This was left over after the refactoring in 92b6f83eb29c8ae697a641b7a14960decd35a6f0
2017-09-13 16:51:03 -05:00
goldsimon
92b6f83eb2 Slightly rework the fix for bug #51990: allocate select_cb only if we actually need to wait 2017-09-12 21:37:48 +02:00
David Lockyer
72a00ca79c Fixed bug #51990: Calling select() from different threads with MPU enabled triggers memory protection fault
Signed-off-by: goldsimon <goldsimon@gmx.de>
2017-09-12 21:19:54 +02:00
Joel Cunningham
445eef2b0e sockets: add readv() implementation (task #14610)
Adds an implementation of readv() that calls recvmsg()

See http://pubs.opengroup.org/onlinepubs/009695399/functions/readv.html
2017-09-11 14:48:33 -05:00
goldsimon
e749678eed Fix function signature of fcntl() for LWIP_COMPAT_SOCKETS == 2 && LWIP_POSIX_SOCKETS_IO_NAMES (see bug #51701) 2017-08-25 22:07:14 +02:00
Dirk Ziegelmeier
b9d3812ee8 Add assertion that netif index is within sane range in sockets.h.
We can assert here since lwIP only supports <= 255 netifs due to netif index being an u8_t.
2017-08-21 21:27:12 +02:00
Dirk Ziegelmeier
fa51a7225a lwip_socket_drop_registered_mld6_memberships: Fix if_idx got lost :-( 2017-08-21 09:46:08 +02:00
Dirk Ziegelmeier
6082251854 Use netconn_join_leave_group_netif() in sockets.c, lwip_socket_drop_registered_mld6_memberships to avoid threading issues (reported by Joel Cunningham) 2017-08-21 09:43:34 +02:00
Dirk Ziegelmeier
d0e0afb46a sockets.c, lwip_socket_drop_registered_mld6_memberships: Remove membership from socket_ipv6_multicast_memberships even if netif cannot be found 2017-08-21 09:30:23 +02:00
Joel Cunningham
3bdb34886c sockets IPv6: cast interface index to u8_t
Interface indexes are u8_t internally so cast from sockets int representation to u8_t

This was found with MSVC 2013:

 1>lwip\src\api\sockets.c(3190): warning C4242: 'function' : conversion from 'const unsigned int' to 'u8_t', possible loss of data
 1>lwip\src\api\sockets.c(3698): warning C4242: 'function' : conversion from 'unsigned int' to 'u8_t', possible loss of data
2017-08-17 08:54:50 -05:00
Dirk Ziegelmeier
339ec17cf0 Fixup my last commit 2017-08-16 17:41:46 +02:00
Dirk Ziegelmeier
e58e398267 Implement IPv6 IPV6_JOIN_GROUP/IPV6_LEAVE_GROUP socket options 2017-08-16 17:41:46 +02:00
Dirk Ziegelmeier
0cf405e24f Fix that the socket option IPV6ONLY can only be set on TCP sockets
Reported by Andrej Butok
2017-08-10 09:14:31 +02:00