• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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