This is an automated email from the ASF dual-hosted git repository. pkarashchenko pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit b3c1c5580559fa1d55272e3d6c7c97bec3a4e94a Author: Xiang Xiao <xiaoxi...@xiaomi.com> AuthorDate: Mon Mar 6 12:06:06 2023 +0800 net: Make si_bind callback optional Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com> --- net/icmp/icmp_sockif.c | 33 +-------------------------------- net/icmpv6/icmpv6_sockif.c | 33 +-------------------------------- net/socket/bind.c | 7 ++++++- 3 files changed, 8 insertions(+), 65 deletions(-) diff --git a/net/icmp/icmp_sockif.c b/net/icmp/icmp_sockif.c index 4370913894..053225dd6d 100644 --- a/net/icmp/icmp_sockif.c +++ b/net/icmp/icmp_sockif.c @@ -47,8 +47,6 @@ static int icmp_setup(FAR struct socket *psock); static sockcaps_t icmp_sockcaps(FAR struct socket *psock); static void icmp_addref(FAR struct socket *psock); -static int icmp_bind(FAR struct socket *psock, - FAR const struct sockaddr *addr, socklen_t addrlen); static int icmp_getsockname(FAR struct socket *psock, FAR struct sockaddr *addr, FAR socklen_t *addrlen); static int icmp_getpeername(FAR struct socket *psock, @@ -72,7 +70,7 @@ const struct sock_intf_s g_icmp_sockif = icmp_setup, /* si_setup */ icmp_sockcaps, /* si_sockcaps */ icmp_addref, /* si_addref */ - icmp_bind, /* si_bind */ + NULL, /* si_bind */ icmp_getsockname, /* si_getsockname */ icmp_getpeername, /* si_getpeername */ icmp_listen, /* si_listen */ @@ -279,35 +277,6 @@ static int icmp_accept(FAR struct socket *psock, FAR struct sockaddr *addr, return -EAFNOSUPPORT; } -/**************************************************************************** - * Name: icmp_bind - * - * Description: - * icmp_bind() gives the socket 'psock' the local address 'addr'. 'addr' - * is 'addrlen' bytes long. Traditionally, this is called "assigning a - * name to a socket." When a socket is created with socket(), it exists - * in a name space (address family) but has no name assigned. - * - * Input Parameters: - * psock Socket structure of the socket to bind - * addr Socket local address - * addrlen Length of 'addr' - * - * Returned Value: - * 0 on success; A negated errno value is returned on failure. See - * bind() for a list a appropriate error values. - * - ****************************************************************************/ - -static int icmp_bind(FAR struct socket *psock, - FAR const struct sockaddr *addr, - socklen_t addrlen) -{ - /* An ICMP socket cannot be bound to a local address */ - - return -EBADF; -} - /**************************************************************************** * Name: icmp_getsockname * diff --git a/net/icmpv6/icmpv6_sockif.c b/net/icmpv6/icmpv6_sockif.c index de5547c427..7a5e5a76dd 100644 --- a/net/icmpv6/icmpv6_sockif.c +++ b/net/icmpv6/icmpv6_sockif.c @@ -47,8 +47,6 @@ static int icmpv6_setup(FAR struct socket *psock); static sockcaps_t icmpv6_sockcaps(FAR struct socket *psock); static void icmpv6_addref(FAR struct socket *psock); -static int icmpv6_bind(FAR struct socket *psock, - FAR const struct sockaddr *addr, socklen_t addrlen); static int icmpv6_getsockname(FAR struct socket *psock, FAR struct sockaddr *addr, FAR socklen_t *addrlen); static int icmpv6_getpeername(FAR struct socket *psock, @@ -72,7 +70,7 @@ const struct sock_intf_s g_icmpv6_sockif = icmpv6_setup, /* si_setup */ icmpv6_sockcaps, /* si_sockcaps */ icmpv6_addref, /* si_addref */ - icmpv6_bind, /* si_bind */ + NULL, /* si_bind */ icmpv6_getsockname, /* si_getsockname */ icmpv6_getpeername, /* si_getpeername */ icmpv6_listen, /* si_listen */ @@ -279,35 +277,6 @@ static int icmpv6_accept(FAR struct socket *psock, FAR struct sockaddr *addr, return -EAFNOSUPPORT; } -/**************************************************************************** - * Name: icmpv6_bind - * - * Description: - * icmpv6_bind() gives the socket 'psock' the local address 'addr'. 'addr' - * is 'addrlen' bytes long. Traditionally, this is called "assigning a - * name to a socket." When a socket is created with socket(), it exists - * in a name space (address family) but has no name assigned. - * - * Input Parameters: - * psock Socket structure of the socket to bind - * addr Socket local address - * addrlen Length of 'addr' - * - * Returned Value: - * 0 on success; A negated errno value is returned on failure. See - * bind() for a list a appropriate error values. - * - ****************************************************************************/ - -static int icmpv6_bind(FAR struct socket *psock, - FAR const struct sockaddr *addr, - socklen_t addrlen) -{ - /* An ICMPv6 socket cannot be bound to a local address */ - - return -EBADF; -} - /**************************************************************************** * Name: icmpv6_getsockname * diff --git a/net/socket/bind.c b/net/socket/bind.c index 08e6c90ba9..1bc4fc02d2 100644 --- a/net/socket/bind.c +++ b/net/socket/bind.c @@ -87,7 +87,12 @@ int psock_bind(FAR struct socket *psock, const struct sockaddr *addr, /* Let the address family's connect() method handle the operation */ - DEBUGASSERT(psock->s_sockif != NULL && psock->s_sockif->si_bind != NULL); + DEBUGASSERT(psock->s_sockif != NULL); + if (psock->s_sockif->si_bind == NULL) + { + return -EOPNOTSUPP; + } + ret = psock->s_sockif->si_bind(psock, addr, addrlen); /* Was the bind successful */