net/can: support can receive packets from all can devices

after the socket calls bind with ifindex is 0, it can receive packets
from all can devices

Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
This commit is contained in:
zhanghongyu
2025-04-29 10:28:18 +08:00
committed by Xiang Xiao
parent b7b9aebab9
commit 1c0a3a8d63
3 changed files with 8 additions and 2 deletions
+2 -1
View File
@@ -203,7 +203,8 @@ FAR struct can_conn_s *can_active(FAR struct net_driver_s *dev,
{
while ((conn = can_nextconn(conn)) != NULL)
{
if (conn->dev == NULL || conn->dev == dev)
if ((conn->dev == NULL && _SS_ISBOUND(conn->sconn.s_flags)) ||
conn->dev == dev)
{
break;
}
+5
View File
@@ -564,6 +564,11 @@ ssize_t can_recvmsg(FAR struct socket *psock, FAR struct msghdr *msg,
/* Get the device driver that will service this transfer */
dev = conn->dev;
if (dev == NULL && _SS_ISBOUND(conn->sconn.s_flags))
{
dev = netdev_default();
}
if (dev == NULL)
{
ret = -ENODEV;
+1 -1
View File
@@ -340,7 +340,7 @@ static int can_bind(FAR struct socket *psock,
conn->dev = netdev_findbyname((const char *)&netdev_name);
#endif
return conn->dev == NULL ? -ENODEV : OK;
return conn->dev == NULL && canaddr->can_ifindex != 0 ? -ENODEV : OK;
}
/****************************************************************************