This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new c825404a2b1 net/icmp: Return -ENOPROTOOPT for SOL_SOCKET to avoid
misleading logs
c825404a2b1 is described below
commit c825404a2b163afb4b1da3af683d7c3f2d73541f
Author: wangchen <[email protected]>
AuthorDate: Wed Dec 24 20:46:22 2025 +0800
net/icmp: Return -ENOPROTOOPT for SOL_SOCKET to avoid misleading logs
When SOL_SOCKET options (e.g., SO_BINDTODEVICE via ping -I) hit ICMP
sockets, icmp_{get,set}sockopt logged “Unrecognized ICMP option: 17” before
fallback. Handle SOL_SOCKET explicitly by returning -ENOPROTOOPT so psock_*
routes to the socket-level handler. Removes noisy logs without changing
behavior (invalid devices still return -ENODEV).
Signed-off-by: wangchen <[email protected]>
---
net/icmp/icmp_sockif.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/net/icmp/icmp_sockif.c b/net/icmp/icmp_sockif.c
index a35611b5113..5c3cdcb7b9c 100644
--- a/net/icmp/icmp_sockif.c
+++ b/net/icmp/icmp_sockif.c
@@ -383,6 +383,15 @@ static int icmp_getsockopt(FAR struct socket *psock, int
level, int option,
{
switch (level)
{
+ case SOL_SOCKET:
+
+ /* Socket-level options are handled by psock_getsockopt()/inet layer.
+ * Return -ENOPROTOOPT so upper layer will fallback to socket-level
+ * handler without emitting misleading ICMP error logs.
+ */
+
+ return -ENOPROTOOPT;
+
case SOL_IP:
return ipv4_getsockopt(psock, option, value, value_len);
@@ -486,6 +495,15 @@ static int icmp_setsockopt(FAR struct socket *psock, int
level, int option,
{
switch (level)
{
+ case SOL_SOCKET:
+
+ /* Socket-level options are handled by psock_setsockopt()/inet layer.
+ * Return -ENOPROTOOPT so upper layer will fallback to socket-level
+ * handler without emitting misleading ICMP error logs.
+ */
+
+ return -ENOPROTOOPT;
+
case SOL_IP:
return ipv4_setsockopt(psock, option, value, value_len);