diff --git a/net/ieee802154/ieee802154.h b/net/ieee802154/ieee802154.h index 9331e7ce2e..53868c8d1c 100644 --- a/net/ieee802154/ieee802154.h +++ b/net/ieee802154/ieee802154.h @@ -153,7 +153,6 @@ EXTERN const struct sock_intf_s g_ieee802154_sockif; struct ieee802154_data_ind_s; /* Forward reference */ struct radio_driver_s; /* Forward reference */ struct net_driver_s; /* Forward reference */ -struct eth_hdr_s; /* Forward reference */ struct socket; /* Forward reference */ struct sockaddr; /* Forward reference */ diff --git a/net/ieee802154/ieee802154_conn.c b/net/ieee802154/ieee802154_conn.c index c97d4e2980..830d93969f 100644 --- a/net/ieee802154/ieee802154_conn.c +++ b/net/ieee802154/ieee802154_conn.c @@ -218,7 +218,7 @@ FAR struct ieee802154_conn_s * conn = (FAR struct ieee802154_conn_s *)conn->node.flink) { /* Does the destination address match the bound address of the socket. */ - /* REVISIT: Currently and explict address must be assigned. Should we + /* REVISIT: Currently and explicit address must be assigned. Should we * support some moral equivalent to INADDR_ANY? */ diff --git a/net/ieee802154/ieee802154_sendto.c b/net/ieee802154/ieee802154_sendto.c index e80a389294..7027fef459 100644 --- a/net/ieee802154/ieee802154_sendto.c +++ b/net/ieee802154/ieee802154_sendto.c @@ -56,7 +56,6 @@ #include #include #include -#include #include "netdev/netdev.h" #include "devif/devif.h" @@ -178,9 +177,9 @@ static inline bool ieee802154_eaddrnull(FAR const uint8_t *eaddr) * ****************************************************************************/ -void ieee802154_meta_data(FAR struct radio_driver_s *radio, - FAR struct ieee802154_sendto_s *pstate, - FAR struct ieee802154_frame_meta_s *meta) +static void ieee802154_meta_data(FAR struct radio_driver_s *radio, + FAR struct ieee802154_sendto_s *pstate, + FAR struct ieee802154_frame_meta_s *meta) { FAR struct ieee802154_saddr_s *destaddr; FAR struct ieee802154_saddr_s *srcaddr; @@ -537,7 +536,7 @@ ssize_t psock_ieee802154_sendto(FAR struct socket *psock, FAR const void *buf, psock->s_flags = _SS_SETSTATE(psock->s_flags, _SF_IDLE); - /* Check for a errors, Errors are signalled by negative errno values + /* Check for a errors, Errors are signaled by negative errno values * for the send length */ diff --git a/net/ieee802154/ieee802154_sockif.c b/net/ieee802154/ieee802154_sockif.c index 7b136a22f2..60fa6c1724 100644 --- a/net/ieee802154/ieee802154_sockif.c +++ b/net/ieee802154/ieee802154_sockif.c @@ -271,9 +271,42 @@ static void ieee802154_addref(FAR struct socket *psock) ****************************************************************************/ static int ieee802154_connect(FAR struct socket *psock, - FAR const struct sockaddr *addr, socklen_t addrlen) + FAR const struct sockaddr *addr, + socklen_t addrlen) { - return -EAFNOSUPPORT; + FAR struct ieee802154_conn_s *conn; + FAR struct sockaddr_ieee802154_s *ieeeaddr; + int ret; + + DEBUGASSERT(psock != NULL || addr != NULL); + conn = (FAR struct ieee802154_conn_s *)psock->s_conn; + DEBUGASSERT(conn != NULL); + + /* Verify the address family */ + + if (addr->sa_family == AF_IEEE802154) + { + /* Save the "connection" address */ + + ieeeaddr = (FAR struct sockaddr_ieee802154_s *)addr; + memcpy(&conn->raddr, &ieeeaddr->sa_addr, + sizeof(struct ieee802154_saddr_s)); + + /* Mark the socket as connected. */ + + psock->s_flags |= _SF_CONNECTED; + ret = OK; + } + else + { + /* The specified address is not a valid address for the address family + * of the specified socket. + */ + + ret = -EAFNOSUPPORT; + } + + return ret; } /**************************************************************************** @@ -363,7 +396,7 @@ static int ieee802154_bind(FAR struct socket *psock, addrlen < sizeof(struct sockaddr_ieee802154_s)) { nerr("ERROR: Invalid family: %u or address length: %d < %d\n", - addr->sa_family, addrlen, sizeof(struct sockaddr_ll)); + addr->sa_family, addrlen, sizeof(struct sockaddr_ieee802154_s)); return -EBADF; } @@ -460,7 +493,7 @@ static int ieee802154_getsockname(FAR struct socket *psock, /* Create a copy of the full address on the stack */ - tmp.sa_family = PF_IEEE802154; + tmp.sa_family = AF_IEEE802154; memcpy(&tmp.sa_addr, &conn->laddr, sizeof(struct ieee802154_saddr_s)); /* Copy to the user buffer, truncating if necessary */ @@ -574,7 +607,7 @@ static ssize_t ieee802154_send(FAR struct socket *psock, FAR const void *buf, if (psock->s_type == SOCK_DGRAM) { - /* send() may be used only if the socket is has been connected. */ + /* send() may be used only if the socket has been connected. */ if (!_SS_ISCONNECTED( psock->s_flags) || conn->raddr.s_mode == IEEE802154_ADDRMODE_NONE) @@ -583,7 +616,7 @@ static ssize_t ieee802154_send(FAR struct socket *psock, FAR const void *buf, } else { - to.sa_family = PF_IEEE802154; + to.sa_family = AF_IEEE802154; memcpy(&to.sa_addr, &conn->raddr, sizeof(struct ieee802154_saddr_s));