Skip to content

Commit 7521782

Browse files
JordanYatesjhedberg
authored andcommitted
net: nsos_sockets: conn_mgr_connectivity usage calls
Add interface usage notifications to the native socket offload code paths. Signed-off-by: Jordan Yates <[email protected]>
1 parent e655c0e commit 7521782

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

drivers/net/nsos_sockets.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ struct nsos_socket {
6262

6363
static sys_dlist_t nsos_polls = SYS_DLIST_STATIC_INIT(&nsos_polls);
6464

65+
/* Forward declaration of the interface */
66+
NET_IF_DECLARE(nsos_socket, 0);
67+
6568
static int socket_family_to_nsos_mid(int family, int *family_mid)
6669
{
6770
switch (family) {
@@ -693,6 +696,7 @@ static int nsos_connect_blocking(struct nsos_socket *sock,
693696

694697
static int nsos_connect(void *obj, const struct sockaddr *addr, socklen_t addrlen)
695698
{
699+
struct net_if *iface = NET_IF_GET(nsos_socket, 0);
696700
struct nsos_socket *sock = obj;
697701
struct nsos_mid_sockaddr_storage addr_storage_mid;
698702
struct nsos_mid_sockaddr *addr_mid = (struct nsos_mid_sockaddr *)&addr_storage_mid;
@@ -718,6 +722,7 @@ static int nsos_connect(void *obj, const struct sockaddr *addr, socklen_t addrle
718722
errno = nsi_errno_from_mid(-ret);
719723
return -1;
720724
}
725+
conn_mgr_if_used(iface);
721726

722727
return ret;
723728
}
@@ -738,6 +743,7 @@ static int nsos_listen(void *obj, int backlog)
738743

739744
static int nsos_accept(void *obj, struct sockaddr *addr, socklen_t *addrlen)
740745
{
746+
struct net_if *iface = NET_IF_GET(nsos_socket, 0);
741747
struct nsos_socket *accept_sock = obj;
742748
struct nsos_mid_sockaddr_storage addr_storage_mid;
743749
struct nsos_mid_sockaddr *addr_mid = (struct nsos_mid_sockaddr *)&addr_storage_mid;
@@ -782,6 +788,7 @@ static int nsos_accept(void *obj, struct sockaddr *addr, socklen_t *addrlen)
782788

783789
zvfs_finalize_typed_fd(zephyr_fd, conn_sock, &nsos_socket_fd_op_vtable.fd_vtable,
784790
ZVFS_MODE_IFSOCK);
791+
conn_mgr_if_used(iface);
785792

786793
return zephyr_fd;
787794

@@ -799,6 +806,7 @@ static int nsos_accept(void *obj, struct sockaddr *addr, socklen_t *addrlen)
799806
static ssize_t nsos_sendto(void *obj, const void *buf, size_t len, int flags,
800807
const struct sockaddr *addr, socklen_t addrlen)
801808
{
809+
struct net_if *iface = NET_IF_GET(nsos_socket, 0);
802810
struct nsos_socket *sock = obj;
803811
struct nsos_mid_sockaddr_storage addr_storage_mid;
804812
struct nsos_mid_sockaddr *addr_mid = (struct nsos_mid_sockaddr *)&addr_storage_mid;
@@ -832,11 +840,13 @@ static ssize_t nsos_sendto(void *obj, const void *buf, size_t len, int flags,
832840
return -1;
833841
}
834842

843+
conn_mgr_if_used(iface);
835844
return ret;
836845
}
837846

838847
static ssize_t nsos_sendmsg(void *obj, const struct msghdr *msg, int flags)
839848
{
849+
struct net_if *iface = NET_IF_GET(nsos_socket, 0);
840850
struct nsos_socket *sock = obj;
841851
struct nsos_mid_sockaddr_storage addr_storage_mid;
842852
struct nsos_mid_sockaddr *addr_mid = (struct nsos_mid_sockaddr *)&addr_storage_mid;
@@ -893,12 +903,14 @@ static ssize_t nsos_sendmsg(void *obj, const struct msghdr *msg, int flags)
893903
return -1;
894904
}
895905

906+
conn_mgr_if_used(iface);
896907
return ret;
897908
}
898909

899910
static ssize_t nsos_recvfrom(void *obj, void *buf, size_t len, int flags,
900911
struct sockaddr *addr, socklen_t *addrlen)
901912
{
913+
struct net_if *iface = NET_IF_GET(nsos_socket, 0);
902914
struct nsos_socket *sock = obj;
903915
struct nsos_mid_sockaddr_storage addr_storage_mid;
904916
struct nsos_mid_sockaddr *addr_mid = (struct nsos_mid_sockaddr *)&addr_storage_mid;
@@ -932,6 +944,7 @@ static ssize_t nsos_recvfrom(void *obj, void *buf, size_t len, int flags,
932944
return -1;
933945
}
934946

947+
conn_mgr_if_used(iface);
935948
return ret;
936949
}
937950

@@ -1492,6 +1505,7 @@ static int nsos_getaddrinfo(const char *node, const char *service,
14921505
const struct zsock_addrinfo *hints,
14931506
struct zsock_addrinfo **res)
14941507
{
1508+
struct net_if *iface = NET_IF_GET(nsos_socket, 0);
14951509
struct nsos_mid_addrinfo hints_mid;
14961510
struct nsos_mid_addrinfo *res_mid;
14971511
int system_errno;
@@ -1525,6 +1539,7 @@ static int nsos_getaddrinfo(const char *node, const char *service,
15251539
errno = -ret;
15261540
return DNS_EAI_SYSTEM;
15271541
}
1542+
conn_mgr_if_used(iface);
15281543

15291544
return ret;
15301545
}
@@ -1651,6 +1666,14 @@ static int nsos_net_if_disconnect(struct conn_mgr_conn_binding *const binding)
16511666
LOG_INF("NSOS: dormant");
16521667
k_work_cancel_delayable(&data->work);
16531668
net_if_dormant_on(binding->iface);
1669+
1670+
if (conn_mgr_binding_get_flag(binding, CONN_MGR_IF_PERSISTENT) &&
1671+
!conn_mgr_binding_get_flag(binding, CONN_MGR_IF_DISCONNECTING)) {
1672+
/* Interface marked as persistent, application didn't request the disconnect */
1673+
LOG_INF("NSOS: reconnecting");
1674+
k_work_reschedule(&data->work, data->connect_delay);
1675+
}
1676+
16541677
return 0;
16551678
}
16561679

0 commit comments

Comments
 (0)