1From e719fde7f90a1dff8daeb23170febb5ff38903c9 Mon Sep 17 00:00:00 2001 2From: jiangheng <jiangheng14@huawei.com> 3Date: Fri, 27 Oct 2023 19:19:42 +0800 4Subject: [PATCH 77/77] adpat event for rtc mode 5 6--- 7 src/api/api_msg.c | 8 ++------ 8 src/api/sockets.c | 33 ++++++++++++++++++++++++++++++--- 9 src/include/eventpoll.h | 4 ++++ 10 3 files changed, 36 insertions(+), 9 deletions(-) 11 12diff --git a/src/api/api_msg.c b/src/api/api_msg.c 13index 9a8992a..5e09505 100644 14--- a/src/api/api_msg.c 15+++ b/src/api/api_msg.c 16@@ -293,11 +293,9 @@ recv_udp(void *arg, struct udp_pcb *pcb, struct pbuf *p, 17 #endif /* LWIP_SO_RCVBUF */ 18 #if GAZELLE_UDP_ENABLE 19 do_lwip_add_recvlist(conn->socket); 20- LWIP_UNUSED_ARG(len); 21-#else /* GAZELLE_UDP_ENABLE */ 22+#endif /* GAZELLE_UDP_ENABLE */ 23 /* Register event with callback */ 24 API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); 25-#endif /* GAZELLE_UDP_ENABLE */ 26 } 27 } 28 #endif /* LWIP_UDP */ 29@@ -357,11 +355,9 @@ recv_tcp(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err) 30 #endif /* LWIP_SO_RCVBUF */ 31 #if GAZELLE_ENABLE 32 do_lwip_add_recvlist(conn->socket); 33- LWIP_UNUSED_ARG(len); 34-#else 35+#endif 36 /* Register event with callback */ 37 API_EVENT(conn, NETCONN_EVT_RCVPLUS, len); 38-#endif 39 } 40 41 return ERR_OK; 42diff --git a/src/api/sockets.c b/src/api/sockets.c 43index 1d71427..d62290d 100644 44--- a/src/api/sockets.c 45+++ b/src/api/sockets.c 46@@ -2744,29 +2744,56 @@ event_callback(struct netconn *conn, enum netconn_evt evt, u16_t len) 47 check_waiters = 0; 48 } 49 #if GAZELLE_ENABLE 50- if (conn->acceptmbox != NULL && !sys_mbox_empty(conn->acceptmbox)) { 51- add_sock_event(sock, POLLIN); 52+ if (netif_is_rtc_mode(netif_default)) { 53+ if (sock->rcvevent == 1) { 54+ add_sock_event_nolock(sock, POLLIN); 55+ } 56+ } else { 57+ if (conn->acceptmbox != NULL && !sys_mbox_empty(conn->acceptmbox)) { 58+ add_sock_event(sock, POLLIN); 59+ } 60 } 61 #endif 62 break; 63 case NETCONN_EVT_RCVMINUS: 64 sock->rcvevent--; 65 check_waiters = 0; 66+#if GAZELLE_ENABLE 67+ if (netif_is_rtc_mode(netif_default)) { 68+ if (sock->rcvevent == 0) { 69+ del_sock_event_nolock(sock, POLLIN); 70+ } 71+ } 72+#endif 73 break; 74 case NETCONN_EVT_SENDPLUS: 75 if (sock->sendevent) { 76 check_waiters = 0; 77 } 78 sock->sendevent = 1; 79+#if GAZELLE_ENABLE 80+ if (netif_is_rtc_mode(netif_default)) { 81+ add_sock_event_nolock(sock, POLLOUT); 82+ } 83+#endif 84 break; 85 case NETCONN_EVT_SENDMINUS: 86 sock->sendevent = 0; 87 check_waiters = 0; 88+#if GAZELLE_ENABLE 89+ if (netif_is_rtc_mode(netif_default)) { 90+ del_sock_event_nolock(sock, POLLOUT); 91+ } 92+#endif 93 break; 94 case NETCONN_EVT_ERROR: 95 sock->errevent = 1; 96 #if GAZELLE_ENABLE 97- add_sock_event(sock, EPOLLERR); 98+ if (netif_is_rtc_mode(netif_default)) { 99+ add_sock_event_nolock(sock, EPOLLERR); 100+ } else { 101+ add_sock_event(sock, EPOLLERR); 102+ } 103 #endif 104 break; 105 default: 106diff --git a/src/include/eventpoll.h b/src/include/eventpoll.h 107index dd65a4d..5bc5206 100644 108--- a/src/include/eventpoll.h 109+++ b/src/include/eventpoll.h 110@@ -66,6 +66,10 @@ struct libos_epoll { 111 112 struct lwip_sock; 113 extern void add_sock_event(struct lwip_sock *sock, uint32_t event); 114+extern void add_sock_event_nolock(struct lwip_sock *sock, uint32_t event); 115+extern void del_sock_event(struct lwip_sock *sock, uint32_t event); 116+extern void del_sock_event_nolock(struct lwip_sock *sock, uint32_t event); 117+ 118 extern int32_t lstack_epoll_close(int32_t); 119 120 #endif /* __EVENTPOLL_H__ */ 121-- 1222.27.0 123 124